Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Fibaro Fibaro
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

ESP8266 i odczyt temperatury z dwóch ds18b20

crroo 01 Mar 2017 19:06 2196 4
  • #1 01 Mar 2017 19:06
    crroo
    Poziom 12  

    Witam.
    Nie chciałem zakładać nowego tematu.
    Jestem początkujący z Arduino i z ESP8266.
    Na arduino-mega z modułem ETH zbudowałem 6xDS18b20 oraz DHT21 z których odczyty są wysyłane na Thingspeak.com.
    Na smartphonie mam zainstalowane Virtuino i mogę sobie podglądać 7 czujników temp i 1 wilgotności.
    Teraz chciałem coś podobnego zrobić na ESP8266 + 2xDS18b20 onewire na GIPO2.

    Poniżej wklejam kod który znalazłem w sieci i przerobiłem pod swoje potrzeby.

    Wszystko działa ok ale tylko pomiar z pierwszego czujnika, natomiast z drugiego temperatur wysyłana jest tylko raz na jakiś czas (czasem co 5 s czasem co kilka minut, a czasem co 40 min, nie ma reguły).
    ESP8266 Programuję przez Arduino IDE

    Bardzo proszę o pomoc.

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Po Comie odczyt jest z obu czujników:

    0 Temperature: 19.44
    0 Temperature: 19.25
    WiFi Client connected
    WiFi Client connected
    0 Temperature: 19.44
    0 Temperature: 19.25
    WiFi Client connected
    WiFi Client connected

    Moderowany przez tmf:

    3.1.19. Nie wysyłaj wiadomości w tematach archiwalnych, jeśli jest to kolejne pytanie, w szczególności inne niż osoby pytającej. Z racji szacunku do pytającego załóż własny temat. Możesz dopisać tylko sposób rozwiązania problemu.

    Temat wydzieliłem do osobnego wątku.





    ----
    Wydzielono z tematu: Odczyt temperatury z ds18b20
    przez tmf dnia 01 Mar 2017 19:48

    0 4
  • Fibaro
  • Pomocny post
    #2 01 Mar 2017 20:13
    krzbor
    Poziom 14  

    Nie mogę zrozumieć, dlaczego wysyłasz te temperatury osobno. Czy nie lepiej:
    postStr += "&field1=";
    postStr += String(temp1);
    postStr += "&field2=";
    postStr += String(temp2);
    Oczywiście do procedury musisz przekazać obie temperatury.

    0
  • Fibaro
  • #3 01 Mar 2017 20:31
    crroo
    Poziom 12  

    Próbowałem tak robić ale nie działało.
    Do ESP8266 kod pisze się trochę inaczej niż arduino, i na razie nie umiem tego scalić tak aby nie wysyłać osobno temp1 i temp2.
    Proszę o pomoc.

    P.S.
    Poniżej załączam kod do Arduino Mega+ENC28j60+6x sensor ds18b20+DHT21 1x temperatura 1x wilgotność.
    Wszystko działa.
    Może komuś się przyda.

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • Fibaro
  • Pomocny post
    #4 01 Mar 2017 20:50
    krzbor
    Poziom 14  

    Myślałem o czymś takim:
    void sendTeperature(float temp1, float temp2)
    {
    WiFiClient client;

    if (client.connect(server, 80)) { // use ip 184.106.153.149 or api.thingspeak.com
    Serial.println("WiFi Client connected ");

    String postStr = apiKey;
    postStr += "&field1=";
    postStr += String(temp1);
    postStr += "&field2=";
    postStr += String(temp2);
    postStr += "\r\n\r\n";

    ....

    0
  • #5 01 Mar 2017 21:27
    crroo
    Poziom 12  

    Dziękuję za pomoc krzbor.
    Wszystko działa ok.

    Wklejam poprawiony kod:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    To obrazek z Thingspeak
    ESP8266 i odczyt temperatury z dwóch ds18b20

    Co robią poniższe linijki kodu? (na samym jego końcu)
    sent++;
    client.stop();

    0
TME logo Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
TME Logo