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

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

    Blokový diagram ESP32

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

    • Mu - a simple Python editor for beginner programmers.
    • Thonny - Python IDE for beginners
    • uPyCraf
  • Pre potreby predmetu budem používať editor Mu. Vo výbere editora vás nebudeme nijako obmedzovať.

Inštalácia firmvéru na ESP32

  • pre napálenie firmvéru je treba mať nainštalovaný nástroj esptool.py, pomocou pip3:

    pip3 install esptool
  • najprv treba stiahnuť firmvér zo stránky micropython.org

    • časť Download
    • doska ESP32
    • z časti Standard firmware stiahnuť druhý v poradí (prvý je nočné zostavenie)
  • 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
  • Ú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.

    Blink with ESP32
  • Z balíka machine importujeme triedu Pin:

    >>> from machine import Pin
  • Vytvoríme objekt triedy Pin, ktorý bude reprezentovať LED diódu. Konštruktor triedy Pin má tieto parametre:

    • id - povinný parameter, ktorý identifikuje pin, a
    • mode - režim pin-u, ktorý môže byť
      • Pin.IN - pin pre vstup, a
      • Pin.OUT - pin pre výstup.
  • 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
  • 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ódy value() zapíšeme ako parameter hodnotu 1:

    >>> led.value(1)
  • Ak následne chceme LED diódu zhasnúť, do metódy value() vložíme ako parameter hodnotu 0:

    >>> led.value(0)
  • Trieda Pin však umožňuje nad svojimi inštanciami volať aj priamo metódu on() na zasvietenie (alternatíva pre value(1)) a metódu off() pre zhasnutie (alternatíva pre value(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
    
    led = Pin(10, Pin.OUT)
    while True:
        led.on()
        sleep(2)
        led.off()
        sleep(1)

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 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úbore main.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