MicroPython → Mini projekti → Serial komunikacija i Processing


MicroPython — serial komunikacija (most ka Processing-u)


Završna oblast kursa

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.

Važna ideja:

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
micro:bit povezan sa računarom preko USB kabla i serijska komunikacija ka Processing-u
micro:bit šalje podatke računaru preko serijske veze, a Processing ih prikazuje kao grafiku u realnom vremenu.

Š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
Kako ovo izgleda u praksi?

Na primer:
  • micro:bit meri temperaturu
  • šalje broj računaru
  • Processing crta grafikon temperature
Isto možemo raditi sa:
  • 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.

Napomena:

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.

dijagram koji prikazuje UART komunikaciju između micro:bit-a i računara preko USB kabla
UART na micro:bit-u koristi USB kao most između uređaja i računara.

Š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
Mini eksperiment:

Pokušaj da zamisliš:
  • Kako bi izgledala poruka za X i Y nagib?
  • Kako bi izgledala poruka za temperaturu i dugme A?
Na primer:

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)

Šta znači baudrate?

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
Zamisli ovo kao Enter taster.

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
Thonny prikazuje temperature koje stižu sa microbit uređaja preko UART komunikacije
Rezultat izvršavanja programa – micro:bit šalje temperaturu računaru jednom u sekundi.

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.

Česta greška:

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
Nakon toga pokušati ponovno povezivanje.
Probaj:

Pokreni prethodni program i otvori serial monitor. Ako vidiš brojeve koji se menjaju svake sekunde, komunikacija radi ispravno.

MakeCode serial dokumentacija:

https://makecode.microbit.org/reference/serial

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
Velika ideja:

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?
Dodatni izazov:

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.

Važna ideja:

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
Šta je delimiter?

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
Ovo koriste i pravi sistemi.

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 \n na 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
Eksperiment:

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

  • 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 poruka
  • uart.read() čita pristigle podatke
  • decode() pretvara bajtove u tekst
  • strip() uklanja prazne karaktere i novi red
Ovo je veoma važan koncept.

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

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
Važna ideja:

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

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.

Važno:

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

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.

Važno:

Podaci se kreću samo u jednom smeru:
  • senzor ➝ micro:bit
  • micro:bit ➝ računar
  • računar ➝ grafika
Kasnije ćemo videti i dvosmernu komunikaciju.

Primer toka podataka


Pogledajmo jedan kompletan primer.

Šta se dešava kada učenik nagne micro:bit?

  1. Akcelerometar meri nagib
  2. MicroPython dobija numeričke vrednosti
  3. Program šalje poruku:
    
    120,-45
    
  4. Processing pročita celu liniju
  5. Program razdvoji podatke pomoću split()
  6. Objekat na ekranu promeni poziciju

Sve ovo se dešava veoma brzo — gotovo u realnom vremenu.

Real-time sistem:

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
Dobra arhitektura:

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?

Razmisli:

  • Ako želiš manje podataka ➝ logika može biti na micro:bit-u
  • Ako želiš fleksibilniju grafiku ➝ logika može biti u Processing-u
Ne postoji samo jedno tačno rešenje. To je deo dizajna sistema.

Ovde više ne razmišljamo samo o kodu — već o arhitekturi cele aplikacije.