Estação meteorológica online baseada em MicroPython em ESP8266 e ESP32

MicroPython é um dos melhores firmwares de microcontrolador que suporta uma variedade de plataformas embarcadas. As placas de desenvolvimento WiFi como ESP8266 e ESP32 estão entre as portas suportadas por MicroPython. Com o MicroPython, é extremamente simples implementar aplicativos IoT de alto nível. MicroPython tem amplo suporte para programação de rede junto com a implementação de todas as funções básicas de hardware. Ele combina suporte de hardware de baixo nível com recursos de programação de alto nível, que os ecossistemas de microcontroladores baseados em C incorporados geralmente não possuem. Além disso, a sintaxe Python torna a programação incorporada super simples, limpa e precisa.

Neste projeto, desenvolveremos uma estação meteorológica online configurada em ESP8266/ESP32. O projeto utiliza ESP8266 como microcontrolador, obtendo leituras de sensores do DHT-11 e, ao mesmo tempo, se beneficia das funções de programação de rede do MicroPython para conectar e operar dentro de uma rede IoT. Esta estação meteorológica funciona dentro dos limites de uma LAN sem fio e transmite temperatura e umidade como um servidor TCP funcional dentro da rede.

Pré-requisitos
Antes de continuar, você deve ter configurado o uPyCraft IDE ou Thonny IDE como ambiente de desenvolvimento de software. Além disso, você deve ter carregado o firmware MicroPython para ESP8266/ESP32. Você pode encontrar um guia para ambas as tarefas neste link. Para fazer este projeto, você deve saber como conectar o ESP8266/ESP32 a uma rede WiFi usando MicroPython. Você também precisa saber como configurar o ESP8266/ESP32 como um servidor MicroPython TCP.

Componentes necessários

  1. ESP8266/ESP32 x1
  2. Cabo USB para conectar ESP ao computador
  3. DHT11 x1
  4. Tábua de ensaio x1
  5. Conectando fios/fios de jumper
  6. Computador/Celular x1

Conexões de circuito
Neste projeto, ESP8266/ESP32 atua como um servidor TCP hospedando uma página HTML simples. O sensor DHT11 tem interface com ESP8266/ESP32. O quadro lê a temperatura e a umidade do DHT11 e publica as leituras na página hospedada. As conexões do circuito são necessárias apenas para fazer a interface do DHT11 com o ESP8266/ESP32. DHT11 tem o seguinte diagrama de pinos.

Para saber mais sobre o sensor DHT11, confira este tutorial do Arduino. Para fazer a interface do DHT11 com o ESP8266, conecte os pinos VCC e GND do DHT11 com 3V e GND do ESP8266. Conecte o pino de dados do DHT11 com qualquer GPIO do ESP8266. Neste projeto, o pino de dados do DHT11 está conectado ao GPIO14 (D5) do ESP8266. O pino de dados é elevado conectando um resistor de 10K entre a saída de dados e o VCC.

Se ESP32 for usado, D14 é o GPIO14 no ESP32. ESP32 terá as seguintes conexões de circuito.

Após as conexões do circuito, o servidor TCP ESP8266 ficaria da seguinte forma.

Script MicroPython

Como funciona o projeto
Esta estação meteorológica online baseada em ESP8266/ESP32 lê a temperatura e a umidade do sensor DHT11 e publica as leituras em uma página da web em tempo real. A página é hospedada pelo próprio ESP8266/ESP32, para o qual a placa está configurada como um servidor TCP. A página pode ser acessada por qualquer dispositivo, computador ou celular que possua navegador para acessar a internet através do protocolo HTTP. A página da web é hospedada localmente na LAN sem fio, portanto, apenas dispositivos conectados à mesma conexão WiFi podem acessar a página da web.

O funcionamento do projeto é simples. A placa lê a temperatura e a umidade do DHT11 usando o módulo DHT integrado do MicroPython. A placa se conecta a uma conexão WiFi disponível usando o módulo de rede do MicroPython. Para hospedar uma página web e operar como um servidor TCP, é utilizado o módulo socket do MicroPython. ESP8266/ESP32 lê temperatura e umidade e incorpora as leituras na página da web. A página da web é retornada como uma resposta HTTP para qualquer dispositivo que acesse o endereço IP do host local.

O código
O código começa com a importação de um módulo usocket. Caso um módulo usocket não esteja disponível, o módulo soquete padrão é importado. Em seguida, o módulo de rede, a classe de pinos do módulo da máquina e o módulo dht são importados. O módulo de rede é usado para conectar-se a uma conexão WiFi. A classe de pinos do módulo da máquina é usada para interagir com o sensor DHT11. O módulo dht é usado para obter leituras do DHT11. O módulo esp é importado e os erros no nível do sistema operacional são suprimidos chamando o método esp.osdebug(None). O módulo gc é importado e a coleta de lixo é habilitada chamando o método gc.collect . Isso libera recursos do microcontrolador (RAM) assim que variáveis ​​e objetos não são utilizados.

O SSID e a chave de rede da conexão WiFi disponível são armazenados nas variáveis ​​SSID e senha. Você precisará substituir o SSID e a senha do WiFi pelo SSID e a chave de rede da sua própria conexão WiFi nas linhas de código a seguir.

ssid = 'SSID'
senha = 'SENHA'

Um objeto classe network.WLAN é instanciado, configurando o ESP8266/ESP32 como uma estação WiFi. O ESP8266/ESP32 como estação WiFi é ativado chamando o método station.active . A placa é conectada a uma conexão WiFi disponível chamando o método station.connect . A conexão com a rede WiFi é verificada pelo método de chamada station.isconnected . Após uma conexão bem-sucedida com a rede WiFi, uma mensagem é impressa no console e os parâmetros de configuração de nível IP também são impressos no console pelo método de chamada station.ifconfig . O primeiro parâmetro de nível IP impresso no console é o endereço IP da estação ESP8266/ESP32.

Um sensor variável é declarado para instanciar o objeto da classe DHT. As variáveis ​​temp e hum são declaradas para armazenar leituras de temperatura e umidade. Uma função definida pelo usuário read_dht é definida para obter leituras de temperatura e umidade do DHT11. A função chama o método Measure para obter leituras do sensor DHT11. Ele usa os métodos de temperatura e umidade para obter valores de temperatura e umidade, respectivamente, como flutuante ou inteiro. Os valores de temperatura e umidade são retornados nas variáveis ​​globais temp e hum, respectivamente.

Uma função definida pelo usuário web_page é definida para retornar uma página HTML com valores de temperatura e umidade armazenados nas variáveis ​​globais temp e hum incorporadas na página HTML. Um objeto da classe socket é instanciado e configurado para usar endereço IPv4 e TCP para protocolo da camada de rede. O objeto é vinculado ao endereço localhost usando o método bind e ativado para escutar clientes TCP chamando o método listen .

Um loop while infinito é iniciado. No loop, o servidor TCP ESP8266/ESP32 é configurado para aceitar solicitações HTTP de clientes TCP da mesma rede WiFi chamando o método s.connect . As solicitações HTTP de um cliente TCP conectado são armazenadas em uma solicitação variável chamando o método conn.recv . A mensagem contendo leituras de temperatura e umidade é impressa no console, e a página da web contendo os valores de temperatura e umidade incorporados é retornada como resposta chamando os métodos conn.send e conn.sendall . Após retornar a página da web como resposta, a conexão com o cliente TCP é explicitamente fechada chamando o método conn.close .

Resultado
A página web com leituras de temperatura e umidade do sensor DHT11 é acessada digitando o endereço IP retornado pelo método station.ifconfig na barra de endereço de qualquer navegador. O servidor TCP ESP8266/ESP32 operando como uma estação meteorológica online retorna uma página da web personalizada como resposta a uma solicitação HTTP do navegador do seu computador/celular. A captura de tela a seguir mostra a página retornada pela estação meteorológica online ESP8266/ESP32.

Lembre-se de que a estação meteorológica ESP8266/ESP32 hospeda a página localmente, portanto a página só pode ser acessada por dispositivos conectados à mesma conexão WiFi. ESP8266/ESP32 está usando o endereço IP do host local como o endereço IP do servidor web.

Conteúdo Relacionado

Voltar para o blog

Deixe um comentário

Os comentários precisam ser aprovados antes da publicação.