Usando a Linkit Smart 7688 com a MediaTek Cloud Sandbox Deixe um comentário

A Linkit Smart 7688 consiste em uma das mais compactas placas para desenvolvimento de projetos com Linux Embarcado existentes. Seu tamanho físico reduzido (pouco maior que um pendrive), expansibilidade de memória (por um cartão SD), conectividade WI-FI e pinos que se encaixam em um protoboard comum fazem dela uma ótima pedida para projetos em IoT que precisam ser compactos. Para melhorar mais ainda, o fabricante dela, a MediaTek, disponibiliza gratuitamente a MediaTek Cloud Sandbox, uma plataforma Cloud para os proprietários da Linkit 7688 (e outras placas da empresa) fazerem projetos IoT.

Linkit 7688

Este post irá mostrar como ligar e desligar o LED WI-FI (LED que indica status da conectividade WI-FI) da placa através do MediaTek Cloud Sandbox, o que abrirá possibilidades de controle de quaisquer outputs da placa pela plataforma Cloud em questão.

Material necessário

Para reproduzir este projeto, você precisará de:

*Se preferir, pode ligá-la na USB do computador, poupando o uso de uma fonte.

Instalação de bibliotecas

Antes de prosseguir, é preciso instalar a biblioteca requests do Python. Para isso, utilize o comando abaixo:

pip install requests

Cadastro na MediaTek Cloud Sandbox

O primeiro passo é se cadastrar na MediaTek Cloud Sandbox (MCS). Para isso, basta entrar no site da plataforma e se cadastrar. Ou se preferir, clique aqui e vá direto ao formulário de cadastro.  Após realizado o cadastro, você receberá um e-mail para verificação da conta. Sendo assim, basta clicar no link fornecido no e-mail recebido e pronto, seu cadastro está feito.

Criação do projeto na MCS – passo-a-passo

Segue um passo-a-passo de como se criar o projeto na plataforma MCS:

  1. Uma vez logado na MCS, clique em “Development” e, no menu drop-down, clique em “Prototype”.
    Um Prototype é um projetona MCS, porém em estado de desenvolvimento (under development)
  2. Irá ser aberta uma nova tela, mostrando os projetos em fase de desenvolvimento já criados. Para criar um novo projeto, clique em “Create”.
  3. Irá ser aberta uma janela solicitando informações gerais do projeto. Preencha-a conforme a figura abaixo e clique em “Save”. MediaTek Cloud Sandbox
  4. Feito isso, seu projeto irá aparecer na tela de Prototypes. Nele, clique no botão “Detail”.
  5. Na tela que abrir, clique sobre “Data channel” e depois no botão “Add”
    Um Data Channel na MCS significa, grosso modo, uma ação de seu projeto. Ou seja, como desejamos neste projeto controlar o LED WI-FI da placa, será criado um Data Channel dedicado a isso.
  6. Na tela que abrir, selecione a opção Controller, clicando no botão destacado em vermelho na figura abaixo. Adicionar channel do tipo Controller ao projeto
  7. Irá surgir uma janela solicitando informações do Data Channel a ser criado. Preencha-a conforme figura abaixo e clique em “Save”. Informações do Data Channel
  8. No canto superior-direito da página, clique sobre “Create test device”. Nesta etapa , serão criadas as chaves para comunicação entre Linkit 7688 e MCS.
    Na janela em que solicita informações do Test device, preencha com “LED On/Off” em “Device Name” e preencha com “Liga / desliga LED de WI-FI da placa” em “Device Description”. Após o preenchimento, clique em Ok. Uma tela confirmando a a criação do test device irá surgir.Atenção: aqui, define-se mais uma “chave” para comunicação do Linkit 7688 com MCS, o deviceChannelId. Ela é uma string do seu device name, substituindo tudo que não sejam legas e numeros por underline (_ ). Portanto, se você preencheu como orientado aqui, o seu deviceChannelId é igual a LED_On_Off.
  9. Após a confirmação de sucesso na criação do Test Device, no canto direito irá conter duas informações muito importantes: deviceId e deviceKey. Copie-as e salve-as em local seguro, estas informações serão necessárias no decorrer do projeto.

Pronto! A parte de Cloud do projeto está feita.

Comunicação da Linkit 7888

Com a parte Cloud do projeto deste post já pronta, é chegada a hora de comunicar a Linkit 7688 com a MCS. Para isso, será feito um programa em Python na Linkit 7688. O código-fonte do programa elaborado está abaixo.

ATENÇÃO: não se esqueça de substituir os valores de deviceId , deviceKey e dechiveChannelId pelos seus (obtidos nos passos 8 e 9 do tópico anterior desta postagem).

#Projeto - liga/desliga LED WI-FI da placa com MCS (MediaTek Cloud Sandbox
#Autores - Pedro Bertoleti e Blog MakerHero
#Data - Setembro/2017
import requests
import socket
import logging
import mraa
import time

#Variaveis globais
TempoEntreKeepAlives = 5  #Tempo (em segundos) entre dois keep alives
pin = None

#Chaves para comunicacao com MCS. Nao esquecer de substituir pelas suas!!!
DEVICE_INFO = {
    'device_id' : 'SuaDeviceId',
    'device_key' : 'SuaDeviceKey',
    'deviceChannelID': 'SeuDeviceChannelID'
}


logging.basicConfig(level='INFO')  #Para filtrrar as mensagens exibidas no console, troque 'INFO' por 'WARNING'

#Funcao: conecta ao data channel
#Parametros: nenhum 
#Retorno: objeto socket da conexao
def ConectaAoChannel():
    connectionAPI = 'https://api.mediatek.com/mcs/v2/devices/%(device_id)s/connections.csv'
    r = requests.get(connectionAPI % DEVICE_INFO,  headers = {'deviceKey' : DEVICE_INFO['device_key'], 'Content-Type' : 'text/csv'})
    logging.info("IP e Porta =" + r.text)
    (ip, port) = r.text.split(',')    
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((ip, int(port)))
    s.settimeout(None)
    EnviaKeepAlive(s)
    return s
	
#Funcao: envia keep alive ao servidor para manter a conexao
#Parametros: objeto socket da conexao 
#Retorno: nenhum
def EnviaKeepAlive(SocketChannel):
    MsgKeepAlive = '%(device_id)s,%(device_key)s,0' % DEVICE_INFO
    SocketChannel.sendall(MsgKeepAlive)
    logging.info("Keep Alive:%s" % MsgKeepAlive)

#Funcao: envia periodicamente keep alive para o servidor.
#Parametros: objeto socket da conexao 
#Retorno: nenhum
def VerificaSeRecebeuComando(SocketChannel):
    BufferRecebido = SocketChannel.recv(1024)
    logging.info("recv:" + BufferRecebido)
  
    #verifica se o conteudo lido eh um comando de on/off do LED
    CamposCMD = BufferRecebido.split(',')[2:]
    if len(CamposCMD) > 1:
        timeStamp, dataChannelId, StringComando = CamposCMD
        if dataChannelId == DEVICE_INFO['deviceChannelID']:            
            ValorParseadoCmd = int(StringComando)
            logging.info("LED :%d" % ValorParseadoCmd)
            setLED(ValorParseadoCmd)

#Funcao: configur GPIO do LED
#Parametros: nenhum
#Retorno: nenhum
def setupLED():
    global pin
    # on LinkIt Smart 7699, pin 44 is the Wi-Fi LED.
    pin = mraa.Gpio(44)
    pin.dir(mraa.DIR_OUT)

#Funcao: Liga ou desliga LED
#Parametros: acao a executar (1 - liga; 0 - desliga)
#Retorno: nenhum
def setLED(state):
    #Obs: O LED possui logica invertida, portanto a "adaptacao" ao estado desejado eh feita abaixo
    if state:
        pin.write(0)
    else:
        pin.write(1)

#Programa principal		
setupLED()
channel = ConectaAoChannel()

TempoInicialSegundos=int(time.time())

while True:
	try:
		VerificaSeRecebeuComando(channel)
		TempoAtualSegundos = int(time.time())
	
		if ((TempoAtualSegundos - TempoInicialSegundos) > TempoEntreKeepAlives):
			EnviaKeepAlive(channel)
	except KeyboardInterrupt:
		print "Aplicacao sendo encerrada..."
		exit(0)

Copie o código-fonte, salve-o como Linkit7688MCSExLED.py e rode-o com o seguinte comando:

python Linkit7688MCSExLED.py

Resultado

Veja o projeto em ação!

Gostou da Linkit Smart 7688 com MediaTek Cloud Sandbox? Deixe seu comentário logo abaixo.

Faça seu comentário

Acesse sua conta e participe