1. Dette nettstedet bruker informasjonskapsler (cookies). Ved å fortsette å bruke dette nettstedet, samtykker du til vår bruk av informasjonskapsler. Lær mer.

Arduino temperaturlogger + Thingspeak

En tråd i 'Generelt og nybegynnerspørsmål' startet av Artur, 24 Jun 2017.

  1. Artur

    Artur
    Expand Collapse
    Registrert bruker

    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 :)
     
  2. Einariuss

    Einariuss
    Expand Collapse
    Registrert bruker

    Bosted:
    Bergen
  3. Artur

    Artur
    Expand Collapse
    Registrert bruker

    Takker.

    Har du et koblingsskjema?
     
  4. Einariuss

    Einariuss
    Expand Collapse
    Registrert bruker

    Bosted:
    Bergen
    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
     
  5. frode78

    frode78
    Expand Collapse
    Norbrygg-medlem

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

    Artur
    Expand Collapse
    Registrert bruker

    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?
     
  7. msevland

    msevland
    Expand Collapse
    Norbrygg-medlem

  8. Artur

    Artur
    Expand Collapse
    Registrert bruker

    Veldig bra tråd, og har studert denne mye.
    Venter nå på en USB-TTL adapter fra Kina for å få til dette her. Forstått det slik at det er veldig vanskelig å programmere ESP-en via en Arduino Uno-enhet......
     
  9. TazzaT

    TazzaT
    Expand Collapse
    Registrert bruker

    Bosted:
    Haugesund
  10. Amarillo

    Amarillo
    Expand Collapse
    Norbrygg-medlem

    Bosted:
    Oppdal
  11. msevland

    msevland
    Expand Collapse
    Norbrygg-medlem

  12. Artur

    Artur
    Expand Collapse
    Registrert bruker

    Mye bra råd her.

    Har bestilt noen http://m.ebay.com/itm?itemId=400699598695 for å programmere Esp'en. Antar den kommer ila neste uke.

    Virker forholdsvis rett frem med en slik. Men føler bare Arduino'en er overflødig av den grunn.

    D1 modulen får jeg prøve om jeg ikke får det til med FTL og ESP. :)
     
  13. Artur

    Artur
    Expand Collapse
    Registrert bruker

    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
     
  14. Amarillo

    Amarillo
    Expand Collapse
    Norbrygg-medlem

    Bosted:
    Oppdal
    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));
     
  15. blem

    blem
    Expand Collapse
    Registrert bruker

    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
     
  16. TorfinnS

    TorfinnS
    Expand Collapse
    Norbrygg-medlem

    Bosted:
    Båtsfjord
    Du kan jo ha flere 1-wire sensorer på samme pinne.
     
  17. Artur

    Artur
    Expand Collapse
    Registrert bruker


    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.
     
  18. TorfinnS

    TorfinnS
    Expand Collapse
    Norbrygg-medlem

    Bosted:
    Båtsfjord
    Ikke serie, men parallellkobles.
     
  19. msevland

    msevland
    Expand Collapse
    Norbrygg-medlem

    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
     
  20. Artur

    Artur
    Expand Collapse
    Registrert bruker


    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
     

Del denne siden