DS18b20 hőmérséklet szenzor ESP-01 modullal ioBrokerhez

Ebben a cikkben bemutatom, hogy tudunk hőmérsékletet mérni a Dallas DS18b20 OneWire hőmérő szenzor segítségével és az adatokat továbbítani ESP8266-01 modullal az ioBroker felé MQTT protokoll használatával.


Felhasznált dolgok:

ESP8266-01S WLAN Modul

ESP-01 Breadboard Adapter ESP8266-hoz

Programozóadapter USB, ESP8266-01-hez

DS18B20 digitalis hőmérsékletszensor TO92-55°C – +125°C

FT232RL USB – TTL Soros Adapter, 3,3V és 5V

Ellenállás készlet 0 Ohm -1M Ohm


Az ESP8266-01 modul egy kicsi, költséghatékony modulon található 2 pin a soros adatvonalhoz és 2 általános célú ki/bemenethez. ezek használhatók i2c, illetve OneWire eszközök használatához. Mi most ez utobbit vesszük igénybe a TO92 tokozású Dallas DS18b20 hőmérséklet érzékelő csatlakoztatásához.

Szükségünk van még egy 4,7K értékű ellenállásra, az adatvonalat fel kell húzni a tápfeszültségre.

Figyelem! A z ESP8266-01 modul csak 3,3V feszültséget visel el, nem jól tűri az 5V-ot, azonnal kijön belőle a füst.

Lássuk a kapcsolást:

ESP8266-01 és a DS18b20
ESP8266-01 és a DS18b20

Ha még nincs telepítve ne felejtsük el a szükséges könyvtárakat, majd töltsük fel az alábbi Arduino vázlatot:

/****************************************************************/

//  Alaplap:
//  Generic ESP8266 module
//  Flash size: 1M (no SPIFFS)

/****************************************************************/

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


const char* ssid = "ssid";
const char* password = "wifi jelszo";
const char* mqtt_server = "MQTT.Szerver.IP.cime";

unsigned long previousMillis = 0;
unsigned long lastMsg = 0;
char msg[25];

OneWire oneWire(2);
DallasTemperature sensors(&oneWire);
WiFiClient espClient;
PubSubClient client(espClient);

void setup() 
{
  sensors.begin();
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) 
  {
    delay(500);
  }
  client.setServer(mqtt_server, 1883);
}

void loop() 
{
  if (!client.connected()) 
  {
    reconnect();
  }
  client.loop();

  unsigned long Millis = millis();
  if (Millis - lastMsg > 30000)
  {
    lastMsg = Millis;
    char MsgTemp[10];
    sensors.requestTemperatures();
    float h = (sensors.getTempCByIndex(0));
    dtostrf(h, 4, 2, MsgTemp);
    client.publish("DS18b20_topic", MsgTemp);
  }
}

void reconnect() 
{
  while (!client.connected()) 
  {
    String clientId = "ESP8266_DS18b20";
    if (client.connect(clientId.c_str()))
    {
      // pass
    } 
    else 
    {
      delay(6000);
    }
  }
}

Az ESP-01 nem rendelkezik a fedélzeten soros-USB illesztőáramkörrel, ezért ezt külön el kell készíteni az alábbi ábra alapján. Az ESP-01 GPIO 0 pint a programozáshoz GND-re kell húzni! A normál soros kommunikációhoz erre nincs szükség.

ESP8266-01 és az FTDI FT232RL modul
ESP8266-01 és az FTDI FT232RL modul

Vagy vásárolhatsz egy iyen adaptert:

ESP8266-Modul, és USB ESP-01-Adatper
reklám

De ehhez még ügyeskedni kell, mert ez csak soros illesztő. Kell egy közdarab, hogy a GPIO 0-át lehuzzuk a GND-re. Valahogy így:

Egy kis átalakítás a soros illesztőn
Egy kis átalakítás a soros illesztőn

Hasonló leírásokért kattints ide.