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.
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:
- Uma placa Linkit Smart 7688 já com conectividade à Internet e acesso via SSH em rede local (para saber como conseguir isso, siga este nosso tutorial).
- Um cabo micro USB
- Fonte 5V com saída para cabo USB (carregador de celular, por exemplo)*
*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:
- 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) - Irá ser aberta uma nova tela, mostrando os projetos em fase de desenvolvimento já criados. Para criar um novo projeto, clique em “Create”.
- Irá ser aberta uma janela solicitando informações gerais do projeto. Preencha-a conforme a figura abaixo e clique em “Save”.
- Feito isso, seu projeto irá aparecer na tela de Prototypes. Nele, clique no botão “Detail”.
- 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. - Na tela que abrir, selecione a opção Controller, clicando no botão destacado em vermelho na figura abaixo.
- Irá surgir uma janela solicitando informações do Data Channel a ser criado. Preencha-a conforme figura abaixo e clique em “Save”.
- 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. - 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.