Arduino y thingSpeak

Buenos días amigos, necesito ayuda de como llevar los datos de un arduino a thingSpeak…
Soy nueva en esto de Arduino… pensaba trabajar con un sensor LM35 ACOPLADO aRDUINO y llevar estos datos a ThingSpeak…
No entiendo mucho de programación, ya tengo una cuenta abierta en ThingSpeak y habilite un canal, pero no se que mas hacer, espero me ayude…

Hola buenas! estoy es tu misma situación...llegaste a enconencontrar algún código sencillo para subir datos a thingspeak con los sensores de temperatura??

Thingspeak tiene todos los códigos de ayuda para arduino. No puedes decir

.llegaste a enconencontrar algún código sencillo para subir datos a thingspeak

Estan ahi.

ok gracias! indagare haber si lo puedo agregar, porque si yo tengo un código para leer datos de un dht22 y ds18b20...al introducir el código de thingspeak....no tengo que tocar nada del original??
gracias.

Los ejemplos son genéricos. Agregar algo es solo agregar algo si tienes el criterio para hacerlo.

Si solo estas copiando y pegando no va a funcionar. Entiendes la idea?
Si copias/pegas sin criterio dificilmente logres hacer que funcione.

Ve a Documentación y mira las sugerencias en youtube y otras con libros sugeridos.

ThinkSpeak library para Arduino

Hay un ejemplo que se llama Multiplesvoltages.ino que reescribiéndolo sirve

Sin embargo buscando solo un poco encontré este tutorial Arduino + Ethernet + Thingspeak El Simple IOT
Espero te sirva

Gracias! llevo poco tiempo y lo que quisiera es aprender el porque hay que poner una línea u otra cosa...nonsolo copiar y pegar claro...mas o menos estos dos sensores los controlo un poco, ahora falta la conexión a la plataforma lot.
Lo de patagonianet ya lo había visto...ppr ejemplo donde pone dirección mac, se refiere a la de mi shield Ethernet ( w5100) no?. La Ip se supone que tiene que ser fija, que no debe cambiar no?
gracias por la pronta contestación!

estado revisando el codigo del link que mandaste, le quitado lo referente a los sensores que han utilizado y dejado solo el mio (ds18b20). Por el monitor serie si me muestra la información del sensor pero en el canal de Thingspeak no muestra nada…me debe de faltar algo, pero no doy con lo que falla o falta…espero me echen una mano, muchas gracias

#include <ThingSpeak.h>
#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h>
#include <DallasTemperature.h>



const int oneWirePin = 5;

OneWire oneWireBus(oneWirePin);
DallasTemperature sensor(&oneWireBus);

byte mac[] = { 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.
String writeAPIKey = "RZ7XNAFAFLAPT2UD"; // Una vez creado un canal necesitamos saber la Key de ese canal y copiarla aquí.
const int updateThingSpeakInterval = 16 * 1000; // Intervalo de tiempo, cada cuanto posteamos en el servidor.

// Variables
long lastConnectionTime = 0;
boolean lastConnected = false;
int failedCounter = 0;
char Status;





// Iniciamos el Ethernet Shield
EthernetClient client;








void setup() {
Serial.begin(9600);
sensor.begin(); 
startEthernet();

Serial.println("Prueba  ds18b");


}

void loop() {

Serial.print("Temperatura en sensor 0: ");
Serial.print(sensor.getTempCByIndex(0));
Serial.println(" *C ");
sensor.requestTemperatures();




 // Imprimimos por serial lo que nos haya devuelto el servidor.
if (client.available())
{
char c = client.read();
Serial.print(c);
}
// Nos desconectamos de Thingspeak
if (!client.connected() && lastConnected)
{
Serial.println("…disconnected");
Serial.println();
client.stop();
}
// Si estamos desconectados del servidor y paso suficiente tiempo, tenemos que volver a subir los nuevos datos.
if (!client.connected() && (millis() - lastConnectionTime > updateThingSpeakInterval))
{
Leersensores();
}
if (failedCounter > 3 ) {startEthernet();}
lastConnected = client.connected();
}
// Función para enviar los datos a el servidor.
void updateThingSpeak(String tsData)
{
if (client.connect(thingSpeakAddress, 80))
{
client.print("POST /update HTTP/1.1\n");
client.print("Host: api.thingspeak.com\n");
client.print("Connection: close\n");
client.print("X-THINGSPEAKAPIKEY: "+writeAPIKey+"\n");
client.print("Content-Type: application/x-www-form-urlencoded\n");
client.print("Content-Length: ");
client.print(tsData.length());
client.print("\n\n");
client.print(tsData);
lastConnectionTime = millis();
if (client.connected())
{
Serial.println("Connecting to ThingSpeak…");
Serial.println();
failedCounter = 0;
}
else
{
failedCounter++;
Serial.println("Connection to ThingSpeak failed ("+String(failedCounter, DEC)+")");
Serial.println();
}
}
else
{
failedCounter++;
Serial.println("Connection to ThingSpeak Failed ("+String(failedCounter, DEC)+")");
Serial.println();
lastConnectionTime = millis();
}
}
// Función para iniciar la conexión con el servidor.
void startEthernet()
{
client.stop();
Serial.println("Connecting Arduino to network…");
Serial.println();
delay(1000);
// Intenta conectarse por DHCP y si no funciona usa la configuración por default.
if (Ethernet.begin(mac) == 0)
{
Serial.println("DHCP Failed, Using default config");
Serial.println();
Ethernet.begin(mac, ip, gateway, subnet);
}
else
{
Serial.println("Arduino connected to network using DHCP");
Serial.println();
}
delay(1000);
}
// Función para leer los sensores y almacenarlos en las variables globales.
void Leersensores() {

if (Status != 0)
delay(Status);


if (Status != 0)
{
delay(Status);

}

}

Por favor, lee las normas y edita tu post. El código debe ir con etiquetas.

Disculpa las molestias, no me había leído las normas....creo que ya esta corregido, un saludo.

Esta linea la reemplazaste con tu API?

String writeAPIKey = "RZ7XNAFAFLAPT2UD";

Si, esa es mi apykey que me proporciona el canal. La dirección mac y la ip la saque de un ejemplo de la libreria ethernet por monitor serial.
No se si el fallo esté en la función "leersensores".....
Como no tengo conectados los sensores del codigo original me daba error al cargarlo, entonces como le comenté, eliminé todo lo relacionado con estos sensores y añadiendo el mio. Todo lo relacionado con la conexión sigue igual.

E seguido buscando algún código más sencillo para mi proyecto. Encontré el siguiente en el propio foro de thingspeak.

#include <SPI.h> 
#include <Ethernet.h> 
#include "ThingSpeak.h"
// W5100 
Byte de configuración de red W5100_MacAddress [] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
// Configuración de Thingspeak 
unsigned long Channel_Number = 302633; // ID de canal 
const char * Write_API_Key = "VAMPTX0YTHJ17WJ5"; // Escribir clave de API 
int Channel_Field = 1; // Campo donde se cargan los datos de temperatura
// Entrada de sensor LM35 a analógico 
#define LM35_Temp_Sensor A0
Cliente EthernetClient;
float LM35_Temp_Value = 0; // Valor de temperatura inicial 
int Intervalo = 300; // Intervalo lea la temperatura cada 5 minutos
void setup () 
{ 
// Conexión en serie 
Serial.begin (9600);
// Desactivar la tarjeta SD SPI 
pinMode (4, OUTPUT); 
digitalWrite (4, ALTO);
// Conectarse a la red local e Internet 
Ethernet.begin (W5100_MacAddress); 
Serial.println (); 
Serial.print ("W5100 Dirección IP:"); 
Serial.println (Ethernet.localIP ()); 
Serial.print ("Máscara de subred W5100:"); 
Serial.println (Ethernet.subnetMask ()); 
Serial.print ("Puerta de enlace W5100:"); 
Serial.println (Ethernet.gatewayIP ()); 
Serial.println ();
// Conecta con el servidor Thingspeak 
si (ThingSpeak.begin (cliente)) 
{ 
Serial.println (); 
Serial.println ("Conectarse al servidor de Thingspeak ..."); 
Serial.println (); 
} 
else 
{ 
Serial.println (); 
Serial.println ("No se pudo conectar con el servidor de Thingspeak !!!"); 
Serial.println (); 
}
}
void loop () 
{ 
LM35_Temp_Value = analógicaRead (LM35_Temp_Sensor) * 0.0048828125 * 100; 
Serial.print ("Temperatura actual:"); 
Serial.print (LM35_Temp_Value); 
Serial.println ("° C"); 
retardo (100);
// Escribe la temperatura en el servidor Thingspeak 
si (ThingSpeak.writeField (Channel_Number, Channel_Field, LM35_Temp_Value, Write_API_Key)) 
{ 
Serial.println (); 
Serial.println ("Carga de datos en el servidor de Thingspeak ..."); 
Serial.println (); 
} 
else 
{ 
Serial.println (); 
Serial.println ("Error al cargar datos en el servidor de Thingspeak !!!"); 
Serial.println (); 
}
// La temperatura se leerá cada 5 min 
para (int i = 0; i <= Interval; i ++) 
{ 
delay (1000); // 1 segundo de retraso 
}
}

lo he probado y si me muestra temperatura, pero al cambiar el sensor por el mío (ds18b20) ya no me muestra nada en la página de thingspeak. En monitor serial si…que dato recoge thingspeak de mi sensor??? para que pueda leerlo y mostrarlo???

Gracias

No quiero crees que pones un DS18B20 como si fuera un Lm35?
Como haces, solo reemplazas uno por otro?

Perdona pero no te entiendo a que te refieres. Mi idea es sustituir en ese mismo código el lm por el ds18b20 pero tengo que cambiar de pin ya que uno es analógico y el otro digital y ya me cambian varios factores...

Bueno ya e dado con el código correcto por lo menos para funcionar con el ds18b20. A ver si le pudieran echar un vistazo por si se puede hacer mejor o cambiarian algo…

#include <ThingSpeak.h>
#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h>
#include <DallasTemperature.h>


#define ONE_WIRE_BUS 2
 int oneWirePin = 2;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensor(&oneWire);




// W5100 Network Setup
byte W5100_MacAddress[] = {0xFE, 0xB6, 0xDC, 0xD3, 0xDD, 0xC4};
IPAddress ip(192,168,100,7);
IPAddress gateway(192,168,100,1); // Gateway – Puerta de enlace
IPAddress subnet(255, 255, 255, 0); //  Mascara de red


//Thingspeak Setup
unsigned long Channel_Number = 336582; // Channel ID
const char * Write_API_Key = "GTNYOEY6IQR0ZVDJ"; // Write API Key
int Channel_Field = 1; // Field where Temperature data upload to




EthernetClient client;

void setup()
{
// Serial connection
Serial.begin(9600);
 sensor.begin();
 
 Serial.println("Prueba  ds18b");

// 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))
{
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()
{
  int lectura = digitalRead(oneWirePin);
  float temp = sensor.getTempCByIndex(0);
Serial.print("Temperatura en sensor 0: ");
  Serial.print(sensor.getTempCByIndex(0));
  Serial.println(" *C ");
  sensor.requestTemperatures();







// Write the temperature to Thingspeak Server
if(ThingSpeak.writeField(Channel_Number, Channel_Field, temp, 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(1000); // 1 second delay
}
}

Porque haces esto

int lectura = digitalRead(oneWirePin);
  float temp = sensor.getTempCByIndex(0);
Serial.print("Temperatura en sensor 0: ");
  Serial.print(sensor.getTempCByIndex(0));
  Serial.println(" *C ");
  sensor.requestTemperatures();

creas una variable temp y luego vuelves s consultar el DS18B20 y lo presentas por monitor Serie pero no confirmas que temp tenga un valor.
Quiero decir que esto

Serial.print(sensor.getTempCByIndex(0));

debería ser esto

Serial.print(temp);

Luego prueba en esta linea

if(ThingSpeak.writeField(Channel_Number, Channel_Field, temp, Write_API_Key))

con un valor de temp previo fijo

tempo = 25.0;

A ver si se registra

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);

}