A szükséges alkatrészek
- ESP8266 (ESP-1 változat), magyar ára jelenleg kb. 1000Ft, kínai ára 520Ft-tól
- Dallas DS18B20 1wire modul (felhúzóellenállással), magyar ára 468Ft, kínai ára 326Ft
- [USB-soros átalakító (pl. FTDI232 vagy klónja)] – csak programozáshoz
- [3.3V táp, pl. microUSB töltő + LM1117 3.3V stabilizátor IC, 500mA vagy nagyobb terhelhetőség ajánlott]
Szoftveres könyvtárak
Mind telepíthető a Vázlat -> Könyvtár tartalmazása -> Könyvtárak kezelése… menüpontból
Vezetékelés
A programozáshoz a GPIO0 lábat a GND-vel össze kell kötni, csatlakoztatni USB-re az FTDI232 modult, majd 5 másodperccel később elindítani a programozást. Hosszú várakozás után az ESP modul kilép a feltöltés módból, ilyenkor a folyamatot újra kell kezdeni. Az FTDI232 modulon a jumpert 3.3V állásba kell állítani!
DS18B20 | ESP8266 ESP-1 | FTDI232 |
---|---|---|
Vcc | Vcc | Vcc 3.3V! |
GND | GND | GND |
DQ | GPIO2 | |
Rx | Tx | |
Tx | Rx | |
CH_PD -> Vcc | ||
GPIO0 -> GND (csak feltöltéshez) |
A program
#include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> #include <ESP8266mDNS.h> #include <OneWire.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS 2 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); const char* ssid = "LegyesHome"; const char* password = "12345678"; ESP8266WebServer server(80); const int led = 13; void handleRoot() { digitalWrite(led, 1); char temperatureStr[5]; sensors.requestTemperatures(); float temp1 = sensors.getTempCByIndex(0); dtostrf(temp1,2, 0, temperatureStr); String s = "{\"temperature\":"; s += temperatureStr; s += ",\"location\":\"server_room_1\""; s +="}"; server.send(200, "application/json", s); digitalWrite(led, 0); } void setup(void){ Serial.begin(115200); sensors.begin(); pinMode(led, OUTPUT); digitalWrite(led, 0); WiFi.begin(ssid, password); Serial.println(""); // Wait for connection while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); if (MDNS.begin("esp8266")) { Serial.println("MDNS responder started"); } server.on("/", handleRoot); server.onNotFound(handleRoot); server.begin(); Serial.println("HTTP server started"); } void loop(void){ server.handleClient(); }
Sketch uses 253 203 bytes (58%) of program storage space. Maximum is 434 160 bytes.
Global variables use 35 788 bytes (43%) of dynamic memory, leaving 46 132 bytes for local variables. Maximum is 81 920 bytes.
Egyéb dolog, ami még kellhet
Munin plugin (PHP)
#!/usr/bin/php <?php if ( count($argv) == 2 && $argv[1] == 'autoconf' ) { exit('yes'); } if ( count($argv) ==2 && $argv[1] == 'config' ) { echo 'graph_title Temperature'.PHP_EOL; echo 'graph_vlabel Celsius'.PHP_EOL; echo 'graph_category Sensors'.PHP_EOL; echo 'temperature.label Temperature'.PHP_EOL; echo 'temperature.type GAUGE'.PHP_EOL; echo 'temperature.colour COLOUR0'.PHP_EOL; echo 'temperature.draw AREA'.PHP_EOL; exit(); } $json = file_get_contents('http://192.168.11.211'); $j = @json_decode( $json ); if ( isset( $j->temperature ) ) { echo 'temperature.value '.$j->temperature.PHP_EOL; } ?>
A plugin helye esetemben a /usr/share/munin/plugins/esp8266
. Ennek futtathatónak kell lennie: sudo chmod +x /usr/share/munin/plugins/esp8266
. Majd kell egy szimbolikus link: sudo ln -s /usr/share/munin/plugins/esp8266 /etc/munin/plugins
. Végül újra kell indítani a node-ot: sudo service munin-node restart
.
Remélem valaki hasznát veszi 🙂
Update #1
Meglepően egyenletesen karcol a kis olcsóság és mindig ad is értéket a DTH11-es modulommal ellentétben. A kis szünetet a grafikonban én okoztam, relévezérléssel kísérleteztem, sajnos nem ad le elég áramot a relémodul behúzásához, de egy LED-et el bír villogtatni. Szal’ valószínűleg tranzisztorral vagy FET-tel kell illeszteni a relét.