Witam :-)
Chciałbym Wam pokazać jak w łatwy sposób wykorzystać moduł NodeMCU z układem ESP8266 do kontroli parametrów w naszym domu lub innym miejscu, nawet gdy sami jesteśmy gdzieś indziej. Wykorzystamy do tego wcześniej wspomniany moduł, czujnik temperatury i serwis thingspeak. Sam planuje stworzyć podobny układ, który pozwoli mi kontrolować warunki w terrarium z roślinami owadożernymi. Zatem do dzieła! :-)
Co będzie nam potrzebne?
Zakładamy konto na thingspeak
Po zarejestrowaniu się w serwisie należy stworzyć nowy kanał, na który będziemy przekazywać informacje z podłączonych czujników (w naszym przypadku jest nim czujnik temperatury DS18b20).
Nadajemy nazwę kanału, podpisujemy swój wykres (na którym będziemy odczytywać dobową zmianę temperatury). Możemy również uczynić nasz kanał publicznym.
W następnym kroku wchodzimy w zakładkę API Keys i spisujemy klucz, który będzie naam potrzebny podczas programowania NodeMCU.
Łączymy układ
Ok, przyszedł czas na stworzenie prostego układu, który będzie mierzył temperaturę. Układ należy połączyć zgodnie z schematem przedstawionym poniżej.
Przygotowanie Arduino IDE do pracy z NodeMCU
Przed rozpoczęciem programowania musimy przygotować nasze Arduino IDE do pracy z NodeMCU. Wchodzimy w zakładkę PLIK->PREFERENCJE i dodajemy dodatkowy adres do menadżera płytek. Adres, który dodajemy to: http://arduino.esp8266.com/staging/package_esp8266com_index.json
Dalej w zakładce NARZĘDZIA wybieramy odpowiednią płytkę i związane z nią parametry.
Tworzymy kod
Przed kompilacją kodu musimy wgrać wymagane biblioteki. Są nimi ESP8266WiFi, OneWire i DallasTemperature.
Dodatkowo należy uzupełnić.
1 2 3 4 |
const char* server = "api.thingspeak.com"; String apiKey ="Klucz API"; const char* MY_SSID = "Nazwa sieci Wi-Fi"; const char* MY_PWD = "Hasło"; |
Kompletny kod został przedstawiony poniżej.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
#include <ESP8266WiFi.h> #include <OneWire.h> #include <DallasTemperature.h> //Def #define myPeriodic 15 //in sec | Thingspeak pub is 15sec #define ONE_WIRE_BUS 2 // DS18B20 on arduino pin2 corresponds to D4 on physical board //#define mySSR 0 // Solid State Relay on pin 0 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature DS18B20(&oneWire); float prevTemp = 0; const char* server = "api.thingspeak.com"; String apiKey ="Klucz API"; const char* MY_SSID = "Nazwa sieci Wi-Fi"; const char* MY_PWD = "Hasło"; int sent = 0; void setup() { Serial.begin(115200); connectWifi(); } void loop() { float temp; //char buffer[10]; DS18B20.requestTemperatures(); temp = DS18B20.getTempCByIndex(0); //String tempC = dtostrf(temp, 4, 1, buffer);//handled in sendTemp() Serial.print(String(sent)+" Temperature: "); Serial.println(temp); sendTeperatureTS(temp); int count = myPeriodic; while(count--) delay(1000); } void connectWifi() { Serial.print("Connecting to "+*MY_SSID); WiFi.begin(MY_SSID, MY_PWD); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.print("."); } Serial.println(""); Serial.println("Connected"); Serial.println(""); }//end connect void sendTeperatureTS(float temp) { WiFiClient client; if (client.connect(server, 80)) { // use ip 184.106.153.149 or api.thingspeak.com Serial.println("WiFi Client connected "); String postStr = apiKey; postStr += "&field1="; postStr += String(temp); postStr += "\r\n\r\n"; client.print("POST /update HTTP/1.1\n"); client.print("Host: api.thingspeak.com\n"); client.print("Connection: close\n"); client.print("X-THINGSPEAKAPIKEY: " + apiKey + "\n"); client.print("Content-Type: application/x-www-form-urlencoded\n"); client.print("Content-Length: "); client.print(postStr.length()); client.print("\n\n"); client.print(postStr); delay(1000); }//end if sent++; client.stop(); } |
W efekcie otrzymamy na naszym kanale wykres temperatury, który będzie odświeżany co 15 sekund.
W przyszłości układ można wzbogacić o dodatkowe czujniki takie jak: czujnik ciśnienia, wilgotności itd.
Na koniec chciałbym pokazać jednego z moich “podopiecznych”, o których wspomniałem na początku artykułu :)
Fajny projekt. Sprawdzałeś może jak układ będzie długo pracował przy zasilaniu bateryjnym ?
Trochę offtopu:
Sam miałem kiedyś rośliny mięsożerne: kilka rosiczek, kilka dzbaneczników, kilka muchołówek i kapturnic. Udało mi się nawet doprowadzić do zakwitnięcia i zebrania nasion z muchołówek :) Niestety, wszystko padło w przeciągu kilku miesięcy jak się przeprowadziłem. Strasznie dużo potrzebują uwagi te roślinki i są strasznie delikatne. Przy większej ilości roślin istnieje także niebezpieczeństwo rozprzestrzeniania się chorób – tak mi się stało z kolekcją kaktusów i sukulentów.
Życzę powodzenie w hodowli. Jak masz jakieś zdjęcia to się pochwal.
Układ działa już kilka dni na zasilaniu bateryjnym, pewnie sporo podziała :)
Inne zdjęcie- muchołówka.
fajnie by było jak byś dodał jakiś układ z LCD co by wyświetlał temperaturę np. w przedpokoju :)
W przyszłości planuje dodać czujnik wilgotności, ciśnienia no i właśnie wyświetlacz :)
O, a to ciekawe rozwiązanie. Wydawało mi się, że podobne rzeczy są bardziej skomplikowane.
A co z przesyłaniem danych w drugą stronę? Czy serwer ma może funkcjonalność dzięki której można zadawać nastawy dla urządzenia? To jest zawsze trudniejsza kwestia.
Witam,
Jest to możliwe właśnie opracowałem taką metodę :)
Baa…
Posiadam układ w taki sposób że pobiera dane z SQL przez API ( php ) i trafia to do esp. Niestety minimalny czas propagacji czyli czas po jakim zmienia się stan to 1~2 sek.
U mnie jest to mniej niż sekunda ale serwer php w sieci lokalnej może kiepsko dopracowany kod php ;)
Czy jest opcja żeby się łączyć z siecią WIFI poprzez funkcję WPS?
@KM: Hejka,
Możesz coś więcej o Twoim rozwiązaniu?
Pozdrawiam
Staszek
Hej, mógł bym zrobic zdjęcie układu z drugiej strony, bo nie wyobrażam sobie w którym miejscu zainstalować rezystor.
mógł byś* :P
Ok już mam ;P
Jak napisać kod, aby móc wysyłać jeszcze wilgotność?
Hej. Super projekt. Zamierzam go wykorzystać do zdalnego monitorowania temperatury pieca CO. Tylko zastanawiam się, czy jest możliwość podłączenia samego czujnika temperatury na przewodzie a jeśli tak to jak długi może być ten przewód (w piwnicy może mi nie złapać WiFi).
No i jeszcze potrzebował będę aplikacji na androida, która mi wyświetli te wskazania i ewentualnie ostrzeże jeśli temperatura przekroczy jakiś zadany w ustawieniach próg. Wiem, trochę się rozpędziłem ale małymi krokami może się uda.
Mam kilka pytań:
Witam mam pytanie gdzie wstawić dane kod id i api key
Wszystko działa. Były małe problemy z bibliotekami ale “wujek dobra rada” google podsunął rozwiązania. Pozdrawiam.