Kurs ESP8266 & MicroPython #1: Konfiguracja i pierwszy program

W poprzedniej lekcji tego kursu poznałeś podstawowe informacje o ESP8266 i dowiedziałeś się, jak zainstalować MicroPythona. Tym razem zajmiemy się jego konfiguracją.

Łączenie z siecią Wi-Fi
Otwórz jakikolwiek monitor portu szeregowego (ja używam Realterm), ustaw właściwy port COM i prędkość transmisji 115200 bodów. Po zresetowaniu płytki przyciskiem RST powinieneś ujrzeć informacje o module, numer wersji oraz krótką instrukcję łączenia się z siecią w trybie STA (moduł połączy się z istniejącą siecią, zamiast tworzyć swoją własną). Najwyższa pora to zrobić.

Aby uzyskać dostęp do funkcji służących do obsługi sieci trzeba najpierw zaimportować moduł, wysyłając komendę import network. Po wykonaniu tej czynności możemy włączyć obsługę trybu STA poprzez wysłanie sta_if = network.WLAN(network.STA_IF); sta_if.active(True). Jeśli chcesz, możesz teraz sprawdzić, które sieci są widziane przez moduł używając sta_if.scan() lub od razu połączyć się ze swoją siecią wpisując sta_if.connect('nazwa_sieci', 'hasło'). Żeby sprawdzić, czy poprawnie połączyłeś się z siecią możesz wpisać sta_if.isconnected() lub sta_if.ifconfig(), dzięki czemu otrzymasz jeszcze dane dotyczące konfiguracji potrzebne później.

Struktura plików
Wszystko, co wykonałeś do tej pory było tymczasowe. Ustawienia znikną w przypadku zaniku zasilania lub zresetowania płytki. Co więc zrobić, żeby układ automatycznie łączył się z siecią po resecie?
Odpowiedzią jest plik boot.py, który – jak można wnioskować po nazwie – wykonywany jest w momencie uruchamiania układu. Po wykonaniu tego pliku jest wykonywany plik main.py. Nic nie stoi na przeszkodzie, żeby dodać więcej plików, ale póki co te dwa w zupełności wystarczą. Do tych plików można się dostać z poziomu linii komend, ale ich edytowanie nie jest wtedy zbytnio wygodne. Z pewnością jeszcze do tego wrócimy, gdy zechcemy napisać program, który będzie coś zapisywał do plików, zaś do ich wgrywania z poziomu komputera użyjemy narzędzia WebREPL.

WebREPL
WebREPL jest wygodnym narzędziem do komunikacji z modułem, ponieważ pozwala na pobieranie oraz wysyłanie plików bez używania komend. Można się do niego dostać na dwa sposoby: wchodząc na tę stronę lub ściągając go z GitHuba i otwierając plik webrepl.html w przeglądarce. Jeśli wybrałeś drugą opcję, polecam od razu zamienić w pliku webrepl.html ciąg ws://192.168.4.1:8266/ na ciąg zawierający adres IP Twojego modułu, czyli pierwszy z adresów uzyskanych poprzez użycie sta_if.ifconfig(), dzięki temu nie będziesz musiał go za każdym razem zmieniać. Jeśli w polu znajduje się prawidłowy adres, wciśnij Connect. Za pierwszym razem zostaniesz poproszony o utworzenie hasła, które będzie wymagane do każdego kolejnego połączenia przez WebREPL. Teraz możesz pobrać plik boot.py. Jego zawartość powinna wyglądać następująco:

1
2
3
4
5
6
7
# This file is executed on every boot (including wake-boot from deepsleep)
#import esp
#esp.osdebug(None)
import gc
import webrepl
webrepl.start()
gc.collect()

# jest w Pythonie oznaczeniem komentarza, wszystko w danej linii jest niewidoczne dla interpretera i nie będzie wykonywane. Czwarta i piąta linia odpowiada za zaimportowanie modułów gc (garbage collector) oraz webrepl, zaś kolejne dwie uruchamiają WebREPL oraz odśmiecanie pamięci. Za nimi dopisz kod odpowiedzialny za łączenie z siecią, czyli:

8
9
10
11
12
13
14
15
16
17
18
19
20
21
import network
import time
network.WLAN(network.AP_IF).active(False)
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect('ssid', 'hasło')
count = 0
while not sta_if.isconnected():
	time.sleep_ms(1)
	count += 1
	if count==10000:
		print('Not connected')
		break
print('Config: ', sta_if.ifconfig())

Zwróć uwagę na wcięcia – w Pythonie zastępują one nawiasy klamrowe znane z innych języków. W tym przypadku w pętli while wykonywane są kolejno: odczekanie jednej milisekundy, zwiększenie licznika o 1 oraz sprawdzenie warunku, czy licznik osiągnął wartość 10000. Jest to zabezpieczenie przeciwko pozostaniu w pętli, jeśli moduł nie będzie mógł nawiązać połączenia przez 10 sekund (instrukcja break przerywa pętlę). Dzięki temu będziesz mógł połączyć się ręcznie poprzez monitor portu szeregowego, jeśli z powodu np. złych danych nie stanie się to automatycznie. Pamiętaj też o podaniu danych swojej sieci WLAN. Po wszystkim zapisz plik boot.py i wyślij go do modułu ponownie korzystając z WebREPL. Po zresetowaniu modułu powinien on automatycznie połączyć się z siecią i wypisać na port szeregowy informacje o połączeniu. Będzie robił to samo za każdym razem, gdy wciśniesz reset lub ponownie podłączysz zasilanie. Kod zawiera także linijkę do wyłączenia pracy w trybie Access Pointa – domyślnie jest on bowiem włączony, co pozwala praktycznie każdemu połączyć się z modułem.

Jeśli uważnie przeczytasz informacje wysyłane przez ESP, zobaczysz jeszcze wzmiankę o braku pliku main.py. Faktycznie, nie ma go domyślnie i moduł po połączeniu się z siecią nie zrobi nic więcej. Plikiem tym zajmiemy się w kolejnej części kursu i napiszemy klasyczny program migający diodą.

5 myśli na temat “Kurs ESP8266 & MicroPython #1: Konfiguracja i pierwszy program

  1. Witaj.

    Jak już jesteśmy przy zabezpieczeniu przed zostaniem w pętli łączenia z WiFi.

    Dajmy na to, że po 10 sekundach nie udało się podłączyć do AP ale nie dlatego, że np. hasło jest złe ale dlatego, że akurat AP był niedostępny.

    Jak wymusić aby co jakiś czas ponownie podjąć próbę połączenia z AP?

    Znowu przychodzi mi do głowy użycie biblioteki uasyncio?

    Co sądzisz?

    Pozdrawiam

  2. Witam, już jestem i krok dalej Firmware wgrałem, teraz pytanie o sieć i komendami Import network itd. Gdzie je wpisywać? Dzięki

    1. Cześć. Super, że się udało. Te komendy wpisujesz w terminalu (nada się Putty, TeraTerm, Realterm lub nawet monitor portu szeregowego z Arduino IDE) po “zapięciu się” na port szeregowy modułu. Możesz też użyć programu z działu Download, ma kilka bugów, ale generalnie powinien działać. Poza funkcją terminala pozwala na wrzucanie plików na ESPa w krótszym czasie niż przy użyciu WebREPL wspomnianego w artykule. Więcej informacji jest tutaj: klik.

  3. Po ustawieniu sieci nie działało połączenie przez webRPL, musiałem z palca w terminalu wklepać
    >>> import gc
    >>> import webrepl
    >>> webrepl.start()
    wtedy wyrzucił informację

    WebREPL is not configured, run ‘import webrepl_setup’

    po uruchomieniu tej konfiguracji dał wybrać czy ma się uruchamiać po rebocie i ustawił hasło. Dopiero po tym zaczęła konsola przez www działać.

    firmware esp8266-20190816-v1.11-217-geb7eed5d9.bin

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Rozwiąż równanie: *

This site uses Akismet to reduce spam. Learn how your comment data is processed.