You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
5 months ago | |
---|---|---|
.. | ||
Readme.md | 5 months ago |
Readme.md
Poznámky ke zkoušce ze ZPI
- 3 základní prvky IoT architektury
- zařízení
- síť
- Cloud
- komunikační technologie vhodné pro IoT:
- Wifi, Bluetooth, BLE (Bluetooth Low Energy), LoRa
- LPWAN (Low Energy Wide Area Network): LoraWAN, Sigfox, Zigbee apod.
- Klíčové faktory komunikačních technologií:
- přenosová rychlost
- spotřeba energie
- dosah
- frekvence
Věc
- obvykle se skládá z:
- senzorů
- mikropočítače / mikrokontroléru
- komunikačního modulu
- senzor
- zdroj informací pro měřicí nebo řídicí systém
- je určen ke sledování stavu prostředí
- snímá fyzikální veličinu ve svém okolí (= vždy má fyzikální princip)
- druhy senzorů:
- pasivní / aktivní
- dotykové a bezdotykové senzory
Mikrokontrolér
- získává data ze senzorů
- zpracovává data
- odesílá data do cloudu
- Základní architektury
- mikroprocesor doplněný o další obvody k řízení elektroniky
- Harvardská architektura
- použití => účelové počítače
- oddělený paměťový prostor pro data a program – umožňuje vyšší rychlost zpracování
- Von Neumannova architektura
- použití => univerzální počítače
- společný prostor pro data i program
- Podle šířky datové sběrnice se µC dělí na:
- 8 – bitové
- 16 – bitové
- 32 – bitové
Piny mikrokontroléru
- GPIO, ADC, DAC, SPI, I2C, UART, PWM
Programování mikrokontrolerů
- jazyky nízké úrovně – strojový kód, assembler
- vyšší programovací jazyky - základní příkazy jsou nezávislé na µC, vyžadují překladač nebo interpretr
- základní jazyk pro programování mikrokontrolerů C/C++, popř. jazyky z nich odvozené (Wiring – Arduino)
- Mbed platforma
- výkonnější µC mohou využívat micro-Python
- 2 typy překladačů:
- interpretační
- kompilační
Vývojová prostředí pro µC
- Arduino, ESP32, Nucleo, Micro:bit
- univerzální vývojové IDE
- VisualStudio Code, Platforma Mbed
Struktura programu pro mikrokontrolér
- inicializační část
- Nastavení pinů µC, komunikační rychlosti, definice proměnných programu, definice podprogramů pro obsluhu přerušení, inicializace časovačů apod.
- výkonná část
- Hlavní program µC – test vstupních pinů, čtení dat ze senzorů, nastavení výstupních pinů, komunikace s okolím apod.
Jednoduchý program pro M5Stack
- Zobrazení textu na obrazovce
from m5stack import lcd
lcd.clear()
lcd.print('Hello World',100,100, lcd.WHITE)
Typový systém
- Dynamický
- datový typ proměnné nemusíme definovat => datový typ se automatický mění
- Statický
- musíme definovat typ proměnné a tento typ je dále neměnný
Proměnná, identifikátor, typy proměnných
- Proměnná – objekt ve kterém jsou uložena data
- identifikátor - název proměnné
- základní datové typy:
- int, float, str, bool
Přiřazovací příkaz
- identifikátor = výraz
- výraz může obsahovat:
- matematické operátory
- logické operátory
- relační operátory
- výraz se vyhodnocuje zleva do prava podle priority
- prioritu operací lze měnit závorkami ()
Výpis hodnoty proměnné
- print(object(s), sep=separator, end=end)
Větvení
- if podmínka:
- blok příkazů
- další příkaz
- if podmínka:
- blok příkazů
- else:
- blok příkazů
- další příkaz
- if podmínka:
- blok příkazů
- elif podmínka:
- blok příkazů
- else:
- blok příkazů
- další příkaz
Cykly
- S pevným počtem opakování:
- for proměnná in posloupnost:
- blok příkazů
- další příkaz
for i in range(5):
- for proměnná in posloupnost:
- S ukončovací podmínkou:
- while logická_podmínka:
- blok příkazů
- další příkaz
- while logická_podmínka:
Funkce v Pythonu
- procedura - funkce, která nic nevrací
- definice funkce:
- def jméno_funkce(a,b,c):
- blok příkazů
- return res
- def jméno_funkce(a,b,c):
- volání funkce:
- příkazy
- p=jméno_funkce(3,7,10)
- příkazy
Balíčky, moduly, import
- balíček = knihovna funkcí, které spolu nějakým způsobem souvisí, může být členěn do modulů
- Balíček může obsahovat konstanty, funkce, datové typy
- Modul – soubor funkcí
Import balíčku a jeho částí
import jméno_balíčku
- Přístup k funkcím přes tečkovou notaci
import jméno_balíčku as xx
from jméno_balíčku import jméno
- Z balíčku se importuje pouze modul (nebo funkce) jméno
from jméno_balíčku import *
- Z balíčku se importují všechny moduly
Výpis obsahu balíčku
import jméno_balíčku
dir(jméno_balíčku)
GPIO – (General Purpose Input Output)
- mohou být nastaveny jako vstupní nebo jako výstupní
- Nastavení pinů se provádí před hlavním cyklem mikrokontroleru ( while True: ) (např. u arduina ve funkci void setup() )
- Ovládání pinů je obsaženo v modulu
machine
, který je u M5Stack součástí balíčkum5stack
- nastavení Pinu pro výstup:
import m5stack
pin26= machine.Pin(26,machine.Pin.OUT)
pin26.on() # výstup v úrovni 1
Pin26.off() # výstup v úrovni 0
- U výstupního pinu musíme dát pozor, aby pinem netekl větší proud
- nastavení Pinu pro vstup:
import m5stack
pin26= machine.Pin(26,machine.Pin.IN,machine.Pin.PULL_UP)
print(pin26.value())
Obsluha tlačítek u M5Stack Fire
- 3 tlačítka , která mají v API přiřazena jména
btnA
,btnB
,btnC
- funkce pro práci s tlačítky:
isPressed()
,wasPressed()
,isReleased()
,wasReleased()
,pressFor(delay)
,wasDoublePress()
Přerušení vs pooling
- pooling
- mikrokontrolér cyklicky testuje zda mají senzory připravená data
- přerušení
- reakce mikrokontroléru na asynchronní událost
- pokud má senzor připravená data „vyzve procesor“ k jejich zpracování
- procesor může mezi událostmi zpracovávat jinou část programu nebo může „spát“
MicroPython vs. Python
- Micropython je redukovaná implementovaná verze interpreteru jazyka Python 3
- od klasického Pythonu se liší pouze množstvím knihoven (modulů) – některé chybí, některé jsou naopak přidány
LCD - API
- Soubor funkcí, které pracují s obrazovkou
from m5stack import lcd
- barvy =>
lcd.BLACK
,WHITE
, ... - fonty =>
lcd.FONT_Default
, ,FONT_Ubuntu
lcd.clear([color])
lcd.print(text [,x,y, color, …])
lcd.fontSize()
Seznamy v micropythonu
- seznam je heterogenní datová struktura => lze do ní ukládat proměnné různých datových typů
- prázdný seznam:
seznam = []
- vytvoření proměnné x typu seznam, obsahující prvky:
x=[1.5, 3, ‘text’]
- délka seznamu: ````delka = len(x)```
- procházení seznamu:
for i in x:
- vložení prvku na konec:
x.append(val)
- vložení prvku na index:
x.insert(index, val)
- smazání prvku podle hodnoty:
x.remove(val)
- smazání prvku podle indexu:
x.pop(index)
IMU (Inertial Measurement Unit)
- měří polohu a orientaci objektu obvykle je složený z akcelerometru a gyroskopu, někdy s magnetometrem
Časovače
- čítač, který používá taktovací signál
- použití (např.):
- generování periodických impulsů
- PWM (pulsně šířková modulace)
- U ESP32 jsou k dispozici 4 hardwarové časovače
- Micropython:
- Pro práci s časovači se používá třída
machine.Timer
- Nastavení parametrů časovače:
from machine import Timer
tim0=Timer(0)
tim0.init(period=2000,mode=Timer.PERIODIC,callback=tim_callback)
Timer.ONE_SHOT
/Timer.PERIODIC
- obslužná rutina přerušení časovače:
def tim_callback(timer):
global i
lcd.clear()
lcd.print(i,100,100,lcd.RED)
i=i+1
- ukončení časovače:
tim0.deinit()
- Pro práci s časovači se používá třída
A/D (analog/digital) převodníky
- Převádí spojitou hodnotu napětí na číslicovou reprezentaci
- Základní charakteristiky:
- Počet kvantizačních úrovní
- Kvantizační krok
- Souměrnost
- Typ převodníku
- Rozsah vstupního napětí
Typy převodníků
- Paralelní (flash) převodník
- Princip: Vstupní napětí Vin se porovnává komparátory s referenčním napětím na napěťovém děliči. Výstup komparátorů je kódován do binární podoby.
- +: rychlý převod (převod se provádí paralelně) -: vyšší spotřeba, drahé
- Převodník s následnou aproximací (SAR)
- tři bloky:
- SAR (successive aproximation register) – registr postupné aproximace
- komparátor
- D/A převodník
- Tento typ převodníku se používá u většiny mikrokontrolerů
- tři bloky:
- Sigma-delta převodní
- moderní typ převodníku, dosahuje vysokého rozlišení (16-24 bit) za relativně nízkou cenu
- jednoduchý hardware
- složitý software
- jádrem převodníku je integrátor a komparátor
Použití ADC převodníku na ESP32
- obecně 2 dostupné ADC převodníky
- V micropythonu na ESP32 je modul
ADC
pro převod součástí knihovnymachine
- import modulu a vytvoření objektu adc s nastavením pinu na kterém je převodník:
from machine import ADC, Pin
adc=ADC(Pin(36))
- Čtení hodnoty převodníku do proměnné
xx
:xx=adc.read()
- Změna parametrů převodu:
ADC.atten(attenuation)
ADC.width(width)
D/A – (digital/analog) převodníky
- Převádí číslicovou reprezentaci na analogový signál
- Charakteristiky:
- Rozsah výstupního napětí (u ESP32 - 0-3.3V)
- Počet kvantizačních úrovní (počet bitů) (u ESP32 je 8 bitový DAC – tj. lze zadat číslo v rozsahu 0-255)
- Typy převodníků:
- přímé
- vstupní datové slovo je přímo převedeno na výstupní napětí (proud)
- nepřímé
- přímé
D/A nepřímý převodník
- U nepřímých převodníků – pomocná veličina je impulz
- převodníky s pulzně šířkovou modulací (PWM)
Použití DAC převodníku na ESP32
- Obecně jsou na ESP32 dostupné 2 převodníky
- Převodník je 8 bit (255 úrovní) a vstupní rozsah napětí je 0-3.3V
- Použití:
- generátor funkcí
- v kombinaci s ADC jako digitální signálový procesor
- V micropythonu na ESP32 je modul
DAC
pro převod součástí knihovnymachine
- Aktivace modulu a vytvoření objektu dac s nastavením pinu na kterém je převodník
from machine import DAC, Pin
dac=DAC(Pin(26))
- Převod číslicové hodnoty xxx na analogové napětí
dac.write(xxx)
PWM – Pulse Width Modulation
- Jedná se o způsob, jak uměle získat analogové napětí na digitálním pinu
- rychlým přepínáním digitálního pinu z úrovně H do úrovně L a naopak
- PWM je charakterizováno základní frekvencí změny úrovně a tzv. střídou (duty cycle) což je poměr mezi tím, jak dlouho je signál v úrovni H oproti úrovni L v rámci jedné periody (střída 50% značí že doba v úrovni H je stejná jako v úrovni L)
- U ESP32 => lze použít PWM na všech pinech, které lze nastavit jako výstupní
- Použití:
- Řízení rychlosti motorů
- Stmívání LED
- Řízení servomotorů apod.
- V micropythonu na ESP32 je modul
PWM
součástí knihovnymachine
- Aktivace modulu a vytvoření objektu pwm0 s nastavením pinu na kterém bude PWM použito
from machine import PWM, Pin
pwm0=PWM(Pin(26))
Pwm0=PWM(Pin(26),freq=1000,duty=200)
- Zjištění základní frekvence, nastavení základní frekvence PWM na 1000 Hz
print(pwm0.freq())
pwm0.freq(1000)
- Zjištění duty-cycle a nastavení duty-cycle
print(pwm0.duty())
pwm0.duty(200)
- Ukončení práce s PWM
pwm0.deinit()
Co je Mbed
- Mbed OS je operační systém s otevřeným zdrojovým kódem a vývojový nástroj pro platformy využívající mikrokontroléry
- Platforma Mbed je postavena na jazyku C/C++
- Mbed OS obsahuje ovladače pro mnoho různých hardware:
- moduly, desky, komponenty
Mikrokontrolery ARM
- 32 bitová architektura typu RISC
- velmi často využíván v mobilních odvětvích
- ARM1 (1984), aktuální ARM11
Vývoj aplikací v Mbed
- 3 možnosti vývoje aplikace:
-
- Online překladač
-
- Mbed Studio
-
- PlatformIO
-
Struktura programu v Mbed
#include <mbed.h>
// deklarace globálních proměnných
void main() {
// deklarace lokálních proměnných
while (1) {
…
}
}
UART/USART
- jednoduchá komunikační linka mezi dvěma zařízeními
- asynchronní plně duplexní komunikace
- někdy se používá USART => podporuje i synchronní verzi
- typické parametry - 8/N/1 - bity se přenáší od LSB k MSB
- Propojení modulů vždy „křížem“
UART – konfigurace a použití
- Micropython:
- Pro práci s UART se používá třída
machine.UART
- Pro práci s UART se používá třída
- Práce s UART:
- Vytvoření objektu
uart2
typu UARTfrom machine import UART
uart2=UART(2)
Uartx=UART(id, tx=číslo_pinu,rx=číslo_pinu)
- Nastavení parametrů komunikace
uart2.init(baudrate=9600,bits=8,parity=None,stop=1)
- Komunikace (u ESP32 lze použít pouze metodu „pooling“)
uart.any()
xxx=uart.read()
xxx=uart.read(n)
xxx=uart.readln()
uart.write(txt)
- Ukončení činnosti sériového rozhraní
uart2.deinit()
- Vytvoření objektu
Bluetooth komunikace M5stack
- M5stack micropython API nepodporuje bluetooth komunikaci
- Lze to vyřešit použitím BT-UART modulů
- POZOR!!!! Moduly jsou sice napájeny 3-6V, ale RX a TX piny nejsou 5V tolerant
- BT modul se konfiguruje AT příkazy
I²C – (Inter- Integrated Circuit)
- synchronní poloduplexní komunikace (= jeden vodič pro data a jeden vodič pro taktovací signál)
- používá se pro připojení nízkorychlostních zařízení
- Zařízení typu master zahajuje a ukončuje komunikaci, adresuje zařízení slave se kterým chce komunikovat a generuje hodinový signál SCL
- Zařízení slave je adresované masterem, obvykle poskytuje data
I²C – konfigurace a použití
- Micropython:
- Pro práci s I²C se používá třída machine.I2C
- Práce s UART:
- Vytvoření objektu i2c typu I2C
from machine import I2C
i2c=I2C(1,sda=21, scl=22[,freq=400000])
- hledání adres zařízení
lst=i2c.scan()
- Vytvoření objektu i2c typu I2C