Forum AstroCD http://www.astrocd.pl/forum/ |
|
Arduino w astronomii - Moduł WiFi ESP-01S http://www.astrocd.pl/forum/viewtopic.php?f=105&t=5871 |
Strona 1 z 1 |
Autor: | Radosław Deska [ piątek, 28 czerwca 2019, 16:45 ] |
Tytuł: | Arduino w astronomii - Moduł WiFi ESP-01S |
Gdyby tak można było... ...podłączyć do Internetu zbudowane przez siebie urządzenie oparte o Arduino? Pobrać aktualny czas z Internetu, prognozę pogody, godzinę przelotu Międzynarodowej Stacji Kosmicznej ISS. Wyświetlić informacje na wyświetlaczu, ewentualnie połączyć się z naszym urządzeniem i spojrzeć na parametry przez przeglądarkę internetową.... Można to zrobić! Bez problemu pobierzemy dane z API serwisu pogodowego np. OpenWeatherMap Nie będzie problemu z pobraniem aktualnego czasu by nasze urządzenie było zsynchronizowane. Strona WWW do obsługi naszego urządzenia to pestka. Dane przelotów ISS nad naszą lokalizacją z serwisu no2yo.com to chwila. Co powiesz na NASA Image of the Day? - do zrobienia Mam nadzieję, że już widzicie możliwości jakie kryją się w małym module WiFi ESP-01S - pełna komunikacja ze światem jest jak na dłoni! Gasimy euforię - nic nie ma za darmo Muszę zgasić. Nie ma nic za darmo i nie mam tu absolutnie na myśli kosztów poniesionych z tytułu zakupu niezbędnych modułów czy drobnych elementów elektronicznych. Podejrzewam, że narobiłem małym wstępem duży apetyt. Mam nadzieję, że pobudziłem wyobraźnię na jeszcze więcej "Gdyby tak można było..." Jak już wspomniałem - nie ma nic za darmo. Będzie trzeba poznać co to jest format danych JSON, język programowania Micropython (odmiana Pythona dla elektroniki - w uproszczeniu) Nie jest to trudne, choć przyznam, że mnie na początku przeraziło, ale jest do opanowania i nie jest to tak skomplikowane jak się wydawało. Moduł WiFi ESP-01S maleństwo o dużych możliwościach Moduł ESP-01S to najtańsza wersja całej rodziny modułów WiFi opartych o układ ESP8266. Specyfikacja
Specyfikacja specyfikacją, ale praktyka znacznie ciekawsza. Krótko mówiąc mamy możliwość podłączenia się za pomocą modułu do sieci Internet. Moduł bez problemu może komunikować się za pomocą UART z dowolnym urządzeniem z portem COM czy też z Arduino. Moduł można wyposażyć w odpowiedni dla nas firmware. Fabryczny umożliwia komunikację z modułem z wykorzystaniem komend AT stosowanych też w modemach. Istnieje też kilka rozwiązań firmware z ciekawymi funkcjonalnościami jak np ESPEasy (polecam, zwłaszcza do zastosowań automatyki domowej) Jest też możliwość wgrania interpretera języka MicroPython co daje nam możliwość pisania własnych skryptów. Począwszy od połączenia z lokalną siecią WiFi, po przez pobieranie danych z internetu np. we wspomnianym formacie JSON, kończąc na wysłaniu ich do Arduino. Zdecydowanie polecam MicroPython'a, to ten język daje nam tak szerokie możliwości i pełnie swobody w realizacji pomysłów. Praktyka. Niezbędnik do programowania ESP-01S Skupię się na konkretnych programach, z których korzystam oraz na sprzęcie który posiadam. Wielokrotnie używałem tych metod programowania (wgrywania firmware) i mam je sprawdzone. Oczywiście są inne sposoby , nie mniej dobre, jednak chce skupić się na tych rozwiązaniach, które sam sprawdziłem i wiem, że dają zamierzony efekt. Potrzebne elementy i oprogramowanie:
Opis instalacji Python 3.7.x i uPyCraft - instrukcja w języku angielskim Instalacja Pythona jest niezbędna do uruchomienia uPyCraft oraz do uruchomienia esptool.py Programator - konwerter UART Programator, który wykorzystuję jest chyba jednym z najtańszych jakie można kupić. Tak na prawdę jest to tylko konwerter UART, który zapewnia prawidłowe zasilanie układu ESP-01S. Jednocześnie umożliwia komunikację z nim (konwerter jest widoczny w systemie jako port COM). Konwerter może służyć jako programator, ale wymaga drobnej modyfikacji i bez lutownicy nie obędzie się (odrobina precyzji też może się przydać) Załącznik: Modyfikacja umożliwi nam programowanie za pomocą tego konwertera. Polega ona na dolutowaniu do pinów konwertera goldpinów tak by można było za pomocą zworki wprowadzić moduł ESP-01S w tryb programowania. Wybrałem to rozwiązanie ze względu na prostotę i szybkość dokonania takiej modyfikacji. Można też dolutować dwa przewody zakończone goldpinami. W moim przypdaku wykorzystałem goldpiny kątowe, które wyprostowałem i jeden z nich wygiąłem w taki sposób by pasował do płytki. Załącznik: Załącznik: Załącznik: Ostatnie zdjęcie myślę, że dokładnie pokazuje, o które piny na płytce dokładnie chodzi. Zwarcie nóżki ESP-01S oznaczonej jako IO0 (GPIO0) wprowadza układ w tryb programowania i umożliwia nam wgranie firmweare do niego. Taka prosta modyfikacja ma pewną wadę związaną z resetowaniem układu. Nie mamy przycisku RESET. Jednak nie jest to aż tak poważna wada. Wspomnę o tym jeszcze przy omawianiu samego programowania układu. Dobrze, mamy zmodyfikowany konwerter, możemy przejść teraz do wgrania firmwear'u do naszego ESP-01S. Narzędzie esptool.py - Pobranie, ustanowienie parametrów połączenia, podstawowe komendy, wgrywanie firmweare'u Narzędzie esptool.py jest skryptem napisanym w Pythonie służącym do wgrywania do układów opartych na ESP8266 oprogramowania. Umożliwia również kasowanie zawartości pamięci FLASH, zrzut zawartości pamięci FLASH do pliku, identyfikację układu jaki posiadamy i kilka innych przydatnych poleceń. Zakładam, że interpreter Python 3.7.x jest już zainstalowany, bez niego nie zadziała nam esptool.py Link do pobrania: esptool.py Narzędzie jest dostępne na GitHub'ie. Klikamy w zielony przycisk Clone or download i wybieramy opcję Download ZIP. Ściągamy plik ZIP, następnie należy rozpakować plik w wybrane miejsce na dysku swojego komputera. Po wejściu z linii komend do katalogu gdzie mamy esptool.py warto sprawdzić czy wszystko jest okej wydając polecenie: Kod: esptool.py help jeśli nie zadziała, pojawi się błąd, można sprawdzić jeszcze w ten sposób Kod: python esptool.py help Efektem tego polecenia powinno być wyświetlenie pomocy dla esptool.py Kod: usage: esptool [-h] [--chip {auto,esp8266,esp32}] [--port PORT] [--baud BAUD] [--before {default_reset,no_reset,no_reset_no_sync}] [--after {hard_reset,soft_reset,no_reset}] [--no-stub] [--trace] [--override-vddsdio [{1.8V,1.9V,OFF}]]............... Jeśli tak jest to świetnie możemy wykonać kolejny krok. Przetestujemy esptool.py w praktyce. Pobierzemy informacje o module ESP i wyczyścimy pamięć FLASH z niepotrzebnych rzeczy. Wpinamy moduł ESP-01S do gniazda w programatorze - konwerterze jak na zdjęciu. Na płytce powinna być też strzałka wskazująca w którą stronę ma być zorientowana płytka ESP. Jest to bardzo ważne! odwrotne wpięcie ESP może spowodować uszkodzenie konwertera i/lub modułu ESP! Załącznik:
Komentarz: Prawidłowa pozycja modułu ESP-01S w konwerterze UART Programator_UART_ESP01S.jpg [ 67.21 KiB | Przeglądane 8939 razy ] Parametry transmisji Moduł WiFi w konwerterze umieszczony prawidłowo, zworka założona (IO0 podłączone do masy), konwerter wpięty do portu USB, nadszedł czas na pobranie informacji o układzie. W moim przypadku esptool.py sam bez problemu rozpoznaje, na którym porcie COM jest moduł ESP, jednak może być tak, że nie rozpozna wówczas w poleceniu warto wskazać na którym porcie COM ma być ustanowiona komunikacja odpowiednim parametrem: Kod: esptool.py --port COM8 polecenie_esptool W moim przypadku jest to port COM8. w poleceniach nie będę używał tego parametru, ale pamiętajcie o tym parametrze. Może jeszcze przydać się parametr ustawiający prędkość transmisji: Kod: esptool.py --port COM8 --baud 9600 polecenie_esptoo W tym przypadku parametr --baud wskazuje na prędkość 9600. Może zdarzyć się też tak, że wartość prędkości transmisji dla danego modułu ESP będzie inna. Warto wówczas poeksperymentować. Podstawowe komendy esptool.py Polecenie: chip_id - wyświetla informacje na temat naszego układu ESP Kod: esptool.py chip_id Efektem wydania tego polecenia będzie: Kod: esptool.py v2.6 Found 2 serial ports Serial port COM8 Connecting.... Detecting chip type... ESP8266 Chip is ESP8266EX Features: WiFi MAC: 5c:cf:7f:fa:bf:4b Uploading stub... Running stub... Stub running... Chip ID: 0x00fabf4b Hard resetting via RTS pin... Polecenie: flash_id - wyświetla informacje na temat naszego układu ESP Kod: esptool.py flash_id Efektem wydania tego polecenia będzie: Kod: esptool.py v2.6 Serial port COM8 Connecting.... Detecting chip type... ESP8266 Chip is ESP8266EX Features: WiFi MAC: 5c:cf:7f:fa:bf:4b Uploading stub... Running stub... Stub running... Manufacturer: e0 Device: 4014 Detected flash size: 1MB Hard resetting via RTS pin... Jak widać uzyskaliśmy informację, że moduł ma rozmiar pamięci FLASH = 1MB Problem przycisku RESET Wspomniałem o braku przycisku RESET w zmodyfikowanym konwerterze dla ESP. Próba wydania kolejnego polecenia kończy się w moim przypadku takim wynikiem: Kod: esptool.py v2.6 Serial port COM8 Connecting........____ Niestety procedura jest ręczna : wyjmujemy konwerter z portu USB, wkładamy konwerter do portu USB ponownie, wydajemy polecenie esptool.py Jest to niedogodność, ale nieuciążliwa skoro tak na prawdę potrzebujemy wgrać tylko firmware. Właśnie! Frimware trzeba wgrać! Procedura wgrywania firmware do modułu WiFi ESP-01S Naszym firmware'em będzie MicroPython. Teraz bardo ważna informacja. Wykorzystamy firmware dla układów ESP8266 z pamięcią flash większą lub równą 1MB. Dlatego pamiętać należy, że moduł ESP-01 ma 512kB natomiast ESP-01S ma 1MB. To do dzieła, podłącz konwerter z ESP do komputera. Odpalamy linię komend i działamy z narzędziem esptool.py 1. Kasowanie pamięci FLASH Wydajemy polecenie: Kod: esptool.py erase_flash Po chwili pamięć flash będzie skasowana i zobaczymy taką informację: Kod: esptool.py v2.6 Serial port COM8 Connecting.... Detecting chip type... ESP8266 Chip is ESP8266EX Features: WiFi MAC: 5c:cf:7f:fa:bf:4b Uploading stub... Running stub... Stub running... Erasing flash (this may take a while)... Chip erase completed successfully in 3.7s Hard resetting via RTS pin... Pamięć FLASH skasowana - wyjmujemy konwerter z portu USB odkładamy na bok i idziemy do punktu numer 2. 2. Pobranie pliku bin ze strony https://micropython.org Wchodzimy na stronę https://micropython.org/download#esp8266 i pobieramy ostatni dostępny plik bin znajdujący się w sekcji Firmware for ESP8266 boards. Ostatni dostępny w czasie tworzenia postu plik: esp8266-20190529-v1.11.bin Najlepiej zapisać ten plik w miejscu gdzie znajduje się też esptool.py, ułatwi to znacznie wpisywanie nazw plików bez konieczności dodawania pełnych ścieżek. 3. Wgrywamy firmware do ESP Podłącz konwerter z ESP do poru USB. Zakładam, że plik pobrany z punktu 2 znajduje się w tym samym miejscu gdzie esptool.py. Wydajemy polecenie wgrania firmware do ESP: Kod: esptool.py write_flash --flash_size=detect 0 esp8266-20190529-v1.11.bin W efekcie końcowym jeśli poszło wszystko zgodnie z planem powinniśmy uzyskać taki wynik: Kod: esptool.py v2.6 Found 2 serial ports Serial port COM8 Connecting.... Detecting chip type... ESP8266 Chip is ESP8266EX Features: WiFi MAC: 5c:cf:7f:fa:bf:4b Uploading stub... Running stub... Stub running... Configuring flash size... Auto-detected Flash size: 1MB Flash params set to 0x0020 Compressed 617880 bytes to 402086... Wrote 617880 bytes (402086 compressed) at 0x00000000 in 35.6 seconds (effective 138.7 kbit/s)... Hash of data verified. Jeżeli tak jest to świetnie! Mamy wgrany firmware, nasz ESP-01S ma wgrany interpreter MicroPython'a! Wyjmujemy konwerter z portu USB komputera i odkładamy na bok. 4. Sprawdzenie działania MicroPython'a Zdejmujemy zworkę z konwertera. Teraz pin oznaczony IO0 (GPIO0) nie jest podłączony do masy (GND) układu, ESP-01S będzie pracował w normalnym trybie. Wkładamy konwerter do portu USB i uruchamiamy program uPyCraft. Z menu Tools wybieramy Serial i wskazujemy na którym porcie COM widoczny jest nasz konwerter z ESP. Załącznik: uPyCraft_1.png [ 10.32 KiB | Przeglądane 8939 razy ] Jeżeli po wybraniu portu zobaczysz charakterystyczny znacznik przy katalogu device i w rozwinięciu plik boot.py oznacza to, że wszystko przebiegło zgodnie z planem: Załącznik: uPyCraft_2.png [ 7.61 KiB | Przeglądane 8939 razy ] Moduł ESP-01S jest gotowy do tworzenia skryptów realizujących nasz "Gdyby tak można było..." Podsumowanie Mam nadzieję, że nie przeraził was pierwszy post wątku. Jest bardzo techniczny ale taki musi być, jest to absolutnie konieczne by przygotować sobie sprzęt do dalszych zabaw z Arduino i realizacji pomysłów związanych zastosowaniem Arduino w Astronomii. Tak przygotowany moduł jest gotowy do połączenia się z Internetem i pobieraniem z niego danych, obróbką i komunikacją z Arduino. Tradycyjnie służę pomocą gdyby pojawiły się problemy czy pytania. Zdaję sobie sprawę, że w niektórych miejscach może być coś nie jasne. Tym bardziej proszę o pytania. Dodam od siebie, że ostatnio siedziałem nad tematem pobierania danych na temat położenia ISS z serwisu no2yo.com i działa to fajnie. Dlatego też postanowiłem popełnić ten wpis w celu zaciekawienia większego grona osób "Gdyby tak można było..." ![]() Prezentowane rozwiązanie nie są jedyne i słuszne. Sposób tworzenia urządzeń oraz oprogramowania nie koniecznie musi być całkowicie zgodne ze sztuką. Nie daję gwarancji na prezentowane rozwiązania i nie biorę odpowiedzialności za szkody jakie mogą wyniknąć z tego tytułu. Wszystkie kody źródłowe programów, przykłady schematów można dowolnie wykorzystywać i modyfikować z zachowaniem informacji o źródle pochodzenia i autorze. Obowiązuje licencja MIT dla oprogramowania i Open Hardware dla urządzeń. |
Strona 1 z 1 | Strefa czasowa: UTC + 2 |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |