- Wymagane materiały:
- Jak rzeczy działają?
- Programowanie ESP8266-01:
- Łączenie ESP8266-01 z Arduino:
- Program i działanie Arduino:
ESP8266-01 był świetnym modułem, który ugasił wszystkie nasze pragnienia związane z projektami IOT. Od czasu premiery rozwinęła silną społeczność i przekształciła się w łatwy w użyciu, tani i wydajny moduł Wi-Fi. Inną platformą open source, która jest znacznie bardziej popularna, jest Arduino, wokół której zbudowano już mnóstwo projektów. Połączenie tych dwóch platform otworzy drzwi dla wielu innowacyjnych projektów, dlatego w tym samouczku nauczymy się, jak połączyć moduł ESP8266-01 z Arduino. W ten sposób będziemy mogli wysyłać lub odbierać dane między Arduino a Internetem.
Na potrzeby tego samouczka będziemy odczytywać godzinę, datę, temperaturę i wilgotność z Internetu za pomocą interfejsu API z ESP8266-01. Następnie wyślij te wartości do płyty Arduino i wyświetl je na ekranie LCD 16 * 2. Brzmi fajnie, prawda !! Więc zacznijmy.
Wymagane materiały:
- Płytka Arduino (dowolna wersja)
- ESP8266-01
- Płytka programatora FTDI z opcją 3.3V
- Wyświetlacz LCD 16x2
- Potencjometr
- Naciśnij przycisk
- Przewody łączące
- Płytka prototypowa
Jak rzeczy działają?
Zanim zagłębimy się w temat, ważne jest, aby wiedzieć, jak to naprawdę zadziała. Zasadniczo musimy zacząć od modułu ESP8266-01. Będziemy używać Arduino IDE do programowania ESP8266, a kod zostanie napisany tak, aby używać API do odczytu pliku JSON za pośrednictwem żądania http. Następnie utworzymy frazę tego pliku JSON, aby wyodrębnić tylko wymagane informacje z pełnego pliku JSON.
Po sformułowaniu informacji wydrukujemy je przy użyciu komunikacji szeregowej. Te linie szeregowe zostaną następnie podłączone do Arduino, aby Arduino mogło odczytać informacje wysłane z ESP8266. Po odczytaniu i przetworzeniu informacji wyświetlimy je na ekranie LCD.
W porządku, jeśli nie do końca to zrozumiałeś, ponieważ nauczymy się tego samego w dalszej części tego samouczka.
Programowanie ESP8266-01:
W tym samouczku założono, że masz pewne doświadczenie z modułem ESP8266. Jeśli nie, zaleca się przeczytanie poniższych trzech samouczków, aby w pełni zrozumieć ten problem.
- Pierwsze kroki z ESP8266-01
- Programowanie ESP8266-01 za pomocą poleceń AT
- Programowanie ESP8266-01 za pomocą Arduino IDE i flashowanie jego pamięci
Możesz również sprawdzić nasze wszystkie projekty ESP8266 tutaj.
Tutaj będziemy programować moduł ESP8266-01 za pomocą Arduino IDE. W przypadku sprzętu używamy płyty FTDI z 3,3 V do programowania ESP8266, ponieważ znacznie uprości to sprzęt. Schemat obwodu do podłączenia ESP8266 z płytą FTDI pokazano poniżej.
Upewnij się, że spełnione są następujące warunki
1. ESP8266-01 ma tylko 3,3 V tolerancji, nie używaj 5 V. Więc ustaw FTDI tylko w trybie 3.3V.
2. GPIO_0 musi być uziemiony dla trybu programowania
3. Kołek resetowania powinien być połączony przez przycisk z bolcem uziemienia. Ten przycisk należy nacisnąć tuż przed przesłaniem kodu. Za każdym naciśnięciem przycisku niebieska dioda LED na module ESP8266-01 zapali się w stan wysoki, wskazując, że moduł został zresetowany.
Po wykonaniu połączeń otwórz Arduino IDE i sprawdź, czy możesz pomyślnie przesłać przykładowy program. Jeśli nie jesteś pewien, jak używać Arduino IDE do wgrania programu do ESP8266, postępuj zgodnie z instrukcją programowania ESP8266 z Arduino. W tym momencie zakładam, że pomyślnie przesłałeś program migający.
. Pełny program jest podany na końcu tej strony poniżej, wyjaśniam je jako małe fragmenty. Program wymaga również do kompilacji biblioteki Arduino JSON, więc jeśli jeszcze nie dodałeś biblioteki do swojego Arduino IDE, dodaj ją, pobierając z biblioteki Arduino JSON z Github.
ESP8266 musi łączyć się z Internetem, aby uzyskać dane o dacie, godzinie, temperaturze i wilgotności. Musisz więc pozwolić mu połączyć się z Wi-Fi, udowadniając SSID i hasło w poniższych wierszach
const char * ssid = "JIO-Fi"; // Wprowadź swój identyfikator SSID Wi-Fi const char * password = "Pas123"; // Wprowadź hasło Wi-Fi
Wewnątrz setup () funkcji możemy sprawdzić czy ESP jest w stanie połączyć się z Wi-Fi, jeśli nie będzie tam czekać w nieskończoność tylko przez drukowanie „Łączenie..” na monitorze szeregowego.
while (WiFi.status ()! = WL_CONNECTED) {// Poczekaj, aż Wi-Fi się połączy opóźnienie (1000); Serial.print („Łączenie…”); // Drukuj łączenie… do momentu ustanowienia połączenia }
Kolejny krok to bardzo ważny krok. Jeśli połączenie Wi-Fi powiedzie się, musimy wywołać żądanie http get, aby odczytać plik JSON z Internetu. W tym samouczku używam API dostarczonego przez wunderground.com. Więc jeśli planujesz użyć tego samego, możesz uzyskać link i zarejestrować się w celu uzyskania bezpłatnego klucza API lub użyć dowolnego wybranego interfejsu API. Po zakończeniu korzystania z API otrzymasz link podobny do tego poniżej
Uwaga: zmieniłem klucz API tego łącza, więc to nie zadziała. Zabezpiecz swój klucz API i nie udostępniaj go.
Moje API służy do pobierania danych pogodowych w Chennai. Możesz użyć dowolnego interfejsu API. Ale kiedy ładujesz API w dowolnej przeglądarce, powinien on zwrócić plik JSON. Na przykład mój interfejs API zwraca następujący plik JSON
Twój może zwrócić plik z innymi danymi. Możemy sprawdzić, czy ten plik JSON jest również odebrany przez nasz ESP8266, czytając go i drukując JSON na naszym monitorze szeregowym, korzystając z następujących linii
int httpCode = http.GET (); // przekaż żądanie pobrania if (httpCode> 0) {// Sprawdź kod zwracający // payload = http.getString (); // Przechowuj wartość w varibale Payload do debugowania // Serial.println (payload); // Wydrukuj ładunek do debugowania, w przeciwnym razie skomentuj obie linie
Skomentowałem te linie, ponieważ są potrzebne tylko do testowania. Po upewnieniu się, że ESP8266 jest w stanie uzyskać dane JSON, czas na sformułowanie danych. Jak widać, dane te są ogromne i większość wartości jest bezużyteczna, z wyjątkiem tych, które są nam potrzebne, jak data, godzina, temperatura i wilgotność.
Dlatego używamy biblioteki JSON Arduino, aby oddzielić wymagane dla nas wartości i przechowywać je w zmiennej. Jest to możliwe, ponieważ wartości w pliku JSON są przypisywane jako pary nazwa-wartość. Więc ta nazwa jest łańcuchem, który będzie zawierał wymaganą dla nas wartość.
W tym celu musimy przejść na stronę, która przeanalizuje plik JSON i poda nam kod Arduino. Tak, to takie proste. Przejdź do https://arduinojson.org/assistant/ i wkleja plik JSON, który załadowaliśmy do naszej przeglądarki i naciśnij enter. Kiedy skończyłem, mój wyglądał mniej więcej tak poniżej
Przewiń trochę w dół, aby zobaczyć program fraz, który jest tworzony automatycznie
Wszystko, co musisz zrobić, to wybrać żądaną zmienną, skopiować ją i wkleić do swojego Arduino IDE, tak jak zrobiłem tutaj
/ * Dane fraz przy użyciu biblioteki JSON * / // Użyj https://arduinojson.org/assistant/, aby uzyskać wartości fraz dla swojego ciągu JSON const size_t bufferSize = JSON_OBJECT_SIZE (0) + JSON_OBJECT_SIZE (1) + JSON_OBJECT_SIZE (2) + 2 * JSON_OBJECT_SIZE (3) + JSON_OBJECT_SIZE (8) + JSON_OBJECT_SIZE (12) + JSON_OBJECT_SIZE (56) + 2160; DynamicJsonBuffer jsonBuffer (bufferSize); JsonObject & root = jsonBuffer.parseObject (http.getString ()); / * Koniec danych frazowania * / // Zaadresuj wartość sin do żądanych zmiennych JsonObject & current_observation = root; // pod current_observation JsonObject & current_observation_observation_location = current_observation; // pod lokalizacją_obserwacji const char * current_observation_station_id = current_observation; // „ICHENNAI1” // pobierz szczegóły lokalizacji const char * current_observation_local_time_rfc822 = current_observation; // Czas lokalny // pobierz czas lokalny const char * current_observation_temperature_string = current_observation; // "90,7 F (32,6 C)" // pobierz wartość temperatury const char * current_observation_relative_humidity = current_observation; // "73%" // pobierz wartość wilgotności
Właśnie skopiowałem zmienne current_observation_station_id, current_observation_local_time_rfc822, current_observation_temperature_string i current_observation_relative_humidity . Ponieważ planujemy wyświetlić tylko te cztery dane na naszym ekranie LCD.
W końcu uzyskaliśmy potrzebne nam dane z internetu i zapisaliśmy je jako zmienną, z której możemy wygodnie korzystać. Aby wysłać te dane do Arduino, po prostu zapisujemy je szeregowo przez monitor szeregowy. Następujące wiersze zrobią dokładnie to samo
// Wydrukuj zmienne przez monitor szeregowy Serial.print (current_observation_station_id); // wyślij szczegóły lokalizacji do Arduino delay (100); // opóźnienie stabilności Serial.print (current_observation_local_time_rfc822); // wyślij szczegóły czasu lokalnego do Arduino delay (100); // opóźnienie stabilności Serial.print (current_observation_temperature_string); // wyślij szczegóły temperatury do Arduino delay (100); // opóźnienie stabilności Serial.print (current_observation_relative_humidity); // wyślij szczegóły wilgotności do Arduino delay (100); // opóźnienie stabilności
Zauważ, że użyłem Serial.print (), a nie Serial.println (), ponieważ polecenie Serial.println () doda / n i / r wraz z danymi, które nie są nam potrzebne. Dodaliśmy również opóźnienie 10 sekund, aby ESP wysyłać te wartości tylko w odstępie 10 sekund do Arduino.
Łączenie ESP8266-01 z Arduino:
Do tej pory zaprogramowaliśmy nasz ESP8266-01 do odczytywania wymaganych danych z Internetu w odstępach 10 sekund i wysyłania ich szeregowo. Teraz musimy połączyć ESP z Arduino, abyśmy mogli odczytać te dane szeregowe. Musimy również dodać wyświetlacz LCD 16 * 2 do Arduino, abyśmy mogli wyświetlać dane otrzymane z modułu ESP8266. Schemat obwodu interfejsu modułu ESP8266 z Arduino przedstawiono poniżej
Upewnij się, że pin GPIO_0 jest wolny, zasilaj moduł tylko pinem 3,3 V Arduino i naciśnij przycisk, aby umieścić moduł ESP w module operacyjnym. Teraz program, który wgrywaliśmy do ESP powinien już zacząć działać i moduł należy przesłać dane poprzez pin szeregowy do Arduino. Te piny szeregowe są podłączone do pinów nr 6 i 7 na Arduino. Możemy więc użyć opcji szeregowej oprogramowania na Arduino, aby odczytać te dane szeregowe z pinów.
Program i działanie Arduino:
Kompletny program Arduino jest również podany wraz z kodem ESP na końcu tej strony. Możesz przewinąć w dół, aby wyświetlić program lub przeczytać dalej, jeśli chcesz zrozumieć program.
Program interfejsu jest dość prosty, wystarczy użyć biblioteki szeregowej oprogramowania, aby odczytać dane z pinów 6 i 7 i wyświetlić je na ekranie LCD. Ponieważ odbierane dane są w formacie łańcucha, musimy użyć opcji podciąg, aby złamać ładunek zgodnie z naszym wymaganiem lub nawet przekonwertować go na liczbę całkowitą, jeśli jest to wymagane. Zaczynamy więc od zdefiniowania pinów, do których podłączony jest LCD.
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // Piny, do których podłączony jest LCD LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Ponieważ mamy podłączony do szpilki Rx i Tx ESP8266 z 6 i 7 th pin z Arduino mamy do zainicjowania seryjny oprogramowania dla tych szpilek, tak że możemy odbierać dane szeregowe z nich.I mają nazwy to jako ESP_Serial, można nazwij je, jak chcesz
SoftwareSerial ESP_Serial (6,7); // Tx, Rx
Wewnątrz funkcji setup () inicjalizujemy komunikację szeregową dla monitora szeregowego, a także dla portu szeregowego oprogramowania. Jeśli możesz sobie przypomnieć, stworzyliśmy program ESP do komunikacji z szybkością 9600 bodów, więc musimy użyć tej samej szybkości transmisji dla portu szeregowego oprogramowania. Na wyświetlaczu LCD przez 2 sekundy wyświetlamy również mały komunikat wprowadzający.
void setup () {lcd.begin (16, 2); // Używamy wyświetlacza LCD 16 * 2 lcd.print ("Arduino & ESP"); // Wyświetla wiadomość wprowadzającą Serial.begin (115200); ESP_Serial.begin (9600); opóźnienie (2000); lcd.clear (); }
Wewnątrz funkcji main loop () musimy sprawdzić, czy ESP8266 coś wysyła. Jeśli tak, to odczytujemy ciąg z ESP8266 i zapisujemy go w zmiennej o nazwie payload. Zmienna payload jest typu String i będzie zawierać pełną informację przesłaną z modułu ESP8266.
while (ESP_Serial.available ()> 0) {payload = ESP_Serial.readString ();
Teraz musimy podzielić ten ciąg na małe kawałki, abyśmy mogli ich użyć do własnych celów, w tym przypadku musimy je podzielić, aby wyświetlić je na ekranie LCD. Można to łatwo zrobić za pomocą funkcji podciąg w Arduino. Musisz znać pozycję każdego znaku, aby użyć tej funkcji podłańcuchowej . Możesz wydrukować ładunek na monitorze szeregowym, aby poznać położenie znaków i użyć ich do kategoryzowania podciągów, jak pokazano poniżej
local_date = payload.substring (14, 20); local_time = payload.substring (26, 31); temperatura = payload.substring (48, 54); Wilgotność = payload.substring (55, 60);
Teraz mogę śmiało użyć tych zmiennych, aby wydrukować je na monitorze szeregowym lub po prostu wydrukować je na wyświetlaczu LCD. Jednak wydrukowanie ich na monitorze szeregowym pomoże nam sprawdzić, czy podciągi są poprawnie podzielone. Następnie po prostu drukujemy je na wyświetlaczu LCD, używając następujących linii
lcd.clear (); lcd.setCursor (1, 0); lcd.print (data_lokalna); lcd.setCursor (8, 0); lcd.print (czas_lokalny); lcd.setCursor (1, 1); lcd.print (temperatura); lcd.setCursor (10, 1); lcd.print (wilgotność);
Prześlij program do Arduino i upewnij się, że połączenia są zgodne z powyższym schematem obwodu. Dostosuj kontrast wyświetlacza LCD, aż będziesz wyraźnie widzieć rzeczy. Na wyświetlaczu LCD powinien pojawić się komunikat Intro, a po kilku sekundach szczegóły, takie jak data, godzina, temperatura i wilgotność, powinny zostać wyświetlone na ekranie LCD, jak pokazano poniżej.
Możesz również zauważyć, że niebieska dioda LED na ESP8266 miga za każdym razem, gdy przychodzą dane. Jeśli tego nie widzisz, oznacza to, że ESP nie jest w trybie programowania, spróbuj nacisnąć przycisk Resetuj również sprawdź połączenia.
Podobnie, możesz użyć dowolnego interfejsu API, aby uzyskać wymagane dane z Internetu i przesłać je do Arduino i przetworzyć swoją pracę z Arduino. W Internecie dostępnych jest mnóstwo API, dzięki którym możesz wykonać nieograniczoną liczbę projektów. Mam nadzieję, że rozumiesz projekt i cieszysz się jego budowaniem. Jeśli napotkałeś jakiś problem, opublikuj go w sekcji komentarzy poniżej lub na naszych forach.
Tutaj znajdziesz wszystkie nasze projekty związane z ESP8266.