Comunicação serial do Arduino com Esp8266 Esp-01

Gostaria de uma ajuda.

Estou montado um sistema que tem como objetivo enviar dados em tempo real para a plataforma iot do site thingspeak.com, já estou enviando dados de temperatura sem problema, só que estou usando um Arduino uno onde está conectado um sensor de temperatura e umidade dai estou enviando os dados de temperatura via serial para o modulo Esp8266 Esp-01 só que eu preciso enviar o valor da umidade também, mas não sei com enviar a temperatura e a umidade e depois recuperar o valor passado pela serial para o modulo Esp8266 Esp-01.

Se alguém puder me ajudar agradeço.

Arduino uno (Transmissor)

#include <dht.h>
#include <SoftwareSerial.h> // Biblioteca SoftwareSerial

//defines gerais
#define dht_dpin 4      //pino do Arduino que está conectado ao pino de dados do sensor
//#define DHTTYPE DHT22  //estabelece que o sensor utilizado é o DHT22 (é possível selecionar entre DHT11, DHT22 e DHT21)
#define TEMPO_LEITURA_SENSOR  1000  //tempo entre leituras de temperatura

//variáveis globais
dht DHT; //Inicializa o sensor
SoftwareSerial comunicacaoESP(2, 3); // objeto para comunicação serial com o ESP8266 nas Portas 2(RX) e 3(TX)

//Função setup (inicializações do programa)
void setup()
{
  Serial.begin(9600);
  Serial.println("======Leitor de temperatura======");
  comunicacaoESP.begin(9600); // inicia a comunicação serial com o ESP8266

  //inicia a comunicação com o sensor DHT22
  //dht.begin();
}

//loop (programa principal)
void loop()
{
 
   DHT.read11(dht_dpin); //Lê as informações do sensor
   float h = DHT.humidity;
   
 
 
  float TemperaturaLida;

  //le a temperatura (em graus Celsius)
  TemperaturaLida = DHT.temperature;

  //checa se a leitura da temperatura foi bem sucedida ou não
  if (isnan(TemperaturaLida)) {
    Serial.println("- Falha ao ler a temperatura medida pelo sensor DHT22");
    comunicacaoESP.println('0'); // caso o valor seja nulo ou indefinido, o valor '0' é enviado para o ESP
  } else
  {
    Serial.print("- Temperatura: ");
    Serial.print(TemperaturaLida);
    Serial.println("C");
    comunicacaoESP.println(TemperaturaLida); // envio do valor da temperatura para o módulo ESP
  }

  delay(TEMPO_LEITURA_SENSOR);

}

Modulo Esp8266 Esp-01 (Receptor)

#include <ESP8266WiFi.h>  //essa biblioteca já vem com a IDE. Portanto, não é preciso baixar nenhuma biblioteca adicional

//defines
#define SSID_REDE "Sua rede"  //coloque aqui o nome da rede que se deseja conectar
#define SENHA_REDE "sua senha"  //coloque aqui a senha da rede que se deseja conectar
#define INTERVALO_ENVIO_THINGSPEAK  10000  //intervalo entre envios de dados ao ThingSpeak (em ms)





#define TEMPO_LEITURA_SENSOR  1000  //tempo entre leituras de temperatura

String postStr;
//constantes e variáveis globais
char EnderecoAPIThingSpeak[] = "api.thingspeak.com";
String ChaveEscritaThingSpeak = "Sua Chave do thingspeak";
long lastConnectionTime;
String temp = "";

WiFiClient client;
 
//prototypes
void EnviaInformacoesThingspeak(String StringDados);
void FazConexaoWiFi(void);
// Prototypes das funções utilizadas no decorrer do Firmware
void readData();
void initSerial();



float FazLeituraUmidade(void);



//le dados da serial
void readData() {
  if (Serial.available()) {
    String temp = "";
    while (Serial.available()) {
      char c = (char)Serial.read();
      if (c != '\n') {
        temp += c;
      }
      delay(10);
    }

          String payload ;
          payload += temp;

    char payloadChar[payload.length()];
    payload.toCharArray(payloadChar, payload.length() + 1); // Converte a String para Char Array
    // Publica no tópico EMCOL todas as informações contidas na variável payload.
    //Serial.println(payloadChar);
       
       
       if (client.connect(EnderecoAPIThingSpeak, 80)) {         
          
 
           postStr = ChaveEscritaThingSpeak;
           postStr +="&field1=";
           postStr += String(payloadChar);
           //postStr +="&field2=";
           //postStr += String(h);
           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: "+ChaveEscritaThingSpeak+"\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("Temperature: ");
     Serial.println(payloadChar);
     
     //Serial.println("%. Send to Thingspeak.");
    }
   
    
  }
}

 
/*
 * Implementações
 */
 
//Função: envia informações ao ThingSpeak
//Parâmetros: String com a  informação a ser enviada
//Retorno: nenhum
void EnviaInformacoesThingspeak(String StringDados)
{
   
         
    
        
}
 
//Função: faz a conexão WiFI
//Parâmetros: nenhum
//Retorno: nenhum
void FazConexaoWiFi(void)
{
    client.stop();
    Serial.println("Conectando-se à rede WiFi...");
    Serial.println();  
    delay(500);
    WiFi.begin(SSID_REDE, SENHA_REDE);
 
    while (WiFi.status() != WL_CONNECTED)
    {
        delay(500);
        Serial.print(".");
    }
 
    Serial.println("");
    Serial.println("WiFi connectado com sucesso!");  
    Serial.println("IP obtido: ");
    Serial.println(WiFi.localIP());
 
    delay(500);
}
 
/
void setup()
{  
    Serial.begin(9600);
    lastConnectionTime = 0;
    FazConexaoWiFi();
    Serial.println("Planta IoT com ESP8266 NodeMCU");
    initSerial();
}

// Função para iniciar a comunicação serial
void initSerial() {
  Serial.begin(9600);
}

 
//loop principal
void loop()
{
   
     
    //Força desconexão ao ThingSpeak (se ainda estiver desconectado)
    if (client.connected())
    {
        client.stop();
        Serial.println("- Desconectado do ThingSpeak");
        Serial.println();
        temp = "";
    }
 
    readData();
    
    
    
     
    //verifica se está conectado no WiFi e se é o momento de enviar dados ao ThingSpeak
    if(!client.connected() && (millis() - lastConnectionTime > INTERVALO_ENVIO_THINGSPEAK)){
        
        EnviaInformacoesThingspeak(postStr);
    }
    
 
     delay(1000);

Exibições: 4946

Anexos

As respostas para este tópico estão encerradas.

Respostas a este tópico

sim poderia usar somente o ESP8266, só que vou utilizar  mais sensores e este modelo  do  ESP8266 não tem pinos suficientes.

Mais Obrigado.

Valeu.

   

Uma dica: junte todos os dados que quer enviar em uma unica string no arduino e envie  para o esp. Despois vc separa elas em suas respectivas variáveis:

http://labdegaragem.com/forum/topics/como-desmontar-uma-string

era isso mesmo que eu precisava.

Muito obrigado, me ajudou muito.

Valeu.

De nada. Faça seus testes e se der certo coloque como resolvido no titulo do tópico.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço