Python avansat pentru IoT și sisteme embedded
Curs Python / Micropython pentru proiecte IoT: studiem capabilitățile avansate ale limbajului Python pe plăci embedded și pe dispozitive conectate la cloud.
Lucrezi practic cu MicroPython, CircuitPython și cu integrarea codului Python cu biblioteci C.
Ajungi să controlezi senzori, actuatori, GPIO și interfețe de comunicație precum UART, SPI și I²C.
Dobândești experiență practică prin aproximativ 70% din timp dedicat laboratoarelor pe plăci reale.
Cum te ajută: vei putea construi prototipuri IoT eficiente și soluții embedded robuste și fiabile.
Cui i se adresează: cursul se adresează celor care cunosc deja Python și încep să lucreze în proiecte IoT sau embedded.
Include și module avansate de networking, optimizare și deploy securizat al aplicațiilor IoT.
Curriculum
Bazele Python modern (rapid dar în profunzime)
- Data model și protocolul dunder; context managers și patternuri tip RAII
- Typing esențial: typing, dataclasses, Protocols, TypedDict, generics; verificări statice vs runtime
- Structural pattern matching (match/case) și când crește lizibilitatea
- Iterables/iterators/generators; corutine bazate pe generator vs async/await
- Baze de memorie pentru viteză: bytes/bytearray/memoryview; copy vs view
Async I/O & concurrency pentru systems
- Eveniment loop în asyncio; tasks, cancellations, timeouts; backpressure și cozi
- Threads vs processes vs async — alegerea corectă; implicațiile GIL
- Gestionarea subprocess; piping și streaming de loguri
- AnyIO/Trio (overview) și integrarea codului blocant cu executors
- Lab: punte async serial→MQTT cu retries și shutdown grațios
I/O binar, parsing și protocoale
- struct, array, ctypes; endianness, alignment și patternuri de CRC
- Strategii de framing pentru UART/TCP (length-prefix, delimiters, COBS/SLIP)
- Memory mapping (mmap) și zero-copy slices; ring buffers
- Lab: parse pentru un frame de telemetrie și validare CRC
Interfețe Embedded & IoT
- Serial (pyserial) și elemente de GPIO (note pe platforme); SPI/I2C — overview
- BLE cu bleak (overview) și MQTT cu paho-mqtt/httpx-websockets
- CAN cu python-can (overview) și strategii de logging pe device
- Împachetarea SDK-urilor și CLI-urilor pentru operatori
Packaging & managementul dependențelor (modern)
- pyproject.toml (PEP 517/518/621); build backends (setuptools/hatchling)
- Editable installs, wheels, versionare; constraints vs pins; pipx pentru unelte
- Mediu virtual (venv) și izolare pe proiect; builduri reproductibile
- Lab: împachetarea unei librării „driver” și publicare pe un index intern
Testare, calitate și robustețe
- pytest fixtures/parametrize; tmp_path, monkeypatch; elemente de coverage
- Hypothesis pentru property-based tests; fuzzing pe parsere simple
- Verificări statice: mypy (strict-ish), ruff/flake8, black; pre-commit hooks
- Defensive coding: timeouts, retries cu jitter, circuit breakers (schiță)
Performanță & profiling
- cProfile, contori de performanță, sampling profilers; capcane timeit
- Vectorizare cu numpy; când folosim numba sau Cython (overview)
- Async vs threads pentru I/O-bound; batching și buffering
- Lab: profilarea parserului de telemetrie și eliminarea copiilor inutile
Interop C/C++ și viteză nativă
- ctypes și cffi — compromisuri; apel în librării native în siguranță
- pybind11 pentru extensii (design & ABI)
- Construirea wheels pentru Linux/Windows/macOS; manylinux și cross-compile — elemente de bază
- Lab: wrap pentru o funcție C de CRC și benchmark vs Python pur
Networking și mesagerie
- httpx/requests — elemente; asyncio streams vs websockets
- MQTT QoS și buffer offline; strategii de reconectare
- ZeroMQ (overview) și patternuri nanomsg pentru edge
- Lab: canal de comenzi rezilient peste MQTT cu backpressure
Module opționale
Opțional — MicroPython/CircuitPython și deploy la edge
- Portarea logicii de bază în MicroPython; constrângeri și tips
- Împachetarea firmware-ului și strategia OTA (conceptual)
Opțional — Date & ML la edge (overview)
- Modele mici, feature extraction cu numpy/scikit-image
- Planificare pe device și inferență cu bugete stricte
Structura zilei de curs
- Part 1: 09:00–10:30
- Break: 10:30–10:45
- Part 2: 10:45–12:15
- Lunch break: 12:15–13:15
- Part 3: 13:15–15:15
- Break: 15:15–15:30
- Part 4: 15:30–17:30