E ai pessoal tudo bem? é com grande satisfação que escrevo este post para vocês, pois confesso que ele foi um dos que mais gostei de montar, por motivo de utilizar o NodeMCU. Realmente ele é incrível no quesito de praticidade, incluindo o seu tamanho reduzido e a infinidade de aplicações possíveis a serem realizadas com ele. Seguindo o conceito de IoT, decidi criar uma aplicação portátil, para Horta e Estufa Agrícola, permitindo realizar a medições de maneira muito prática de temperatura, umidade relativa do ar e umidade do solo. Você leva a caixinha para o local onde deseja fazer a medição e ainda se houver conexão WiFi disponível ainda poderá enviar estes dados para o Site ThingSpeak, no qual serão gerados os gráficos pertinentes aos sensores. Isto poderá ser bem útil se desejar fazer um trabalho de análise mais aprofundado da sua cultura. Se até o momento não estiver entendendo muito bem do que se trata este post, recomendo que de uma olhada no meu primeiro post sobre o NodeMCU.
Considerações
Importantes
Para
a criação deste Monitor Portátil levei em consideração o
material já abordado nos outros posts e o uso de material reciclado
para viabilizar o custo. Utilizei uma caixa plástica de módulo de
carro que estava nos meus materiais reciclados para uso, de tamanho:
10 cm de comprimento, 7,5 cm de largura e 4,5 cm de altura.
Tirei
a medida do LCD16x2, fiz um pequeno gabarito para fazer o recorte em
uma das tampas da caixinha. Perfurei o desenho do gabarito já
riscado na tampa, que posteriormente permitiu o encaixe do
display.
Toda
a eletrônica deve ficar dentro da caixa com exceção os sensores
DHT11 e o Higrometro.
Para
a alimentação do sistema utilizei uma bateria de 3,7 V e 500 mA,
retirada de um rastreador veicular. Para alimentar o NodeMCU fiz a ligação do pino “VIN” no fio POSITIVO da
bateria e o “GND” no fio NEGATIVO da bateria.
Decidi
usar esta bateria por motivo de seu tamanho reduzido e sua autonomia
muito boa. Mas também poderá alimentar com baterias recarregáveis,
três (3) são ideais.
Uma
protoboard daquelas “mini” é ideal para organizar as
alimentações.
O
detalhe mais importante é acomodar toda a eletrônica de forma mais
organizada possível, para depois se necessário fazer alguma
manutenção ou mesmo retirar as baterias para recarregar.
Testando a Montagem
Montagem Eletrônica
Enviando os Dados para ThingSpeak
Para o envio das informações dos sensores para o ThingSpeak é necessário a criação de um Canal com os campos necessários para cada sensor. No nosso caso utilizamos três (3) campos: Temperatura, Umidade do Ar e Umidade do Solo. Após a criação pegue o "Write API Key" gerado pelo seu Canal e insira no seu código no NodeMCU na String " apiKey ", através da IDE do Arduino.
Testes Finais
Acesse: ThingSpeak
Baixe o Código: Webestufa-NodeMCU_Monitor
Referência do Código Fonte: https://www.instructables.com/id/Esay-IoT-Weather-Station-With-Multiple-Sensors/
//www.arduinesp.com
//
// Plot DTH11 data on thingspeak.com using an ESP8266
// April 11 2015
// Author: Jeroen Beemster
// Website: www.arduinesp.com
// Adaptação Display LCD16x2 I2C e Sensor Higrometro: Marcelo | Webestufa
// webestufa.blogspot.com.br
// webestufa.com.br
#include <DHT.h>
#include <ESP8266WiFi.h>
#include <Wire.h> // This library is already built in to the Arduino IDE
#include <LiquidCrystal_I2C.h> //Biblioteca adicioada para utilizar o Display
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3,POSITIVE);
// Insira a sua API key, criada na geração do Canal (Write API Key)
String apiKey = "Sua API key";
const char* ssid = "Nome da sua rede";
const char* password = "Senha da sua rede";
const char* server = "api.thingspeak.com";
#define DHTPIN 2 // SO CONNECT THE DHT11/22 SENSOR TO PIN D4 OF THE NODEMCU
DHT dht(DHTPIN, DHT11,15); //CHANGE DHT11 TO DHT22 IF YOU ARE USING DHT22
WiFiClient client;
void setup() {
Serial.begin(115200);
pinMode(A0,INPUT);
delay(10);
dht.begin();
/*----------- Impressão Serial -----------*/
lcd.begin(16,2); // initializing the LCD
WiFi.begin(ssid, password);
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
}
void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature();
float s = analogRead(A0); // Porta de comunicação com o Sensor de Umidade do Solo (Higrometro)
/*----------- Impressões no LCD 16x2 -----------*/
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("WEBESTUFA"); // Start Print text to Line 1
lcd.setCursor(0, 1);
lcd.print("Horta e Estufa"); // Start Print Test to Line 2
delay(2000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Umidade: ");
lcd.print(h);
lcd.print("%");
lcd.setCursor(0,1);
lcd.print("Temper.:");
lcd.print(t);
lcd.write(B11011111);
delay(3000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Solo: ");
lcd.print(s);
lcd.print(" %");
lcd.setCursor(0,1);
lcd.print("Enviando dados ");
delay(3000);
lcd.clear();
if (isnan(h) || isnan(t) || isnan(s)) { // checa as variáves para envio
Serial.println("Falha na leitura dos Sensores!");
return;
}
if (client.connect(server,80)) { // "184.106.153.149" or api.thingspeak.com
String postStr = apiKey;
// Converte as Variáveis para "String" para serem enviadas para o Canal
postStr +="&field1="; // Alimenta o campo Temperatura para geração do Gráfico
postStr += String(t);
postStr +="&field2="; // Alimenta o campo Umidade para geração do Gráfico
postStr += String(h);
postStr +="&field3="; // Alimenta o campo Umidade do Solo para geração do Gráfico
postStr += String(s);
postStr += "\r\n\r\n";
client.print("POST /update HTTP/1.1\n");
client.print("Host: api.thingspeak.com\n");
client.print("Connection: close\n");
client.print("X-THINGSPEAKAPIKEY: "+apiKey+"\n");
client.print("Content-Type: application/x-www-form-urlencoded\n");
client.print("Content-Length: ");
client.print(postStr.length());
client.print("\n\n");
client.print(postStr);
Serial.print("Temperatura: ");
Serial.print(t);
Serial.write(B11011111);
Serial.print(" Umidade relativa do ar: ");
Serial.print(h);
Serial.print(" %");
Serial.print(" Umidade do solo: ");
Serial.print(s);
Serial.println("% send to Thingspeak");
}
client.stop();
Serial.println("Waiting…");
// thingspeak needs minimum 15 sec delay between updates
delay(20000);
}