uBit.radio.datagram#
Overview#
This is the most flexible way to use the radio, and lets you easily send and receive up to 32 bytes of data at a time.
This data can be provided as array of bytes, a text string, or PacketBuffer
.
You can send a packet at any time using the uBit.radio.datagram.send
function.
Any other micro:bits in range will detect the transmitted packet, and make the packet available through the
uBit.radio.datagram.recv
function.
Any micro:bits receiving a datagram packet will also raise a MICROBIT_RADIO_EVT_DATAGRAM
event to indicate
that some data is ready to be read.
For example, imagine you were creating a simple remote control car with one micro:bit acting as a remote controller, and another connected to some servos on the car.
You might decide that simply sending a 1
means turn left, and a 2
means turn right, so you may write a program like this for the remote control:
int main()
{
uBit.radio.enable();
while(1)
{
if (uBit.buttonA.isPressed())
uBit.radio.datagram.send("1");
else if (uBit.buttonB.isPressed())
uBit.radio.datagram.send("2");
uBit.sleep(100);
}
}
…and one like this for the remote control car:
void onData(MicroBitEvent e)
{
ManagedString s = uBit.radio.datagram.recv();
if (s == "1")
uBit.io.P0.setServoValue(0);
if (s == "2")
uBit.io.P0.setServoValue(180);
}
int main()
{
uBit.messageBus.listen(MICROBIT_ID_RADIO, MICROBIT_RADIO_EVT_DATAGRAM, onData);
uBit.radio.enable();
while(1)
uBit.sleep(1000);
}
Message Bus ID#
None.
Message Bus Events#
None.
API#
Constructor#
MicroBitRadioDatagram( MicroBitRadio & r)#
Description#
Constructor.
Creates an instance of a MicroBitRadioDatagram which offers the ability to broadcast simple text or binary messages to other micro:bits in the vicinity
r
The underlying radio module used to send and receive data.
Parameters#
MicroBitRadio &r - The underlying radio module used to send and receive data.
recv#
int recv( uint8_t * buf, int len)#
Description#
Retrieves packet payload data into the given buffer.
If a data packet is already available, then it will be returned immediately to the caller. If no data is available then MICROBIT_INVALID_PARAMETER is returned.
Parameters#
uint8_t *buf - A pointer to a valid memory location where the received data is to be storedintlen - The maximum amount of data that can safely be stored in ‘buf’
Returns#
The length of the data stored, or MICROBIT_INVALID_PARAMETER if no data is available, or the memory regions provided are invalid.
PacketBuffer recv()#
Description#
Retreives packet payload data into the given buffer.
If a data packet is already available, then it will be returned immediately to the caller in the form of a PacketBuffer .
Returns#
the data received, or an empty PacketBuffer if no data is available.
send#
int send( uint8_t * buffer, int len)#
Description#
Transmits the given buffer onto the broadcast radio.
This is a synchronous call that will wait until the transmission of the packet has completed before returning.
Parameters#
uint8_t *buffer - The packet contents to transmit.intlen - The number of bytes to transmit.
Returns#
MICROBIT_OK on success, or MICROBIT_INVALID_PARAMETER if the buffer is invalid, or the number of bytes to transmit is greater than MICROBIT_RADIO_MAX_PACKET_SIZE + MICROBIT_RADIO_HEADER_SIZE .
int send( PacketBuffer data)#
Description#
Transmits the given string onto the broadcast radio.
This is a synchronous call that will wait until the transmission of the packet has completed before returning.
Parameters#
PacketBufferdata - The packet contents to transmit.
Returns#
MICROBIT_OK on success, or MICROBIT_INVALID_PARAMETER if the buffer is invalid, or the number of bytes to transmit is greater than MICROBIT_RADIO_MAX_PACKET_SIZE + MICROBIT_RADIO_HEADER_SIZE .
int send( ManagedString data)#
Description#
Transmits the given string onto the broadcast radio.
This is a synchronous call that will wait until the transmission of the packet has completed before returning.
Parameters#
ManagedStringdata - The packet contents to transmit.
Returns#
MICROBIT_OK on success, or MICROBIT_INVALID_PARAMETER if the buffer is invalid, or the number of bytes to transmit is greater than MICROBIT_RADIO_MAX_PACKET_SIZE + MICROBIT_RADIO_HEADER_SIZE .
packetReceived#
void packetReceived()#
Description#
Protocol handler callback. This is called when the radio receives a packet marked as a datagram.
This function process this packet, and queues it for user reception.