Conectando o MHZ19 ao Esp32
Nas últimas sessões, revisamos alguns sensores de CO2, o CCS811 e o MH-Z19, para ver como ler suas medições de modelos como o Arduino MEGA e o NodeMCU. O passo natural agora é pular para publicar esses resultados na nuvem para poder gravá-los e visualizá-los graficamente para analisar esses dados confortavelmente.
Normalmente a ideia seria configurar um servidor MQTT para ele, mas o nível de complicação para usuários não especialistas em tal configuração é bastante alto e tende a diminuir muito o interesse de não especialistas e é por isso que uma solução simples era essencial para poder proporcionar facilidades aos novatos, que não necessitavam da complicação do MQTT (Ao qual voltaremos, não hesite)
Mas para fazer upload de dados para a nuvem vamos precisar de um processador com o ESP32 que até agora tínhamos esquecido com os sensores de CO2 e por isso esta sessão vai conectar o ESP32 ao MH-Z19
Conteudo
ESP32 E MH-Z19
- Vamos conectar o MH-Z19 com o ESP32.
- Faremos o download das bibliotecas SoftwareSerial e MHZ19 uart.
- Discutiremos o programa necessário.
Material Necessário
- ESP32
- Sensor HX-Z19
- ProtoBoard
Usando o Mh-Z19 com o Esp32
Até agora usamos um NodeMCU e um Arduino MEGA, para ler os valores do sensor MHZ19 e agora pretendo usar um ESP32 para fazer o mesmo (Relaxe, será uma breve nota)
Por que usar ESP32? Principalmente porque é um SOC ideal para tudo o que estamos fazendo, mas também porque vamos iniciar uma série de tutoriais para ver como podemos publicar as leituras de um sensor na nuvem e a combinação de sensor de CO2 e ESP32 é uma vitória aposta, mas tenha em mente que, como você verá imediatamente, seria exatamente o mesmo, usando qualquer outro sensor.
Para aqueles que estão trabalhando em projetos de leitura de CO2, este tutorial será útil, e para aqueles que estão usando qualquer outro sensor, as mudanças são mínimas e as mesmas se ao invés de usar um ESP32 você quiser usar um NodeMCU . Deve funcionar sem modificação.
Começaremos analisando as conexões e a programação com mais detalhes para ler o MHZ19 com o ESP32 e depois veremos como publicar as leituras em um sistema em nuvem, para o qual escolhemos o sistema Adafruit IO.
Para os frequentadores dessas páginas, Adafruit será um nome familiar porque usamos suas bibliotecas em muitas ocasiões, mas há muitas razões para levá-lo a usar seu sistema:
- Adafruit é muito bom para todos os entusiastas do Arduino, publicando bibliotecas e tutoriais sem nenhum custo para nós.
- Eles nos permitem publicar acessando um servidor MQTT (falaremos mais tarde), mas para os menos técnicos, acessar pelo sistema Adafruit IO elimina todo o jargão técnico e torna o processo muito simples.
- É gratuito para valores baixos e testes (com algumas limitações) e possui licença paga caso você precise coletar vários sensores em um único lançamento, por pouco dinheiro.
- Oferece-lhe uma visualização a partir da web (Via PC ou mobile) para ver os resultados de uma forma muito simples.
Então esta sessão vai desenvolver uma prática com o ESP32 e o sensor MH-Z19 e depois ver como publicamos o resultado em um servidor em nuvem.
ESP32 com sensor de CO2 MH-Z19
Começamos pelas conexões:
ESP32 | 27 | 25 | GND | 3,3 V |
---|---|---|---|---|
MH-Z19 | RX | TX | GND | Vin |
Embora o ESP32 tenha várias portas COM disponíveis, elas estão me dando problemas, então preferi usar a biblioteca SoftwareSerial, que permite definir uma porta serial em qualquer par de pinos sem complicações e depois conectar o sensor de CO2 lá.
Vamos começar baixando e instalando a biblioteca pelo procedimento usual: MH-Z19) , e pressione o botão verde que diz código:
Então faça como de costume:
E escolha a biblioteca que você acabou de baixar:
Ao clicar em Abrir, a biblioteca será instalada em seu ambiente Arduino. Para instalar o SoftwareSerial, vamos usar o gerenciador de bibliotecas:
E agora escreva espSoftwareSerial e, assim que a biblioteca procurar por você, clique em instalar:
O programa é muito simples a partir daqui:
#include <SoftwareSerial.h> #include <MHZ19.h>
Começamos com as bibliotecas necessárias e agora definimos os pinos da porta serial:
#define RXD2 25 #define TXD2 27
E finalmente criamos uma instância de MHz19:
MHZ19 mhz(&Serial2);
Onde Serial2 é um ponteiro para a porta COM que definiremos um pouco mais tarde. Vamos com o Setup()
void setup() { Serial.begin(9600); Serial.println("Starting...") ; Serial2.begin(9600, SERIAL_8N1, RXD2, TXD2); }
A única coisa que interessa é a criação da porta Serial2 com os parâmetros solicitados pelo sensor MHZ19 e podemos continuar com o loop:
void loop() { MHZ19_RESULT response = mhz.retrieveData(); if (response == MHZ19_RESULT_OK) { Serial.print(F("CO2: ")); Serial.println(mhz.getCO2()); //Serial.print(F("Temperature: ")); //Serial.println(mhz.getTemperature()); } else { Serial.print(F("Error, code: ")); Serial.println(response); } delay(1000); }
No loop invocamos a linha:
MHZ19_RESULT response = mhz.retrieveData();
Isso é necessário para recuperar os dados do sensor e associá-los a uma instância de leitura do MHZ19 chamada resposta. Se você não inserir esta linha, o sensor não iniciará a leitura dos dados. Se a resposta for satisfatória, podemos agora usar a função
mhz.getCO2();
Que é aquele que lê o valor de CO2 ambiente. Finalmente, um atraso de um segundo, que não é longo e em um caso real, você pode querer aumentar muito mais esse tempo.
Aqui está o programa completo: Código