ESP 32 je plnohodnotná IoT platforma pretože umožňuje priame pripojenie k internetu cez WiFi. Aby ste mohli využívať WiFi pripojenie, potrebujete nastaviť pripojenie k WiFi routeru.
Predpokladáme, že máte nainštalovanú implementáciu Micropythonu od octopusLab.cz. Postup je popísaný v tomto článku.
Link na stiahnutie binárky Micropythonu. Pripomíname, že Python je interpretačný jazyk, takže zdrojový kód sa nekompiluje, ale priamo vykonáva.
Celý postup inštalovania a konfigurovania knižnice je vo videu:
Micropython od octopuslab.cz má implementovanú zjednodušenú inicializáciu systému pomocou príkazu:
octopus_initial.setup()
Po zadaní príkazu cez terminálovú aplikáciu, vo Windows odporúčame PuTTY sa zobrazí ponuka funkcií inicializačného menu:
>>> octopus_initial.setup() ,'''`. / \ |(@)(@)| ) ( /,'))((`.\ (( (( )) )) ) \ `)(' / ( Hello, this will help you initialize your ESP ver: 0.1/ 13.8.2019 (c)octopusLAB Press Ctrl+C to abort ============================== S E T U P ============================== [w] - wifi submenu [cw] - connect wifi [cl] - connect LAN [sd] - system download [x] - exit setup ==============================
Na pripojenie k WiFi je potrebné najskôr zadať SSID siete a prístupové heslo. Zadajte príkaz:
w
Zobrazia sa informácie o wifi ovládači a ponuka menu pre nastavenie WiFi
I (59970) wifi: wifi driver task: 3ffe2eb4, prio:23, stack:3584, core=0 I (66468) system_api: Base MAC address is not set, read default base MAC address ... ============================== S E T U P - W I F I ============================== [a] - Add wifi network [r] - Remove wifi network [s] - Show configuration ==============================
Vašu WiFi sieť pridáte do konfigurácie príkazom
a
Budete vyzvaní, aby ste zadali SSID a heslo vašej siete.
Po zadaní týchto údajov sa znovu zobrazí ponuka menu SETUP
============================== S E T U P ============================== [w] - wifi submenu [cw] - connect wifi [cl] - connect LAN [sd] - system download [x] - exit setup ==============================
Príkazom
cw
sa pripojíte k WiFi sieti. Zobrazia sa informácie o parametroch pripojenia a úspešné pripojenie bude potvrdené oznamom
WIFI: OK
Keď máte pripojenie k internetu úspešne inicializované, môžete pristúpiť k ďalšiemu kroku – inštaláciu knižnice octopus
V menu SETUP zadajte príkaz [sd] – system download.
sd
Postupne sa nainštalujú knižnice a zobrazí sa zoznam nainštalovaných komponentov a výzva, aby ste príkazom CTRL-D urobili soft reset dosky.
all OK, press CTRL+D to soft reboot >>> MPY: soft reboot MicroPython v1.11-495-g1ce700d44-build-octopusLAB on 2019-10-22; ESP32 module with ESP32 Type "help()" for more information.
O úspešnom nainštalovaní knižnice sa presvedčíte tak, že zadáte príkaz
setup()
a zobrazí sa vám rozšírená ponuka konfiguračného menu SETUP.
>>> setup() ,'''`. / \ |(@)(@)| ) ( /,'))((`.\ (( (( )) )) ) \ `)(' / ( Hello, this will help you initialize your ESP ver: 0.65 / 22.8.2019 (c)octopusLAB Press Ctrl+C to abort ============================== S E T U P ============================== [w] - wifi submenu [cw] - connect wifi [cl] - connect LAN [sd] - system download > stable octopus modules from URL [sde] - system download > examples (from URL) /[sdh] hydroponics [sdp] - system download > petrkr (Beta octopus modules from URL) [sdo] - system download > octopus (Alfa octopus modules from URL) [ds] - device setting [ios] - I/O setting submenu [mq] - mqtt() and sending data setup [si] - system info [wr] - run web repl [x] - exit setup ============================== select:
Zobrazí sa menu s ponukou možností. Napríklad ak potrebujete nakonfigurovať vstupy a výstupy zadáte príkaz: ios. Zobrazí sa ponuka v ktorej zapínate, alebo vypínate jednotlivé porty a komunikačné rozhrania. Číslo určuje počet zariadení. Napríklad ak máte v sérii zaradené štyri diódy Neopixel nastavíte ws [4]
I/O setting: ================================================== S E T U P - I / O (interfaces) ================================================== [ 1] - led [0] - built in LED diode [ 2] - ws [0] - WS RGB LED 0/1/8/...n [ 3] - piezzo [0] - Piezzo buzzer [ 4] - led7 [0] - SPI max 8x7 segm.display [ 5] - led8 [0] - SPI max 8x8 matrix display [ 6] - oled [0] - I2C oled display [ 7] - lcd [0] - I2C LCD 0/2/4 row [ 8] - tft [0] - SPI 128x160 color display [ 9] - sm [0] - UART - serial monitor (display) [10] - temp [0] - temperature Dallas sens. [11] - light [0] - I2C light sens. (lux) [12] - mois [0] - A/D moisture sensor [13] - cmois [0] - A/D capacit. moisture sensor [14] - ad0 [0] - A/D input voltage [15] - ad1 [0] - A/D x / photoresistor [16] - ad2 [0] - A/D y / thermistor [17] - exp8 [0] - I2C+expander PCF8574 [18] - keypad [0] - Robot I2C+expander 4x4 keypad [19] - button [0] - DEV2 Button [20] - ir [0] - DEV2 ir remote [21] - fet [0] - MOS FET PWM (IoTboard) [22] - relay [0] - Relay (IoTboard) [23] - servo [0] - PWM pins (both Robot and IoT have by default) [24] - stepper [0] - Stepper motor (ROBOTboard) [25] - motor [0] - DC motor (ROBOTboard) [x] - Exit from I/O setup ================================================== select:
Pokročilejší hardvér typu displej a komunikačné rozhrania zatiaľ necháme bokom (nie na dlho) a skúsime jednoduchú obsluhu GPIO portu, konkrétne GPIO2 na ktorom je pripojená modrá LED dióda umiestnená priamo na doske. Takže v menu I/O settings nastavíme položku 1 – LED diódu na doske
================================================== S E T U P - I / O (interfaces) ================================================== [ 1] - led [1] - built in LED diode ...
Príkazom
from util.octopus import *
sa do pamäti importujú triedy s metódami na obsluhu hardvéru, ktorý používate. Čiže ak máte cez príkaz ios nastavenú konfiguráciu hardvéru
================================================== S E T U P - I / O (interfaces) ================================================== [ 1] - led [1] - built in LED diode [ 2] - ws [4] - WS RGB LED 0/1/8/...n [ 3] - piezzo [0] - Piezzo buzzer [ 4] - led7 [1] - SPI max 8x7 segm.display [ 5] - led8 [0] - SPI max 8x8 matrix display [ 6] - oled [1] - I2C oled display ...
Importujú sa objekty na obsluhu LED diódy, RGB LED diódy Neopixel, displeja zo sedem segmentových číslic a OLED displeja pripojeného cez I2C. Takáto dynamická konfigurácia umožňuje, aby ste v pamäti mali len tie objekty, ktoré vo svojom kóde využívate
V kóde ale import s hviezdičkou nepoužívajte, tam treba uviesť zoznam knižníc, napríklad
>>> from util.octopus import w, web_server
Pred použitím je potrebné knižnicu Octopus inicializovať príkazom:
octopus()
Terminál zobrazí informáciu o úspešnom inicializovaní knižnice. Výpis obsahuje aj informáciu o voľnej kapacite pamäti RAM. V našom prípade máme k dispozícii približne 77 kilobajtov.
Device config 'config/device.json' does not exist, please run setup() octopus() --> autoInit: WARN: Pin is None, this led will be dummy ,'''`. / \ |(@)(@)| ) ( /,'))((`.\ (( (( )) )) ) \ `)(' / ( (octopusLAB - lib.version: 0.95 > 28.10.2019 #1063) -------------------------------------------------- | ESP UID: 240acxxxxxx | RAM free: 77056 | 00:23 -------------------------------------------------- This is basic library, type h() for help >>>
Zoznam tried, ktoré sú aktuálne k dispozícii vypíšete príkazom TAB (klávesom tabulátor)
__class__ __name__ map Pin RTC Timer gc modules r reset sleep sleep_ms ticks_diff ticks_ms uos bdev setup w octopusASCII printOctopus f ls cat i octopus pinout set_pinout get_from_file rtc io_conf Env tim1 getVer get_eui printInfo getFree get_hhmm o_help printTitle h o_info printLog u file_copy cp i2c_init clt c printHead bytearrayToHexString add0 get_hhmmss timer_init timerAction led ap_init w_connect lan_connect logDevice database_init time_init getApiJson getApiTest getApiText octopus_init Led piezzo small_web_server web_server Octopus >>>
Vyskúšajme fungovanie knižníc. Podobne ako v predchádzajúcom dieli, aj teraz najskôr rozsvietime modrú LED diódu, ktorá je priamo na doske a je pripojená k pinu GPIO2. Tentokrát však budeme LED diódu na doske pomocou funkcií z objektovo orientovanej knižnice Octopus.
Príkaz vytvorí inštanciu objektu LED
led = Led(2)
Na rozsvietenie diódy je potrebné zadať príkaz:
led.value(1)
Príkaz toggle() prepne stav LED, takže ak je zhasnutá, tak sa rozsvieti a naopak
led.toggle()
Na bliknutie LEDkou môžete použiť funkciu, kde parametre sú čas svietenia a čas vypnutia v milisekundách.
while True: led.blink(1000,500)
Ak chcete vedieť na ktorý pin je pripojený objekt LED, zistíte to príkazom
>>> led.pin Pin(2)
Ak máte LED diódu pripojenú na porte, napríklad GPIO15, inicializujete ju príkazom
led2 = Led(15) led2.value(1)
Python je objektovo orientovaný programovací jazyk. Na výpis metód a premenných objektu stačí napísať názov objektu, za ním bodku a stlačiť kláves TAB. Kláves TAB slúži ako určitý ekvivalent inteligentnej nápovedy. Stačí začať písať príkaz a po zatlačení TAB sa vypíše celý názov.
>>> led. __class__ __init__ __module__ __qualname__ value __dict__ pin blink toggle state
V našom prípade sú vypísané metódy a premenné objektu LED.
Ukážeme príklad pre obsluhu sedem segmentového displeja, pripojeného cez SPI. Displej má sériový driver MAX7219 a je zložený z dvoch modulov po 4 znaky, spolu je teda možné zobraziť 8 znakov. V príklade sme displej pripojili do slotu na doske ROBOTboard od octopuslab.cz,
popis rozhraní dosky ROBOTboard je zde.
ale nakoľko displej sa pripája pomocou štyroch pinov, v budúcom dieli ukážeme jeho zapojenie na prepojovacom poli podľa tejto schémy:
Najskôr pomocou príkazu [ds] – device setting nastavíme mapovanie pinov pre konkrétnu vývojovú dosku.
ds
V našom prípade pre dosku ROBOTboard nastavíme voľbu 5. Túto voľbu budeme používať aj keď budeme v budúcom dieli realizovať zapojenia elektornických komponentov na prepojoovacom poli. Mapovanie pinov pre túto konfugurácii nájdete zde.
Displej je potrebné inicializovať príkazom disp7_init(). Príkaz nainicializuje komunikačné rozhranie SPI a odovzdá inštanciu objektu d7.
d7 = disp7_init()
Môžete zobraziť číslo.
d7.show(3.1415926)
Alebo aj textový reťazec, pretože na 7 segmentovom displeji sa dá zobraziť aj hodne písmen, avšak nie všetky. My sme sa pokúsili zobraziť text
d7.show("PCREVUE")
Jednotlivé segmenty znakov sú v knižnici interne adresované takto:.
>>> led. __class__ __init__ __module__ __qualname__ value __dict__ pin blink toggle state
Bodka za číslom má kód 128.
Takže program pre blikajúcu pomlčku segmentu bude
while True: d7.set_register(5,1) sleep(1) d7.set_register(5,0) sleep(1)
bodku rozblikáte pomocou kódu
while True: d7.set_register(5,1) sleep(1) d7.set_register(5,0) sleep(1)
V budúcom pokračovaní ukážeme obsluhu ďalších hardvérových komponentov a komunikačných rozhraní a ukážeme ako môže doska ESP 32 fungovať ako webový server.