Amaro05


osnova:

moduly octopus
wifi / sbernice atp.?




Odstavec se zeleným podkladem patří do článku a bylo by fajn ho také „nějak“ zvýraznit, alespoň rámečkem, ideálně i obdobným barevným podkladem


Octopus LAB – MicroPython pro ESP32 (5)

V dnešním díle ještě trochu odbočíme a připomeneme si, že při vývoji složitějších projektů je nejlepší postupovat po etapách. Zdůrazníme výhody využití prověřených modulů, protože značně usnadňují experimentování s mikrokontroléry. Umožňují nám se soustředit na softwarovou část projektu poté, co je hardwarová část ověřena a správně zapojena. Vede to i ke snazšímu pochopení zapojení a usnadňuje případné změny a vylepšení. A co je hlavní, celý vývoj to značně urychlí a sníží to míru stresu z dílčích neúspěchů. Na závěr přeci jen učiníme další krůček v MicroPythonu – a to připojení k WiFi síti, o kterém se více rozepíšeme až v další části.

V jednu dobu se v Arduino komunitě rozmohlo kreslení „realistického“ zapojení oproti klasickému schématu. Vlevo dole vidíte logo legendárního programu fritzing, který se k tomu používal.
Zapojení podle takového obrázku je pro začátečníka sice lépe čitelné (nemusí se učit žádné schématické značky), ale stejně mu moc nepomůže při realizaci propojování. Ověřili jsme si to při workshopech na jednodušší verzi a buď se pletou piny, což může vést ke zničení modulu, nebo jsou špatné konektory či drátky (a i rozdvojené drátky z obrázku občas zamotají hlavu). Odhalit případnou chybu v zapojení je pak poměrně složité i pro pokročilejší uživatele, protože chyba se dá hledat i v programu (kde ale v tomto případě není).
Obracejí se na nás pak „mladí elektronici“, kteří vůbec netuší proč a jak něco zapojovali, ale ať jim pomůžeme, protože jim „to“ nefunguje. V horším případě to některé odradí natolik, že na dlouhou dobu (možná i natrvalo) na pokusy s elektronikou zanevřou docela.

Právě proto navrhujeme vývojové a experimentální desky, které slouží i jako finálně zapojitelné moduly pro projekty nebo jejich části. Vznikla už celá řada univerzálních plošných spojů, na které se dají jednoduše propojit řídící jednotky (Raspberry Pi, Arduino nebo ESP32) s dalšími I/O jednotkami (vstupní/výstupní moduly: tlačítka, senzory, serva nebo motory). A s postupem času jsme na jediném druhu modulu měli možnost zapojit i několik desítek různých projektů.

DEVboard

Jednou z prvních desek (jejíž druhou verzi z roku 2018 používáme do dneška) byl DEVboard, kde DEV je používané zkrácení pro development (vývoj). Zde můžeme osadit mikrokontrolér ATtiny (po úpravě EEPROM paměť nebo operační zesilovač) nebo Arduino NANO. Modul se dá připojit i k Rasbpery Pi (ke všem modelům), ale také jsme k němu připojovali ESP8266 (což byl oblíbený předchůdce ESP32). Měli jsme zde přímo k dispozici tři tlačítka, pro základní signalizaci tři LEDky a také šlo využít několik druhů displejů (UART serial display / I2C OLED display / ISP LED display).

Takovýto (nebo podobný modul, kterých je dnes i na českých „bastlířských“ e-shopech běžně k dispozici celá řada) vám značně usnadní první experimenty s libovolným mikrokontrolérem. Pokud už máte ověřeno, že HW část je navržena a zapojena správně, můžete se soustředit na SW část. V případě prototypování „drátkováním“ to může být (nejen pro začátečníky) poměrně náročné a důvodů proč „to“ nefunguje může být opravdu mnoho a na více úrovních (HW, FW, SW). Proto velmi vřele doporučujeme (z vlastní zkušenosti) využívat prověřené moduly a při vývoji složitějšího projektu vždy pokračovat po etapách, kdy než pokročíme dál, vždy nejprve oživíme a odzkoušíme menší část. Vede to i k lepšímu pochopení daného zapojení a v případě změn a vylepšení víme lépe, co děláme.

OCTOBUS

Už u několika prvních desek jsme vycházeli z mnohaleté zkušenosti se spojováním různých modulů a proto jsme s velkou péčí vymýšleli propojovací sběrnici. Vznikla tak universální sběrnice OCTOBUS, která má dostupné I2C, SPI, UART, ONEWIRE a čtyři bity pro další „data“. Pak je zde i základní napájení (3 i 5 V). Sběrnice je navržena tak, že jednotlivé desky lze řadit nejen nad sebe, ale i vedle sebe (na velké části desek je částečně průchozí sběrnice na levé i pravé části – jak je vidět na obrázku schématického zapojení DEVboardu).


V poslední dekádě jsme tak navrhli už téměř dvě desítky různých desek, z nichž některé jsou přímo osazeny moduly ESP. V tuto chvíli nejvíce používáme tuto trojici z nich:

K našim deskám se jistě ještě vrátíme. Stále ale platí, že si ve většině základních projektů, které budeme popisovat, vystačíte s libovolným podobným modulem, nejčastěji ESP32-DoIt (2×32 PINů nebo podobným).


Připojení k WiFi

Připojení k internetu bylo vlastně zásadním důvodem vzniku ESP. Původně nemělo řešit nic jiného, ale protože bylo samo o sobě o řád výkonnější než první Arduina ke kterým se připojovalo, velmi brzo se osamostatnilo. Ukázalo se, že na jednoduché projekty (například získání údajů o teplotě z nějakého čidla a odeslání této hodnoty na internet) už pak není Arduino potřeba. A možnost programovat ESP v MicroPythonu považujeme za zásadní výhodu pro návrh, testování a ladění elektronických projektů.

V MicroPythonu připojení k WiFi využívá knihovnu network a je poměrně jednoduché. V prvním kroku se pokusíme „proskenovat“ všechny pro naše ESP32 viditelné sítě. Prvních pár příkazů můžeme zkusit přímo z příkazové řádky Pythonu („>>>“). Pokud vše proběhne tak, jak by mělo, po wifi.active by mělo ESP vypsat True. Ve výpisu pomocí metody wifi.scan( ) (což je pole dostupných sítí) by měla být viditelná i vaše síť, ke které se budete chtít v dalším kroku připojit. Já tu svojí (b’UPCDEA5B8C) vidím jako první (s nejsilnějším signálem).

>>> import network
>>> wifi = network.WLAN(network.STA_IF)
>>> wifi.active(True) # -> True
>>> print(wifi.scan())

[(b'UPCDEA5B8C',b'TgQ\x05\x...',11,-51,4,False),
(b'Pernikova_chaloupka',b'\x...',1,-83,4,False), 
(b'sklenik',b'\xb4\x0f;\x_\x19',6,-92,4,False),
...]

Jednotlivé údaje ve výpisu (kde b‘ značí pole bajtů) jsou:
První je název sítě SSID.
Následuje jedinečná identifikátor zvaný MAC adresa.
Dále máme číslo kanálu, na kterém síť vysílá. (Moje je má 11).
Pak vidíme RSSI (sílu signálu). Hodnota RSSI udává sílu signálu v dBm (decibelech na miliwatt). Vyšší hodnota záporného čísla znamená silnější signál (menší útlum).
Předposlední číslo udává typ šifrování: Hodnota 4 značí, že síť je zabezpečena pomocí WPA2-PSK.


Můžeme si zkusit malý prográmek, který nazveme test_wifi.py.
Oproti manuálovému příkladu přidáváme časovou prodlevu před metodu connect(). Je to zjednodušení, které však přímo funguje (především při první komunikaci ESP s routerem, kdy se čeká na přidělění IP adresy od DHCP) nám prodleva 3-5 sekund zpravidla stačí. Pak si to ale přepíšeme pořádně.

# test_wifi.py
from time import sleep
import network

ssid,key = 'SSID','KEY' #název a heslo sítě

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
sleep(5)
wlan.connect(ssid, key)
print(wlan.ifconfig())

>>> 
('192.168.0.9','255.255.255.0','192.168.0.1','8.8.8.8')

>>> print("IP:", wlan.ifconfig()[0])
IP: 192.168.0.9

Metoda ifconfig() nám vrátí „tuple“, jehož prvním prvkem (s indexem nula) je našemu ESP přidělená IP adresa.


Tuple je datová struktura používaná k ukládání kolekce prvků. Tuple je neměnný (immutable), což znamená, že po vytvoření nelze jeho prvky měnit. Zapisuje se v kulatých závorkách a prvky jsou odděleny čárkou. Tuple může obsahovat prvky různých datových typů, včetně čísel, řetězců, boolovských hodnot, tuple a dalších. Prvky tuple jsou přístupné pomocí indexů, které začínají od 0.



WebREPL

Po úspěšném připojení ESP k internetu si můžete vyzkoušet (v internetovém prohlížeči na vašem počítači) spustit stránku https://micropython.org/webrepl/ (pak se ale připojíme pomocí odkazu s IP).
WebREPL (Web-based Remote Programming Environment for MicroPython) je funkce, která umožňuje vzdálený přístup k mikrokontroléru ESP32 a umožňuje nahrávání a spouštění kódu v jazyce MicroPython pomocí webového rozhraní. V ESP (lépe přes terminál Putty než přes Thonny) zadejte:

>>> import webrepl
>>> webrepl.start()
WebREPL server started on http://192.168.0.42:8266/
Started webrepl in normal mode



Aby bylo možné využívat WebREPL.ESP32 musí být ESP připojeno k Wi-Fi síti. Pak můžete otevřít webový prohlížeč na počítači nebo chytrém zařízení, kam zadejte odkaz, který vypsal WebREPL po svém startu. V našem případě to bylo http://192.168.0.42:8266/, kde 192.168.0.42 byla IP adresa našeho zařízení, vy jí budete mít velmi pravděpodobně jinou.


V tomto okamžiku budete vyzváni k zadání hesla (Password:). WebREPL vyžaduje autentizaci pro zabezpečení přístupu. (My máme v rootu ESP soubor webrepl_cfg.py, kde je uloženo heslo PASS = ‚octopus‘, což je ono požadované heslo, vy ho můžete mít samozřejmě jiné).
Pro jednoduché experimenty je WebREPL zajímavá alternativa, ale nám se často dělo, že to nefungovalo pokaždé a bylo to dost nespolehlivé. Ale zkuste si sami. Přinejmenším je dobré o této možnosti alespoň vědět.
Je také důležité mít na paměti, že WebREPL je velmi užitečným nástrojem pro vzdálenou správu ESP32, ale z důvodů bezpečnosti by měl být používán opatrně. Před použitím WebREPL na veřejně přístupných sítích je vhodné přehodnotit zabezpečení a případně zvolit další opatření, jako je například změna hesla nebo omezení přístupu pouze na určité IP adresy. A je na místě zvážit i riziko používání http oproti zabezpečenému https.





Upravit