Радиосигнал

Радиоканал является открытым каналом передачи сигнала и его прослушать может любое аналогичное учтройство. Если у Вас несколько устройств Microbit паралелльно передают сигналы, то они будут мешать друг другу.

Можно настроить радио на разные каналы (пронумерованные 0-83). Это работает точно так же, как детские рации: все настраиваются на один канал и слышат всех остальных. Как и в случае раций, при использовании соседних каналов возможны небольшие помехи.

Радиомодуль позволяет указать две части информации: адрес и группу. Адрес похож на почтовый адрес, тогда как группа похожа на конкретного получателя по адресу. Важно то, что радио отфильтровывает получаемые сообщения, которые не соответствуют вашему адресу и группе. Поэтому важно заранее определить адрес и группу, которые будет использовать ваше приложение.

Конечно, Microbit передает открытый сигнал. Главное, Вам не нужно беспокоиться об их фильтрации. Тем не менее, если кто-то захочет принять сигнал или подменить, они смогут это просто сделать. В этом случае важно использовать зашифрованные средства связи. Криптография — увлекательная тема, но к сожалению, выходит за рамки этого руководства.

Программа «Светлячки»

Это «Светлячок»:

../_images/firefly.gif

Использовать Microbit, чтобы создать что-то вроде роя светлячки сигнализирующих друг другу

Сначало подключим библиотеку import radio для работы с радиомодулем. Используем метод radio.on() чтобы включить радиомодуль. Радиомодуль тратит много энергии, поэтому Вы можете управлять его включением и выключением radio.off().

Библиотека radio имеет много функций настройки сигнала, которая позволяет экономить энергию. Документация по API содержит всю информацию, необходимую для настройки радиостанции в соответствии с вашими потребностями.

Самый простой способ отправить сообщение:

radio.send("message")

Получить сообщение можно:

new_message = radio.receive()

По мере получения сообщений они помещаются в очеред. receive функция возвращает последнее сообщение из очереди в виде строки, освобождая место для нового входящего сообщения. Если очередь сообщений заполняется, то новые входящие сообщения игнорируются

Радиомодуль также может отправлять данные произвольного типа: числа, параметры со значениями

Программа светлячков:

# A micro:bit Firefly.
# By Nicholas H.Tollervey. Released to the public domain.
import radio
import random
from microbit import display, Image, button_a, sleep

# Анимация вспышка
flash = [Image().invert()*(i/9) for i in range(9, -1, -1)]

# Включить радиомодуль.
radio.on()

# Вечный цикл.
while True:
    # Если кнопка A нажата отправить сообщение.
    if button_a.was_pressed():
        radio.send('flash')
    # Читать входящие сообщения
    incoming = radio.receive()
    if incoming == 'flash':
        # Если пришло сообщение"flash" проиграть анимацию после случайно задержки
        sleep(random.randint(50, 350))
        display.show(flash, delay=100, wait=False)
        # Передать ответное сообщение.
        if random.randint(0, 9) == 0:
            sleep(500)
            radio.send('flash')

Результат выглядит так:

../_images/mb-firefly.gif