这次我们来DIY我们的第一个作品《温度监控器》,功能:芯片每秒采集两次次温度,然后通过蓝牙传输给手机。需要结合之前串口例程和温度采集例程,先对这两个工程进行简要介绍。
蓝牙串口例程介绍
打开工程后,首先看到的就是工程文件树,如下所示。
工程文件非常多,但是我们这次需要关注的只有:主函数,设置文件,蓝牙串口服务三个文件。打开main.c文件,找到main函数如下。
main函数非常短小,函数功能见红字,这之中服务初始化函数最为重要,其中包括蓝牙串口服务的初始化,接收与发送特性的初始化,UUID的指定等等的。
蓝牙串口的功能,也就是将串口发送的数据传给手机,将手机发送的数据数据发给串口。我们跳过所有的配置,直接看回调函数,都在main.c文件中。
串口接收回调函数
该函数在串口接收到数据后会调用,然后通过蓝牙发送函数将串口接收到的数据发送给手机。
蓝牙接收回调函数
该函数在蓝牙接收到数据后调用,然后通过串口发送函数发送出去。
温度采集例程介绍
打开前面介绍的温度采集例程,main.c文件中的main函数如下。
例程先初始化温度和调试功能,然后在无限循环中每隔500ms采集一次温度并输出。
修改蓝牙串口例程
下面就对蓝牙串口例程进行修改,使其不停的向手机发送温度。首先初始化如下变量。
int high; //浮点数整数部分
float low; //浮点数小时部分
uint16_t n; //发送字节数计数
int esp; //小数点精度控制
char ch[4]; //临时字节存放
int n1; //临时计数
int32_t temp; //温度寄存器值
float f_temp; //实际温度
uint8_t data_array[20]={"Temperature:"};//发送数组
然后将main函数中的for循环修改为如下。

代码的具体作用红色注释已经写出,其实这么做并不是最优的,最好是采用一个定时器,在定时器中发送蓝牙数据,这样会更加低功耗。
演示
确保烧录好SoftDevice,然后烧录下载运行代码,打开手机端的nRF UART软件,连接后会收到如下的信息。
到这里,我们DIY的第一个作品《温度监控器》就做完了,本贴主要解释了蓝牙串口例程与温度采集例程的主要代码,然后修改了蓝牙串口例程,使其具备发送温度功能,最后在手机上显示温度。
建立了一个GitHub组织:https://github.com/digiic,以后相关代码会放在里面,也欢迎小伙伴加入。
本工程代码:https://github.com/digiic/NRF52840,大家玩的开心。


-
- 0000000000000000
-
1888 发帖7917 回复34980 积分
- 私信他 +关注
块
导
航
举报
请选择举报类别
- 广告垃圾
- 违规内容
- 恶意灌水
- 重复发帖