雷竞技注册
项目

使用nRF51制作BLE温度传感器

2015年10月5日通过特拉维斯Fagerness

本文演示了如何使用nRF51上内置的模具温度传感器。模具温度与环境温度不同,但可以通过使用校正因子校正到环境温度。

如何创建BLE温度传感器使用nRF51。

概述

本文是nRF51系列文章的一部分。nRF51是一个Cortex M0和BLE无线芯片一体的系统芯片。本文演示了如何使用nRF51上内置的模具温度传感器。模具温度与环境温度不同,但可以通过使用校正因子校正到环境温度。

前面的文章

BLE使用nRF51: ARM-GCC构建环境
BLE using nRF51:创建BLE外设

需求

  • 具有nRF51的设备
  • 支持Android和BLE的设备
    • 本文使用:Android v5.1.1
  • 工具链的设置前一篇文章

修改nRF51软件

创建BLE外设的软件需要修改以读取温度并将其转换为可以通过BLE发送的东西。下面的函数使用对软设备的内置调用来读取nRF51内部的TEMP寄存器。因为温度是以0.25摄氏度为单位记录的,所以这个值要除以4。

nrf51_temp_sensor.zip

Int32_t temperature_data_get(void) {Int32_t temp;uint32_t err_code;err_code = sd_temp_get(临时);APP_ERROR_CHECK (err_code);返回临时/ 4;}

主应用程序中每秒钟读取一次温度。数据被转换为8位并发送到自定义BLE特征。本例中目前没有使用低功耗方案。如果你想要低功率,你可以在计时器中运行温度读数,其余时间休眠。可以通过从已知房间温度的控制台中读取温度来确定变量TEMP_CAL_OFFSET。TEMP_CAL_OFFSET就是测量的温度和房间的实际温度之间的差值。

//进入主循环。而(1){nrf_delay_ms (1000);temp_c = (int8_t)temperature_data_get() + TEMP_CAL_OFFSET;temp_f = (int8_t)((浮动)temp_c * 9/5 + 32);char2_data [0] = temp_c;char2_data [1] = temp_f;err_code = custom_service_update_data (m_conn_handle char2_data);APP_ERROR_CHECK (err_code);DEBUG_PRINTF("实际温度:%d C——%d F", temp_c,temp_f);}

显示在Android上

Android应用程序由两个文本字段组成,以摄氏或华氏为单位显示温度。当按下文本字段时,值将被更新。

源代码

tempsensorAndroid.zip

APK

tempsensorAPK.zip

测试

为了测试,我测量了房间里的温度,然后观察当我把软件狗放入冰箱时温度的下降。

结论

利用BLE可以对该项目进行改进通知。通知对于那些不经常改变的价值观来说是完美的。只有当值改变时,特性才会更新。Android设备可以注册这些通知,这样临时通知就会自动显示,而不是点击请求。其次,如果传感器将使用电池运行,则可以修改代码,使用sd_evt_wait函数休眠,直到计时器事件醒来读取温度。

自己试试这个项目吧!BOM。

1评论
  • 会偏向Yolal 2016年3月2日

    我是新来的,我可以问个问题吗?我点击了“下载代码”,但我应该使用哪个程序来编译它生成一个十六进制代码发送到我的nRF51-DK板?这项目吗?

    喜欢的。 回复