Prozkoumejte svět vestavěných systémů s Pythonem. Tato příručka pokrývá MicroPython, CircuitPython, integraci hardwaru a projekty pro globální publikum.
Python na kovu: Hluboký ponor do vestavěného programování a integrace mikrokontrolérů
Po desetiletí byl svět vestavěných systémů – malých počítačů, které pohánějí vše od chytrých hodinek po průmyslové stroje – výhradní doménou nízkoúrovňových jazyků, jako jsou C, C++ a Assembly. Tyto jazyky nabízejí bezkonkurenční kontrolu a výkon, ale přicházejí s náročnou křivkou učení a zdlouhavými vývojovými cykly. Vstupte do Pythonu, jazyka proslulého svou jednoduchostí, čitelností a rozsáhlým ekosystémem. Kdysi omezen na webové servery a datovou vědu, Python nyní mohutně proniká do srdce hardwaru a demokratizuje elektroniku pro novou generaci vývojářů, kutilů a inovátorů po celém světě.
Tato příručka je vaším komplexním úvodem do vzrušujícího světa vestavěného programování v Pythonu. Prozkoumáme, jak může jazyk vysoké úrovně, jako je Python, přímo ovládat hardware, prozkoumáme klíčové platformy, které to umožňují, a projdeme si praktické příklady, které vám pomohou začít na vaší cestě od softwaru k křemíku.
Ekosystém Python Embedded: Více než jen CPython
Nemůžete jednoduše nainstalovat standardní Python, který používáte na svém notebooku (známý jako CPython), na typický mikrokontrolér. Tato zařízení mají extrémně omezené zdroje – mluvíme o kilobajtech RAM a megahertzech výpočetního výkonu, což je ostrý kontrast k gigabajtům a gigahertzům v moderním počítači. K překlenutí této propasti byly vytvořeny specializované, štíhlé implementace Pythonu.
MicroPython: Python pro mikrokontroléry
MicroPython je kompletní přepsání programovacího jazyka Python 3, optimalizované pro běh na omezeném hardwaru. Byl vytvořen Damienem Georgem a jeho cílem je být co nejvíce kompatibilní se standardním Pythonem a zároveň poskytovat přímý, nízkoúrovňový přístup k hardwaru.
- Klíčové vlastnosti: Zahrnuje interaktivní Read-Eval-Print Loop (REPL), který vám umožňuje připojit se k desce a spouštět kód řádek po řádku bez kroku kompilace. Je vysoce efektivní, má malou paměťovou stopu a poskytuje výkonné moduly, jako je
machinepro přímé ovládání hardwaru (GPIO, I2C, SPI atd.). - Nejlepší pro: Vývojáře, kteří chtějí maximální výkon, jemnozrnnou kontrolu nad hardwarem a kompatibilitu napříč širokou škálou mikrokontrolérů. Je blíže "kovu" a často se upřednostňuje pro aplikace kritičtější na výkon.
CircuitPython: Výkonný nástroj pro začátečníky
CircuitPython je fork MicroPython vytvořený a udržovaný společností Adafruit, přední společností v oblasti elektroniky pro kutily (DIY). I když sdílí jádro s MicroPython, jeho filozofie se soustředí na snadné použití a vzdělávání.
- Klíčové vlastnosti: Nejvýraznější vlastností je, jak prezentuje mikrokontrolér vašemu počítači. Když připojíte desku CircuitPython, zobrazí se jako malá jednotka USB. Jednoduše upravíte soubor
code.pyna této jednotce a uložíte jej; deska se znovu načte a automaticky spustí váš nový kód. Má také sjednocené API napříč všemi podporovanými deskami, což znamená, že kód pro čtení senzoru na jedné desce bude fungovat na jiné s minimálními změnami. - Nejlepší pro: Začátečníky, pedagogy a kohokoli, kdo se zaměřuje na rychlé prototypování. Křivka učení je mírnější a rozsáhlý knihovní ekosystém poskytovaný společností Adafruit usnadňuje integraci senzorů, displejů a dalších komponent neuvěřitelně jednoduchou.
MicroPython vs. CircuitPython: Rychlé srovnání
Výběr mezi nimi často závisí na vašich projektových cílech a úrovni zkušeností.
- Filozofie: MicroPython upřednostňuje hardwarově specifické funkce a výkon. CircuitPython upřednostňuje jednoduchost, konzistenci a snadné učení.
- Pracovní postup: S MicroPython obvykle používáte nástroj jako Thonny pro připojení k REPL zařízení a nahrávání souborů. S CircuitPython přetáhnete soubor
code.pyna jednotku USB. - Podpora hardwaru: MicroPython podporuje širokou škálu desek od mnoha výrobců. CircuitPython primárně podporuje desky od Adafruit a vybrané partnery třetích stran, ale jeho podpora je hluboká a dobře zdokumentovaná.
- Knihovny: CircuitPython má rozsáhlou, kurátorskou sadu knihoven, které se snadno instalují. Knihovny MicroPython jsou také k dispozici, ale mohou být více fragmentované.
Pro tuto příručku budou koncepty a mnoho příkladů kódu použitelné pro oba, s drobnými úpravami. Na rozdíly upozorníme tam, kde jsou významné.
Výběr hardwaru: Bojiště mikrokontrolérů
Počet mikrokontrolérů (MCU), které mohou spouštět Python, se v posledních letech prudce zvýšil. Zde jsou některé z nejoblíbenějších a nejdostupnějších možností pro globální publikum.
Raspberry Pi Pico & RP2040
Nesmí se zaměňovat s plnohodnotným počítačem Raspberry Pi, Pico je levná, vysoce výkonná deska mikrokontroléru postavená na zakázkovém čipu RP2040. Stal se globálním favoritem pro Python na hardwaru.
- Klíčové vlastnosti: Výkonný dvoujádrový procesor ARM Cortex-M0+, velkorysých 264 KB RAM a jedinečná funkce nazývaná Programmable I/O (PIO), která umožňuje vytvářet vlastní hardwarová rozhraní. Novější model Pico W přidává vestavěné Wi-Fi.
- Proč je skvělý pro Python: Má oficiální prvotřídní podporu pro MicroPython a je také dobře podporován CircuitPython. Jeho nízká cena (často pod 10 USD) a silný výkon z něj činí neuvěřitelnou hodnotu.
Espressif ESP32 & ESP8266
Rodina čipů ESP, vyráběná společností Espressif Systems se sídlem v Šanghaji, jsou nespornými šampiony IoT. Jsou známé svými integrovanými možnostmi Wi-Fi a Bluetooth, díky čemuž jsou výchozí volbou pro propojené projekty.
- Klíčové vlastnosti: Výkonné jedno nebo dvoujádrové procesory, vestavěné Wi-Fi a (na ESP32) Bluetooth. Jsou k dispozici na tisících různých vývojových desek od výrobců z celého světa.
- Proč jsou skvělé pro Python: Vynikající podpora MicroPython vám umožňuje vytvářet připojená zařízení pomocí pouhých několika řádků kódu Python. Jejich výpočetní výkon je více než dostatečný pro složité úkoly, jako je spouštění webových serverů nebo zpracování dat z více senzorů.
Ecosystemy Adafruit Feather, ItsyBitsy a Trinket
Adafruit nabízí širokou škálu desek ve standardizovaných formátech. Nejedná se o konkrétní čipy, ale spíše o produktové řady navržené tak, aby bezproblémově fungovaly v ekosystému CircuitPython.
- Klíčové vlastnosti: Desky v rodině Feather sdílejí společné rozložení pinů, takže jsou zaměnitelné. Mnohé zahrnují vestavěné obvody pro nabíjení baterií a konektory. Jsou k dispozici s různými mikrokontroléry, včetně RP2040, ESP32 a dalších.
- Proč jsou skvělé pro Python: Jsou navrženy od základu pro CircuitPython. Tato úzká integrace znamená plynulý zážitek plug-and-play s přístupem ke stovkám knihoven a tutoriálů.
Začínáme: Vaše první „Hello, World“ na hardwaru
Pojďme se posunout od teorie k praxi. Tradiční „Hello, World“ vestavěného programování je blikání LED. Tento jednoduchý úkon potvrzuje, že celý váš toolchain – od editoru kódu po firmware na desce – funguje správně.
Požadavky
- Podporovaná deska mikrokontroléru (např. Raspberry Pi Pico, ESP32 nebo deska Adafruit).
- Kabel USB, který podporuje přenos dat (nejen nabíjení).
- Počítač (Windows, macOS nebo Linux).
Krok 1: Instalace firmwaru
Vaše deska potřebuje nainstalovaný interpret MicroPython nebo CircuitPython. Tomu se říká „flashování firmwaru“.
- Pro CircuitPython: Navštivte circuitpython.org, najděte svou desku a stáhněte soubor
.uf2. Uveďte desku do režimu bootloaderu (obvykle to zahrnuje podržení tlačítka „BOOT“ nebo „RESET“ při jejím zapojování). Zobrazí se jako jednotka USB. Přetáhněte na ni stažený soubor.uf2. Jednotka se vysune a znovu se objeví, nyní s názvem CIRCUITPY. - Pro MicroPython: Navštivte micropython.org, najděte svou desku a stáhněte soubor firmwaru (často soubor
.uf2nebo.bin). Proces je podobný: uveďte desku do režimu bootloaderu a zkopírujte na ni soubor.
Krok 2: Nastavení editoru
I když můžete použít libovolný textový editor, vyhrazené IDE usnadňuje vývoj. Thonny IDE se důrazně doporučuje pro začátečníky. Je zdarma, multiplatformní a je dodáván s vestavěnou podporou pro MicroPython a CircuitPython. Automaticky detekuje vaši desku, poskytuje přístup k REPL zařízení a usnadňuje nahrávání souborů.
Krok 3: Kód blikající LED
Nyní k samotnému kódu. Vytvořte nový soubor s názvem main.py pro MicroPython nebo upravte stávající code.py pro CircuitPython.
Příklad pro MicroPython na Raspberry Pi Pico W:
import machine
import utime
# Palubní LED na Pico W je přístupná prostřednictvím speciálního názvu
led = machine.Pin("LED", machine.Pin.OUT)
while True:
led.toggle()
print("LED toggled!")
utime.sleep(0.5) # Počkejte půl sekundy
Příklad pro CircuitPython na většině desek Adafruit:
import board
import digitalio
import time
# Palubní LED je obvykle připojena ke kolíku s názvem 'LED'
led = digitalio.DigitalInOut(board.LED)
led.direction = digitalio.Direction.OUTPUT
while True:
led.value = not led.value
print("LED toggled!")
time.sleep(0.5)
Rozbor kódu:
import: Importujeme knihovny pro ovládání hardwaru (machine,digitalio,board) a správu času (utime,time).- Nastavení pinu: Definujeme, který fyzický pin chceme ovládat (palubní LED) a konfigurujeme jej jako výstup.
- Smyčka: Smyčka
while True:běží navždy. Uvnitř smyčky přepínáme stav LED (z zapnuté na vypnutou nebo z vypnuté na zapnutou), tiskneme zprávu do sériové konzole (viditelné v Thonny) a poté pozastavíme na půl sekundy.
Uložte tento soubor do svého zařízení. Palubní LED by měla okamžitě začít blikat. Gratulujeme, právě jste spustili Python přímo na mikrokontroléru!
Ponoření hlouběji: Základní koncepty Pythonu na mikrokontrolérech
Blikání LED je jen začátek. Pojďme prozkoumat základní koncepty, které budete používat k vytváření složitějších projektů.
Všeobecné vstupy/výstupy (GPIO)
Piny GPIO jsou fyzická připojení, která umožňují mikrokontroléru interagovat se světem. Mohou být konfigurovány buď jako vstupy (pro čtení dat z tlačítek nebo senzorů), nebo jako výstupy (pro ovládání LED, motorů nebo relé).
Čtení stisknutí tlačítka (MicroPython):
import machine
import utime
button = machine.Pin(14, machine.Pin.IN, machine.Pin.PULL_DOWN)
while True:
if button.value() == 1:
print("Button is pressed!")
utime.sleep(0.1)
Zde konfigurujeme pin 14 jako vstup s interním pull-down rezistorem. Smyčka neustále kontroluje, zda je hodnota tlačítka 1 (vysoká), což znamená, že bylo stisknuto.
Práce se senzory
Většina zajímavých projektů zahrnuje senzory. Python usnadňuje čtení z analogových i digitálních senzorů.
- Analogové senzory: Tyto senzory, jako jsou fotorezistory (měřící světlo) nebo potenciometry, poskytují proměnlivé napětí. Analogově-digitální převodník (ADC) mikrokontroléru toto napětí načte a převede jej na číslo.
- Digitální senzory: Tyto pokročilejší senzory (jako jsou senzory teploty/vlhkosti, akcelerometry) komunikují pomocí specifických protokolů. Dva nejběžnější jsou I2C (Inter-Integrated Circuit) a SPI (Serial Peripheral Interface). Tyto protokoly umožňují více zařízením komunikovat s mikrokontrolérem pomocí pouhých několika pinů. Naštěstí zřídka potřebujete znát nízkoúrovňové detaily, protože knihovny se o komunikaci postarají za vás.
Čtení teploty pomocí senzoru BMP280 (CircuitPython):
import board
import adafruit_bmp280
# Vytvořte objekt I2C sběrnice
i2c = board.I2C() # Používá výchozí piny SCL a SDA
# Vytvořte objekt senzoru
bmp280 = adafruit_bmp280.Adafruit_BMP280_I2C(i2c)
# Přečtěte teplotu
temperature = bmp280.temperature
print(f"Temperature: {temperature:.2f} C")
Šířková modulace pulzu (PWM)
PWM je technika používaná k simulaci analogového výstupu na digitálním pinu. Rychlým zapínáním a vypínáním pinu můžete ovládat průměrné napětí, což je užitečné pro stmívání LED, ovládání rychlosti DC motoru nebo polohování servomotoru.
Konektivita a internet věcí (IoT)
Zde desky jako ESP32 a Pico W skutečně září. Díky vestavěnému Wi-Fi Python neuvěřitelně usnadňuje vytváření zařízení IoT.
Připojení k Wi-Fi
Připojení zařízení k síti je prvním krokem. Budete muset vytvořit soubor (často nazývaný secrets.py v CircuitPython), abyste bezpečně uložili své síťové přihlašovací údaje.
Připojení ESP32 k Wi-Fi (MicroPython):
import network
SSID = "YourNetworkName"
PASSWORD = "YourNetworkPassword"
station = network.WLAN(network.STA_IF)
station.active(True)
station.connect(SSID, PASSWORD)
while not station.isconnected():
pass
print("Connection successful")
print(station.ifconfig())
Provádění webových požadavků
Po připojení můžete interagovat s internetem. Můžete načítat data z rozhraní API (Application Programming Interfaces), odesílat data ze senzorů do webové služby nebo spouštět online akce.
Načítání dat JSON z API (pomocí knihovny `urequests`):
import urequests
response = urequests.get("http://worldtimeapi.org/api/timezone/Etc/UTC")
data = response.json()
print(f"The current UTC time is: {data['datetime']}")
response.close()
MQTT: Jazyk IoT
I když je HTTP užitečné, zlatým standardem pro komunikaci IoT je MQTT (Message Queuing Telemetry Transport). Je to lehký protokol publish-subscribe navržený pro sítě s nízkou šířkou pásma a vysokou latencí. Zařízení může „publikovat“ data ze senzorů do „tématu“ a jakékoli jiné zařízení (nebo server) „přihlášené“ k tomuto tématu okamžitě obdrží data. To je mnohem efektivnější než neustálé dotazování se na webový server.
Pokročilá témata a osvědčené postupy
Jak vaše projekty rostou, narazíte na omezení mikrokontroléru. Zde jsou některé osvědčené postupy pro psaní robustního vloženého kódu Python.
- Správa paměti: RAM je váš nejcennější zdroj. Vyhněte se vytváření velkých objektů, jako jsou seznamy nebo dlouhé řetězce uvnitř smyček. Použijte modul
gc(import gc; gc.collect()) k ručnímu spuštění garbage collection a uvolnění paměti. - Správa napájení: U zařízení napájených z baterie je kritická energetická účinnost. Většina mikrokontrolérů má režim „deepsleep“, který vypne většinu čipu, spotřebovává velmi málo energie a může se probudit po nastavené době nebo z externího spouštěče.
- Systém souborů: Můžete číst a zapisovat soubory do palubní flash paměti, stejně jako na běžném počítači. To je ideální pro protokolování dat nebo ukládání nastavení konfigurace.
- Přerušení: Místo neustálé kontroly stavu tlačítka ve smyčce (proces zvaný polling) můžete použít přerušení. Žádost o přerušení (IRQ) je hardwarový signál, který pozastaví hlavní kód, aby spustil speciální funkci, a poté pokračuje. To je mnohem efektivnější a citlivější.
Představení nápadů na projekty v reálném světě
Jste připraveni stavět? Zde je několik nápadů, které kombinují koncepty, o kterých jsme diskutovali:
- Chytrá meteorologická stanice: Použijte ESP32 se senzorem BME280 k měření teploty, vlhkosti a tlaku. Zobrazte data na malé OLED obrazovce a publikujte je prostřednictvím MQTT na řídicí panel, jako je Adafruit IO nebo Home Assistant.
- Automatizovaný systém zavlažování rostlin: Připojte snímač vlhkosti půdy k Raspberry Pi Pico. Když je půda suchá, použijte pin GPIO k aktivaci relé, které na několik sekund zapne malé vodní čerpadlo.
- Vlastní USB Macro Pad: Použijte desku CircuitPython, která podporuje USB HID (Human Interface Device), jako je Pico nebo mnoho desek Adafruit. Programujte tlačítka pro odesílání složitých klávesových zkratek nebo vypisujte předdefinovaný text, čímž zvýšíte svou produktivitu.
Závěr: Budoucnost je v Pythonu
Python zásadně změnil prostředí vestavěného vývoje. Snížil vstupní bariéru a umožnil vývojářům softwaru ovládat hardware a hardwarovým inženýrům prototypovat rychleji než kdy dříve. Jednoduchost čtení senzoru nebo připojení k internetu pomocí pouhých několika řádků čitelného kódu je zásadní změna.
Cesta od blikající LED k plně funkčnímu zařízení IoT je neuvěřitelně obohacující. Globální komunita a bohatství knihoven s otevřeným zdrojovým kódem znamenají, že nikdy nejste úplně sami, když narazíte na výzvu. Vyberte si tedy desku, flashněte firmware a začněte své dobrodružství ve vzrušujícím průsečíku Pythonu a fyzického světa. Jediným limitem je vaše představivost.