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:
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:
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.
Vagy vásárolhatsz egy iyen adaptert:
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: