Now that we’ve got one micro:bit broadcasting radio messages every 2 seconds, let’s program another micro:bit to receive those messages and display them in the terminal. Both micro:bit modules have to be running their scripts at the same time. The radio receiver micro:bit will also have to be connected to a terminal so that it can print what it receives.
Now, you are ready to load a script into a second micro:bit for receiving radio messages.
# receive_radio_test_message from microbit import * import radio radio.on() radio.config(channel = 7) sleep(1000) print("micro:bit radio receiver") while True: message = radio.receive() if message is not None: print("Receive: ", message)
The micro:bit that’s receiving messages has to be set to the same channel as the one that’s sending messages.
radio.config(channel = 7)
Inside this while true loop, the statements will repeatedly check to find out if the radio received a message. It will only print a message it received to the terminal once, and then go back to waiting for the next message.
while True:
A message variable is created and set to the result returned by radio.receive() returns. If a radio message was received, that result is a string. If no radio messages were received, that result is None.
message = radio.receive()
If the message variable is None at this point, the script will skip the statement that displays the message. On the other hand, if message has a string, the script will print it in the terminal. That’s because if message is not None: only executes statements below and indented from it if radio.receive() copied a string into the message variable.
if message is not None: print("Receive: ", message)
If the message variable does have a string, display it in the terminal with print(“Receive: “, message).
The channel = 7 setting is actually the default channel. Classrooms with micro:bit modules can set up more than one broadcasting module, each set to a different channel that sends a different message. The rest of the class can run receiver scripts that “tune in” to one of those broadcasting channels. For best results, keep the channels as widely separated as possible. For example, if there are five broadcasting micro:bit modules, use channels 0, 20, 40, 60, and 80. Each one should broadcast a unique message so that students can verify which micro:bit they are receiving messages from.
RF is an abbreviation for radio frequency.
The sender micro:bit is broadcasting. Broadcasting is one-to-many communication. One broadcasting unit, many receivers. True, if you just have one receiver, it’s actually one-to-one communication. However, if you have more than one micro:bit, they can also run scripts that receive and print, which makes it one-to-many.
The micro:bit has other built-in network configurations. The config method also has address= and group= settings. You can use them in scripts to set up networks on the same channel. That way, each micro:bit can use the group and/or address setting to reach only the micro:bit that is in a given group and has a specific address. You will use these in later activities.
Here’s an excerpt from the micro:bit MicroPython Radio reference:
The channel (default=7) can be an integer value from 0 to 83 (inclusive) that defines an arbitrary “channel” to which the radio is tuned. Messages will be sent via this channel and only messages received via this channel will be put onto the incoming message queue. Each step is 1MHz wide, based at 2400MHz.
2400 MHz is a radio frequency that reverses the voltage applied to the antenna at 2400-million times per second. It’s another way of saying 2.4 GHz, which is 2.4-billion times per second. In terms of the numbers:
2400 M = 24 million = 2400 * 1,000,000 = 2,400,000,000
2.4 G = 2.4 billion = 2.4 * 1,000,000,000 = 2,400,000,000
Channel 0 sets the radio frequency to 2400 MHz, channel 1 to 2401 MHz, and so on up to channel 83 at 2483 MHz. In terms of GHz, that’s 2.401, 2.402, and so on through 2.483 GHz.
The channel setting also makes it possible to avoid a particular Wi-Fi network that might be crowding the band with radio traffic. Wireless routers use channels 1 through 14, with frequencies of 2412 through 2484 MHz (2.412 through 2.484 GHz).