Image
5.11.2019 0 Comments

IoT prakticky: Python na ESP32 IV, knižnica octopus na obsluhu hardvéru a komunikácie

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 článku https://www.pcrevue.sk/a/IoT-prakticky--Python-na-ESP32--vyvojove-dosky--instalacia-Micropythonu  

Link na stiahnutie binárky Micropythonu je  https://octopusengine.org/download/micropython/micropython-octopus.bin. 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 na https://www.octopuslab.cz/vyvojove-desky/robot-board/ 

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 na https://github.com/octopusengine/octopuslab/blob/master/esp32-micropython/pinouts/olab_esp32_robot_board1.py  

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:.

------64-----
| 2            |32
-------1------
|4             | 16
-------8------

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,128)
  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

Rekapitulácia seriálu

V prvej časti seriálu https://www.pcrevue.sk/a/IoT-prakticky--Python-na-ESP32--vyvojove-dosky--instalacia-Micropythonu  sme predstavili vývojové dosky s ESP32 a ukázali postup, ako do vývojovej dosky nahrať interpreter programovacieho jazyka Python, konkrétne implementáciu Micropython  od octopusLab.cz.

V druhej časti https://www.pcrevue.sk/a/IoT-prakticky--Python-na-ESP32--popis-portov-a-rozhrani  sme predstavili piny rozhrania.

V tretej časti https://www.pcrevue.sk/a/IoT-prakticky--Python-na-ESP32-III--prve-pokusy-s-hardverom sme ukázali obsluhu vstupných a výstupných portov

Zobrazit Galériu

Nechajte si posielať prehľad najdôležitejších správ emailom

Mohlo by Vás zaujímať

Mikrokontroléry

Programovanie PLC – aplikácia pre riadiacu jednotku UniPi Axon M205 so systémom Mervis

24.02.2020 00:10

V predchádzajúcom článku zo série programovanie PLC sme predstavili riadiacu jednotku UniPi Axon M205. Programovanie tejto riadiacej jednotky s implicitne nainštalovaným systémom Mervis pomocou diagra ...

Mikrokontroléry

Programovanie PLC – Riadiaca jednotka UniPi Axon M205

22.02.2020 00:10

Programovateľný logický kontrolér (PLC) a prevodník Unipi Axon M205 má k dispozícii dostatočný počet digitálnych, reléových a analógových vstupov a výstupov, takže sa dá použiť aj v rozsiahlejších pro ...

Mikrokontroléry

Programovanie PLC – Siemens Logo! analógové vstupy a funkcie

21.02.2020 00:10

V predchádzajúcich častiach sme predstavili možnosti programovania „entry level“ PLC Siemens Logo!, či už priamo pomocou tlačidiel na module, alebo vo vývojovom prostredí Logo! Soft Control. Pokračuje ...

Žiadne komentáre

Vyhľadávanie

Hackkosice_2020

Najnovšie videá