Índice:

Como usar o MQTT com o Raspberry Pi e ESP8266: 8 etapas (com imagens)
Como usar o MQTT com o Raspberry Pi e ESP8266: 8 etapas (com imagens)

Vídeo: Como usar o MQTT com o Raspberry Pi e ESP8266: 8 etapas (com imagens)

Vídeo: Como usar o MQTT com o Raspberry Pi e ESP8266: 8 etapas (com imagens)
Vídeo: 02 - Tutorial Raspberry Pi com MQTT e ESP8266 (Instalação do MQTT) 2024, Junho
Anonim
Como usar MQTT com o Raspberry Pi e ESP8266
Como usar MQTT com o Raspberry Pi e ESP8266

Neste Instrutível, explicarei o que é o protocolo MQTT e como ele é usado para se comunicar entre os dispositivos. Em seguida, como uma demonstração prática, mostrarei como configurar um sistema simples de dois clientes, onde um módulo ESP8266 enviará uma mensagem para um programa Python quando um botão é pressionado. Especificamente, estou usando um módulo Adafruit HUZZAH para este projeto, um Raspberry Pi e um computador desktop. O Raspberry Pi atuará como o corretor MQTT e o cliente Python será executado em um computador desktop separado (opcional, pois pode ser executado no Raspberry Pi).

Para acompanhar este Instructable, você precisará ter alguns conhecimentos básicos de eletrônica e como usar o software Arduino. Você também deve estar familiarizado com o uso de uma interface de linha de comando (para o Raspberry Pi). Esperançosamente, depois de adquirir o conhecimento do que é MQTT e como usá-lo em um cenário básico, você será capaz de criar seus próprios projetos de IoT!

Peças Requeridas

  • 1 x Raspberry Pi, conectado a uma rede local (executando Jessie)
  • 1 x Módulo ESP8266 (Adafruit HUZZAH)
  • 1 x tábua de pão
  • 3 fios de jumper (macho para macho)
  • 1 x botão de pressão
  • 1 x 10k Ohm Resistor (código de cor marrom-preto-laranja)

Eu criei este Instructable, pois MQTT sempre me interessou como um protocolo e há muitas maneiras diferentes de usá-lo. No entanto, eu não conseguia entender como codificar dispositivos para usá-lo. Isso acontecia porque eu não sabia / entendia o que estava realmente acontecendo para levar meu "Olá, Mundo!" do dispositivo A e enviá-lo para o dispositivo B. Portanto, decidi escrever este Instrutível para (espero) ensinar como ele funciona e também reforçar meu próprio entendimento dele!

Etapa 1: O que é MQTT?

O que é MQTT?
O que é MQTT?

MQTT, ou MQ Telemetry Transport, é um protocolo de mensagens que permite que vários dispositivos se comuniquem. Atualmente, é um protocolo popular para a Internet das Coisas, embora tenha sido usado para outros fins - por exemplo, Facebook Messenger. Curiosamente, o MQTT foi inventado em 1999 - o que significa que é tão antigo quanto eu!

O MQTT é baseado na ideia de que os dispositivos podem publicar ou assinar tópicos. Então, por exemplo. Se o dispositivo nº 1 registrou a temperatura de um de seus sensores, ele pode publicar uma mensagem que contenha o valor da temperatura registrado em um tópico (por exemplo, "Temperatura"). Esta mensagem é enviada a um MQTT Broker, que você pode considerar como um switch / roteador em uma rede local. Assim que o MQTT Broker receber a mensagem, ele a enviará para quaisquer dispositivos (neste caso, Dispositivo nº 2) que estão inscritos no mesmo tópico.

Neste projeto, estaremos publicando em um tópico usando um ESP8266 e criando um script Python que se inscreverá neste mesmo tópico, por meio de um Raspberry Pi que atuará como o MQTT Broker. A grande vantagem do MQTT é que ele é leve, portanto, perfeito para ser executado em pequenos microcontroladores, como um ESP8266, mas também está amplamente disponível - portanto, também podemos executá-lo em um script Python.

Esperançosamente, ao final deste projeto, você terá uma compreensão do que é MQTT e como usá-lo em seus próprios projetos no futuro.

Etapa 2: Instalando o MQTT Broker no Raspberry Pi

Instalando o MQTT Broker no Raspberry Pi
Instalando o MQTT Broker no Raspberry Pi
Instalando o MQTT Broker no Raspberry Pi
Instalando o MQTT Broker no Raspberry Pi
Instalando o MQTT Broker no Raspberry Pi
Instalando o MQTT Broker no Raspberry Pi

Para configurar nosso sistema MQTT, precisamos de um corretor, conforme explicado na etapa anterior. Para o Raspberry Pi, usaremos o corretor MQTT "Mosquitto". Antes de instalarmos isso, é sempre melhor atualizar nosso Raspberry Pi.

sudo apt-get update

sudo apt-get upgrade

Depois de fazer isso, instale os pacotes mosquitto e, em seguida, os pacotes mosquitto-clients.

sudo apt-get install mosquitto -y

sudo apt-get install mosquitto-clients -y

Quando você terminar de instalar esses dois pacotes, vamos precisar configurar o broker. O arquivo de configuração do corretor mosquitto está localizado em /etc/mosquitto/mosquitto.conf, então abra-o com seu editor de texto favorito. Se você não tem um editor de texto favorito ou não sabe como usar nenhum dos editores de linha de comando, estarei usando o nano para que você possa acompanhar:

sudo nano /etc/mosquitto/mosquitto.conf

Na parte inferior deste arquivo, você deve ver a linha:

include_dir /etc/mosquitto/conf.d

Exclua esta linha. Adicione as seguintes linhas ao final do arquivo.

allow_anonymous false

password_file / etc / mosquitto / pwfile listener 1883

Ao digitar essas linhas, dissemos ao mosquitto que não queremos ninguém se conectando ao nosso corretor que não forneça um nome de usuário e senha válidos (vamos definir isso em um segundo) e que queremos que o mosquitto escute mensagens na porta número 1883.

Se você não quiser que o corretor exija um nome de usuário e senha, não inclua as duas primeiras linhas que adicionamos (ou seja, allow_anonymous … e password_file …). Se você fez isso, pule para a reinicialização do Raspberry Pi.

Agora feche (e salve) esse arquivo. Se você estiver acompanhando o exemplo do nano, pressione CTRL + X e digite Y quando solicitado.

Como acabamos de dizer ao mosquitto que os usuários que tentam usar o corretor MQTT precisam ser autenticados, agora precisamos informar ao mosquitto qual é o nome de usuário e a senha! Então, digite o seguinte comando - substituindo nome de usuário pelo nome de usuário que você gostaria - então digite a senha que você gostaria quando solicitado (Nota: se, ao editar o arquivo de configuração, você especificou um caminho password_file diferente, substitua o caminho abaixo pelo um que você usou).

sudo mosquitto_passwd -c / etc / mosquitto / pwfile nome de usuário

Como acabamos de alterar o arquivo de configuração do mosquitto, devemos reiniciar o Raspberry Pi.

sudo reboot

Assim que o Raspberry Pi terminar de reinicializar, você deverá ter um corretor MQTT totalmente funcional! A seguir, vamos tentar interagir com ele, usando vários dispositivos / métodos diferentes!

Etapa 3: Testar o corretor

Testando o corretor
Testando o corretor

Depois de instalar o mosquitto no Raspberry Pi, você pode fazer um teste rápido - apenas para ter certeza de que tudo está funcionando corretamente. Para isso, existem dois comandos que podemos usar na linha de comando. mosquitto_pub e mosquitto_sub. Nesta etapa, vou guiá-lo no uso de cada um deles para testar nosso corretor.

Para testar o corretor, você precisará abrir duas janelas de linha de comando. Se você estiver usando Putty ou outro cliente SSH, isso é tão simples quanto abrir outra janela SSH e fazer login como de costume. Se você estiver acessando seu Pi de um terminal UNIX, isso é exatamente o mesmo. Se estiver usando o Raspberry Pi diretamente, você precisará abrir duas janelas de terminal no modo GUI (o comando startx pode ser usado para iniciar a GUI).

Agora que você abriu duas janelas, podemos começar o teste. Em um dos dois terminais, digite o seguinte comando, substituindo o nome de usuário e a senha pelos que você configurou na etapa anterior.

mosquitto_sub -d -u nome de usuário -P senha -t teste

Se você decidiu não definir um nome de usuário e senha na etapa anterior, a partir de agora, ignore os sinalizadores -u e -P nos comandos. Portanto, como exemplo, o comando mosquitto_sub agora seria:

mosquitto_sub -d -t test

O comando mosquitto_sub se inscreverá em um tópico e exibirá todas as mensagens enviadas para o tópico especificado na janela do terminal. Aqui, -d significa modo de depuração, portanto, todas as mensagens e atividades serão exibidas na tela. -u e -P devem ser autoexplicativos. Finalmente, -t é o nome do tópico que queremos assinar - neste caso, "teste".

A seguir, na outra janela do terminal, vamos tentar publicar uma mensagem no tópico "teste". Digite o seguinte, lembrando-se novamente de alterar o nome de usuário e a senha:

mosquitto_pub -d -u nome de usuário -P senha -t test -m "Olá, mundo!"

Ao pressionar Enter, você verá a mensagem "Hello, World!" aparecem na primeira janela do terminal que usamos (para se inscrever). Se for esse o caso, você está pronto para começar a trabalhar no ESP8266!

Etapa 4: Configurando o ESP8266 (Adafruit HUZZAH)

Configurando o ESP8266 (Adafruit HUZZAH)
Configurando o ESP8266 (Adafruit HUZZAH)
Configurando o ESP8266 (Adafruit HUZZAH)
Configurando o ESP8266 (Adafruit HUZZAH)
Configurando o ESP8266 (Adafruit HUZZAH)
Configurando o ESP8266 (Adafruit HUZZAH)
Configurando o ESP8266 (Adafruit HUZZAH)
Configurando o ESP8266 (Adafruit HUZZAH)

Esta etapa é específica do Adafruit HUZZAH (pois é o que estou usando para concluir este projeto). Se você estiver usando um dispositivo Arduino / ESP8266 diferente, pode pular esta etapa. No entanto, aconselho que leia rapidamente, para o caso de haver alguma informação aqui que possa ser relevante para você.

Para este projeto, irei programar o HUZZAH com o software Arduino. Portanto, se ainda não o fez, certifique-se de instalar o software Arduino (mais recente que 1.6.4). Você pode baixá-lo aqui.

Depois de instalar o software Arduino, abra-o e navegue até Arquivo-> Preferências. Aqui você deve ver (próximo à parte inferior da janela) uma caixa de texto com o rótulo: "URLs de gerenciador de placas adicionais". Nesta caixa de texto, copie e cole o seguinte link:

arduino.esp8266.com/stable/package_esp8266com_index.json

Clique em OK para salvar suas alterações. Agora abra o Board Manager (Tools-> Board-> Board Manager) e procure ESP8266. Instale o pacote esp8266 da comunidade ESP8266. Reinicie o software Arduino.

Agora, antes de programar a placa, precisamos selecionar algumas opções diferentes. Na opção de menu Ferramentas, selecione Adafruit HUZZAH ESP8266 para Placa, 80 MHz para a frequência da CPU (você pode usar 160 MHz se quiser fazer overclock, mas por agora vou usar 80 MHz), 4M (3M SPIFFS) para o tamanho do flash e 115200 para a velocidade de upload. Além disso, certifique-se de selecionar a porta COM que está usando (isso dependerá da sua configuração).

Antes de carregar qualquer código, você precisa ter certeza de que o HUZZAH está no modo bootloader. Para habilitar isso, mantenha pressionado o botão na placa marcado com GPIO0 e, enquanto estiver pressionado, mantenha pressionado o botão Reset também. Em seguida, solte o botão Reset e, em seguida, GPIO0. Se você fez isso corretamente, o LED vermelho que acendeu quando você pressionou GPIO0 agora deve estar ligeiramente aceso.

Para fazer o upload do código para o microcontrolador, primeiro certifique-se de que o HUZZAH esteja no modo bootloader e, em seguida, simplesmente clique no botão upload no IDE do Arduino.

Se você estiver tendo problemas para configurar o HUZZAH, mais informações podem ser encontradas no próprio tutorial da Adafruit.

Etapa 5: Programação do ESP8266

Programando o ESP8266
Programando o ESP8266

Agora começaremos a programar o ESP8266, mas antes de começarmos, você precisará instalar as seguintes bibliotecas no gerenciador de bibliotecas do Arduino (Sketch-> Incluir Bibliotecas-> Gerenciar Bibliotecas)

  • Bounce2
  • PubSubClient

Depois de instalar essas bibliotecas, você poderá executar o código que incluí neste Instructable (MQTT_Publish.zip). Fiz questão de comentá-lo para que você possa entender o que cada seção está fazendo, e espero que isso permita que você o adapte às suas necessidades.

Lembre-se de alterar as constantes na parte superior do código para que seu ESP8266 possa se conectar à sua rede WiFi e ao seu MQTT Broker (o Raspberry Pi).

Se você decidiu não configurar um nome de usuário e senha para o MQTT Broker, faça download do arquivo MQTT_PublishNoPassword.zip.

Etapa 6: Instalando o cliente Python (paho-mqtt)

Instalando o cliente Python (paho-mqtt)
Instalando o cliente Python (paho-mqtt)

Felizmente, essa etapa é muito simples! Para instalar o cliente mosquitto python, você só precisa digitar o seguinte na linha de comando (Linux / Mac) ou mesmo no prompt de comando (Windows).

pip install paho-mqtt

Observação: o prompt de comando do Windows pode apresentar um problema ao executar o comando pip se você não especificar que deseja que o pip seja instalado e o python seja adicionado à sua variável PATH ao instalar o Python. Existem várias maneiras de consertar isso, mas acho que apenas reinstalar o Python é a maneira mais fácil. Em caso de dúvida - dê uma olhada no google!

Etapa 7: Cliente Python - Assinatura

Cliente Python - Assinando
Cliente Python - Assinando

Nesta etapa, vamos configurar o script Python (no próprio Raspberry Pi ou em outro computador conectado à rede) para lidar com todas as mensagens que são enviadas (publicadas) pelo ESP8266 para o tópico MQTT.

Incluí o código Python abaixo (PythonMQTT_Subscribe.py), que foi comentado para ajudá-lo a entender o que está acontecendo, mas também explicarei alguns dos principais recursos aqui.

Se você não configurou um nome de usuário e senha para a conexão MQTT anteriormente, faça download do arquivo PythonMQTT_SubscribeNoPassword.py.

Etapa 8: comunicação entre dispositivos ESP8266

Comunicação entre dispositivos ESP8266
Comunicação entre dispositivos ESP8266

Se você deseja configurar uma rede IoT, por exemplo, você pode querer se comunicar entre dispositivos ESP8266. Felizmente, isso não é muito mais complexo do que o código que escrevemos antes, no entanto, há algumas mudanças notáveis.

Para que um ESP envie dados para outro, o primeiro ESP precisará publicar no tópico e o segundo ESP precisará se inscrever nesse tópico. Esta configuração permitirá uma conversa unilateral - ESP (1) para ESP (2). Se quisermos que o ESP (2) responda ao ESP (1), podemos criar um novo tópico, no qual o ESP (2) publicará e o ESP (1) se inscreverá. Felizmente, podemos ter vários assinantes no mesmo tópico, então se você deseja enviar dados para vários sistemas, você só precisará de um tópico (ao qual todos eles se inscrevem, exceto o dispositivo que está enviando os dados, pois isso irá estar publicando).

Se precisar de ajuda para descobrir o que cada dispositivo precisa fazer, pense no sistema como uma sala de pessoas. Se ESP (1) estiver publicando, você pode imaginar este dispositivo como um "alto-falante" e quaisquer dispositivos que estejam assinando o tópico são "ouvintes" neste exemplo.

Eu incluí alguns exemplos de código abaixo, que demonstram como um ESP8266 pode se inscrever em um tópico e ouvir certas mensagens - 1 e 0. Se 1 for recebido, o LED integrado (para o HUZZAH - GPIO 0) é ligado. Se 0 for recebido, este LED é desligado.

Se você deseja processar dados mais complexos, isso deve ser feito na função ReceivedMessage (consulte o código).

Para seus próprios projetos, se precisar enviar e receber dados, você pode incorporar a função de publicação do exemplo anterior no código incluído nesta etapa. Isso deve ser tratado na função loop () principal do Arduino.

Lembre-se de alterar as variáveis no topo do código para se adequar à sua rede!

Recomendado: