He avanzado en la programación para conectar mis dos dispositivos, pero me he encontrado con trabas y creo que son errores míos. De un par de páginas y vídeos he encontrado dos sketch de programación que me han servido, creo, momentáneamente, pero algo ha pasado que ya no me andan.
Se trata de dos sketch, uno para Arduino UNO y otro para NodeMCU v1.0. Anticipo que estoy usando DHT11, sensores de humedad a tierra y LDR's, pero para esta etapa, he suprimido algunos y una vez que los tenga funcionando (entiéndase funcionando como: enviando datos de Arduino y NodeMCU hacia un servidor web), seguir colocando sensores ya que necesito más.
Se los adjunto:
Codigo Arduino
#include "DHT.h"
#define DHTPIN1 2
#define DHTPIN2 3
#define DHTPIN3 4
#define sensor A0
#define LDR A1
#define DHTTYPE DHT11
DHT dht1(DHTPIN1, DHTTYPE);
DHT dht2(DHTPIN2, DHTTYPE);
DHT dht3(DHTPIN3, DHTTYPE);
// Serial Data Transmision
char Data[26];
void setup() {
Serial.begin(9600);
dht1.begin();
dht2.begin();
dht3.begin();
pinMode(sensor, INPUT);
pinMode(LDR, INPUT);
}
long tiempoUltimaLectura=0;; //Para guardar el tiempo de la última lectura
void loop() {
if(millis()-tiempoUltimaLectura>15000)
{
float h1 = dht1.readHumidity(); //Leemos la Humedad
float t1 = dht1.readTemperature(); //Leemos la temperatura en grados Celsius
float h2 = dht2.readHumidity(); //Leemos la Humedad
float t2 = dht2.readTemperature(); //Leemos la temperatura en grados Celsius
float h3 = dht3.readHumidity(); //Leemos la Humedad
float t3 = dht3.readTemperature(); //Leemos la temperatura en grados Celsius
int valorHumedad = map(analogRead(sensor), 0, 1023, 100, 0);
float ValorLDR = (analogRead(LDR)*5.0)/1023.0; //Valor digital de la diferencia de potencial
//--------Enviamos las lecturas por el puerto serial-------------
/*Serial.print("Humedad_1 ");
Serial.print(h1);
Serial.print(" %t");
Serial.print("Temperatura_1: ");
Serial.print(t1);
Serial.println(" *C ");
Serial.print("Humedad_2 ");
Serial.print(h2);
Serial.print(" %t");
Serial.print("Temperatura_2: ");
Serial.print(t2);
Serial.println(" *C ");
Serial.print("Humedad_3 ");
Serial.print(h3);
Serial.print(" %t");
Serial.print("Temperatura_3: ");
Serial.print(t3);
Serial.println(" *C ");
*/
char str_temp1[5];
char str_temp2[5];
char str_temp3[5];
char str_temp4[5];
dtostrf(((h1+h2+h3)/3), 3, 0, str_temp1);
dtostrf(((t1+t2+t3)/3), 2, 1, str_temp2);
dtostrf(valorHumedad, 2, 0, str_temp3);
dtostrf(ValorLDR, 2, 1, str_temp4);
sprintf(Data, "H:%s,T:%s,HT:%s,V:%s\n",str_temp1,str_temp2,str_temp3,str_temp4);
Serial.print(Data);
digitalWrite(13,~digitalRead(13));
/*Serial.print("H:");
Serial.print("%s",((h1+h2+h3)/3));
Serial.print("Promedio temperatura: ");
Serial.print((t1+t2+t3)/3);
Serial.print("Humedad_Tierra: ");
Serial.print(valorHumedad);
Serial.println("%");
Serial.print("Voltaje: ");
Serial.println(ValorLDR);
*/
tiempoUltimaLectura=millis(); //actualizamos el tiempo de la última lectura
}
}
Sketch NodeMCU
#include <ESP8266WiFi.h>
#include <SoftwareSerial.h>
SoftwareSerial ARD_ESP(2, SW_SERIAL_UNUSED_PIN); // RX, TX
String apiKey = "apidelapagina";
const char* ssid = "nombrewifi";
const char* password = "clavewifi";
const char* server = "api.thingspeak.com";
WiFiClient client;
void setup() {
Serial.begin(115200);
ARD_ESP.begin(9600);
delay(10);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED){
delay(500);
Serial.print(".");
}
Serial.println("WiFi connected");
}
void loop() {
int i;
static char data1=0,data2=0,data3=0;
static char Data_recibido[25];
if(ARD_ESP.available()>24) {
Serial.println("Recibiendo Datos...");
for(i=0;i<25;i++){
Data_recibido[i]=ARD_ESP.read();
Serial.write(Data_recibido[i]);
}
int Humedad = (((Data_recibido[3]-48)*10) + (Data_recibido[4]-48));
float Temperatura = (((Data_recibido[8]-48)*10) + (Data_recibido[9]-48) + ((Data_recibido[11]-48)*0.1));
int Humedad_T= (((Data_recibido[16]-48)*10) + (Data_recibido[17]-48));
float Luminosidad = ((Data_recibido[21]-48) + ((Data_recibido[23]-48)*0.1));
if (client.connect(server,80)) {
String postStr = apiKey;
postStr +="&field1=";
postStr += String(Humedad);
postStr +="&field2=";
postStr += String(Temperatura);
postStr +="&field3=";
postStr += String(Luminosidad);
postStr +="&field4=";
postStr += String(Humedad_T);
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);
}
client.stop();
}
delay(500);
}
El resultado es que en el MonitorSerie de Arduino estoy visualizando datos, pero en el MonitorSerie de NodeMCU solo tengo signos de interrogación (????...) y en el servidor web ningún dato se observa.