MQTT – Conectando seu arduino à nuvem – PARTE 3 – Clube dos Embarcados
Junho 8, 2017 Fevereiro 25, 2019 admin
Mais um post sobre o MQTT.
Dessa vez eu irei demonstrar como fazer a tão esperada ligação entre o mosquitto e o nosso arduino. Se você leu a parte 1 e a parte 2 sabem que agora iremos fazer a junção do que aprendemos nos posts anteriores.
Para iniciar, precisamos obviamente mudar um pouco aquela imagem que colocamos no primeiro post, ja que aquela imagem representa somente uma via de comunicação, onde o arduino espalha a mensagem para vários outros periféricos que só ficam na escuta. No exemplo, mostrei que o arduino fica 'propagando' infinitamente o estado do led ou o estado de um sensor para quem estiver ouvindo. Mas e se quisermos alterar esse valor, como isso seria possível?
Além do desenho maravilhoso vemos que é possível que o mesmo dispositivo possa ser 'subscriber' e 'pusbliser' ao mesmo tempo sem problema algum!
Então vamos começar a instalar os pacotes necessários no arduino!
Instalando o pacote 'pubsclient' no arduino.
Para instalar um pacote no arduino é simples, é só você importar o arquivo zipado para dentro dele.
para isso vamos baixar o zip do github do criador:
Agora é só ir em sketch / incluir Biblioteca/ Adicionar biblioteca ZIP:
Pronto você ja está pronto para utilizar o MQTT.
Agora vamos realmente integrar tudo!
vou explicar passo a passo como devemos fazer e logo abaixo coloco o código comentado.
O grande ponto positivo de executar o arduino no mosquitto é que realmente não é necessário configurar um ip fixo ou saber exatamente qual ip cada arduino se encontra, pois cada um possue seu Mac address então ficará facil.
Primeiro passo obviamente é se conectar à sua rede wifi , com o ssid, usuário e senha
Depois precisamos configurar o ip, usuário e senha do servidor que está o mosquitto;
Precisamos configurar quais serão nossos serviços (publisher e subscriber)
Configurar uma ação para quando o arduino receber um comando que está escutando
Manter isso em um loop até o fim da eternidade
Agora Eu particularmente gosto de fazer funções para checar se certas atividades ainda são presentes, como por exemplo checar se o wifi ainda está ativo ou se o mosquitto ainda está conectado. Faço isso pois pode acontecer do seu wifi cair ou você perder a conexão da internet e o seu arduino simplesmente vai acreditar que está enviando dado para algum lugar ou pode dar até algum erro de execução e ele parar de executar o que precisa, e você pensar que ele está conectado.
Além disso eu gosto de separar o máximo possível do código em funções distintas (mania de OOP)
Função que configura o wifi
Função que checa se ela ainda está ativa
Função que conecta no mosquitto
Função de execução quando o arduino recebe um dado no subscriber
Função que me envia o estado do sensor que eu escolhi
Por padrão eu estou utilizando a seguinte chamada de publisher e subscriber:
/arduino/macaddress/GET que vai ficar recebendo o estado do sensor
/arduino/macaddress/SET que vai modificar o valor do sensor.
Escolhi por utilizar o mac no meio da chamada para garantir que caso eu tenha mais de 1 dispositivo, um não sobreponha o outro na hora de enviar o estado específico do seu pino.
//Desenvolvido por raspibr.com.br (Marcus Vincius Brasizza)
const char* ssid = "SEUSSID";
const char* password = "SUASENHADOWIFI";
const char* mqtt_server = "ip_mqtt";
const char* login_mqtt = "user_mqtt";
const char* senha_mqtt = "pass_mqtt";
//Aqui eu retiro a pontuação do mac para pegar somente o valor limpo
postService +=   "/arduino/";
// Aqui eu transformo o as strings em char, pois o parametro do publish e subscriber somente aceita char
//Essa função irá retornar o estado do pino, a não ser que seja o led interno (LED_BUILTIN) que o estado lógico é invertido
// Liga o led caso o valor do serviço SET enviado seja 1
digitalWrite(device, LOW);  // Desliga o led
//aqui a cada 2 segundos ele envia o estado do sensor no serviço GET
E como vamos testar???
eu utilizo o MQTT box , que é uma extensão do google chrome (Clique aqui no google chrome) , mas você pode baixar outros que quiser.
o resultado é esse ai no vídeo abaixo!!
Espero que tenham gostado e até a proxima!!!!
← MQTT – Conectando seu arduino à nuvem – PARTE 2 MQTT – Conectando seu arduino à nuvem – O PROTÓTIPO →