Índice:

IBM Watson com ESP32 como terminal: 11 etapas
IBM Watson com ESP32 como terminal: 11 etapas

Vídeo: IBM Watson com ESP32 como terminal: 11 etapas

Vídeo: IBM Watson com ESP32 como terminal: 11 etapas
Vídeo: IBM Watson com ESP32 como Endpoint - Pt2 2024, Julho
Anonim
Image
Image
ESP32 Pinout
ESP32 Pinout

Estou postando aqui hoje o primeiro vídeo de uma série sobre como montar um dispositivo Endpoint com ESP32 e, em seguida, enviá-lo para um serviço de nuvem. Neste episódio específico, mostrarei como enviar informações de um sensor DHT22 usando o protocolo MQTT para IBM Watson.

Vamos primeiro apresentar o MQTT, que é um protocolo máquina a máquina usado em IoT (Internet of Things). Também enviaremos dados do sensor de temperatura e umidade usando este protocolo e, em seguida, verificaremos o gráfico com esses dados em uma página da web.

Etapa 1: Pinagem ESP32

Coloquei aqui o Pinout do ESP32, que usamos em nosso exemplo. Porém, quero deixar claro que o projeto também funciona com ESP8266, e até com o mesmo código-fonte.

Etapa 2: Pinagem NodeMCU

Pinagem NodeMCU
Pinagem NodeMCU

Etapa 3: MQTT

MQTT
MQTT

MQTT é um protocolo máquina a máquina usado na IoT. Ele foi projetado para ser leve e rápido. Ele usa um sistema de assinatura / publicação, onde um dispositivo "assina" um tópico com as informações específicas de seu interesse e, em seguida, recebe as informações sempre que um dispositivo publica dados relativos a esse tópico.

Como um programa de servidor, o MQTT precisa de software. Isso é chamado de corretor. Nesse caso específico, usaremos o serviço Bluemix IoT da IBM. Este serviço é gratuito para teste de endpoint.

Em seguida, precisamos ter um telefone celular ou tablet com o lado do Aplicativo, ou seja, como um cliente MQTT. Também temos o lado do dispositivo, que é o lado do ESP com um termômetro. Isso envia os dados de temperatura e umidade para o Bluemix, que então envia essas informações para o lado do aplicativo.

Etapa 4: Montagem

conjunto
conjunto

Nosso circuito consiste em um resistor de 4,7 k Ohms entre 3,3 V e o pino de dados, mais um DHT22 conectado ao GPIO4 de um ESP32 ou NodeMCU. Portanto, este é o nosso Endpoint.

Etapa 5: Diagrama

Diagrama
Diagrama
Diagrama
Diagrama

Eu mostro aqui as várias maneiras de trabalhar com o MQTT Local Broker. Coloquei dois modelos de diagramas. No vídeo, falo sobre uma situação usando um Raspberry Pi para abrir um portão, por exemplo.

Na imagem acima, temos a primeira arquitetura que usa um Broker local com persistência, e uma segunda arquitetura abaixo que só se comunica com o broker na nuvem.

Conforme mostrado no diagrama, nosso sensor envia os dados de temperatura e umidade para o IBM Watson. É importante enfatizar que o IBM Watson não está gravando os dados neste caso, pois eles estão apenas sendo exibidos em gráficos. Isso ocorre porque não abordaremos nenhuma operação de banco de dados no exemplo de hoje, mas apenas indicaremos o acesso à página Quickstart (https://quickstart.internetofthings.ibmcloud.com/), que exibirá o status do Terminal. O esquema é simples e usa WiFi para enviar dados.

Etapa 6: Bibliotecas

No IDE Arduino, vá para o menu Sketch -> Incluir Biblioteca -> Gerenciar Bibliotecas …

Na tela que abrir, digite a busca "DHT" e instale a biblioteca “DHT sensor library”

Em seguida, digite "PubSubClient" e instale a biblioteca "PubSubClient".

Etapa 7: Biblioteca de leitura de temperatura e umidade

Biblioteca de leitura de temperatura e umidade
Biblioteca de leitura de temperatura e umidade

Etapa 8: Biblioteca MQTT

Biblioteca MQTT
Biblioteca MQTT

Etapa 9: MQTT.ino

Iniciamos o código-fonte verificando qual ESP está sendo usado e importando a biblioteca e o WiFi correspondentes. Ainda incluímos as Libs MQTT e o sensor de temperatura e umidade.

// Verifica qual ESP está sendo utilizado // e importa a lib e wifi correspondente # se definido (ESP8266) #incluir #else #include #endif // Lib de MQTT #include // Lib do sensor de temperatura e umidade #include

A seguir, definimos o seguinte: o intervalo entre os envios de dados, o servidor MQTT que será usado, as informações de impressão no gráfico e o ID. Também apontamos como a string QUICK_START deveria ser.

// Intervalo entre os envios # define INTERVAL 1000 // Substitua pelo SSID da sua rede #define SSID "TesteESP" // Substitui pela senha da sua rede # define PASSWORD "87654321" // Servidor MQTT que vai utlizar #define MQTT_SERVER "início rápido.messaging.internetofthings.ibmcloud.com "// Nome do tópico que devemos enviar os dados // para que eles apareçam nos gráficos #define TOPIC_NAME" iot-2 / evt / status / fmt / json "// ID que usaremos para conectar // QUICK_START deve permanecer como está const String QUICK_START = "d: início rápido: arduino:";

Nesta etapa, definimos um ID exclusivo. Neste exemplo, usamos o endereço MAC do dispositivo que estamos usando. Isso servirá como identificação no site QuickStart. Aqui, também conectamos o ID de início rápido com o ID do nosso dispositivo.

// No DEVICE_ID você deve mudar para um id único // Aqui nesse exemplo utiliza o endereço MAC // do dispositivo que estamos utilizando // Servirá como identificação no site //https://quickstart.internetofthings.ibmcloud.com const String DEVICE_ID = "240ac40e3fd0"; // Concatemos o id do início rápido com o id do nosso // dispositivo const String CLIENT_ID = QUICK_START + DEVICE_ID;

Em seguida, configuramos o MQTT e o WiFi, bem como os objetos e variáveis envolvidos com os valores de temperatura e umidade.

// Cliente WiFi que o MQTT irá utilizar para conectarWiFiClient wifiClient; // Cliente MQTT, passa a url do servidor, a porta // e o cliente WiFi PubSubClient client (MQTT_SERVER, 1883, wifiClient); // Tempo em que o último envio foi feito long lastPublishTime = 0; // Objeto que realiza a leitura da temperatura e da umidade DHT dht (4, DHT22); // Variável para guardarmos o valor da temperatura float temperature = 0; // Variável para guardarmos o valor da umidade float umidade = 0;

MQTT.ino - configuração

Na configuração, inicializaremos o DHT e nos conectaremos à rede WiFi e ao servidor MQTT.

void setup () {Serial.begin (115200); // Incializamos o dht dht.begin (); // Conectamos à rede WiFi setupWiFi (); // Conectamos ao servidor MQTT connectMQTTServer (); }

MQTT.ino - loop

No Loop, coletamos os dados do sensor para criar o Json que será publicado no tópico que o IBM Watson espera gerar o gráfico.

void loop () {// Tempos agora em milisegundos long now = millis (); // Se o tempo desde o último envio para maior que o intervalo de envio if (now - lastPublishTime> INTERVAL) {// Atualizamos o tempo em que ocorreu o último envio lastPublishTime = now; // Fazemos a leitura da temperatura e umidade readSensor (); Serial.print ("Publicar mensagem:"); // Criamos o json que enviaremos para o servidor mqtt String msg = createJsonString (); Serial.println (msg); // Publicamos no tópico onde o servidor espera para receber // e gerar o gráfico client.publish (TOPIC_NAME, msg.c_str ()); }}

MQTT.ino - setupWiFi

Aqui, temos a função responsável por conectar a rede wi-fi.

// Função responsável por conectar à rede WiFivoid setupWiFi () {Serial.println (); Serial.print ("Conectando a"); Serial.print (SSID); // Manda o esp se conectar à rede através // do ssid e senha WiFi.begin (SSID, PASSWORD); // Espera até que a conexão com a rede seja escolhida while (WiFi.status ()! = WL_CONNECTED) {delay (500); Serial.print ("."); } // Se chegou aqui é porque conectou Serial.println (""); Serial.println ("WiFi conectado"); }

MQTT.ino - connectMQTTServer

Nesta etapa, usamos a função responsável por se conectar ao servidor MQTT.

// Função responsável para conectar ao servidor MQTTvoid connectMQTTServer () {Serial.println ("Conectando ao servidor MQTT…"); // Se a conexão ao id que definimos if (client.connect (CLIENT_ID.c_str ())) {// Se a conexão foi bem localizada Serial.println ("conectado"); } else {// Se ocorreu algum erro Serial.print ("error ="); Serial.println (client.state ()); }}

MQTT.ino - readSensor

A leitura dos dados de temperatura e umidade é definida nesta função.

// Função responsável por realizar a leitura // da temperatura e umidade void readSensor () {float value; // Faz a leitura da temperatura value = dht.readTemperature (); // Se o valor lido é válido if (! Isnan (valor)) {// Armazém o novo valor da temperatura temperatura = valor; } // Faz a leitura da umidade value = dht.readHumidity (); // Se o valor for válido if (! Isnan (value)) {// Armazena o novo valor da umidade umidade = valor; }}

MQTT.ino - createJsonString

Aqui, temos a função responsável por criar um Json com os dados lidos.

// Função responsável por criar // um Json com os dados lidos String createJsonString () {String data = "{"; dados + = "\" d / ": {"; dados + = "\" temperatura / ":"; dados + = String (temperatura); dados + = ","; dados + = "\" umidade / ":"; dados + = String (umidade); dados + = "}"; dados + = "}"; dados de retorno; }

Etapa 10: Gráfico

Gráfico
Gráfico
Gráfico
Gráfico

Para visualizar o gráfico do sensor, vá

para

No campo ID do dispositivo, insira o DEVICE_ID que você definiu no código.

- É importante alterar este ID do dispositivo para um ID único, usado apenas para evitar conflito com dados enviados por outra pessoa.

Por fim, aceite os termos e clique em Ir.

Neste projeto, testamos nosso Endpoint no servidor IBM Watson. Isso garante que nosso programa Arduino esteja se comunicando corretamente com a plataforma e que os dados que enviamos serão recebidos sem problemas por um serviço de nuvem se criarmos uma conta.

Em um próximo vídeo desta série, mostrarei como fazer login no IBM Watson, bem como escrever no banco de dados deste ou de outro serviço em nuvem, como Google, Amazon, entre outros.

Etapa 11: Arquivos

Baixe os arquivos:

PDF

EU NÃO

Recomendado: