Witam, dzisiaj przedstawię Wam mały, prosty czujnik temperatury i wilgotności komunikujący się przez tani okład ESP8266. Dane z czujnika są wysyłane na serwer Thingspeak. Do ESP8266 dane pobierane z DHT11 wysyła Arduino (po prostej modyfikacji kodu można zmusić każdy czujnik do działania).
Co będzie potrzebne?:
- Układ ESP8266
- dowolne Arduino. Ja posiadam Arduino Leonardo z starter kitu ElektroPrzewodnika. W wersji finalnej, projekt można przenieść na atmege328 z bootloaderem.
- Konwerter USB-Serial. Potrzebny by zaktualizować firmware. Używam chinskiego klona pl2032, lecz lepiej dołożyć do konwertera z układem FT232RL i móc programować nim mikrokontrolery. Można także zastosować Arduino UNO z wyciągniętym mikrokontrolerem.
- Kabelki żeńsko-męskie
Aktualizacja Firmware ESP8266
Aby zacząć zabawę z ESP8266 powiniśmy posiadać najnowszy firmware.
UWAGA! Nowe wersje firmware posiadają Baud Rate ustawiony domyślnie na 9600. Kod programu jest kompatybilny tylko i wyłącznie z wersjami 9600, więc jeżeli używamy starszego firmware należy wgrać nowy lub zmienić baudrate.
Podłączenie ESP8266 do komputera i wejście w tryb pozwalający na zmianę firmware:
Podłączamy ESP8266 do konwertera.
UWAGA! ESP8266 DZIAŁA NA NAPIĘCIACH 3.3V! SPRAWDŹ TRZY RAZY ZANIM PODŁĄCZYSZ KONWERTER DO KOMPUTERA!!!
VCC i CH_PD do 3V na konwerterze,
GND do GND,
URXD do TX na konwerterze,
UTXD do RX na konwerterze,
GPIO0 do GND – Dzięki temu wchodzimy w tryb pozwalający na zmianę firmware. Przy normalnej pracy, ten pin nie powinien być podłączony.
Zmiana firmware – Windows:
Pobieramy dwa pliki: firmware (klik!) oraz program pozwalający na jego wgranie (klik! – pobieramy XTCOM_UTILITY). Rozpakowujemy pliki, podłączamy konwerter z ESP8266 z GPIO0 podpiętym pod GND i uruchamiamy XTCOM_UTILITY. Naszym oczom ukaże się takie okienko:
Klikamy “Tools”, “Config Device”, ustawiamy port COM konwertera i Baud Rate na 115200. Następnie “Open” i “Connect”. Nie zamykamy tego okna.
W “API TEST” wybieramy Flash Image Download i w “Browse” znajdujemy nasz firmware. Klikamy “Update”.
Jeżeli wszystko poszło dobrze, posiadamy ESP8266 z najnowszym firmware. Ponieważ nie używam systemu Windows, instrukcja zmiany firmware została przetłumaczona z https://www.ukhas.net/wiki/esp8266_firmware_update.
Zmiana firmware – Linux:
Pobieramy firmware(kilk!) i narzędzie umożiwiające jego wgranie(klik!). Jeśli nie posiadamy pakietów python2 i python2-pyserial doinstalowujemy je teraz. Paczki rozpakowujemy i wrzucamy je do folderu domowego. Zmieniamy nazwę pliku z firmware na Firmware.bin.
Teraz podłączamy ESP8266 z pinem GPIO0 podpiętym do masy(GND).
Po wykonaniu powyższych czyności, otwieramy terminal i wpisujemy:
1 |
python2 esptool.py write_flash 0x000000 Firmware.bin |
Po zakończeniu wgrywania odłączamy ESP8266 od komputera i przechodzimy do następnego kroku.
Konfiguracja Thingspeak.com:
Jeżeli nie posiadamy jeszcze konta na serwisie www.thingspeak.com, tworzymy je teraz. Następnie tworzymy nowy kanał z dwoma polami, i klikamy Save.
Zapisujemy na kartce klucz API z zakładki “API Keys”. Teraz dzięki specjalnemu zapytaniu do serwera, możemy zapisywać dane do wykresu.
Podłączenie ESP8266 do Arduino i DHT11:
Do Arduino podłączamy DHT11 i ESP8266 według tego schematu (Z góry przepraszam za jego marną jakość- to mój pierwszy schemat.):
Jeżeli ktoś woli rysunki w fritzingu to przygotowałem też taką wersję:
Wgrywanie kodu do Arduino:
Pamiętaj! ESP8266 działa na napięciach 3.3V!!!
Pobieramy bibliotekę do odczytu danych z DHT11(klik!) i instalujemy(w ArduinoIDE klikamy: Szkic, Importuj Bibliotekę, Dodaj Bibliotekę).
Jeżeli wszystko poprawnie podłączyliśmy, wgrywamy na naszą płytkę taki oto program:
W miejscach zaznaczonych komentarzami, wpisujemy: nazwę swojej sieci, haslo do naszej sieci oraz APIkey do thingspeak.com.
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 |
#include <stdlib.h> #include <SoftwareSerial.h> #include <DHT11.h> SoftwareSerial monitor(10, 11); String GET; DHT11 dht11(A0); String Thingspeak_KEY = "twojapikey"; //Tu wpisz swój Thingspeak KEY. String NazwaSieci = "nazwatwojejsieci"; //Tu podaj nazwe swojej sieci. String HasloSieci = "haslotwojejsieci"; //Tu hasło do sieci. void setup() { monitor.begin(9600); monitor.println("AT+CIPMUX=1"); delay(200); connect(); } void loop(){ delay(15000); //czekam 15 sekund na polaczenie char buffer[10]; char buffer1[10]; float Btemp, Bhumi; dht11.read(Bhumi, Btemp); delay(10000); String Temp = dtostrf(Btemp, 4, 1, buffer); String Humi = dtostrf(Bhumi, 4, 1, buffer1); updateTemp(Temp); //wysylam dane delay(30000); //czekam 30 sekund do wyslania wilgotnosci updateHumi(Humi); //wysylam dane delay(3600000); //odczekuje godzine. co tyle wykonuje odczyty } void updateTemp(String Temp){ GET = "GET /update?key="; GET+= Thingspeak_KEY; GET += "&field1="; String command = GET; command += String(Temp); command += "\n\r\n\r"; monitor.println("AT+CIPSTART=4, \"TCP\",\"184.106.153.149\",80"); delay(10000); monitor.println("AT+CIPSEND=4,46"); delay(3000); monitor.println(command); delay(2000); monitor.println("AT+CIPCLOSE"); } void updateHumi(String Humi){ GET = "GET /update?key="; GET+= Thingspeak_KEY; GET += "&field2="; String command = GET; command += String(Humi); command += "\n\r\n\r"; monitor.println("AT+CIPSTART=4, \"TCP\",\"184.106.153.149\",80"); delay(10000); monitor.println("AT+CIPSEND=4,46"); delay(3000); monitor.println(command); delay(2000); monitor.println("AT+CIPCLOSE"); } void connect(){ monitor.println("AT+CWMODE=1"); delay(200); String cmd = "AT+CWJAP=\""+NazwaSieci+"\", \""+HasloSieci+"\""; monitor.println(cmd); delay(2000); } |
Po niecałej minucie powiniśmy znaleść odczyty na naszym kanale w thingspeak.
Zasada działania:
Spróbuję po krótce opisać działanie mojego projektu:
Po uruchomieniu, ESP8266 łączy się z naszą siecią. Po połączeniu dane z czujników zostają skonwertowane na łańcuchy(typy String). Przekonwertowane dane zostają wysłane przez funkcje updateHumi() oraz updateTemp(). Po wysłaniu danych procesor czeka około 1 godzinę, i proces rozpoczyna się od nowa.
Później czujniki można wykonać na bazie atmegi328 i porozmieszczać w całym mieszkaniu. Mam nadzieję, że projekt się spodobał.
Dodawanie Atmegi do czegoś co jest w stanie obsłużyć ESP8266 jest przesadą.
Tu masz opis jak zrobić to na samym ESP:
https://techniczny.wordpress.com/2015/02/04/esp8266-i-dht22-pomiar-temperatury-i-wilgotnosci-przez-wifi/
Fakt że na DHT22, ale jest on dokładniejszy
Nie jest przesadą jeżeli chcesz obsłużyć wiele różnych czujników. Tanie, chinskie promini kosztuje 7zł więc nie jest to wielki wydatek.
Niestety ten uklad potrafi sie zawiesic jest to chinszczyzna ewniej software nie jest dopracowany. Wtedy microcontroller moze zreset uklad.
Pomysł dobry ale wykonanie… Opis jest napisany chaotycznie, po przeczytaniu artykułu ciężko wywnioskować co i jak działa. Gdyby “czytelnie” opisać poszczególne elementy, a szczególnie ich działanie w układzie (co, jak i dlaczego) to było by świetnie. Nie ma pokazanego końcowego działania, a co o schematu to tylko 90*, żadne inne ścięcia.
Nalegam aby poprawić artykuł zanim wejdzie na str. główną.
W atmedze delay nie powoduje 100% cpu usage? Brakuje mi w tym kodzie jakiegos power save.
Kod był pisany pod zasilanie z tanich ładowarek. Jeżeli chcesz dodać oszczędzanie energi poczytaj: http://playground.arduino.cc/Learning/ArduinoSleepCode
hmmm na zdjęciu widzę powerbank. Ogólnie to nie znałem tego modułu. Fajny, ale użycie zewnętrznego portalu to nie najlepszy pomysł. Lepszy LAMP w domu.
W thingspeaku rysowanie wykresów jest łatwe. Własny serwer to godziny spędzone nad konfiguracją. Choć może spróbuje podłączyć to pod serwer postawiony na malince.
Fellfree godziny spędzone nad konfiguracją? Debian + Node.js + gnuplot (+ ew. jakaś baza), kod to dosłownie max 15 linijek.
Zafascynowany dzialaniem tego ukladu zamowilem wlasnie 4 takie xD
Mozesz dodac jakies screeny/filmik tego ukladu w akcji?
Ciekawą serię o ESP8266 prowadzi Julian Llett. Filmik nie potrzebny – układ tylko miga gdy wysyła dane.
Mozna w jakis sposob odczytywac co zwraca strona i czy mozna tutaj wysylac POST i logowac sie na jakies strony?
Odczytywanie zawartości stron jest banalnie łatwe:
http://hackaday.com/2014/10/04/the-esp8266-becomes-a-terrible-browser/
Wysyłanie POST zostało wytłumaczone w poradniku na youtube. Wpisz “ESP8266 send data to a website”
Wielkie dzieki za info :)
Bardzo ciekawe urządzenie! może się okazać, że to kolejny krok do bezpieczeństwa nie tylko w domu ale np w miejscach pracy.
Może ktoś dokładnie opisać jak to jest z tym układem, ponieważ na pewnym serwisie aukcyjnym spotkałem się z informacjami, że ten układ wymaga konwertera napięć na UART do 3,3V, natomiast tu na schemacie, jest on normalnie podłączony do pinów Arduino które mają teoretycznie 5V. Jak to jest z tym konwerterem potrzebny czy nie? Zasilanie rozumimem bezwzględnie 3,3V?
Teoretycznie konwerter jest potrzebny ponieważ arduino pracuje na 5V i sygnały wejściowe i wyjściowe też powinny mieć 5V, więc jeśli zasilisz czujnik napięciem 3,3V to sygnał wychodzący z czujnika ma też napięcie 3,3V, a arduino może nie do końca odczytać dane wysyłane przez czujnik, ale jeśli działa to spoko. Konwerter zamienia ci po prostu sygnały o napięciu 3,3V na 5V i wtedy masz pewność że nie będzie problemu z komunikacją jeśli nie pomyliłeś się w podłączeniu konwertera oczywiście.
Koledze nie chyba nie chodzilo o czujnik ale o RX ESP, który pracuje na 3V3, powinno to przejsc jeszcze przez konwerter lub dzielnik napiecia
Z tego co wiem to tak jak kolega @necronancer pisał : powinien być konwerter po drodze.
RX i TX może działąć na 5V, a karta jest na 3,3V więc możesz sfajczyć ją. Ja czekam na tranzystory i robię dzielnik, żeby mieć pewność :)
Czytam i… szczerze mówiąc tego typu przeróbki nie przyszły mi do głowy.
Jedyne, co według mnie należy zmienić, to ta komiksowa podkładka do zdjęć.
Pingback: Programowanie ESP8266 w Arduino IDE » Majsterkowo.pl
mógłbyś lepiej opisać proces użycia arduino uno bez mikrokontrolera jako programatora? próbowałem według opisu jednak program w ogóle nie mógł się podłączyć przez port COM
Witam. Przepraszam za pożną odpowiedź. Należy wyciągnąć mikrokontroler z płytki arduino uno, a piny TX esp8266 podłączyć do RX arduino, a TX arduino do RX esp. potem tylko zasilanie 3.3V i można łączyć się z esp. Życzę powodzenia w projektach.
Jaki to ma w przybliżeniu zasięg? Na wolnej przestrzeni mam szanse na 100-200m?
Myślałem też o tego typu module z antenką:
http://www.aliexpress.com/item/Free-Shipping-MT7681-Serial-WIFI-Module-with-Antenna-Wire/32241539688.html
Mam problem z modułami ESP8266-01. Po wydaniu komendy
AT+CWJAP=”SSID”,”password” układ się resetuje co około 30 sekund. To samo przy wykorzystaniu Arduino ide dla ESP. Może ktoś pomoże?
Na schemacie jest błąd. Do 3.3V pociągnięty jest pin RST a powinien być CH_PD, tak jak w opisie wgrywania firmware.
Nie rozumiem po co tu arduino, przecież wystarczy sam ESP8266, który ma wbudowany procesor.
Arduino powinien sluzyc jako watchdog esp nie jest uklad klasy profesionalnej tylko dla hobbystow
Czy to samo jest możliwe na samym konwerterze usb oraz czujniku ds18b20
Z góry dziekuje
Czy ma ktoś sterowniki do tego konwertera ? Na win8 pokazuje że są aktualne ale nie działa prawidłowo.
Wszystko ladnie polaczone – esp8266 sie laczy – ale zadne dane nie sa wysylane do thingspeaka. WriteApi key wpisany.Co moze byc nie tak??
czy ktoś z Was może testował czujniki z sensosystem.pl ?
Czy da się to samo zrobić na konwerterze oraz czujniku ds18b20.
Z góry dziękuje. Po co jest wgrywany firmware dla ESP8266 czy ta operacja jest konieczna
Do ESP8266 Arduino jest niepotrzebne. Esp8266 to procesor 32bit o maksymalnym taktowaniu 160MHz. Posiada i2c, spi, rs232, wifi, GPIO, ADC, PWM. Można podłączyć dowolny czujnik, urządzenie bez Arduino. To tak jakby do Laptopa podłączyć drogiego laptopa, żeby na jednym wyświetlać strony, a na drugim pisać. Firmware jest fabrycznie wgrany i można z niego korzystać. Są też inne Firmwary, no Nondmcu do programowania w języku Lua, jest też ESP8266 Basic, który jest bardzo podobny do Bascom’a. Do Esp8266 można podłączyć wszystkie moduły jakie podłączyć da się do Arduino. np LCD, OLED, wszytkie czujniki, i jest to w programowaniu dużo łatwiejsze niż w Arduino. Dla przykładu podłączamy wyświetlacz z konwerterem i2c 1602 to tylko dwa przewody + zasilanie. a cały program to tylko jedna linia. Lcd “Hallo World”, 1, 1 proste? jeśli podłączamy OLED, postępujemy analogicznie OLED “Hallo World”,1, 1. A gdybyśmy chcieli narysowac kółko na OLED wystarczy napisać Circle 40,10,10.
Po wgraniu Firmware Basic Esp8266, Arduino wydaje się kosmiczne trudne i uwierz, nigdy więcej nie zechcesz do niego wrócić. Mało tego ESP8266 możesz programować z PC jak i Androida.
Zapomniałem jeszcze dodać, że w Basicu ESP8266, Napiszesz rozpoznawanie mowy, jak wypowiadania głosowe komunikatów, i to wszytko jak zawsze tylko jednym poleceniem :-) http://www.esp8266basic.com/functions-thingspeak-api.html
mało pinów posiada nodemcu esp8266 w porównaniu do arduino mega. Z kolegą mamy spory projekt na arduino i chceliśmy go przenieść na ESP i lipa brakuje z analogowych jaki i pwm pinów.
Tutaj jest również dobry opis jak korzystać z samego Esp8266
http://esp8266.890m.com/
Tia dobry opis, trzy części i bardzo mało konkretnych informacji, to jest prędzej reklama.
Link do firmware nie działa
Witam wszystkich
I mam pytanie:
Czy tym układem tak zestawionym mozna sie komunikowac w druga strone przez internet i przesyłać komunikaty do Arduino?
Witam,
nie wiem czemu ale ten program nie wysyła danych. Mam płytkę andrucam http://www.arducam.com/downloads/ESP8266_UNO/ArduCAM_ESP8266_UNO_DS.pdf i przestawiłem porty Tx i RX na 25,26 (zgodnie ze schematem) i nic … jakiaś podpowiedź?