About Things
o veciach, mikroprocesoroch, mikrokontroléroch, počítačoch, o mikrokontroléri ESP32 a jazyku MicroPython
Záznam z prednášky
Annoucements
(slide) Namakaný deň 2020
(slide) Hack Košice 2020
- MLH Hackathon
- medzinárodná účasť
- registrujte sa na stránke podujatia https://hackkosice.com
(slide) See the BEST in IoT
- už budúci týždeň
- treba sa registrovať
- počas školy - našim kolegom viem zavolať/napísať mail, aby vás ospravedlnili
- budúca prednáška bude v rámci akcie a bude in english
- možno budúci týždeň cviká zrušíme kvôli akcii - budú pracovať s ESP32, ale je to len krajný plán. máme záložný ;)
(slide) The Project
- smarthome service - plnohodnotná služba s pridanou hodnotou, nie len “vec”
- 3 - 4 členné tímy
- o dva týždne esej na 2xA4
Introduction
(slide) Naposledy sme sa rozprávali o tom, čo je to IoT a povedali sme si, že budeme rešpektovať túto opisnú charakteristiku:
The Internet of Things (IoT) is a system of interrelated computing devices, mechanical and digital machines, objects, animals or people that are provided with unique identifiers and the ability to transfer data over a network without requiring human-to-human or human-to-computer interaction. – by iotagenda
Dnes sa budeme venovať veciam - označované v terminológii IoT ako thing. Vec je hmotná. Z pohľadu opisnej charakteristiky sú použité spojenia ako:
- počítačové zariadenie (computing device),
- mechanické zariadenie (mechanical machine)
- digitálne zariadenie (digital machine)
ale ide ďalej a hovorí, že sú to rozličné predmety, dokonca zvieratá a ľudia. Samozrejme musia byť vybavené prvkami umožňujúcim týmto zariadeniam komunikovať.
(slide) Tieto zariadenia však dokážu reagovať na rozličné externé podnety a udalosti. Sú vybavené senzormi (z angl. sensor), ktoré dokážu previesť fyzikálnu veličinu na elektrický prúd a následne na číselnú hodnotu, s ktorou veci ďalej pracujú. Napríklad to môže byť senzor intezity svetla, teploty, vlhkosti vzdialenosti a pod.
(slide) Rovnako tak tieto zariadenia dokážu produkovať rozličné výstupy, kedy prevádzajú elektrickú energiu na fyzické veličiny. Tieto prvky sa nazývajú akčné členy (z angl. actuator). Napríklad to môže byť LED dióda, motor, tepelná špirála a pod.
(slide) asfd V oblasti IoT existujú variácie tejto robotickej paradigmy typu Sense, Think, Connect, Act alebo Sense, Infer, Act, ale v princípe sú si veľmi podobné.
(slide) Obecne teda môžeme povedať, že vec:
- má svoju fyzickú reprezentáciu,
- obsahuje senzory, akčné členy a ovládače, a
- je pripojená do internetu
Microcontrollers vs Microprocessors
(slide) Čo je to mikroprocesor? Čo je to mikrokontrolér? A čo mikropočítač? Aký je medzi nimi rozdiel?
Skúsme porovnať vlastnosti mikrokontrolérov a mikroprocesorov:
mikroprocesor mikrokontrolér je zariadenie na všeobecné použitie špecializované zariadenie označuje sa ako jednočipový počítač neobsahuje I/O porty, pamäť, časovače a pod. obsahuje RAM, ROM, sériové a pralelné rozhranie, časovače, … všetko na jednom čipe používajú sa ako CPU v mikropočítačoch používajú sa v jednoduchých/jednoúčelových zariadeniach jeho dizajn/návrh je komplexný jeho dizajn/návrh je jednoduchý je drahý (desiatky/stovky Eur) je lacný (jednotky Eur) energeticky náročný (desiatky watov) energeticky nenáročný (jednotky Watov) majú Von Neumannovskú architektúru majú Harvardskú architektúru vysoká rýchlosť (GHz) malá rýchlosť (MHz) Raspberry Pi Arduino, ESP32, micro:bit
Popular Solutions
Arduino Uno
(slide) Arduino
na trhu od 2005
Flash memory (program space), is where the Arduino sketch is stored - 32kB
SRAM (static random access memory) is where the sketch creates and manipulates variables when it runs - 2kB
BBC micro:bit
(slide) micro:bit
Bluetooth 4.1 s Bluetooth LE
Raspberry Pi
(slide) Raspberry Pi
2.4 GHz and 5.0 GHz IEEE 802.11ac wireless, Bluetooth 5.0, BLE, Gigabit Ethernet
niekoľko generácií
ESP32
(slide) ESP32
BLE, WiFi
viaceré verzie - líšia sa prevedením ako aj počtom pinov - 30 a 38.
Comparison
Nakoniec môžeme vlastnosti týchto riešení porovnať v nasledujúcej tabuľke:
RPi Zero W Arduino Uno ESP32 Mirco:bit proc ARM BCM 2835 AVR ATmega328P Tensilica Xtensa LX6 ARM Cortex-M0 arch 32b 8b 32b 32b cores 1 1 2 1 freq 1 GHz 16 MHz 240 MHz 16MHz SRAM 512 MB 2kB 520 kB 16kB flash MicroSD 32kB 16 MB 256kB op. voltage 3V3 5V 3V3 3V3
ESP32
(slide) blokový diagram
MicroPython
(slide)
MicroPython - MicroPython is a lean and efficient implementation of the Python 3 programming language that includes a small subset of the Python standard library and is optimised to run on microcontrollers and in constrained environments.
Pre písanie kódu v jazyku MicroPython potrebujete mať editor/IDE a zariadenie s MicroPython-om. Existuje niekoľko editorov, ktoré môžete použiť:
Pre potreby predmetu budem používať editor Mu. Vo výbere editora vás nebudeme nijako obmedzovať.
Upozornenie
Na stránke Download Mu máte k dispozícii na stiahnutie stabilnú a alfa verziu. Podpora pre mikrokontrolér ESP32 je však len v alfa verzii. Preto ak sa rozhodnete používať editor Mu, sťahujte alfa verziu. Má niekoľko obmedzení, s ktorými sa však “dá žiť”.
Inštalácia firmvéru na ESP32
pre napálenie firmvéru je treba mať nainštalovaný nástroj
esptool.py
, pomocoupip3
:pip3 install esptool
najprv treba stiahnuť firmvér zo stránky micropython.org
pustite terminál a presuňte sa do priečinku, do ktorého ste stiahli firmvér
vymažte obsah flash pamäte pomocou
esptool.py --chip esp32 --port /dev/ttyUSB0 erase_flash
ak používate OS Windows, ako port uveďte príslušný sériový port (
COMx
):esptool.py --chip esp32 --port /COM3 erase_flash
Poznámka: Na niektorých moduloch je potrebné držať stlačené tlačidlo
BOOT
, aby sa mikrokontrolér pripojil.vypečte firmvér pomocou
esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 460800 write_flash -z 0x1000 esp32-20190125-v1.10.bin
alebo v OS Windows takto:
esptool.py --chip esp32 --port /COM3 --baud 460800 write_flash -z 0x1000 esp32-20190125-v1.10.bin
reštartnite dosku ESP32
Designing IoT Thing
- inteligentne kontajnery
- meraju vysku zaplnenia kontajnera miesto hmotnosti
- v pravidelnych intervaloch vysku meraju
- v pravidelnych intervaloch odosielaju udaje
- LED dioda, ktora blikne, ked meria aj ked odosiela
- LCD displej zobrazujuci stav
- zobrazi sa po stlaceni tlacidla
- aby zbytocne nezral baterku
- vyslovene len na ziskanie aktualneho stavu
Let’s Start with Blink
Úvod do programovanie v jazyku MicroPython na kontroléri ESP32 si ukážeme na implementácii príkladu Blink. Okrem toho použijeme REPL režim, ktorý ilustruje možnosti takéhoto prístupu.
(slide) Schéma zapojenia bude veľmi jednoduchá - v sérii s LED diódou bude zapojený aj 330 ohmový rezistor. Zapojíme ich na GPIO pin 10.
Z balíka
machine
importujeme trieduPin
:>>> from machine import Pin
Vytvoríme objekt triedy
Pin
, ktorý bude reprezentovať LED diódu. Konštruktor triedyPin
má tieto parametre:id
- povinný parameter, ktorý identifikuje pin, amode
- režim pin-u, ktorý môže byťPin.IN
- pin pre vstup, aPin.OUT
- pin pre výstup.
Poznámka
Trieda
Pin
má výrazne viac možností konfigurácie a práce. Pre podrobnejšie informácie sa pozrite do dokumentácie.Výsledný kód pre vytvorenie výstupného pin-u na pin-e č. 10 bude vyzerať nasledovne:
>>> led = Pin(10, Pin.OUT)
Pre prácu s diódou, resp. všeobecne s pin-om, máme k dispozícii niekoľko metód. Ak chceme získať aktuálny stav pin-u, zavoláme metódu
value()
:>>> led.value() 0
Poznámka
Pin sme pri jeho vytváraní nijako neinicializovali, takže hodnota na pin-e v skutočnosti nemusí byť
0
.Pomocou metódy
value()
však môžeme aj hodnotu na pin zapísať. Ak chceme LED diódu pripojenú na tento pin zasvietiť, do metódyvalue()
zapíšeme ako parameter hodnotu1
:>>> led.value(1)
Ak následne chceme LED diódu zhasnúť, do metódy
value()
vložíme ako parameter hodnotu0
:>>> led.value(0)
Trieda
Pin
však umožňuje nad svojimi inštanciami volať aj priamo metóduon()
na zasvietenie (alternatíva prevalue(1)
) a metóduoff()
pre zhasnutie (alternatíva prevalue(0)
).>>> led.on() >>> led.off()
V nasledujúcom výpise sa nachádza kód jednoduchého blikača LED diódy pomocou mikrokontroléra ESP32. LED dióda je podľa schémy pripojená na GPIO pin č. 10. Pomocou funkcie
sleep()
zabezpečíme pozastavenie vykonávania programu po dobu 2 a 1 sekundy.from machine import Pin from time import sleep = Pin(10, Pin.OUT) led while True: led.on()2) sleep( led.off()1) sleep(
ESP32 Internal Filesystem
(slide) If your devices has 1Mbyte or more of storage then it will be set up (upon first boot) to contain a filesystem. This filesystem uses the FAT format and is stored in the flash after the MicroPython firmware.
V súborovom systéme môžete čítať a zapisovať súbory, prechádzať štruktúrou priečinkov ako v normálnom súborovom systéme.
Dva súbory však majú špeciálny význam:
- súbor
boot.py
- Ak tento súbor existuje, je spustený ako prvý. - súbor
main.py
- Ak tento súbor existuje, je spustený ako druhý.
- súbor
Súbor
boot.py
by mal obsahovať rozličné nastavenia, ktoré budú dostupné od momentu spustenia mikrokontroléra, resp. od momentu spustenia tohto súboru. V súboremain.py
by sa mal nachádzať kód, ktorý sa začne vykonávať po štarte mikrokontroléra.Ak teda horeuvedený fragment kódu aplikácie Blink uložíme do súborového systému mikrokontroléra ESP32 ako súbor
main.py
, spustí sa automaticky po štarte mikrokontroléra.
Aditional Resources
MicroPython - MicroPython is a lean and efficient implementation of the Python 3 programming language that includes a small subset of the Python standard library and is optimised to run on microcontrollers and in constrained environments.
ESP32 - ESP32 is a series of low-cost, low-power system on a chip microcontrollers with integrated Wi-Fi and dual-mode Bluetooth.
ESP32 Labs - hands on labs for esp32 microcontroller as promo for conferences
ESP32-WROOM-32 Datasheet - This document provides the specifications for the ESP32-WROOM-32 module.
Robotic Paradigm - In robotics, a robotic paradigm is a mental model of how a robot operates.
Arduino: Memory
Arduino UNO Rev3 - The UNO is the best board to get started with electronics and coding.
micro:bit - hardware description
McEwen, Adrian, and Hakim Cassimally. Designing the internet of things. Chichester: Wiley, 2014. Print.