开源物联网平台thingsboard通过蓝牙基站获取蓝牙广播数据--芯片环境温度
程序员文章站
2022-07-14 09:02:00
...
这里要用到的设备:
一个终端设备,nrf52的芯片开发板,只要能烧录可以是任意板子。
一个金桔蓝牙网关,可以获取蓝牙广播并上传给thingsboard平台。
先我们需要一个设备可以把芯片的环境温度用蓝牙广播出来,这里我们选用的nordic的nrf52840开发板,因为nrf52840有内置的温度测量,所以不需要任何外设,当然如果手里有其他nrf52的芯片开发板应该也是可以,nordic给出的官方例子代码,我们直接拿出来用就行了:
NRF_TEMP->TASKS_START = 1; /** Start the temperature measurement. */
/* Busy wait while temperature measurement is not finished, you can skip waiting if you enable interrupt for DATARDY event and read the result in the interrupt. */
/*lint -e{845} // A zero has been given as right argument to operator '|'" */
while (NRF_TEMP->EVENTS_DATARDY == 0)
{
// Do nothing.
}
NRF_TEMP->EVENTS_DATARDY = 0;
/**@note Workaround for PAN_028 rev2.0A anomaly 29 - TEMP: Stop task clears the TEMP register. */
chip_temp = (nrf_temp_read() / 4);
/**@note Workaround for PAN_028 rev2.0A anomaly 30 - TEMP: Temp module analog front end does not power down when DATARDY event occurs. */
NRF_TEMP->TASKS_STOP = 1; /** Stop the temperature measurement. */
后面有编译好的镜像文件,可以下载直接烧录即可。
把芯片温度放到广播数据里:
ble_advdata_manuf_data_t manuf_data;
uint8_t data[9] = {myadv_type,myconfig.updateVersion.arr[0],adcValue&0xff,(adcValue>>8)&0xff,myloglen}; //Our data to advertise
memcpy(data+5,&chip_temp,4);
manuf_data.company_identifier = 0x2081; //Nordics company ID
manuf_data.data.p_data = data;
manuf_data.data.size = 9;
这里,广播了9个字节,温度从第6个字节开始,下标就是 data[5]开始,因为室温是20度左右所以这里应该就是data[5] 有数据。
有了广播的数据,就可以配置金桔蓝牙网关了,金桔蓝牙网关可以支持直接将广播数据推送给mqtt平台,也就是thingsboard上。
我们这样配置蓝牙网关:
另外我们需要配置温度字段
因为刚才介绍了,室温只有20度只有一位有效,而且从第5位开始,所以这里就这样填写,添加完是这样的:
这里我多添加了一个rssi信号强度的值,不用到的话可以不加。
这样修改后,点击基站的修改配置,让基站的配置生效。
这里要说明的是mqtt的用户名就是**是如何获取,在thingsboard里新建完网关设备后,在设备的详细内容里可以看到:
关于如果建立网关设备,可以参考另一篇建立网关设备的教程。
金桔蓝牙网关配置生效以后,就可以上thingsboard上看数据了,先看下手机上设备的数据:
在thingsboard上自动建立了这个蓝牙终端设备:
点开后我们能看到上传的数据:
当然,如果我们想给实时数据建立一个图,可以用thingsboard里的功能: