MicroPython → Mini projekti → Serial komunikacija i Processing
MicroPython — serial komunikacija (most ka Processing-u)
MicroPython početna:Povratak na po;etak tutorijala -Micropython
Povezivanje micro:bit-a i računara
U ovoj lekciji učimo kako micro:bit šalje podatke računaru i kako ti podaci mogu da se koriste za:
- vizualizaciju podataka
- grafike i animacije
- interaktivne aplikacije
- mini igre i kontrolere
Processing (Python mod) omogućava da ove podatke pretvorimo u grafiku u realnom vremenu.
Ovo je prvi put u kursu da micro:bit postaje deo većeg sistema. Micro:bit više nije samo uređaj koji prikazuje LED animacije — sada komunicira sa drugim programom na računaru.
Ovo je ključna veza između:
- fizičkog sveta (senzori i pokret)
- MicroPython programa
- grafičkih aplikacija na računaru
Šta je serial komunikacija?
Serial komunikacija je način da uređaji razmenjuju podatke jedan deo po jedan deo — kao tekstualne poruke.
U našem slučaju:
- micro:bit ➝ šalje podatke
- računar ➝ prima i obrađuje podatke
Možeš zamisliti da:
- micro:bit „piše poruke“
- Processing ih čita i pretvara u grafiku
Na primer:
- micro:bit meri temperaturu
- šalje broj računaru
- Processing crta grafikon temperature
- nagibom
- dugmadima
- pokretom
- svetlom
UART — serijska komunikacija na micro:bit-u
MicroPython koristi ugrađeni uart interfejs
za komunikaciju sa računarom preko USB kabla.
UART znači:
Universal Asynchronous Receiver/Transmitter
To je hardverski modul koji omogućava:
- slanje podataka
- prijem podataka
- komunikaciju između uređaja
Kod micro:bit-a UART je povezan sa USB interfejsom, pa računar može direktno da prima podatke.
Iako koristimo USB kabl, micro:bit interno i dalje koristi UART komunikaciju. USB ovde služi kao „most“ između računara i micro:bit uređaja.
Da bismo koristili UART u MicroPython-u, potrebno je da uvezemo modul:
from microbit import *
Objekat uart
je već ugrađen u ovaj modul.
Šta možemo slati?
Najčešće šaljemo:
- brojeve (temperatura, nagib, svetlost)
- tekstualne poruke
- više vrednosti odjednom
Na primer:
23
ili:
23,512
U ovom slučaju:
- 23 može biti temperatura
- 512 može biti vrednost senzora svetlosti
Pokušaj da zamisliš:
- Kako bi izgledala poruka za X i Y nagib?
- Kako bi izgledala poruka za temperaturu i dugme A?
120,-340
ili
24,1
Primer: slanje temperature računaru
Sada pravimo prvi pravi serial program.
Micro:bit će:
- čitati temperaturu
- pretvarati broj u tekst
- slati podatke računaru svake sekunde
from microbit import *
import utime
# Pokretanje UART komunikacije
uart.init(baudrate=115200)
while True:
# Očitavanje temperature
temp = temperature()
# Slanje temperature računaru
uart.write(str(temp) + "\r\n")
# Pauza od jedne sekunde
utime.sleep(1)
baudrate=115200
određuje brzinu prenosa podataka.
I računar i micro:bit moraju koristiti istu brzinu komunikacije.
Zašto koristimo str()?
Funkcija uart.write()
šalje tekst.
Zato broj moramo prvo pretvoriti u tekst:
str(temp)
Bez toga program bi prijavio grešku.
Kraj poruke — znak novog reda
Na kraju poruke dodajemo:
"\r\n"
ili jednostavnije:
"\n"
To označava kraj jedne poruke.
Zahvaljujući tome računar zna:
- gde se završava jedna vrednost
- gde počinje sledeća
Kada micro:bit pošalje
\n,
to je kao da je prešao u novi red teksta.
Računar tada može da primi nešto ovako:
23
23
24
24
Provera UART komunikacije
Podatke koje micro:bit šalje možemo posmatrati u:
- Thonny Shell prozoru
- MakeCode Serial Monitor-u
- drugim serial monitor alatima
Pre povezivanja sa Processing-om, uvek prvo proveravamo komunikaciju pomoću shell prozora.
Serial monitor(shell) prikazuje tekst koji micro:bit šalje računaru.
Ako Thonny prijavi:
Device is busy or does not respond
a micro:bit se vidi kao COM uređaj,
moguće je da MicroPython firmware nije pravilno instaliran.
Rešenje:
- Tools → Options → Interpreter
- izabrati BBC micro:bit
- kliknuti na Install or update MicroPython
- sačekati završetak instalacije
Pokreni prethodni program i otvori serial monitor. Ako vidiš brojeve koji se menjaju svake sekunde, komunikacija radi ispravno.
MakeCode serial dokumentacija:
Zašto je ovo važno za Processing?
Processing može da koristi serial podatke za:
- grafikone u realnom vremenu
- animacije
- interaktivne projekte
- mini igre
Na primer:
- graf temperature kroz vreme
- kontrola objekta naginjanjem micro:bit-a
- vizuelni alarm kada temperatura poraste
Micro:bit postaje „kontroler“ za program na računaru. To je osnova:
- IoT sistema
- interaktivnih instalacija
- gaming kontrolera
- vizualizacije senzora
Mini zadatak
Napiši program koji:
- šalje temperaturu ili nagib
- šalje podatke svake sekunde
- koristi znak novog reda
\n
Razmisli:
- Kako bi izgledala poruka?
- Kako bi Processing mogao da prikaže te podatke?
Pokušaj da šalješ dve vrednosti odjednom. Na primer:
24,512
Šta bi mogla predstavljati druga vrednost?
Šta sledi?
U narednim lekcijama učićemo:
- kako Processing čita serial podatke
- kako se crtaju grafikoni i animacije
- kako micro:bit postaje kontroler igre
Ovo je pravi most između:
- hardvera
- programiranja
- grafike
- interaktivnih sistema
Proširenje — Napredna serial komunikacija
Kada micro:bit šalje podatke računaru, važno je da komunikacija bude:
- jasno formatirana
- dosledna
- laka za obradu
U ozbiljnijim projektima način slanja podataka je podjednako važan kao i sam program.
Kada dva programa komuniciraju, moraju da se „dogovore“ kako izgleda poruka. Ako format nije jasan, računar neće znati kako da razume podatke.
1. Slanje više vrednosti odjednom
Često želimo da pošaljemo više podataka istovremeno.
Na primer:
- temperaturu
- nagib po X osi
- stanje dugmeta
Jedan od najčešćih načina je korišćenje zareza kao razdjelnika.
from microbit import *
import utime
while True:
temp = temperature()
x = accelerometer.get_x()
# Pravljenje jedne tekstualne poruke
poruka = str(temp) + "," + str(x) + "\n"
# Slanje poruke računaru
uart.write(poruka)
utime.sleep(1)
Računar može da primi nešto ovako:
23,145
24,132
24,160
Zarez ovde služi kao delimiter (razdvojnik podataka). Processing kasnije može razdvojiti tekst pomoću funkcije:
split(',')
Na taj način dobijamo više odvojenih vrednosti iz jedne poruke.
2. Mini komunikacioni protokol
U većim projektima korisno je označiti šta tačno šaljemo.
Na taj način pravimo mali komunikacioni protokol.
Na primer:
uart.write("TEMP:" + str(temperature()) + "\n")
ili:
uart.write("DATA:" + str(temp) + "," + str(x) + "\n")
Processing tada može proveriti:
- da li poruka počinje sa
DATA: - koji tip podataka je stigao
- kako treba obraditi poruku
Mrežni protokoli, IoT uređaji i serveri takođe koriste jasno definisane formate poruka. Na primer:
- HTTP
- JSON
- MQTT
3. Stabilnost komunikacije
Da bi serial komunikacija radila pouzdano, potrebno je pratiti nekoliko pravila.
- uvek koristi
\nna kraju poruke - šalji podatke u pravilnim intervalima
- ne šalji previše podataka odjednom
Prebrzo slanje može izazvati:
- zagušenje porta
- spojene poruke
- kašnjenje grafike
- gubitak podataka
Pokušaj da ukloniš:
utime.sleep(1)
Šta se dešava sa serial monitorom?
Da li se poruke pojavljuju previše brzo?
Zato često koristimo:
utime.sleep()
ili preciznije vremenske intervale.
4. Mini projekat — graf temperature
Sada već imamo dovoljno znanja za prvi pravi projekat vizualizacije.
Ideja projekta:
- micro:bit šalje temperaturu
- Processing prima podatke
- Processing crta grafikon u realnom vremenu
Takav sistem može prikazivati:
- temperaturu
- svetlost
- nagib
- pokret
- Kako čuvati stare vrednosti?
- Kako pomerati graf ulevo?
- Kako skalirati podatke?
- Kako promeniti boju kada temperatura poraste?
Ovo je prvi korak ka:
- data vizualizaciji
- interaktivnim dashboard-ima
- real-time sistemima
5. Dvosmerna komunikacija
Do sada je micro:bit samo slao podatke.
Ali serial komunikacija može biti i:
- računar ➝ micro:bit
- micro:bit ➝ računar
To znači da računar može slati komande micro:bit-u.
Na primer:
LED_ON
MicroPython tada može reagovati:
if uart.any():
# Čitanje pristigle poruke
komanda = uart.read().decode().strip()
# Provera komande
if komanda == "LED_ON":
display.show(Image.HEART)
Šta rade ove funkcije?
uart.any()proverava da li postoji nova porukauart.read()čita pristigle podatkedecode()pretvara bajtove u tekststrip()uklanja prazne karaktere i novi red
Na ovaj način računar može upravljati hardverom. To je osnova:
- robotike
- IoT sistema
- interaktivnih instalacija
- gaming kontrolera
Šta si zapravo naučio?
U ovoj oblasti naučio si:
- kako uređaji razmenjuju podatke
- kako funkcioniše serial komunikacija
- kako se definiše format poruka
- kako se povezuje hardver i grafika
- kako razmišljati sistemski
Ovo je veliki korak:
- od jednostavnog MicroPython-a
- ka pravim interaktivnim sistemima
Programiranje nije samo pisanje koda. Pravi sistemi često imaju:
- više uređaja
- komunikaciju
- grafiku
- senzore
- razmenu podataka
Dijagram arhitekture — micro:bit ↔ Serial ↔ Processing
Da bismo razumeli kako ceo sistem funkcioniše, korisno je da ga posmatramo kao više povezanih slojeva.
Svaki sloj ima svoju ulogu:
- jedan prikuplja podatke
- drugi ih prenosi
- treći ih prikazuje i obrađuje
U velikim sistemima različiti delovi programa često imaju različite odgovornosti. To se naziva: razdvajanje odgovornosti (separation of concerns).
1. Fizički sloj — Hardware
Prvi sloj predstavlja sam micro:bit uređaj i njegove senzore.
Ovde spadaju:
- temperaturni senzor
- akcelerometar
- kompas
- dugmad A i B
- LED matrica
Ovaj sloj:
- meri podatke iz realnog sveta
- pretvara ih u brojeve
- prosleđuje ih programu
Ako nagneš micro:bit, akcelerometar vraća numeričke vrednosti koje predstavljaju nagib uređaja.
2. Komunikacioni sloj — Serial veza
Drugi sloj služi za prenos podataka između micro:bit-a i računara.
Ovde koristimo:
- USB kabl
- UART interfejs
- tekstualne poruke
Na primer:
23,145
ili:
120,-45
Na kraju poruke obično šaljemo:
"\n"
To označava kraj jedne linije podataka.
Serial sloj ne „razume“ značenje podataka. On samo prenosi tekst sa jednog uređaja na drugi.
3. Aplikacioni sloj — Processing
Treći sloj predstavlja program na računaru.
U našem slučaju to je: Processing Python Mode.
Ovaj sloj:
- čita serial podatke
- razdvaja vrednosti
- obrađuje informacije
- crta grafiku i animacije
Na primer:
- pomera objekat na ekranu
- crta grafikon temperature
- reaguje na pritisak dugmeta
Da li micro:bit treba da zna kako izgleda grafikon? Ili je njegov posao samo da šalje podatke?
Vizuelni dijagram sistema
[ Senzori / Dugmad ]
↓
micro:bit
↓
uart.write("23,145\n")
↓
USB / Serial
↓
Processing Serial.read()
↓
Parsiranje (split)
↓
Grafika / Animacija / Igra
Svaka strelica predstavlja prenos podataka iz jednog dela sistema u drugi.
Podaci se kreću samo u jednom smeru:
- senzor ➝ micro:bit
- micro:bit ➝ računar
- računar ➝ grafika
Primer toka podataka
Pogledajmo jedan kompletan primer.
Šta se dešava kada učenik nagne micro:bit?
- Akcelerometar meri nagib
- MicroPython dobija numeričke vrednosti
- Program šalje poruku:
120,-45 - Processing pročita celu liniju
- Program razdvoji podatke pomoću
split() - Objekat na ekranu promeni poziciju
Sve ovo se dešava veoma brzo — gotovo u realnom vremenu.
Sistem reaguje odmah nakon promene senzora. To omogućava:
- interaktivne igre
- kontrolere pokreta
- vizualizaciju uživo
Razdvajanje odgovornosti
U našem sistemu svaki deo ima jasnu ulogu.
- micro:bit ➝ meri i šalje podatke
- Serial komunikacija ➝ prenosi podatke
- Processing ➝ prikazuje i obrađuje podatke
Ovakav pristup koristi se u:
- IoT uređajima
- robotici
- industrijskim sistemima
- interaktivnim instalacijama
Kada svaki deo sistema ima jasan posao, program postaje:
- lakši za razumevanje
- lakši za popravku
- lakši za proširenje
Napredna perspektiva
Ovaj sistem možemo posmatrati i kao pravu softversku arhitekturu.
- Klijent (micro:bit) ➝ generiše podatke
- Kanal komunikacije ➝ serial protokol
- Processing engine ➝ obrađuje i prikazuje podatke
Slični principi koriste se u:
- IoT mrežama
- industrijskim senzorima
- robotici
- game kontrolerima
Tehnologije mogu biti različite, ali osnovna ideja ostaje ista.
Mini zadatak za razmišljanje
Zamisli sledeći sistem:
- micro:bit šalje x, y i temperaturu
- Processing reaguje samo kada temperatura pređe 30°C
Pitanje:
Gde treba napisati logiku uslova?
- Ako želiš manje podataka ➝ logika može biti na micro:bit-u
- Ako želiš fleksibilniju grafiku ➝ logika može biti u Processing-u
Ovde više ne razmišljamo samo o kodu — već o arhitekturi cele aplikacije.
