Arduino temperaturlogger + Thingspeak

Har følgende utstyr:
- Arduino Uno
- ESP8266 wifi modul
- DS18B20 temperatur probe
- Thingspeak.com konto

Er ny i feltet, men har foreløpig kun klart å få temperaturoppdatering i Arduino-programmet med følgende bibliotek:

#DallasTemperature
#OneWire

Nå er neste utfordring å sende disse data til Thingspeak.com med Wifi-modulen: ESP8266.
Dette trenger jeg hjelp til, da jeg ikke finner dette på nettet.

Kan noen bidra så blir jeg evig takknemlig :)
 
Takker.

Har du et koblingsskjema?

Jeg bruker en NodeMcu ESP8266 ( ebay kr 35 ), det er jo en komplett enhet, så noe kobling trengs ikke annet en temp sensoren. Den koble på 3v (rød) G (svart) og D6 (gul).

Har lastet inn BrewPiLess på denne nå. Det fungerer godt med både temperatur logging på enheten, i tillegg til synkronisering med Thingspeak
 
Har følgende utstyr:
- Arduino Uno
- ESP8266 wifi modul
- DS18B20 temperatur probe
- Thingspeak.com konto

Er ny i feltet, men har foreløpig kun klart å få temperaturoppdatering i Arduino-programmet med følgende bibliotek:

#DallasTemperature
#OneWire

Nå er neste utfordring å sende disse data til Thingspeak.com med Wifi-modulen: ESP8266.
Dette trenger jeg hjelp til, da jeg ikke finner dette på nettet.

Kan noen bidra så blir jeg evig takknemlig :)

Er vell noe alla du ser etter:
http://www.instructables.com/id/ESP8266-Wifi-Temperature-Logger/
 
Takk for tips.

Jeg har sett over mange av disse sidene etter mangfoldige Google-søk.
Jeg har ikke fått til å programmere samt flashe ESP-modulen med kun Arduino Uno.
Såvidt jeg har skjønt kreves en USB-TTL modul for direkte programmering av ESP?
 
Da har jeg endelig fått til programmeringen, samt fått ESP'en til å kommunisere med Thingspeak :D
Takk for alle råd hittil. Men, jeg ville satt pris på ytterligere støtte.

Jeg brukte følgende utstyr:
  • ESP8266-01
  • DS18B20
  • FT232RL
  • Diverse motstand
  • Breadboard


Jeg trenger derimot råd til følgende:

1. Thingspeak bruker i dag Fahreinheit målingene utifra koden jeg bruker. Hvordan fjerner jeg denne parameteren og sender data for Celsius??
Koden beskriver også målinger i Celsius.
Ref: https://thingspeak.com/channels/292955

2. Jeg ønsker å legge til 1 stk DS18B20 slik at jeg kan sende 2 målinger. 1 i gjærkar, 1 i romtemp. Hva må jeg redigere i koden for å få dette til? Såvidt jeg har forstått skal probe nr 2 bare settes i samme krets som den første.....

Her er koden jeg bruker:

#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 2

#include <ESP8266WiFi.h>

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);

String apiKey = "APIKEY";
const char* ssid = "SSID";
const char* password = "PASSWORD";

const char* server = "api.thingspeak.com";

WiFiClient client;


void setup(void)
{
// start serial port
Serial.begin(115200);
delay(10);
Serial.println("Dallas Temperature IC Control Library");

// Start up the library
sensors.begin();

WiFi.begin(ssid, password);

Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
}

void loop(void)
{
// call sensors.requestTemperatures() to issue a global temperature
// request to all devices on the bus
Serial.print("Requesting temperatures...");
sensors.requestTemperatures(); // Send the command to get temperatures
Serial.println("DONE");

float h = (sensors.getTempCByIndex(0));
float t = (DallasTemperature::toFahrenheit(h));
Serial.print("Temperature for the device 1 (index 0) is: ");
Serial.println(sensors.getTempCByIndex(0));

if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from sensor!");
return;
}

if (client.connect(server,80)) { // "184.106.153.149" or api.thingspeak.com
String postStr = apiKey;
postStr +="&field1=";
postStr += String(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);

Serial.print("Temperature: ");
Serial.print(t);
Serial.print(" degrees F or: ");
Serial.print(h);
Serial.println(" Degrees C send to Thingspeak");
}
client.stop();

Serial.println("Waiting...");
// thingspeak needs minimum 15 sec delay between updates
// I use a 1 inute delay
delay(60000);
}
// END
 
For å få temperaturen i celsius fjerner du bare denne linja:

Kode:
float t = (DallasTemperature::toFahrenheit(h));


Kode for å lese av to sensorer:

Kode:
sensors.requestTemperatures(); 
  temperatur1 = (sensors.getTempCByIndex(0));
  temperatur2 = (sensors.getTempCByIndex(1));
 
Anbefaler ubidots varmt fremfor thingspeak. Mye lettere kode for å pushe data til skyen. De har en artikkel for Esp8266 via arduino.
Vil også råde deg til å bruke en wemos d1 mini eller nodemcu hvis du ikke har god greie på 'bits & bytes'.

Du må vel deklarere pinnen den andre ds18b20'en er på også?

Sent fra min LON-L29 via Tapatalk
 
Anbefaler ubidots varmt fremfor thingspeak. Mye lettere kode for å pushe data til skyen. De har en artikkel for Esp8266 via arduino.
Vil også råde deg til å bruke en wemos d1 mini eller nodemcu hvis du ikke har god greie på 'bits & bytes'.

Du må vel deklarere pinnen den andre ds18b20'en er på også?

Sent fra min LON-L29 via Tapatalk
Du kan jo ha flere 1-wire sensorer på samme pinne.
 
For å få temperaturen i celsius fjerner du bare denne linja:

Kode:
float t = (DallasTemperature::toFahrenheit(h));


Kode for å lese av to sensorer:

Kode:
sensors.requestTemperatures();
  temperatur1 = (sensors.getTempCByIndex(0));
  temperatur2 = (sensors.getTempCByIndex(1));


Klarte å få celsius inn i Thingspeak ved å endre følgende parameter: postStr += String(t); til postStr += String(h);
Du kan jo ha flere 1-wire sensorer på samme pinne.


Det stemmer, har lest om at probene kan seriekobles på samme pin. Noen som har tips med kodingen på denne?
Skulle gjerne ført 2-3 temperaturer på samme oversikt i Thingspeak.
 
Klarte å få celsius inn i Thingspeak ved å endre følgende parameter: postStr += String(t); til postStr += String(h);



Det stemmer, har lest om at probene kan seriekobles på samme pin. Noen som har tips med kodingen på denne?
Skulle gjerne ført 2-3 temperaturer på samme oversikt i Thingspeak.
Ikke serie, men parallellkobles.
 
Noen som har tips med kodingen på denne?
Skulle gjerne ført 2-3 temperaturer på samme oversikt i Thingspeak.
Det er det Amarillo har tipset om. Koden finner selv alle sensorer. (0) er første, (1) er andre og (2) blir da den tredje
 
Det er det Amarillo har tipset om. Koden finner selv alle sensorer. (0) er første, (1) er andre og (2) blir da den tredje


Så da er det eneste jeg trenger å endre i koden er(se uthevet):

#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 2

#include <ESP8266WiFi.h>

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);

String apiKey = "APIKEY";
const char* ssid = "SSID";
const char* password = "PASSWORD";

const char* server = "api.thingspeak.com";

WiFiClient client;


void setup(void)
{
// start serial port
Serial.begin(115200);
delay(10);
Serial.println("Dallas Temperature IC Control Library");

// Start up the library
sensors.begin();

WiFi.begin(ssid, password);

Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
}

void loop(void)
{
// call sensors.requestTemperatures() to issue a global temperature
// request to all devices on the bus
Serial.print("Requesting temperatures...");
sensors.requestTemperatures(); // Send the command to get temperatures
temperatur1 = (sensors.getTempCByIndex(0));
temperatur2 = (sensors.getTempCByIndex(1));


Serial.println("DONE");

float h = (sensors.getTempCByIndex(0));
float t = (DallasTemperature::toFahrenheit(h));
Serial.print("Temperature for the device 1 (index 0) is: ");
Serial.println(sensors.getTempCByIndex(0));
Serial.print("Temperature for the device 2 (index 1) is: ");
Serial.println(sensors.getTempCByIndex(1));


if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from sensor!");
return;
}

if (client.connect(server,80)) { // "184.106.153.149" or api.thingspeak.com
String postStr = apiKey;
postStr +="&field1=";
postStr += String(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);

Serial.print("Temperature: ");
Serial.print(t);
Serial.print(" degrees F or: ");
Serial.print(h);
Serial.println(" Degrees C send to Thingspeak");
}
client.stop();

Serial.println("Waiting...");
// thingspeak needs minimum 15 sec delay between updates
// I use a 1 inute delay
delay(60000);
}
// END
 
Tilbake
Topp