一、概述 
    支持Arduino 101广播收发 2字节数据,信道共享,无需建立连接,不同的广播设备用UUID来区分。 
    蓝牙常规的使用方式是建立连接后互相通信,但实际上也支持不建立连接广播数据。CurieBLE库支持广播发送数据,但不支持广播接收数据。我修改了CurieBLE库,使CurieNano/Arduino 101支持广播接收。库下载链接: 
 
 
二、广播发送 
    广播发送是CurieBLE库自带的功能,不需要修改库源码。只需上传../BLE-broadcast/BLE-broadcast.ino 到你的Arduino 101。然后打开手机APP: NRF connect,点击scan,在下方显示的设备中展开"Arduino 101",在Service Data里可以看到,UUID=0x1234,Data每秒+1。 
 
图:Arduino 101广播发送,手机接收的效果  
 
 
三、广播接收 
    广播接收是CurieBLE库不具备的功能,我修改了CurieBLE库的源码。修改后的库在../CurieBLE.zip。请解压后替代原来的库\Arduino15\packages\Intel\hardware\arc32\2.0.2\libraries\CurieBLE(以上是非完整路径,完整路径取决于你的Curie库的安装位置)。请在替代前备份原来的库。 
    替代完成后,上传../BLE-readBroadcast/BLE-readBroadcast.ino 到你的Arduino 101。然后打开串口监视器,可以发现Arduino 101在不断搜索广播。此时若另一个上传了BLE-broadcast.ino的Arduino 101上电,可以看到它广播的UUID和Data被打印出来。 
 
 
四、更复杂的广播网络 
    使用3块Arduino101:A, B, C 
    给A上传BLE-broadcast.ino。 
    给B上传BLE-broadcast.ino。上传之前把第4行的"1234"改成"1235" 
    给C上传BLE-readBroadcast.ino。然后打开串口监视器,可以看到来自A和B的数据。 
 
 
五、注意事项 
    1、每个Arduino 101可以接收多个广播UUID,但只能广播一个UUID。 
    2、广播发送和广播接收例程中,UUID必须相同才可以接收到数据。 
    3、若想用多个设备发送广播,则不同设备选用不同的UUID,便于区分不同设备 
 
 
六、应用价值 
    BLE广播的方式编程简单,对于轻量级、不私密、连接稠密的数据传输非常适用。无需建立连接也省去了麻烦。比如以下2个情景: 
    情景1:传感器网络:多个从设备采集传感器数据并使用不同的UUID广播,主设备接收所有传感器的数据并用UUID区分它们。 
    情景2:控制网络:一个主设备使用1个UUID广播命令,多个从设备接收广播,根据数据做出相应动作。(因为主设备只能广播1个UUID,若想区分一个命令是针对哪个从设备,请使用命令内容加以区分) 
 
 |