Potrzebowałem umieścić termometr w skrzynce, w której mam sprzęt kontrolujący automatykę, po to aby mierzyć, czy nie jest tam za ciepło. Zdecydowałem się złożyć prosty termometr z wyświetlaczem LCD oraz dodatkowo komunikujący się z OpenHAB
Sprzęt:
- Moduł WiFi oparty o chip ESP8266 (w mojej wersji jest użyty mini NodeMCU D1)
- LCD: 128X64 OLED LCD 0.96″ I2C
- Czujnik temperatury: DS18B20
Chip ESP8266 ma wgrany firmware od NodeMCU w którym dostępny jest kompilator języka LUA, w którym napisałem kod do odczytywania wartości temperatury oraz publikowania jej na wyświetlaczu LCD oraz w OpenHAB za pomocą protokołu MQTT.
W GitHub udostępniam aktualny kod do ściągnięcia.
Funkcjonalność:
- Wartość temperatury jest publikowana do brokera MQTT, skąd serwisy, jak OpenHAB mogą konsumować te wartości.
- Można ustawić częstotliwość odczytywania wartości z czujnika
- Wartości temperatury są publikowane do MQTT brokera tylko, gdy się zmienią
- Można ustawić w jakiej jednostce wartości temperatury ma być prezentowana: Celsjusz, Fahrenheit, Kelwin
- Jest możliwość korygowania wartości temperatury / kalibracja czujnika
Temat MQTT
/sensor/ID/temperature
gdzie ID to identyfikator urządzenia.
Poniżej kilka zdjęć z prototypowania
a tutaj złożona końcowa wersja z mini D1 NodeMCU (ESP8266). Oczywiście nie jest to mega profesjonalne rozwiązanie. Może później zajmę się zrobieniem, czegoś lepszego.
Konfiguracja
Konfigurację wykonuje się w pliku config.lua
Parametry | Opis |
---|---|
ID | ID urządzenia. Wykorzystywane do rozróżniania urządzeń w MQTT Brokerze. Można wpisać dowolną liczbę lub text bez znaków specjalnych i spacji. Wartość domyślna to ID chip’u ESP8266 |
WIFI_SSID | Nazwa sieci WiFI |
WIFI_PASSWORD | Hasło do sieci WiFI |
MQTT_HOST | Adres IP lub nazwa hosta MQTT Brokera |
MQTT_PORT | Port MQTT brokera; domyślnie 1883 |
MQTT_USER | Nazwa użytkownika MQTT Brokera; powinno być puste jeśli nie jest wymagana autentykacja w brokerze MQTT |
MQTT_PASSWORD | Hasło użytkownika MQTT Brokera; powinno być puste jeśli nie jest wymagana autentykacja w brokerze MQTT |
INTERVAL | Częstotliwość z jaką ma być odczytywana wartość temperatury; domyślnie: 5000m.sek (5sek) |
TEMP_SENSOR | Numer pinu GPIO, do którego podłączony jest czujnik temperatury. |
TEMP_CORRECTION | Liczba, o jaką wartość temperatury czujnika powinna zostać skorygowana; domyślnie 0 |
TEMP_UNIT | Jednostka temperatury. Celsiusz ustaw na C, Kelwin ustaw K, Fahrenheit ustaw F; wartość domyślna Celsiusz |
SDA | Number pinu GPIO LCD SDA |
SCL | Number pinu GPIO LCD SCL |
Instalacja:
- Wgranie firmware NodeMCU do ESP8266
- Wykonać niezbędne zmiany konfiguracyjne w pliku config.lua
- Poniższe pliki należy wgrać np za pomocą LuaLoader
- config.lua
- lcd.lua
- setup.lua
- app.lua
- ds18b20.lua
- init.lua
- Skompilować pliki w ESP8266 – za wyjątkiem pliku init.lua
node.compile("config.lua")
node.compile("setup.lua")
node.compile("app.lua")
node.compile("lcd.lua")
node.compile("ds18b20.lua")
file.remove("config.lua")
file.remove("setup.lua")
file.remove("app.lua")
file.remove("lcd.lua")
file.remove("ds18b20.lua")
Przykładowa konfiguracja item w openHAB
Number Czujnik_temp "Temperatura [%s °C]" { mqtt="<[broker:/sensor/12345/temperature:state:default]"}
Poniżej jeszcze termometr w akcji
Jeśli masz pytanie zostaw je tutaj