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

  • 2 porty GPIO, oba z PWM
  • Procesor RISC 80MHz (160MHz) Tensilica L106.
  • Pamięć FLASH - 1MB
  • WiFi 802.11 b/g/n
  • Wbudowana antena na PCB
  • Obsługa protokołów UART, SPI, I2C
  • Logika 3.3V
  • Napięcie zasilanie 3.3V - przekroczenie tej wartości to niemal pewne uszkodzenie modułu!
  • Temperatura pracy -40°~125°

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:

  • Moduł WiFi ESP-01S
  • Programator - dedykowany konwerter dla ESP-01S
  • Python 3.7.x (Windows, Linux)
  • uPyCraft IDE - proste narzędzie do pisania i uruchamiania skryptów
  • esptool.py - narzędzie do wgrywania firmware do ESP

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:
Komentarz: Programator - Konwerter UART
Programator_UART.jpg
Programator_UART.jpg [ 64.64 KiB | Przeglądane 426 razy ]


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:
Programator_UART_1.jpg
Programator_UART_1.jpg [ 71.37 KiB | Przeglądane 426 razy ]
Załącznik:
Programator_UART_2.jpg
Programator_UART_2.jpg [ 78.74 KiB | Przeglądane 426 razy ]
Załącznik:
Programator_UART_3.jpg
Programator_UART_3.jpg [ 86.96 KiB | Przeglądane 426 razy ]


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
Programator_UART_ESP01S.jpg [ 67.21 KiB | Przeglądane 426 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
uPyCraft_1.png [ 10.32 KiB | Przeglądane 426 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
uPyCraft_2.png [ 7.61 KiB | Przeglądane 426 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/