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);
Tags:
As respostas para este tópico estão encerradas.
Use somente o ESP8266, esqueça do Arduino.
https://www.youtube.com/watch?v=3LjNP-tKnUk
https://www.youtube.com/user/kwiekbrasil/videos
Abs.
CK
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.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por