Table des matières:

Communication IoT avec Dragonboard 410C : 5 étapes
Communication IoT avec Dragonboard 410C : 5 étapes

Vidéo: Communication IoT avec Dragonboard 410C : 5 étapes

Vidéo: Communication IoT avec Dragonboard 410C : 5 étapes
Vidéo: DragonBoard 410C AWS IoT Demo 2024, Juillet
Anonim
Communication IoT avec Dragonboard 410C
Communication IoT avec Dragonboard 410C

É bastante comum desenvolver ou, até mesmo, comprar um produto IoT para a sua casa. Abrir uma cortina, ligar uma tomada, ajustar a temperatura de um ambiente, monitoramento de segurança, entre outros benefícios de equipamentos IoT.

Agora, seria interessante transformar esses alertas das "coisas" da sua casa, em solicitações de serviço, e ainda melhor, em serviços que você conhece e que já está acostumado. O comerciante "zé da água" não tem condições de entrar num grande marketplace para vender a sua água e tão pouco ter recursos para adquirir e manter um sistema de pedidos.

Para que você use serviços como o do seu 'Zé da água', que você semper confiou, será mostrado como montar a base de uma plataforma IoT com a dragonboard, para resolver essa comunicação.

Étape 1: Préparez un Sua Dragonboard 410C

Préparez un Sua Dragonboard 410C
Préparez un Sua Dragonboard 410C

Neste passo vamos prepara a nossa Drabonboard 410C para se tornar o gateway da nossa estrutura IoT dentro da sua casa.

Primeiramente, vamos instalar um sistema operacional na placa. Caso você opte por utilizar localização GPS, que ajudará muito o cliente no momento de registro, sugerimos que instale o sistema operacional Linaro 17.04.1, caso contrário, veja as opções of na página da Dragonboard 410C da 96boards, neste link.

Após a instalação do seu sistema operacional, instale a biblioteca libmraa para a utilização das GPIOs, da Dragonboard 410C. Para isso, você deve seguir os passos abaixo (abra o console do seu sistema operacional para executar os comandos):

Pré requisitos libmraa

  • sudo apt-get mise à jour
  • sudo apt-cache recherche pcre
  • sudo apt-get install libpcre3-dev
  • sudo apt-get install git
  • sudo apt-get install cmake
  • sudo apt-get installer python-dev
  • sudo apt-get install swig

Instalação mraa

  • sudo git clone
  • sudo mkdir mraa/build && cd $_
  • sudo cmake.. -DBUILDSWIGNODE=OFF
  • faire sudo
  • sudo faire installer

Para utilizar a biblioteca com Python, que é o caso deste instructable, vamos adicionar o export da nossa variavel de ambiente do Python para a biblioteca. Par ailleurs, utilisez o editor de texto de sua preferência para seguir os passos abaixo, vamos utilziar o VIM:

  • sudo vim ~/.bashrc
  • pressione a teclar i, para iniciar a edição do arquivo
  • adicionar a linha seguinte no final do arquivo: export PYTHONPATH=$PYTHONPATH:$(dirname $(find /usr/local -name mraa.py))
  • pressione ESC para sair da edição do arquivo e digite ':x!' e entrez para salvar e sair do arquivo.

Com isso já conseguimos utilizar a biblioteca mraa com Pyhton.

Agora, vamos instalar os softwares para facilitar a leitura do GPS (lembrnado que para a utilização dessa parte, recomendamos o uso do sistema operacional Linaro 17.04.1). No seu console, execute o comando abaixo:

sudo apt-get install gnss-gpsd gpsd gpsd-clients

Para testar, execute o código abaixo, também no seu console:

gpsmon –n

OBS: Une antenne interne da Drabonboard é pour ser utilizada fora de cases e em locais mais abertos. Até mesmo em locais abertos, a leitura pode demorar de 5 a 10 minutos, então não fique preocupado se não exibir as informações prontamente.

Pensando no projeto, com certeza iremos encapsular o(s) hardware(s) num case, e no menor dos cenários, este case estará dentro de uma casa ou apartamento. Para resolver, podemos utilizar antenas externas, tanto para wi-fi, quanto para o GPS.

OBS: Une instalação da antena externe não é um procedimento tão simple para quem não tem familiaridade com procedimentos de soldagem com SMD, portanto, procure um serviço especializado se necessário.

Para realizar o switch do das antenas internas para externas, será necessário seguir os procedimentos que a Qualcomm disponibilizou no documento deste link.

OBS: É muito mais fácil de encontrar os componentes (condensateurs, resistances e indutores) na internet do que em loja física. O mesmo para antenas, que sugerimos a compra no site da SmartCore.

Para que nosso gateway não fique depende de uma configuração e conexão wifi, com a internet, iremos utilzar um módulo GSM. Les modules GSM externes, nécessitent généralement une tension d'alimentation spécifique, nécessitent l'envoi d'une alimentation directe à l'alimentation de la Dragonboard 410C.

Na imagem de capa deste step, estão destacados os pontos de saída que deverá ser utilizado para a soldagem dos cabos para a alimentação do modulo GSM (ATENÇÃO COM A POLARIDADE).

Pour réaliser une communication interne, utiliser le protocole MQTT, et définir un point d'accès Dragonboard 410C como. Vamos instalar o software Mosquitto para tornar a nossa placa um broker mqtt, com a execução da linha abaixo no seu console:

sudo apt-get install moustique

Com isso o software já estará instalado e ativo.

Pour définir un point d'accès Dragonboard 410C sua como um, siga os passos:

  • Clique no icone de redes no canto lower direito
  • Cliquez sur 'Modifier les connexions'
  • Após ouvrir un tela 'Connexions réseau', clique em 'Ajouter'
  • Sélectionnez une option Wi-fi, et cliquez sur « Créer »
  • Ao abrir a tela de configuração da rede, insira um nome em SSID
  • Na mesma tela mude para 'Hotspot' no campo 'Mode'
  • Caso queira incluir uma senha para a rede, configure-a na aba 'Wi-fi Security'
  • Pour finaliser clique sur 'Enregistrer'

Agora qualquer dispositivo pode se connecter à rede exclusiva da Dragonboard 410C, e utilizar o seu broker para publicar e subscrever.

Com estes preparos acima, estamos prontos para seguir com o desenvolvimento.

Étape 2: préparer une API Sua Cloud

Este passo é algo que depende muito de projeto para projeto. Pode ser que precise ser feita do zero, ou o cloud já existe com a necessidade de criar o mecanismo de API, ou até mesmo játer uma API pronta para utilizar.

Vamos descrever um passo a passo para iniciar uma API básica, pelo menos para o teste deste instructable. Caso queira seguir um tutorial mais completo, sugiro ver o artigo deste link. Em todo caso, sugiro desenvolver algo mais estruturado, caso a finalidade do projeto seja comercial.

Primeiramente, precisamos de um lugar para colocarmos a nossa API, e para não termos gastos com estes testes, iremos utilizar a plateforma Heroku. Siga os passos para iniciar a sua aplicação:

  • Acesse o site da Heroku, por este link
  • Clique em 'Sign Up', no canto superior dieito, para iniciar o seu registro
  • Após o registro, em sua dashboard, clique em 'New' e escolha a opção 'Create New App'
  • Insira um nome para a sua aplicação
  • Em seguida, clique em 'Créer une application'
  • Seu app está pronto, podendo ver seu funcionamento clicando em 'Open App', no canto superior dirento
  • Instale o Heroku Cli, para fazer os deploy para a sua aplicação, seguindo a instrução para seu sistema operacional, de acordo com a documentação deste link
  • Agora você deverá seguir as instruções de deploy para começar o desenvolvimento da sua API, disponível em

Seguindo os passos acima, já temos a pasta na sua maquina, para desenvolver a sua API. Agora vamos instalar o NodeJS e un framework Express, seguindo os passos abaixo:

  • curl -sL https://deb.nodesource.com/setup_11.x | sudo -E bash -
  • sudo apt-get install -y nodejs
  • sudo apt-get install npm
  • Caso não esteja utilizando uma distribuição Linux que use o Advanced Packaging Tool (APT), outro sistema operacional, consulte o link
  • Agora exécute npm install express-generator -g
  • Acesse o diretório que foi realizado os procedimentos da aplicação da Heroku com 'cd _PASTA_SEU_APP_'
  • Inicie a aplicação node com 'npm init', e os outros comandos abaixo
  • cd../
  • exprimer _PASTA_SEU_APP_
  • cd _PASTA_SEU_APP_
  • npm installer

Para deixar dois endpoints preparados, um de GET e um de POST, siga os passo abaixo:

  • Accéder à des "routes" de pâtes
  • abra ou arquivo 'index.js'
  • Inclua o trecho de código abaixo, que irá adicionar as rotas na raiz da sua aplicação para os dois métidos (GET e POST):

router.get('/', function(req, res, next) { res.setHeader('Content-Type', 'application/json'); res.send(JSON.stringify({ msg: 'Hello API'}, null, 3)); });router.post('/', function(req, res, next) { var msg = 'vide'; if(typeof req.body.msg != 'undefined') msg = req.body.msg; res.setHeader('Content-Type', 'application/json'); res.send(JSON.stringify({ msg: msg}, null, 3)); });

Agora você réalise o déployer do seu app para a Heroku:

  • connexion heroku
  • git ajouter.
  • git commit -am "validation initiale"
  • git push maître heroku

Com isso você já tem seus endpoints de testes prontos. Para testar os endpoints sugerimos instalar o software Postman, neste link. Insira a url da seu app (Ex: https://_SEU_APP_.herokuapp.com/) e selecione o método GET ou POST, e clique em 'SEND'. Para o método POST, siga os passos:

  • Cliquez sur 'Corps'
  • Sélectionnez une option 'x-www-form-urlencoded
  • Insira o clé 'msg'
  • Em Value, pode inserir qualquer mensagem

Com essas instruções temos a nossa API de testes pronta para o uso.

Étape 3: Instalando E Manipulando O Modulo GSM

Instalando E Manipulando O Modulo GSM
Instalando E Manipulando O Modulo GSM
Instalando E Manipulando O Modulo GSM
Instalando E Manipulando O Modulo GSM

Pour plus de dépendances de connexion Wifi, vamos utilizar a comunicação GSM pour ouvrir caminho de dados para utilizarmos a nossa API, configurada no step anterior.

É aconselhável a utilização de modulos GSM homologados, mas para os testes do nosso protótipo iremos utilizar um module simple e qu'atende a nossa demanda do momento, o modulo SIM800L. Este modulo foi produzido e distribuído em massa pelo fabricando, mas sem qualquer homologação, tanto que não está disponível no site do fabricando.

Vamos às conexões físicas, entre o modulo GSM e a nossa Dragonboard 410C.

Como mencionado no step 'Préparer un sua Dragonboard', teremos que regular a tensão para utilizar o modulo. Para isso utilizaremos um regulador de tensão step down, para diminuir a tensão de entrada. Utilizamos o Regulador De Tensão Stepdown Buck Conversor Dc Lm2596 3a Nf, para este teste

Siga os passos abaixo para realizar as conexões físicas:

  • Conecte a saída positiva da Dragonboard, como ilustrado no step 'Prepare a sua Dragonboard', e conecte na entrada 'IN +' do regulador de tensão
  • Conecte a saída negativa da Dragonboard, como ilustrado no step 'Prepare a sua Dragonboard', e conecte na entrada 'IN -' do regulador de tensão
  • IMPORTANT: Ligue a Dragonboard, e regule com o auxilio de uma chave de fenda, regule o trimpot para que a saída (OUT + e OUT -) tenha 4.2V. Siga adiante apena se a saída estiver com esse valor. Caso seja utilizado outro modulo GSM, verifique a tensão adequada. Este passo deve ser repetido, semper que houver inclusão de um hardware, pois pode haver variação.
  • Conecte a saída do regulador de tensão 'OUT +' no pino VCC, indicado na imagem de capa deste step
  • Conecte a saída do regulador de tensão 'OUT -' no pino GND, indicado na imagem de capa deste step
  • Conecte o pino RXD do modulo GSM no pino 5 UART 0 TX da Dragonboard, ambos indicados nas imagens de capa deste step
  • Conecte o pino TXD do modulo GSM no pino 7 UART 0 RX da Dragonboard, ambos indicados nas imagens de capa deste step
  • Conecte o pino GND do modulo GSM no pino 1, 2, 39 OU 40 GND da Dragonboard, ambos indicados nas imagens de capa deste step. Isto é fundmental para estabilizar o tráfego de dados pelo RX TX

OBS: Não se esqueça de conectar uma antena no modulo GSM, pelos pinos NET ou IPX ANT, indicados na imagem de capa deste step.

Logiciel Agora vamos ao. Vamos utilizar a biblioteca mraa que instalamos anteriormente, para realizar a comunicação serial entre o modulo GSM et a Dragonboard 410C.

Siga os passos para importar a biblioteca e testar a comunicação com o módulo:

  • Crie um arquivo com a extensão.py, como sugestão 'gsm.py'
  • No arquivo, inicie importando a biblioteca mrra, e também a biblioteca time para definir les retards

importer mraa

Defina uma variável para o caminho da UART que conectamos o modulo GSM

port = '/dev/tty96B0'

Instancie a UART com ajuda da biblioteca mraa

uart = mraa. Uart(port)

Crie uma função para enviar para os commando AT para o modulo GSM

def écrire (msg):

uart.write(bytearray(str(msg)+'\n', 'utf-8'))

Crie um loop para fazer a leitura do modulo GSM

while True: r = uart.read(128) if r != '': print(r.decode('UTF-8')) i = str(input()) write(i) time.sleep(0.5)

  • Salve o arquivo e volte para o console
  • Exécuter ou arquivo

python gsm.py

Chiffre 'AT', e se tudo conectado corretamente, você irá receber na tela a mensgem 'OK'

Para que nosso module não dependa de digitarmos cada comando AT - encontrados neste link - faremos duas funções, uma que irá realizar a conexão com a APN e outra que irá consumir a nossa API.

A primeira função será de conexão:

def connecter():

time.sleep(0.5) write("AT") time.sleep(0.5) write('AT+CREG=1') time.sleep(0.5) write('AT+COPS=2') time.sleep(0.5) write('AT+SAPBR=3, 1, "Contype", "GPRS"') time.sleep(0.5) write('AT+SAPBR=3, 1, "APN", "*****"') time.sleep(0.5) write('AT+SAPBR=3, 1, "USER", "*****"') time.sleep(0.5) write('AT+SAPBR=3, 1, "PWD", "*****"') time.sleep(0.5) write('AT+SAPBR=1, 1') time.sleep(0.5) write('AT+SAPBR=2, 1') time.sleep(6)

Sugiro que rode cada comanda antes de utilizar esta função. Segue algumas observações sobre estes comandos:

  • Para definir corretamente o valor do comando AT+COPS, que serve para selecionar a sua rede, primeiro execute AT+COPS=?, aguarde que apareça as redes disponíveis, e altere o valor na função connect() para o indexador da sua rede exibida após o commando AT_COPS=?
  • Les commandes de définition d'APN sont basées sur des astérisques qui dépendent du cada operadora do SIM Card, procurent-elles des informations auprès d'un operador para saber qual o endereço da APN, usuário e senha.
  • Réparation qu'un cada

Agora vamos implémenter une função que irá enviar consumir a nossa API:

def envoyer(p, m, d=''):

write('AT+HTTPINIT') time.sleep(0.5) write('AT+HTTPSSL=1') time.sleep(0.5) write('AT+HTTPPARA="CID", 1') time.sleep(0.5) write('AT+HTTPARA="URL", "_URL_APP_HEROKU_/'+p+'"') time.sleep(0.5) write('AT+HTTPARA="USERDATA", "Autorisation: porteur ******** *********\r\n"') time.sleep(0.5)if m == 'GET': write('AT+HTTPACTION=0')else: write('AT+HTTPPARA ="CONTENT", "application/x-www-form-urlencoded"') time.sleep(0.5) write('AT+HTTPDATA='+str(len(d))+', 10000') time.sleep(0.5) write(str(t)) time.sleep(10) write('AT+HTTPACTION=1') time.sleep(6)write('AT+HTTPTERM')

Segue algumas observações para estes comandos:

  • Un função recebe 3 paramètres. 'p' para o path que será executado da sua API, 'm' para o método que você irá utilizar da sua api (GET/POST/…), e 'd' para os dados enviados em caso do método não for GET
  • O commande 'AT+HTTPS' é opcional, aucun caso da sua api utilizar SSL
  • O argumento 'm' deverá ser enviado no formato querystring (Ex: msg=ola+dragonboard&arg2=teste&…)
  • O comando 'AT+HTTPPARA="USERDATA…' é opcional, apena se houver a necessidade de definir algum header no request

Mais uma vez sugiro rodar cada comando, individualmente e em ordem, antes da utilização.

Antes de adquirir seu SIM Card, consulte se a operadora trabalha com a mesma tecnologia que o modulo GSM que você estiver utilizando, mas é aconselhável utilizar o SIM Card de empresas especializadas em comunicação IoT, por questões de compatibilidade, Com as configurações e implementações acima, estamos prontos para nos comunicarmos com a nuvem atraves da nossa Dragonboard 410C.

Étape 4: Preparando Dispositivos Para Se Comunicar Com a Dragonboard

Preparando Dispositivos Para Se Comunicar Com a Dragonboard
Preparando Dispositivos Para Se Comunicar Com a Dragonboard

Neste passo, iremos utilizar a placa de prototipagem NODEMCU ESP8266 ESP-12, como exemplo. Esta e qualquer outra placa de prototipagem, como o nome já diz, é ótima para protótipos, mas no momento em que o hardware for definido como produto, deve ser desenvolvido um complexo dedicado. Este módulo já possui WiFi, então irá facilitar a comunicação.

Para nos comunicarmos com a nossa Dragonboard 410C, precisamos de 2 bibliotecas:

  • ESP8266WiFi > biblioteca para ativar a conexão da placa
  • PubSubClient > biblioteca para realizar a comunicação com o broker MQTT

Defina como variáveis globais, as definições da rede Wi-fi e do broker, ambos da nossa Dragonboard 410C:

  • const char* SSID = "_REDE_DRAGONBOARD_"; // Nome da rede definida como Hotspot na Dragonboard
  • const char* MOT DE PASSE = ""; // Insira o valor da senha se houver definido na configuração do Hotspot
  • const char* COURTIER = "_IP_DRAGONBOARD_"; // Exécuter 'ip a' na sua Dragonboard para descobrir o ip da rede interna

Crie o objeto de rede Wi-fi da placa e instancie o client MQTT com este objeto:

  • WiFiClient espWIFI;
  • PubSubClient MQTT(espWIFI);

Avec la fonction de configuration, lancez une connexion WIFI et une communication MQTT:

  • WiFi.begin (SSID, MOT DE PASSE);
  • MQTT.setServer(courtier, 1883);
  • MQTT.setCallback(callback_mqtt); // Caso você faça abonnez-vous em algum topico

No sua função de loop, adicione a linha abaixo para que o MQTT entre em loop:

MQTT.loop();

Você pode criar uma função de verificação de conexão de WIFI e do broker, para não ter problemas com intermitência. Para isso crie um função com as linhas abaixo, e chame-a na função de loop:

void checkConnections(){

if (!MQTT.connected())while (!MQTT.connected());

if (WiFi.status() != WL_CONNECTED){WiFi.begin(SSID, PASSWORD);while (WiFi.status() != WL_CONNECTED);}

}

Enfin, iremos enviar algum dado para a Drabonboard 410C, com o seguinte comando:

MQTT.publish('_NOME_DO_TOPICO_', "Ola Dragonboard");

Não vou entrar em detalhes para exemplificar a leitura de sensores e etc, pois vai variar muito de projeto para projeto e de hardware para hardware. Basta incluir esta linha onde necessário, que os dados serão enviados para a seu broker.

Voltando para a nossa Dragonboard410C, vamos criar um arquivo teste em python, para checarmos os dados recebidos pelo broker, mas antes, vamos instalar uma biblioteca que nos auxiliaires na conexão do broker. Para isso exécuter comme linhas abaixo no console da Dragonboard 410C:

  • sudo apt-get install python pip
  • pip installer paho-mqtt

Agora vamos criar um arquivo python com o nome, como exemplo, mqtt.py. Nele vamos definir algumas funções que serão explicadas a seguir:

importer paho.mqtt.client en tant que mqttimport sys

Broker = "_IP_DRAGONBOARD_" port = 1883 timeout = 60 TopicSubscribe = "_MESMO_TOPICO_DISPOSITIVO_EXTERNO_"

def onConnect(client, userdata, flags, rc): client.subscribe(TopicSubscribe)

def onMessage(client, userdata, msg): message = str(msg.payload) print(message)

essayez: client = mqtt. Client() client.on_connect = onConnect client.on_message = onMessage client.connect(Broker, port, timeout) client.loop_forever() sauf: sys.exit(0)

Neste arquivo vamos definimos duas funções, a 'onConnect' que será chamada no moment em that houver conexão com o broker, e a função 'onMessage' que será executada quando houver mensagem recebida no s'abonner definidos na função 'onConnect'.

Exécuter o arquivo com 'python mqtt.py', e se todas as conexões anteriores estiverem sido realizadas com successo, você receberá na sua tela os dados que estão sendo enviados pelo seu dispositivo externo, no caso deste exemplo, pelo.

Notez que é na função onMessage, que recebemos a informação e exibimos nos seu console. Então é neste ponto que você tratará os dados recebidos e no momento certo, enviará via GSM para a sua API, pela função 'send' do seu arquivo de teste gsm.py, que criamos no passo 'Instalando e manipulando o modulo GSM'.

Uma observation importante: Para realizar a alimentação da placa NODEMCU ESP8266 ESP-12, em especifico, sugiro que consultem o documento deste link. Muito cuidado neste momento, pois uma simples falha de inversão de polos pode queimar a placa, mas caso isso aconteça a boa noticia é que tem um preço que facilita a troca rapidamente.

Étape 5: Considérations Finais

Se estiver tudo configurado como descritos no steps anteriores, você já está comunicando o seu dispositivo IoT com o mundo, com auxilio da sua Dragonboard 410C. É important ressaltar que neste instructable foram mencionados vários hardwares e para a finicão de exemples apenificas. Os sensores e outros recursos que serão utilizados no dispositivo externo, todo o preparo e implementação da sua API Cloud, os recursos de hardware ligados à Dragonboard, e também a forma com que os dados são tratados, fica a critério de quem for executar o. Para definir como produto final, sugerimos apĺicar as tecnologias e procedimentos adequados para tal

O uso de apps e aplicações de gestão, para os comerciantes ligados aos serviços, deixamos em aberto também, bastando trabalhar bem a sua API, e a consumindo atraves destas frentes.

Conseillé: