Broadcasting and Receiving messages over WIFI allows you to link multiple BLOX devices together across your local WIFI network. It can also be used to interact with external applications
BLOX devices communicate using UDP to send (broadcast) and receive messages. Each message includes a sensor value (analog or digital) and a unique ID Tag you get to set. The tags allows devices to filter whether they need to pay attention to the message
ID Tag-Based Processing:
Multiple Listeners:
Multiple BLOX devices can be configured to respond to the same ID Tag, allowing for coordinated actions across devices.
Cross-Platform Compatibility:
The UDP messages can be used with other applications as well. For example, a Python or Node.js script on a computer can send or receive these UDP packets, allowing for integration with external software and systems.
This setup provides a flexible and extensible way to manage inter-device communication and integration with other networked applications.
You can send analog or digital sensor values
Note the matching ID Tags (compared to receiving section below) to identify the outgoing messages
Received messages are available as “sensors” for use on the other device / devices
Note the matching ID Tags (compared to sending section above) to identify the incoming messages
You can see broadcast messages in the BLOX Serial/USB logs
Messages are broadcast unencrypted for simplicity. This also allows you to very easily monitor and troubleshoot issues, as well as integrate it into other scripts and programs
For example you can listen out for messages / send messages from a computer to help you troubleshoot
You can use your own code to send and receive UDP messages in the format of idtagstring=value on port 49160
Technical Details:
BLOX sends and receives on port 49160
Data is sent as a simple string in the format idtag=value. For analog sensors the value is the numeric value. For digital sensors its 0/1 respectively. Quite simple and easy
For example: Sending via a custom nodejs program
const dgram = require('dgram'); // Create a UDP socket const client = dgram.createSocket('udp4'); // Enable broadcast on the socket client.on('listening', function() { client.setBroadcast(true); }); // The message to send const message = Buffer.from('analog_read_1_blox_2=115'); // construct value dynamically in your own code // The target port and broadcast address const PORT = 49160; const BROADCAST_ADDR = '255.255.255.255'; // Send the message client.send(message, 0, message.length, PORT, BROADCAST_ADDR, (err) => { if (err) { console.error(`Error sending message: ${err}`); } else { console.log('Message broadcasted successfully'); } client.close(); });
For example: Receiving via a custom nodejs program
const dgram = require('dgram'); // Create a UDP socket for the server const server = dgram.createSocket('udp4'); // Define the port to listen on const PORT = 49160; // Event listener for when the server receives a message server.on('message', (msg, rinfo) => { const message = msg.toString(); const keyValue = message.split('='); // Check if the message is in the expected format if (keyValue.length === 2 && keyValue[0] === 'analog_read_1_blox_2') { const value = keyValue[1]; console.log(`Received analog_read_1_blox_2 value: ${value}`); // do something with the value } }); // Event listener for when the server starts listening server.on('listening', () => { const address = server.address(); console.log(`Server listening on ${address.address}:${address.port}`); }); // Bind the server to the port server.bind(PORT);