ESP8266-01+DS18B20+thingspeak

Odpovědět
davevo
Příspěvky: 6
Registrován: 21 zář 2017, 21:24
Reputation: 0

ESP8266-01+DS18B20+thingspeak

Příspěvek od davevo » 03 říj 2017, 23:57

Zdravím všechny bastlíře.
Začal jsem si hrát s WIFI modulem a chtěl bych posílat data z teplotního čidla dallas na server thingspek.
Bohužel nemůžu donutit čidlo aby mě ukázalo reálnou teplotu pořád mě vypisuje -127°C
Mohl by mě někdo omrknout kod? Zda mě tam něco nechybí?

Předem děkuji za pomoc

Kód: Vybrat vše

// ESP8266 Thingspeak ukázka

// připojení potřebné knihovny
#include <ESP8266WiFi.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2  // teplota doma DS18B20 na pinu GPIO2

// vytvoření proměnné s naším API klíčem z Thingspeak - viz návod
String apiKlic = "1SSW3RBGLO8PYO8I";
// vytvoření proměnných s názvem WiFi sítě a heslem
const char* nazevWifi = "davevo";
const char* hesloWifi = "123456";
// vytvoření proměnné s názvem serveru Thingspeaku
const char* server = "api.thingspeak.com";
// inicializace WiFi v módu klienta
WiFiClient client;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire); 
 
void setup() {
  // zahájení komunikace po sériové lince
  Serial.begin(9600);
  // zahájení bezdrátové WiFi komunikace s připojením
  // na router skrze zadané přihl. údaje
  WiFi.begin(nazevWifi, hesloWifi);
  // čekání na úspěšné připojení k routeru,
  // v průběhu čekání se vytiskne každých
  // 500 milisekund tečka po sériové lince
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Pripojeno k WiFi siti ");
  Serial.println(nazevWifi);
  Serial.print("IP adresa: ");
  Serial.println(WiFi.localIP());
  sensors.begin();
}
void loop() {
  // vytvoření proměnných pro načtení hodnoty
  sensors.requestTemperatures();               
    int temp = sensors.getTempCByIndex(0);
  // připojení na server Thingspeak pro odeslání dat
  if (client.connect(server,80)) {
    // vytvoření zprávy, která bude odeslána na Thingspeak
    // každé pole je označeno jako "field" + pořadí pole,
    // je nutné každý údaj převést na String
    String zprava = apiKlic;
    zprava +="&field1=";
    zprava += String(temp);
    zprava += "\r\n\r\n";
    // po vytvoření celé zprávy ji odešleme na server Thingspeak
    // včetně našeho API klíče
    client.print("POST /update HTTP/1.1\n");
    client.print("Host: api.thingspeak.com\n");
    client.print("Connection: close\n");
    client.print("X-THINGSPEAKAPIKEY: "+apiKlic+"\n");
    client.print("Content-Type: application/x-www-form-urlencoded\n");
    client.print("Content-Length: ");
    client.print(zprava.length());
    client.print("\n\n");
    client.print(zprava);
    // vytištění informací po sériové lince o odeslání na Thingspeak
    sensors.requestTemperatures();
    Serial.print("Teplota doma: ");
    Serial.print(temp);
    Serial.println("°C");
    Serial.println("Udaje odeslany na Thingspeak.");
  }
  // ukončení spojení se serverem Thingspeak
  client.stop();
  // nyní musíme vyčkat minimálně 15 vteřin do dalšího odeslání dat,
  // 15 vteřin je omezení Thingspeaku, v tomto příkladu je nastaven
  // interval 30 vteřin
  Serial.println("Pauza pred dalsim odeslanim dat.");
  delay(15000);
}

Igor
Příspěvky: 1
Registrován: 04 říj 2017, 10:42
Reputation: 0

Re: ESP8266-01+DS18B20+thingspeak

Příspěvek od Igor » 04 říj 2017, 11:12

Zdravím,
řešil jsem stejnou záležitost, domnívám se, že může být problém v zapojení čidla.
Zkuste na webu pohledat - existují tuším minimálně dvě možnosti zapojení a je třeba si s tím trochu pohrát.
V kodu nevidím nastavení pinu, odkud se čte teplota, např.:

byte TempSensorPin = 12;

jinak ještě možná toto:
/*-----( Declare objects )-----*/
/**-----( Temperature.h START )-----**/
// Data wire is plugged into port 3 on the Arduino (Temperature)
#define ONE_WIRE_BUS TempSensorPin

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
DeviceAddress tempDeviceAddress;
/**-----( Temperature.h END )-----**/

pokud byste chtěl měnit přesnost odečtu:
//set 0.125°C precision (9, 10, 11, or 12 bits - corresponding to increments of 0.5°C, 0.25°C, 0.125°C and 0.0625°C)
sensors.getAddress(tempDeviceAddress, 0);
sensors.setResolution(tempDeviceAddress,11);

Také je dobré posílat ven hodnotu teploty jen při její změně.
Good luck!

davevo
Příspěvky: 6
Registrován: 21 zář 2017, 21:24
Reputation: 0

Re: ESP8266-01+DS18B20+thingspeak

Příspěvek od davevo » 04 říj 2017, 20:59

Tak už to nějak funguje problém byl mezi klávesnicí a židlí. ESP8266-01 jsem napájel z USB programátoru a čidlo Dallas jsem napájel externě ze zdroje. To asi nemůže tak fungovat. Ted mám ale problém když napajím Dallas 3,3V ukazuje hodnoty vysoké když ho napájím 5V tak ukazuje reálnou hodnotu.

Uživatelský avatar
SkullKeep
Příspěvky: 290
Registrován: 23 srp 2017, 18:51
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: ESP8266-01+DS18B20+thingspeak

Příspěvek od SkullKeep » 10 říj 2017, 18:45

Mozna pomuze zjistit s jakym napajecim napeti pracuje senzor teploty, jestli je to 5V je tu nebezpeci usmazeni ESP8266.
:twisted: :?: :arrow: :geek: P. Q. M.

HaVecko
Příspěvky: 14
Registrován: 11 bře 2018, 10:25
Reputation: 0

Re: ESP8266-01+DS18B20+thingspeak

Příspěvek od HaVecko » 02 srp 2018, 11:40

Nepomohl by převod úrovně napětí na datový pin?
https://www.aliexpress.com/wholesale?ca ... +converter

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: ESP8266-01+DS18B20+thingspeak

Příspěvek od pavel1tu » 02 srp 2018, 11:52

DS18B20 funguje na 3-5,5V

Na 3,3V ho provozuji a v pohodě ;)

Dej nějakou pauzu za tím vyčtením ze senzoru ....
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: ESP8266-01+DS18B20+thingspeak

Příspěvek od jankop » 02 srp 2018, 12:30

1. Problém vidím v napájení esp8266, ten s ohledem na potřebný proud nemůže být napájen z USB převodníku - programátoru. Ten stačí pouze na programování, na spolehlivý provoz nestačí !Zdroj by měl být dimenzován alespoň na 0,5A
2. DS18B20 spolehlivě funguje i na 3,3V, ale když ho budeš napájet z 5V, tak stačí bez obav nezbytný pullup rezistor 4k7 připojit na napájení 3,3V esp8266. DS18B20 má totiž výstup otevřeným kolektorem, není třeba převodník úrovně.

Moje doporučení: Napájej vše jedním slušným zdrojem 3,3V včetně DS18B20, nezapoměň na rezistor 4k7 mezi Vcc a výstup DS18B20 a na propojení napájení a zemí. Když dodržíš tyhle podmínky, tak to bude fungovat, s DS18B20 nebývají problémy.

Ještě poznámka k programu, obvykle se jednotlivé parametry hlavičky HTTP protokolu oddělují sekvencí \r\n a konec hlavičky r\n\r\n

jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: ESP8266-01+DS18B20+thingspeak

Příspěvek od jankop » 02 srp 2018, 13:26

Ještě z obecného pohledu doporučuji přidat jeden příkaz

Kód: Vybrat vše

...
WiFi.persistent(false);
WiFi.begin(nazevWifi, hesloWifi);
// čekání na úspěšné připojení k routeru,
...

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 5 hostů