Bom dia a todos !!
Bom gente, primeiramente gostaria de agradecer à atenção de vocês adiantado.
Estou desenvolvendo um projeto bem simples de uma estação meteorológica independente, que funcione sem a necessidade de estar conectada via cabo à um pc ou à rede elétrica e meça 4 variáveis, umidade do ar, temperatura ambiente, pressão e nível de fumaça. A aquisição dos dados do sensores é feita pelo Arduino Mega 2560 e em conjunto com o ESP8266 NodeMCU as informações dos sensores precisam navegar do arduino até um "sistema de supervisão", seja telegram ou até mesmo um webserver, via Wireless (essa é a única restrição do projeto, não pode ser via cabo). Porém, estou enfrentando um problema na hora de comunicar o arduino com o ESP8266 NodeMCU na hora de transferir os dados dos sensores pra ele. Estarei copiando o meu código aqui e espero que possam me dar uma sugestão e uma dica para que meu trabalho fique mais simples, prático e funcional possível.
PS: Estou usando para realizar a transferência entre o Arduino e o ESP8266 NodeMCU a biblioteca VirtualWire como se estivesse usando RF.
Segue o código:
/*Programa : Estação de monitoramento ambiental Green Engineering
*/
// Configuração Módulo Wireless ESP8266
//#include <ESP8266WiFi.h>
//#include <WiFiUdp.h>
//WiFiUDP udp;
//String req;
// Configuração DHT11 (Umidade e Temperatura)
#include <VirtualWire.h>
#include <dht.h>
#define dht_dpin A1 //pino DATA do Sensor ligado na porta analógica A1
dht DHT; // Inicializa o Sensor
// Auxiliares de armazenamento
String mensagem;
int transmissor = 5;
int temp = 0;
char t[2];
int umid = 0;
char u[2];
int fuma_d = 0;
int fuma_a = 0;
char f[5];
int pres = 0;
char p[5];
// Configuração MQ-2 (Fumaça)
// Definicoes dos pinos dos leds e buzzer
int pin_led_verm = 7;
int pin_led_verde = 8;
int pin_buzzer = 6;
// Definicoes dos pinos ligados ao sensor
int pin_d0 = 2;
int pin_a0 = A2;
int nivel_sensor = 250;
// Configuração BMP180 (Pressão Barométrica)
#include <Wire.h>
#include <Adafruit_BMP085.h>
Adafruit_BMP085 bmp180;
int mostrador = 0;
void setup() {
//WiFi.mode(WIFI_STA);
//WiFi.begin("Joao", "10256331");
//delay(2000); //Tempo de espera para se conectar
//udp.begin(736); //Abre a parte para "ouvir" os pacotes udp, a escolhida foi a 736.
//sendudp();
Serial.begin(9600);
pinMode(transmissor,OUTPUT);
vw_set_tx_pin(5);
vw_setup(2000); // Bits per sec
delay(1000); //Aguarda 1 segundo antes de acessar as informações do sensor
// Setup do Sensor BMP180
if (!bmp180.begin())
{
Serial.println("Sensor nao encontrado !!");
while (1) {}
}
// Setup do Sensor de Fumaça MQ-2
// Define os pinos de leitura do sensor como entrada
pinMode(pin_d0, INPUT);
// Define pinos leds e buzzer como saida
pinMode(pin_led_verm, OUTPUT);
pinMode(pin_led_verde, OUTPUT);
pinMode(pin_buzzer, OUTPUT);
}
void loop() {
//Envio das informações WiFi
//readudp();
// Leitura do sensor de Umidade e temperatura
DHT.read11(dht_dpin); // Lê as informações do sensor
Serial.print("Umidade = ");
Serial.print(DHT.humidity);
Serial.print(" % ");
umid = DHT.humidity;
String umidade;
umidade = String(umid);
umidade.toCharArray(u,2);
Serial.print("Temperatura = ");
Serial.print(DHT.temperature);
Serial.println(" Celsius ");
temp = DHT.temperature;
String temperatura;
temperatura = String(temp);
temperatura.toCharArray(t,2);
delay(1000);
// Leitura do sensor de Fumaça
// Le os dados do pino digital D0 do sensor
int valor_digital = digitalRead(pin_d0);
// Le os dados do pino analogico A0 do sensor
int valor_analogico = analogRead(pin_a0);
// Mostra os dados no serial monitor
Serial.print("Pino_D0 : ");
Serial.print(valor_digital);
fuma_d = valor_digital;
Serial.print(" Pino A0 : ");
Serial.println(valor_analogico);
fuma_a = valor_analogico;
String fumaca;
fumaca = String(fuma_a);
fumaca.toCharArray(f,5);
// Verifica o nivel de gas/fumaca detectado
if (valor_analogico > nivel_sensor)
{
// Liga o buzzer e o led vermelho, e
// desliga o led verde
digitalWrite(pin_led_verm, HIGH);
digitalWrite(pin_led_verde, LOW);
digitalWrite(pin_buzzer, HIGH);
}
else {
// Desliga o buzzer e o led vermelho, e
// liga o led verde
digitalWrite(pin_led_verm, LOW);
digitalWrite(pin_led_verde, HIGH);
digitalWrite(pin_buzzer, LOW);
delay(1000);
}
//Leitura do Barômetro
Serial.print("Pressao : ");
Serial.print(bmp180.readPressure());
pres = bmp180.readPressure();
String pressao;
pressao = String(pres);
pressao.toCharArray(p,5);
Serial.println(" Pa");
delay(1000);
char data[40];
data[40] = 0;
Serial.print(data);
//Envia a mensagem para a rotina que
//transmite os dados via RF
send(data);
}
void send (char *message)
{
vw_send((uint8_t *)message, strlen(message));
vw_wait_tx(); // Aguarda o envio de dados
}