[Funpack3-1]基于XG24-EK2703A的蓝牙环境温湿度传感器
该项目使用了XG24-EK2703A开发板和AHT10,实现了基于蓝牙通信的远程温湿度传感器的设计,它的主要功能为:读取MCU内置温度传感器或通过I2C读取AHT10的数据,将数据通过蓝牙进行传输,使用配套的上位机代码可实现对环境温湿度或MCU温度的实时监控。。
标签
嵌入式系统
Funpack活动
开发板
Hessian
更新2024-03-05
271

[Funpack3-1]基于XG24-EK2703A的蓝牙环境温湿度传感器

这是囧大王的Funpack第三季第一期作业,使用XG24-EK2703A开发板和AHT10实现了基于蓝牙通信的远程温湿度传感器。

主要功能为:读取MCU内置温度传感器或通过I2C读取AHT10的数据,将数据通过蓝牙进行传输,使用配套的上位机代码可实现对环境温湿度或MCU温度的实时监控。

 

项目背景

Funpack第三季第一期活动的具体任务内容如下:

任务一:使用芯片内部的温度检测外设,测量温度并通过蓝牙发送至上位机,在上位机中以“绘图”的形式对温度数据进行可视化。

任务二:对蓝牙功能进行开发,实现一个蓝牙鼠标+键盘复合设备。板子上有两个按键,分别短按后模拟滚轮上下翻页一行,两个同时按下2s后时依次发送字符EETREE.CN。

任务三:此题为开放题。板卡预留了扩展管脚,如若自己有传感器或各种执行器,可以自行连接并进行开发,其中固定要求为:至少使用一种无线连接方式,至少使用芯片内部的两个外设,若连接传感器,请将采集的数据,用对应的解析格式展示出来。

任务四:若您针对这个板卡有更好的创意,可自命题完成(难度不能低于以上任务)。

总体要求:开发环境中提供了丰富案例,禁止直接提交原始案例或原始代码占比过大,在项目文档中大篇幅翻译代码或注释也会被认定为无创新。 以上题目为基础要求,鼓励参加者在项目中突出自己特色,并在题目的基础上扩展创新功能。


这次活动我开始选择完成的是任务一,但是任务有点太简单了,通过demo代码创建工程之后几乎就不需要改动,而任务要求里有提到“禁止直接提交原始案例或原始代码占比过大”,直接提交恐怕过不了审核那关,而且如此完成任务学习不到知识呀。于是我决定给自己增加难度,在任务一的实现温度检测的基础上使用I2C读取外置的温度传感器数据,这样一来就等于也完成了任务三,同时也能真正的体验到基于Silicon Labs的SoC的程序开发过程。


硬件介绍

XG24-EK2703A

XG24-EK2703A是一款基于EFR32MG24片上系统的开发套件,具备超低成本、低功耗和小巧的特点。该套件支持2.4GHz无线通信,兼容蓝牙LE、蓝牙mesh、Zigbee、Thread和Matter协议,为无线物联网产品的开发和原型制作提供了极大的便利。


整个评估套件最核心部分是EFR32MG24B210F1536IM48无线SoC芯片,是使用蓝牙低功耗和蓝牙网状网络实现物联网无线连接的理想选择,适用于智能家居、照明和便携式医疗设备产品。该芯片是EFR32MG24无线SoC芯片家族系列中的中高端型号,以ARM Cortex-M3为核心、主频为78MHz且支持2.4GHz无线通信,带有1536KB闪存和256KBRAM,并且还搭载了AI/ML硬件加速功能,能够满足在嵌入式系统中部署轻量级AI应用。


该板卡套件所有的例程和相应的板卡资料都集成在了SDK开发包中,辅以配套的Simplicity Studio Version 5工具,只需要将SDK下载进Simplicity Studio Version 5中就可以进行例程的演示,操作方便简单。


 

AHT10温湿度传感器

AHT10是奥松电子推出的新一代温湿度传感器,传感器输出经过标定的数字信号,通过IIC通讯方式输出。其配有一个全新设计的 ASIC专用芯片、一个经过改进的MEMS半导体电容式湿度传感元件和一个标准的片上温度传感元件,大大提升了传感器的可靠性,在恶劣环境下稳定工作。


温度范围为: 测量范围为 -40 ℃ ~+ 85 ℃ 精度±0.5℃

项目介绍

本次项目分为上位机和下位机两个部分,下位机基于Simplicity StudioGecko SDK 进行开发,使用C语言进行程序编写。上位机使用HTML+JavaScript基于Web Bluetooth API进行实现了一个可视化的实时监控图表界面。


下位机代码基于Simplicity Studio中的“Bluetooth - SoC Thermometer (Mock)”创建。该Demo代码中已实现采集MCU内部温度的逻辑,并以温度计设备的形式提供蓝牙Service。在此Demo的基础上我增加了AHT10的驱动代码并增加了一个自定义的Service和相应的Characteristic以同时提供环境温度与湿度信息并保留原有的MCU温度监测功能。



功能演示

首先需要先连接AHT10温湿度传感器。

XG24-EK2703A提供了mikroBUS和qwiic接口都可以用于连接I2C设备,同时板子的两侧还预留有2.54mm的排针焊接盘。

我是因为懒得焊排针,手上也没有mikroBUS扩展板和qwiic接头,就干脆用公-母头杜邦线直接把AHT10连到了mikroBUS排母上的。


给开发板Type-C接口供电之后下位机程序就自动开始工作了。

IMG20240226195700.jpg


开发板上电之后,通过浏览器打开我们的上位机界面。


这里需要注意,因为Web Bluetooth API标准还未正式定稿,所以请使用最新的浏览器进行访问,我这里使用的Microsoft Edge 122.0.2365.52版本。另外由于浏览器安全方面的限制,Web Bluetooth API需要在HTTPS环境下才能使用,因而本地测试会比较麻烦,如需测试可以访问我已经部署到线上的地址:https://hessian.cn/html/funpack3-1/


在上位机界面点击“开始监控”浏览器会自动弹出蓝牙设备配对窗口,选择JIONG RH Sensor点击配对。

这里的上位机程序对蓝牙设备列表进行了过滤我的项目UUID,列表里只会显示我的下位机对应的蓝牙设备,如果列表没有显示可能是下位机程序异常或未能正常启动。可以刷新页面或重启开发板再进行重试。

配对.png 

配对成功后下位机会自动上报温度信息,页面上的图表会实时进行更新,更新时间间隔为1秒。

通过“开始监控”按钮左侧的选择框可以选择监测“环境温湿度”或“MCU温度”,下面两张图片分别是监控环境温湿度和MCU温度的效果。

温湿度.png

MCU温度.png


程序编码

一、搭建开发环境

1. 安装Simplicity Studio

官方网址:https://www.silabs.com/developers/simplicity-studio

2. 安装用USB数据线连接开发板

3. 连接到开发板后,在Simplicity Studio中选择开发板并点击Start,根据提示下载安装Gecko SDK

2024-02-27_11-11.jpeg


正在安装SDK

2024-02-20_16-45.png


安装完SDK即可创建项目开始开发了。


二、程序设计与实现

本项目分为上下位机两个部分,因本项目主要关注的是基于XG24-EK2703A的开发内容,因此关于上位机程序的开发在碑文不再赘述,欲了解详细实现请下载附件查看上位机部分代码。


功能框图

2024-02-27_15-44.jpeg


该项目基于Bluetooth - SoC Thermometer(Mock)样例工程创建。

2024-02-27_11-19.jpeg


工程目录结构

2024-02-27_15-49.jpeg

 

引脚配置


2024-02-27_15-50.jpeg


软件组件选择

这里要安装Health Thermometer API、Relative Humidity and Temperature sensor (Mock)

2024-02-27_15-54.jpeg


Platform部分要安装I2CSPM并命名新增的实例为sensor,同时为了支持读取MCU内部温度还需要安装TEMPDRV。2024-02-27_15-55.jpeg


I2CSPM配置

2024-02-27_16-00.jpeg


蓝牙GATT配置


2024-02-27_16-10.jpeg

2024-02-27_16-10_1.jpeg

下面是编码部分

温湿度传感器部分的程序代码实现主要是参考Thermometer的实现,单独增加了一个service和characteristic,使用定时器每1秒通过indicate将温湿度信息进行上报。


这里略过aht驱动和gatt service的具体实现部分,主要说明一下开发过程中的一些关键点。


首先修改app.c,增加aht传感器初始化代码,i2cspm的实例已经由IDE自动生成的代码创建,这里只需要用extern引入即可。

extern sl_i2cspm_t *sl_i2cspm_sensor;

aht_t aht_dev = {0};

/**************************************************************************//**
* Application Init.
*****************************************************************************/
SL_WEAK void app_init(void)
{
sl_status_t sc;
app_log_info("health thermometer initialised\n");
// Init temperature sensor.
sc = sl_sensor_rht_init();
if (sc != SL_STATUS_OK) {
app_log_warning("Relative Humidity and Temperature sensor initialization failed.");
app_log_nl();
}

aht_dev.i2cspm = sl_i2cspm_sensor;
aht_dev.addr = AHT_I2C_ADDRESS_GND;

sc = aht_init(&aht_dev);
if (sc != SL_STATUS_OK) {
app_log_warning("AHT sensor initialization failed.");
app_log_nl();
}

app_log_info("APP INIT finished.");
app_log_nl();
}


然后在app.c的sl_bt_on_event函数开头增加调用gatt_service_rht_on_event(evt)以使我们的service能够处理蓝牙事件。

/**************************************************************************//**
* Bluetooth stack event handler.
* This overrides the dummy weak implementation.
*
* @param[in] evt Event coming from the Bluetooth stack.
*****************************************************************************/
void sl_bt_on_event(sl_bt_msg_t *evt)
{
sl_status_t sc;
bd_addr address;
uint8_t address_type;

gatt_service_rht_on_event(evt);

// Handle stack events
switch (SL_BT_MSG_ID(evt->header)) {



三、固件烧录(下载)、串口跟踪


注意:蓝牙应用要先创建一个基于“Bootloader - SoC Bluetooth AppLoader OTA DFU”的工程,然后下载到开发板上才能正常进行应用开发。


在Simplicity Stuidio里,用鼠标右键在Project Explorer中点击项目选择Run As就可以编译、下载、运行一条龙自动完成,如果需要跟踪调试也可以使用Debug As进入调试模式。调试模式支持断点、单步、查看内存等诸多调试功能。

2024-02-27 (1).png


在Simplicity Studio中我没有找到如何查看设备的标准输出,样例代码中应该是有配置usart的,在配置文件中我们可以找到他的波特率。


2024-02-27_17-04.jpeg


我这里使用putty进行连接,可以正常看到程序app_log所打印的输出。

2024-02-27_16-57.jpeg



参考资料

 

附件下载
funpack3-1.zip
囧大王基于XG24-EK2703A实现的蓝牙环境温湿度传感器项目的完整源代码。
团队介绍
囧大王(周海生)
团队成员
Hessian
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号