domingo, 5 de março de 2017

Webestufa & NodeMCU & ThingSpeak – Monitor Portátil


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 












 
 //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);
}







Nenhum comentário:

Postar um comentário