继Micro:bit蓝牙设备成功连接之后,就需添加相应的服务特性。我们的开发板在成功连接之后,我们不能让其只处于连接,我们要慢慢控制板子,优化程序,要想使用板子上的功能,就需要将相应的服务添加上去,让开发板激活相应的服务功能,近而通过修改电脑端源码进行操控板子。 Step1:发现服务和特性 1.大家在我的 BBC MicroBit蓝牙设备系列(一)中从https://makecode.microbit.org/v0/89975-20684-84568-20127 下载固件到BBC Micro:bit开发板时,会发现,我们的这个BBC MicroBit开发板板服务在程序设计时已经包含了蓝牙加速计服务和蓝牙led服务。 2.大家可以打开Chrome自带的蓝牙工具chrome://bluetooth-internals/#adapter进行蓝牙连接,怎样连接在系列(一)可自行观看,连接成功后通过开发商提供的资料链接https://lancaster-university.github.io/microbit-docs/resources/bluetooth/bluetooth_profile.html ,这里都是关于开发板的服务和特性的UUID号,每个服务都对应的UUID号,连接成功后,我们可以看到,当相对应的服务UUID号一致则说明你的服务已添加成功。 Step2:如何给BBC Microbit开发板添加服务 1.在蓝牙连接的状态下,打开https://makecode.microbit.org/v0/89975-20684-84568-20127 进行在线源码编辑: 搜索蓝牙,相应的蓝牙服务就出来了,这里添加的是蓝牙温度服务将方块拖到图片的位置。 然后保存,下载。 2.在你的此电脑>下载路径下就有你下载的.hex文件,将下载的固件.hex文件移到开发板对应的MINCROBIT(G)盘中,这个时候打开Chrome自带的蓝牙工具,进行连接,连接成功后会发现服务已被添加成功。 Step3:修改电脑端源码增加温度服务、特性 所要添加代码如下:

Status

Connected Service Discovery Completed
false false

Device Discovery Or Disconnect

Start scan Step4:代码解析 1.开头添加的标志变量has_accelerometer_service,has_led_service,has_device_information_service,has_temperature_serivce,用于核对BBC MicroBit有没有相应的服务,有true无false。而has_accelerometer_data ,has_led_matrix_state,has_model_name_string,has_temperature 用于核对特性是否存在。service UUIDs 和 characteristic UUIDs用于核对板子的特性和服务来进行连接。led_matrix_state,model_number_string,accelerometer_data,temperature,这些都是定义特性相应的变量。service_count,characteristic_count服务和特性发现的数量。services_discovered,characteristics_discovered应该被发现服务和特性的数量 2.这里要添加service UUID和characteristic UUID号,用来进行与开发板中服务UUID号进行核对。 // service UUIDs ACCELEROMETER_SERVICE = ‘e95d0753-251d-470a-a062-fa1922dfa9a8’; LED_SERVICE = ‘e95dd91d-251d-470a-a062-fa1922dfa9a8’; DEVICE_INFORMATION_SERVICE = ‘0000180a-0000-1000-8000-00805f9b34fb’; TEMPERATURE_SERVICE = ‘e95d6100-251d-470a-a062-fa1922dfa9a8’; // characteristic UUIDs ACCELEROMETER_DATA = ‘e95dca4b-251d-470a-a062-fa1922dfa9a8’; LED_MATRIX_STATE = ‘e95d7b77-251d-470a-a062-fa1922dfa9a8’; MODEL_NUMBER_STRING = ‘00002a24-0000-1000-8000-00805f9b34fb’; TEMPERATURE = ‘e95d9250-251d-470a-a062-fa1922dfa9a8’; 3.函数function discoverSvcsAndChars()是用来发现开发板的服务和特性,使用该函数connected_server.getPrimaryServices()获取BBC MicroBit板子上的主要服务。 console.log(“discoverSvcsAndChars server=” + connected_server); connected_server.getPrimaryServices() 4.service_count = services.length是表示发现BBC MicroBit板服务的个数,并将发现的服务打印出来。 service_count = services.length; console.log(“Got “ + service_count + “ services”); 5.接下来我们要对已发现的服务通过if函数进行判断,核对是否一致。完成后要将一致的uuid号打印输出,然后 函数service.getCharacteristics()要获取该服务下的所有特性,对该特性通过if语句判断进行核对。 if (characteristic.uuid == ACCELEROMETER_DATA) { accelerometer_data = characteristic; //把发现的相应特性保存到相应变量中 has_accelerometer_data = true; } …… 6.最后要把要发现的服务和特性数量与已发现的服务和特性数量进行核对。如果一致则成功,将打印FINISHED DISCOVERY。 if (services_discovered == service_count && characteristics_discovered == characteristic_count) { console.log(“FINISHED DISCOVERY”); setDiscoveryStatus(true); } 7.在信息核对一致成功后,我们要把setDiscoveryStatus(true)状态true通过函数function setDiscoveryStatus(status) 显示出来,表示添加服务及其特性成功了,这样就结束啦! function setDiscoveryStatus(status) { services_discovered = status; document.getElementById(‘status_discovered’).innerHTML = status; } 8.程序编辑好后打开,在浏览器中按F12,观察。 实验现象: Step5:资源 1.有关microbit开发板各服务、特性的教程式参考资源: https://lancaster-university.github.io/microbit-docs/ble/profile/ 2.服务、特性的UUID请见: https://lancaster-university.github.io/microbit-docs/resources/bluetooth/bluetooth_profile.html 3.Chrome浏览器的插件,使用它可以查看周边蓝牙设备的信息:状态、服务、特性、描述符等。 chrome://bluetooth-internals/#adapter 4.BBC MicroBit开发板网页编辑器 https://makecode.microbit.org/#editor


一个好奇的人