Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

LoLin ESP8266 i szybki start z MicroPython.

TechEkspert 30 Oct 2017 18:36 9048 7
Optex
  • LoLin ESP8266 i szybki start z MicroPython.
    Warto obserwować gadżety elektroda.pl gdyż raz na jakiś czas pojawi się tam moduł LoLin oparty o ESP8266. Moduł możecie oprogramować m.in z wykorzystaniem Arduino, LUA, MicroPython, moduł zapewnia łączność WiFi 802.11b/g/n, wyposażony jest w konwerter USB<->UART CH340 pozwalający na umieszczanie kodu w pamięci flash (4MB). Warto zapoznać się z poprzednimi materiałami o ESP8266:
    - instalowanie sterowników do konwertera CH340
    - Start z ESP8266, uruchomienie WIFI, IoT z Blynk i Thingspeak, czujnik temperatury TMP36, funkcja głębokiego uśpienia ESP.deepSleep()
    - ESP8266 i DS18B20
    - ESP8266 i SPIFFS - flash file system

    LoLin ESP8266 i MicroPython
    ESP8266 dobrze integruje się z Arduino ale warto wypróbować też inne możliwości takie jak MicroPython.
    Na początek na komputerze instalujemy środowisko Python: https://www.python.org/downloads/
    Następnie z wykorzystaniem narzędzia pip instalujemy esptool.
    Wykorzystałem Python 2.7.x ale esptool jest kompatybilne także z Python 3.4 i nowszym.
    Jeżeli podczas instalacji Python skonfigurowaliśmy ścieżki (można to sprawdzić wydając polecenie echo %PATH%), wystarczy w cmd wydać polecenie:
    pip install esptool

    Tutaj więcej informacji o narzędziu: https://github.com/espressif/esptool
    Po podłączeniu ESP8266 i określeniu na jakim numerze portu pracuje konwerter USB<->UART można przetestować działanie esptool.
    Przykładowo dla portu COM15:
    esptool.py -p COM15 read_mac
    pozwoli na odczytanie MAC podłączonego ESP8266
    esptool.py -p COM15 flash_id
    pokaże informacje o module i wielkości pamięci flash.

    Oczywiście COM15 zastępujecie rzeczywistym numerem portu, na którym pojawił się konwerter dostępny na płytce,
    przy pomocy przełącznika -b można ustawić szybkość transmisji np. 115200.

    Pobieramy i instalujemy firmware zgodnie z opisem:
    http://docs.micropython.org/en/latest/esp8266...66/tutorial/intro.html#deploying-the-firmware
    Wybieramy ostatni stabilny firmware:
    http://micropython.org/download#esp8266

    Kasowanie firmware:
    esptool.py -p COM15 erase_flash

    Umieszczamy nowy firmware:
    esptool.py -p COM15 write_flash --flash_size=detect 0 ścieżka i nazwa_pobranego_pliku.bin

    Powinniśmy otrzymać wynik zbliżony do:
    Code: text
    Log in, to see the code


    Po tych działaniach łącząc się z szybkością 115200 z wykorzystaniem np. PuTTY na port COM, na którym pracuje konwerter połączony z ESP8266 otrzymamy REPL (read-eval-print loop) czyli linię poleceń interpretera Python.
    Możemy przetestować działanie wpisując fragment kodu:
    print("Test")

    który spowoduje wyświetlenie napisu:
    Test

    a następnie wprowadzamy:
    import esp
    esp.check_fw()
    co pozwoli na sprawdzenie integralności firmware.

    Po zainstalowaniu nowego firmware ESP8266 działa w trybie WiFi AP, ESSID: MicroPython-xxxxxx gdzie xxxxxx zastąpione jest częścią MAC urządzenia. Hasło WiFi to: micropythoN, adres modułu: 192.168.4.1.

    Więcej na temat korzystania z WiFi w MicroPython znajdziecie tutaj:
    https://docs.micropython.org/en/latest/esp8266/library/network.html

    Dość łatwo możemy wykonać skanowanie dostępnych w pobliżu sieci bezprzewodowych:
    Code: python
    Log in, to see the code


    Sposób w który możemy wyłączyć wspomniany wbudowany AP:
    Code: python
    Log in, to see the code


    Podczas testów zauważyłem bardzo dużą czułość ESP w tym module, wykrywał sieci których nie widziały np. smartfony, prawdopodobnie nie byłoby możliwe połączenie z tymi AP ale były one widoczne na liście.

    Magistrale i czujniki w MicroPython
    W dokumentacji online znajdziecie przykłady obsługi I2C, SPI, czujników temperatury DS18B20:
    http://docs.micropython.org/en/latest/esp8266/esp8266/quickref.html

    Wypróbujmy kod odczytujący dane z czujnika DTH22, można go porównać z kodem wykorzystanym do odczytu temperatury i wilgotności na platformie Arduino:
    Arduino UNO i DTH22.
    Pamiętajcie o podciągnięciu do zasilania poprzez rezystor ~5.1kom wyprowadzenia data czujnika AM2302 (chyba że jest w formie modułu i na płytce znajduje się rezystor łączący pin data z vcc). Wykorzystamy pin D4 do komunikacji z DTH22, czujnik łączymy z masą a także zasilaniem 3.3V na płytce LoLin. Pin D4 będzie odpowiadał GPIO2, np. tutaj można znaleźć przyporządkowanie wyprowadzeń w typowych modułach z ESP8266: http://escapequotes.net/esp8266-wemos-d1-mini-pins-and-diagram/

    Code: python
    Log in, to see the code


    Skrypty startowe
    Wydawanie poleceń w konsoli szeregowej to dobry sposób na testy, natomiast w docelowym rozwiązaniu plik z kodem dla MicroPython będzie znajdował się w pliku zapisanym w pamięci flash. Pliki startowe pozwolą na wykonanie określonego kodu po zasileniu modułu.

    Warto zaopatrzyć się w pomocne narzędzie Adafruit o nazwie ampy:
    https://github.com/adafruit/ampy

    Podobnie jak przy instalacji esptool w cmd na PC wydajemy polecenie:
    pip install adafruit-ampy

    Testujemy:
    ampy -p COM15 ls
    Do dyspozycji mamy różne polecenia ls listowanie plików, get wyświetlenie pliku, put umieszczenie a rm skasowanie pliku.

    W pamięci flash znajduje się plik boot.py wykonywany po starcie, zobaczmy jaka jest jego zawartość:
    ampy -p COM15 get boot.py

    Otrzymamy coś w rodzaju:
    Code: text
    Log in, to see the code


    Utwórzmy na PC plik main.py, który po skopiowaniu do flash na ESP8266 uruchomi się po każdym zasileniu modułu zaraz po wykonaniu boot.py,
    dla przykładu będzie to kod w pętli odczytujący temperaturę i wilgotność z czujnika DTH22 i wyświetlający dane w konsoli szeregowej.

    Code: python
    Log in, to see the code


    Wszytko pod "while True" poprzedzamy tabulatorem.
    Zapisujemy plik w określonej lokalizacji na PC.

    Umieszczamy plik w pamięci flash:
    ampy -p COM15 put ścieżka\main.py

    Po zrestartowaniu modułu w konsoli szeregowej zobaczymy efekt działania main.py
    LoLin ESP8266 i szybki start z MicroPython.

    Można znaleźć wiele ciekawych przykładów połączenia ESP8266 i MicroPython np.:
    Stacja pogodowa pobierająca dane z czujnika DTH22 i czujnika ciśnienia BMP180.
    Stacja pogodowa pobierające dane z internetu.

    Jakie macie pomysły na wykorzystanie MicroPython i płytki LoLin opartej o ESP8266?

    Jakie środowisko pracy z ESP8266 preferujecie MicroPython, Arduino a może LUA?


    LoLin ESP8266 i szybki start z MicroPython.
    Can you write similar article? Send message to me and you will get SD card 64GB.
    About Author
    TechEkspert
    Editor
    Offline 
    W moich materiałach znajdziecie testy i prezentacje sprzętu elektronicznego, modułów, sprzętu pomiarowego, eksperymenty. Interesuje mnie elektronika cyfrowa, cyfrowe przetwarzanie sygnałów, transmisje cyfrowe przewodowe i bezprzewodowe, kryptografia, IT a szczególnie LAN/WAN i systemy przechowywania i przetwarzania danych.
    Has specialization in: elektronika, mikrokontrolery, rozwiązania it
    TechEkspert wrote 4142 posts with rating 3436, helped 12 times. Been with us since 2014 year.
  • Optex
  • #2
    Tomq
    Level 38  
    Jakie macie pomysły na wykorzystanie MicroPython i płytki LoLin opartej o ESP8266?

    Koledzy z sąsiedniego forum oczywiscie sugerują wykorzystanie modułu do sterowania robotem - https://www.forbot.pl/forum/topics27/micropython-na-esp8266-vt11747.htm :) (przy okazji też kilka kawałkó przykłądowego kodu w MicroPythonie).
  • Optex
  • #3
    Atreyu Makiavel
    Level 34  
    Brat irytuje ludzi tym. Za pomocą jakiegoś backtracka rozsyła deauth i rozłącza urządzenia innym albo generuje mnóstwo sieci o tym samym SSID :-D
  • #4
    radogost-59
    Level 2  
    super , chociaż nie wiem dlaczego po podłaczeniu czujnika DHT11 odczytywana temperatura to około 800 stopni C.
    i jeszcze jedna prośba- pytanie : jak to przesłać po wifi? (korzystając z microPythona)
    Poza tym wielkie dzięki - toturial pomógł mi rozpocząć przygodę z micropythonem i esp8266.
    Pozdawiam
    Leslaw
  • #5
    TechEkspert
    Editor
    @radogost-59 z DTH11 trzeba zdebugować na poziomie programowym i sprzętowym gdzie powstaje błąd,
    co do połączenia z internetem przez WiFi jest to dość proste:
    http://docs.micropython.org/en/v1.9.3/esp8266/esp8266/tutorial/network_basics.html
    można sobie bezpośrednio z REPL próby przeprowadzić.

    Jeżeli uda Ci się coś ciekawego zrealizować na MicroPython to warto opisać na elektroda.pl np. w DIY lub artykułach.
  • #6
    radogost-59
    Level 2  
    Witam
    dzięki za sugestie, ale źle zredagowałem pytanie:
    W uPythonie napisałem programik do pomiaru temperatury na ds18b20 z funkcją alarmu przy przekroczeniu określonego progu , chodzi o to aby teraz dane były wysyłane automatycznie co np 60 sek, a przynajmniej informacja o przkroczonym produ. najlepiej w formie sms-u, ewentualnie na na inny moduł esp8266 w dowolnej formie.
    Na tym etapie potrafię się skomunikować z modułem po wifi i go odpytać , ale nie wiem jak zrobić aby moduł sam wysyłał komunikat .
    ( Chodzi o to ,że Moja Pani bardzo często gotuje wodę w CO...)
  • #7
    TechEkspert
    Editor
    Można przesyłać np. do Blynka:
    https://github.com/vshymanskyy/blynk-library-python
    a z blynka powiadomienia na smartfon lub mail,
    albo do thingspeak: https://gist.github.com/artem-smotrakov/80cac14c87ad443da5abe416c7026d60
  • #8
    User removed account
    Level 1