hola de nuevo, ya conseguí subir los datos del ds18b20 a thingspeak, luego al código también le añadido el sensor dht22 para temperatura y humedad, mi idea es en el mismo canal de thingspeak tener estos 3 tres campos ( se puede hasta 8 campos por canal ), pero solo me registra el primer campo, el del sensor ds18b20. Los otros dos si hubo una vez que me registraron 7 u 8 valores pero nada, fue un momento muy corto, me hice una nueva cuenta con otro canal distinto y seguía haciendo lo mismo, por monitor serial si me aparecen los tres valores.... les dejo el código por si me falta algo o se me a pasado algo....muchas gracias de antemano !!
#include <DHT.h>
#include <ThingSpeak.h>
#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define DHTPIN 3
#define DHTTYPE DHT22
#define oneWireBus
DHT dht(DHTPIN, DHTTYPE);
#define ONE_WIRE_BUS 2
int oneWirePin = 2;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensor(&oneWire);
byte W5100_MacAddress[] = {0xFE, 0xB6, 0xDC, 0xD3, 0xDD, 0xC4}; // Mac address, tiene que ser única en la red local
IPAddress ip(192,168,100,7); // Dirección de ip, Al principio vamos a tratar de obtener una dirección por DHCP pero si no funciona usamos esta configuración.
IPAddress gateway(192,168,100,1); // Gateway - Puerta de enlace
IPAddress subnet(255, 255, 255, 0); // Mascara de red
char thingSpeakAddress[] = "api.thingspeak.com"; // Esta es la dirección del servidor al cual vamos a postear los datos.
const char * Write_API_Key = "8C0VMBM31J81JJVS"; // Una vez creado un canal necesitamos saber la Key de ese canal y copiarla aquí.
int Channel_Field1 = 1;
int Channel_Field2 = 2;
int Channel_Field3 = 3;
unsigned long Channel_Number = 337865;
// Iniciamos el Ethernet Shield
EthernetClient client;
void setup() {
Serial.begin(9600);
dht.begin();
sensor.begin();
Serial.println("Prueba ds18b y dht22");
// Connect to local network and internet
// Connect to local network and internet
Ethernet.begin(W5100_MacAddress);
Serial.println();
Serial.print("W5100 IP Address: ");
Serial.println(Ethernet.localIP());
Serial.print("W5100 Subnet Mask: ");
Serial.println(Ethernet.subnetMask());
Serial.print("W5100 Gateway: ");
Serial.println(Ethernet.gatewayIP());
Serial.println();
// Connect to Thingspeak server
if (ThingSpeak.begin(client))
// Connect to Thingspeak server
if (ThingSpeak.begin(client))
{
Serial.println();
Serial.println("Connect to Thingspeak Server...");
Serial.println();
}
else
{
Serial.println();
Serial.println("Failed to connect to Thingspeak Server!!!");
Serial.println();
}
}
void loop() {
// sensor dht22
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Error al Leer Sensor DHT¡");
return;
}
// sensor ds18b20
int lectura = digitalRead(oneWirePin);
float temp = sensor.getTempCByIndex(0);
Serial.print("Temperatura en ds18b20: ");
Serial.print(temp);
Serial.println(" *C ");
sensor.requestTemperatures();
Serial.print("Humedad en dht22: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperatura en dht22: ");
Serial.print(t);
Serial.println(" *C ");
//Mostramos la información obtenida (temperatura y humedad) en el Monitor Serial
//El \t es equivalente al tabulador (separa los datos)
//El Serial.prinln nos cambia de linea en la siguiente lectura recibida
// Write the temperature to Thingspeak Server
if(ThingSpeak.writeField(Channel_Number, Channel_Field1, temp, Write_API_Key))
if(ThingSpeak.writeField(Channel_Number, Channel_Field2, t, Write_API_Key))
if(ThingSpeak.writeField(Channel_Number, Channel_Field3, h, Write_API_Key))
{
Serial.println();
Serial.println("Uploading data to Thingspeak Server...");
Serial.println();
}
else
{
Serial.println();
Serial.println("Failed to upload data to Thingspeak Server!!!");
Serial.println();
}
delay (30000);
}