MicroPython — radio komunikacija između micro:bit uređaja


Jedna od najzanimljivijih mogućnosti micro:bit uređaja je bežična komunikacija pomoću ugrađenog radija. Na ovaj način dva ili više micro:bit-a mogu da razmenjuju poruke.


U ovoj lekciji naučićeš:

  • kako se koristi radio modul u MicroPython-u
  • kako se šalju i primaju poruke
  • kako napraviti jednostavnu komunikaciju između dva uređaja

Uključivanje radio modula


Da bi micro:bit mogao da komunicira, potrebno je da uključiš radio modul.



from microbit import *
import radio

radio.on()
radio.config(group=1)

Svi micro:bit uređaji koji su u istoj radio grupi mogu međusobno da komuniciraju.


Slanje poruke


U sledećem primeru micro:bit šalje poruku kada se pritisne dugme A.



from microbit import *
import radio

radio.on()
radio.config(group=1)

while True:
    if button_a.was_pressed():
        radio.send("Zdravo!")
        display.show(Image.HAPPY)
        sleep(500)
        display.clear()

Primanje poruke


Drugi micro:bit može da primi poruku pomoću funkcije radio.receive().



from microbit import *
import radio

radio.on()
radio.config(group=1)

while True:
    poruka = radio.receive()
    if poruka:
        display.scroll(poruka)

Ako nema poruke, funkcija radio.receive() vraća None.


Primer: slanje brojeva


Radio se može koristiti i za slanje brojeva, na primer za igre ili bodovanje.



radio.send("5")

Na prijemnoj strani poruku možeš pretvoriti u broj:



poruka = radio.receive()
if poruka:
    broj = int(poruka)
    display.show(broj)

Poređenje sa MakeCode okruženjem


Ako si ranije radio u MakeCode-u, radio blokovi koje si koristio ovde su zamenjeni funkcijama:

  • radio.on() → uključi radio
  • radio.send() → pošalji poruku
  • radio.receive() → primi poruku

MicroPython omogućava više kontrole i lakše pravljenje naprednih projekata.



Dublje razumevanje radio komunikacije


Radio komunikacija na micro:bit-u funkcioniše slično kao mala lokalna mreža. Svi uređaji:

  • moraju imati uključen radio (radio.on())
  • moraju biti u istoj grupi (radio.config(group=broj))

Grupa je kao „kanal komunikacije“. Ako su uređaji u različitim grupama — ne čuju se.


Važno: radio.receive() i None

Funkcija radio.receive() stalno proverava da li je stigla poruka. Ako nema poruke, vraća None.


poruka = radio.receive()

if poruka is not None:
    display.scroll(poruka)

Ovo je primer rada sa vrednošću None, što je važno u Python-u.


Primer 1 — Dvosmerna komunikacija

Jedan micro:bit šalje „PING“, drugi odgovara „PONG“.

Uređaj A


from microbit import *
import radio

radio.on()
radio.config(group=5)

while True:
    if button_a.was_pressed():
        radio.send("PING")

Uređaj B


from microbit import *
import radio

radio.on()
radio.config(group=5)

while True:
    poruka = radio.receive()

    if poruka == "PING":
        display.show(Image.YES)
        radio.send("PONG")

Ovo je osnova za klijent–server komunikaciju.


Primer 2 — Bežinski prekidač svetla

Jedan micro:bit je daljinski upravljač, drugi upravlja LED-om ili relejem.

Predajnik


if button_a.was_pressed():
    radio.send("ON")

if button_b.was_pressed():
    radio.send("OFF")

Prijemnik


poruka = radio.receive()

if poruka == "ON":
    pin0.write_digital(1)

if poruka == "OFF":
    pin0.write_digital(0)

Ovo je osnova za pametnu kuću.


Primer 3 — Slanje podataka sa senzora

Jedan micro:bit meri temperaturu i šalje je drugom uređaju.

Predajnik (senzor)


t = temperature()
radio.send(str(t))
sleep(2000)

Prijemnik (displej)


poruka = radio.receive()

if poruka:
    temp = int(poruka)
    display.scroll(str(temp) + "C")

Ovde se koristi:

  • pretvaranje broja u tekst (str())
  • pretvaranje teksta u broj (int())

Kombinovanje sa prethodnim lekcijama

Radio + akcelerometar


x = accelerometer.get_x()

if x > 500:
    radio.send("DESNO")
elif x < -500:
    radio.send("LEVO")
Drugi micro:bit prikazuje strelice na osnovu primljene poruke.

Radio + kompas

Možeš poslati pravac kretanja drugom uređaju.

Radio + brojač

Slanje rezultata igre ili broja koraka.

Mini projekat — Bežinska igra refleksa

Jedan uređaj šalje signal „START“. Drugi mora brzo da pritisne dugme i pošalje vreme reakcije.

Ovo kombinuje:
  • radio komunikaciju
  • promenljive
  • merenja vremena
  • logiku poređenja

Napredna podešavanja radio modula

Možeš podesiti:

radio.config(
    group=3,
    power=7,
    channel=10,
    length=32
)
  • group — grupa uređaja
  • power — jačina signala (0–7)
  • channel — frekvencijski kanal
  • length — maksimalna dužina poruke
Ovo je korisno kada u učionici radi više grupa učenika.

Česte greške učenika

  • Zaborave radio.on()
  • Uređaji nisu u istoj grupi
  • Zaborave proveru da li je poruka None
  • Pokušaju da šalju broj bez str()

Zadaci za samostalan rad

Zadatak 1

Napravi bežinski semafor (jedan šalje signal, drugi menja svetla).

Zadatak 2

Napravi sistem bodovanja za igru (pošalji broj poena).

Zadatak 3 (napredni)

Napravi bežinski alarm:
  • Jedan uređaj detektuje pokret
  • Drugi prikazuje upozorenje

Zadatak 4 (izazov)

Pošalji više podataka u jednoj poruci:
"25,450"
(temperatura i svetlo u isto vreme) Na prijemnoj strani razdvoj poruku.

Izazov za tebe — Možeš li ovo da rešiš?


Napravi sistem sa dva micro:bit uređaja:

  • Prvi meri temperaturu i šalje vrednost preko radija.
  • Drugi prikazuje temperaturu samo ako je veća od 25°C.

Pokušaj da napišeš program samostalno. Razmisli:

  • Kako šalješ broj preko radija?
  • Kako pretvaraš primljeni tekst u broj?
  • Kako koristiš if uslov?

Ako ti treba pomoć ili želiš dodatne primere radio komunikacije, pogledaj detaljnije objašnjenje ovde:

□ Radio veza na micro:bit-u — dodatni primeri i objašnjenja


Tamo ćeš pronaći:

  • proširene primere komunikacije
  • objašnjenje konverzije podataka (str ↔ int)
  • ideje za napredne projekte

Pokušaj prvo sam — pa tek onda klikni □

Mini projekat — Bežična kontrola svetla


U ovom projektu koristićemo radio komunikaciju između dva micro:bit uređaja. Jedan uređaj šalje komande, a drugi reaguje i uključuje ili isključuje svetlo.


Uređaj 1 — Predajnik (šalje komande)

Kada pritisneš dugme A šalje se poruka "ON", a kada pritisneš dugme B šalje se poruka "OFF".


from microbit import *
import radio

radio.on()

while True:
    if button_a.is_pressed():
        radio.send("ON")
        display.show(Image.ARROW_N)
        sleep(300)

    if button_b.is_pressed():
        radio.send("OFF")
        display.show(Image.ARROW_S)
        sleep(300)
  

Uređaj 2 — Prijemnik (prima komande)


Ovaj uređaj prima poruku i reaguje:

  • Ako primi "ON" → uključi LED ili prikaži znak ✔
  • Ako primi "OFF" → isključi LED ili prikaži znak ✖

from microbit import *
import radio

radio.on()

while True:
    poruka = radio.receive()

    if poruka == "ON":
        display.show(Image.YES)
        pin0.write_digital(1)   # uključi LED

    elif poruka == "OFF":
        display.show(Image.NO)
        pin0.write_digital(0)   # isključi LED

    sleep(200)
  

Šta učiš ovim projektom?


  • Kako funkcioniše radio.send() i radio.receive()
  • Kako se poruke mogu koristiti za upravljanje uređajem
  • Kako povezati radio komunikaciju sa GPIO pinovima
  • Osnovu za IoT i bežične sisteme

Ideje za proširenje projekta


  • Dodaj servo motor umesto LED svetla
  • Dodaj lozinku (npr. samo poruka "ON123" aktivira uređaj)
  • Pošalji vrednosti senzora drugom uređaju
  • Napravi mini bežični alarm sistem

Ovaj mini projekat predstavlja osnovu za ozbiljnije STEM i takmičarske projekte koji uključuju bežičnu komunikaciju između uređaja.

Napredni projekat — Bežični alarm sistem sa senzorom

U ovom projektu kombinuješ radio komunikaciju i senzor. Jedan micro:bit meri vrednost senzora i šalje upozorenje kada pređe određeni prag. Drugi micro:bit prima poruku i aktivira alarm (LED, buzzer ili servo).


Uređaj 1 — Predajnik (senzor)


Ovaj uređaj očitava analogni senzor (npr. senzor svetla ili potenciometar). Kada vrednost pređe zadati prag, šalje poruku "ALARM".


from microbit import *
import radio

radio.on()
radio.config(group=23)  # ista grupa na oba uređaja

PRAG = 700

while True:
    vrednost = pin0.read_analog()

    if vrednost > PRAG:
        radio.send("ALARM")
        display.show(Image.SKULL)
        sleep(500)
    else:
        display.clear()

    sleep(200)
  

Uređaj 2 — Prijemnik (alarm)

Ovaj uređaj prima poruku i aktivira alarmni sistem.


from microbit import *
import radio

radio.on()
radio.config(group=23)

while True:
    poruka = radio.receive()

    if poruka == "ALARM":
        display.show(Image.NO)
        pin1.write_digital(1)  # uključi LED ili buzzer
        sleep(1000)
        pin1.write_digital(0)
        display.clear()

    sleep(200)
  

Šta ovaj projekat uvodi?


  • Kombinovanje senzora i radio komunikacije
  • Korišćenje radio.config(group=...)
  • Slanje poruka kao signal za događaj
  • Osnove bežičnih sigurnosnih sistema

Ideje za takmičenja i napredne radove


  • Dodaj više tipova poruka: "ALARM", "RESET", "STATUS"
  • Pošalji numeričku vrednost senzora umesto teksta
  • Napraviti mrežu od 3 ili više micro:bit uređaja
  • Dodaj šifrovanje jednostavnom lozinkom

Ovaj projekat je odlična osnova za STEM takmičenja, IoT demonstracije i napredne MicroPython projekte.

Skriveni mini kviz — Radio komunikacija

Proveri da li razumeš: radio modul, slanje i primanje poruka, grupe i rad sa podacima.

Otvori kviz

Mini kviz: Radio komunikacija

1. Koja komanda uključuje radio modul?




2. Šta znači ako su dva uređaja u različitim radio grupama?




3. Šta vraća radio.receive() ako nema poruke?




4. Zašto koristimo str() pri slanju broja?




5. Analiziraj kod:


poruka = radio.receive()

if poruka:
    display.scroll(poruka)



6. Koja linija podešava radio grupu?







Napredni mini kviz — Radio komunikacija i senzori

Proveri svoje znanje o radio komunikaciji, slanju više tipova podataka i kombinovanju sa senzorima. Ovaj kviz je izazovniji i zahteva razmišljanje.

Otvori kviz

Napredni kviz: Radio + senzori

1. Šta je ispravan način da proverimo da li je primljena poruka sa radio modula?


poruka = radio.receive()



2. Kako možemo poslati i broj i nagib X akcelerometra u jednoj poruci?




3. Kako na prijemnoj strani razdvojimo broj i nagib?




4. Ako želimo da pošaljemo samo kada je temperatura veća od 30°C, gde stavljamo uslov?




5. Koja opcija je primer kombinovanja radio signala i kompas senzora?




6. Šta je prednost podešavanja radio grupe (radio.config(group=...))?




7. Koja linija koda omogućava da micro:bit šalje brojeve preko radija?







Povezane lekcije i korisni resursi


Ako želiš da proširiš znanje o MicroPython-u i micro:bit uređaju, pogledaj sledeće lekcije na našem sajtu:

□ Povezane lekcije na SvetProgramiranja.com


□ Korisni spoljašnji resursi



Preporuka: kombinuj radio komunikaciju sa senzorima i aktuatorima kako bi napravio kompletan bežični sistem. Tako razvijaš razumevanje IoT koncepata i praktične primene MicroPython-a.