0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于RT-Thread和FRDM-MCXA156的智能头盔传感器数据采集系统 | 技术集结

RT-Thread官方账号 2026-03-13 17:44 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

目录


项目概述


硬件平台


目录结构


传感器模块详解


线程架构


构建与烧录


配置说明


数据流说明


注意事项


文件依赖关系


代码仓库


申请试用开发板

1 项目概述

本项目基于NXP FRDM-MCXA156开发板,运行RT-Thread实时操作系统,实现多传感器数据采集并通过ESP01S WiFi模块上报至华为云IoT平台文末扫码申请试用开发板。

4a3b73f2-1ec1-11f1-96ea-92fbcf53809c.jpg

1.1 主要功能

4a4acb86-1ec1-11f1-96ea-92fbcf53809c.png

1.2 系统架构

+------------------+ +------------------+ +------------------+| 传感器层 | | 应用层 | | 通信层 |+------------------+ +------------------+ +------------------+|drv_mq2.c |--> | MQ2_app.c | | ||drv_dht11.c |--> | dht11_app.c | --> | esp_app.c | --> 华为云IoT|drv_max30102.c |--> | max30102_app.c | | (MQTT上报) ||(UART接收) |--> | ATGM336H_app.c | | |+------------------+ +------------------+ +------------------+

2 硬件平台

2.1 主控芯片

型号: NXP MCXA156

内核: ARM Cortex-M33

主频: 96 MHz

Flash: 1 MB

RAM: 128 KB

2.2 引脚分配

4a577200-1ec1-11f1-96ea-92fbcf53809c.png

3 目录结构

frdm-mcxa156/├── applications/ # 应用层代码│ ├── main.c # 主函数入口│ ├── mydefine.h # 通用头文件定义│ ││ ├── drv_dht11.c/h # DHT11 驱动层│ ├── dht11_app.c/h # DHT11 应用层│ ││ ├── drv_mq2.c/h # MQ2 驱动层│ ├── MQ2_app.c/h # MQ2 应用层│ ││ ├── drv_max30102.c/h # MAX30102 驱动层│ ├── max30102_app.c/h # MAX30102 应用层│ ││ ├── ATGM336H_app.c/h # GPS模块应用层│ ││ ├── esp_app.c/h # ESP01S WiFi/MQTT通信│ ││ ├── adc_app.c/h # ADC采集封装│ └── uart_app.c/h # 串口工具函数│├── board/ # 板级支持包│ ├── board.c/h # 板级初始化│ ├── Kconfig # 硬件配置菜单│ ├── MCUX_Config/ # NXP MCUXpresso配置│ │ └── board/│ │ ├── clock_config.c/h # 时钟配置│ │ └── pin_mux.c/h # 引脚复用配置│ └── linker_scripts/ # 链接脚本│├── packages/ # RT-Thread软件包│ ├── nxp-mcx-cmsis-latest/ # NXP CMSIS支持│ └── nxp-mcx-series-latest/ # NXP MCX系列驱动│├── .config # RT-Thread配置文件├── rtconfig.h # RT-Thread配置头文件├── Kconfig # 顶层配置菜单├── SConstruct # SCons构建主文件├── project.uvprojx # Keil MDK工程文件└── rtthread.elf/bin # 编译输出文件

4 传感器模块详解

4.1 MQ2 气体传感器

文件:drv_mq2.c/h,MQ2_app.c/h

功能:检测甲烷(CH4)等可燃气体浓度

数据结构:

typedefstruct { rt_base_tdopin; // 数字输出引脚 floatadc_val; // ADC原始值 floatch4ppm; // 甲烷浓度 (ppm)}mq2_device_t;

API接口:

// 初始化MQ2设备rt_err_tmq2_init(mq2_device_t*dev,rt_base_tdopin);// 读取气体浓度mq2_result_tMQ2_GetPmm(mq2_device_t*dev);// 获取当前甲烷浓度 (应用层接口)floatmq2_get_ch4ppm(void);

全局变量:g_mq2_dev- MQ2设备对象

4.2 DHT11 温湿度传感器

文件:drv_dht11.c/h,dht11_app.c/h

功能:检测环境温度和湿度

数据结构:

typedefstruct { rt_base_tpin; // 数据引脚 rt_uint8_thumidity; // 湿度整数部分 rt_uint8_ttemperature;// 温度整数部分}dht11_device_t;

API接口:

// 初始化DHT11设备rt_err_tdht11_init(dht11_device_t*dev,rt_base_tpin);// 读取温湿度数据dht11_result_tdht11_read(dht11_device_t*dev,rt_uint8_t*temp,rt_uint8_t*humi);// 获取当前温度 (应用层接口)rt_uint8_tdht11_get_temperature(void);// 获取当前湿度 (应用层接口)rt_uint8_tdht11_get_humidity(void);

全局变量:

g_dht11_dev- DHT11设备对象

g_dht11_temperature- 最新温度值

g_dht11_humidity- 最新湿度值

4.3 MAX30102 心率血氧传感器

文件:drv_max30102.c/h,max30102_app.c/h

功能:通过红光和红外光检测心率和血氧

通信接口:I2C (地址: 0x57)

数据结构:

typedefstruct { structrt_i2c_bus_device *i2c_bus; // I2C总线句柄 rt_mutex_tlock; // 互斥锁 rt_uint8_taddr; // I2C地址 rt_bool_tinitialized; // 初始化标志}max30102_device_t;

API接口:

// 初始化MAX30102设备max30102_device_t*max30102_init(constchar *i2c_bus_name);// 从FIFO读取LED数据rt_err_tmax30102_read_fifo(max30102_device_t*dev, rt_uint32_t*red_led, rt_uint32_t*ir_led);// 获取心率 (应用层接口)rt_uint32_tmax30102_get_heart_rate(void);

全局变量:

g_max30102_red_led- 红光LED原始值

g_max30102_ir_led- 红外LED原始值

g_max30102_heart_rate- 心率估算值

工作模式: 支持中断模式和轮询模式 (通过USE_INTERRUPT_MODE宏切换)

4.4 ATGM336H GPS模块

文件:ATGM336H_app.c/h

功能: 获取GPS定位信息 (经度、纬度)

通信接口: UART2 (波特率: 9600)

数据结构:

typedefstruct { charGPS_Buffer[80]; // GPS原始数据缓冲 charisGetData; // 数据接收标志 charisParseData; // 数据解析标志 charUTCTime[11]; // UTC时间 charlatitude[11]; // 纬度字符串 charN_S[2]; // 南北半球 charlongitude[12]; // 经度字符串 charE_W[2]; // 东西半球 charisUsefull; // 定位有效标志} _SaveData;typedefstruct { floatlatitude; // 纬度 (十进制度) floatlongitude; // 经度 (十进制度) charN_S; // 南北半球标识 charE_W; // 东西半球标识} LatitudeAndLongitude_s;

全局变量:

Save_Data- GPS原始数据结构

g_LatAndLongData- 解析后的经纬度数据

latitude, longitude- 全局经纬度变量

4.5 ESP01S WiFi模块

文件:esp_app.c/h

功能:通过MQTT协议将传感器数据上报至华为云IoT平台

通信接口:UART1

云平台配置(定义在esp_app.h):

#defineWIFI_NAME "LP11"#defineWIFI_PWD "123456aa"#defineHUAWEI_MQTT_ADDRESS "e8b7ac5772.st1.iotda-device.cn-east-3.myhuaweicloud.com"#defineHUAWEI_MQTT_PORT 1883

API接口:

// 发送AT指令voidesp_send(constchar *data);// 上报传感器数据到云端intesp_report(floatdensity,inthr,inttemp,inthumi);

数据上报格式 (MQTT JSON):

{ "services":[{ "service_id":"BasedData", "properties":{ "density":100.5, "heart_rate":75, "temperature":25, "humidity":60 } }]}

5 线程架构

系统采用多线程架构,各传感器独立采集:

4a690b50-1ec1-11f1-96ea-92fbcf53809c.png

6 构建与烧录

6.1 使用Keil MDK

打开project.uvprojx工程文件

编译:Project -> Build TargetF7

烧录:Flash -> DownloadF8

6.2 使用SCons (命令行)

# 配置scons--menuconfig# 编译scons# 清理scons -c

7 配置说明

7.1 RT-Thread配置

通过menuconfig或直接编辑.config文件配置:

# 串口配置CONFIG_BSP_USING_UART0=y # 调试串口CONFIG_BSP_USING_UART1=y # ESP01SCONFIG_BSP_USING_UART2=y # GPS模块# I2C配置CONFIG_BSP_USING_I2C0=y # MAX30102# ADC配置CONFIG_BSP_USING_ADC0_CH0=y# MQ2模拟输出

7.2 传感器引脚配置

在各应用文件中修改引脚定义:

// MQ2_app.c#defineMQ2_DATA_PIN ((3*32)+7) // P3_7// dht11_app.c#defineDHT11_DATA_PIN ((3*32)+6) // P3_6// max30102_app.c#defineMAX30102_INT_PIN ((1*32)+13) // P1_13

8 数据流说明

[传感器采集]-->[全局变量更新]-->[esp_thread_entry读取]-->[esp_report上报]-->[华为云]时序:1. 各传感器线程周期性采集数据,更新全局变量2. ESP线程在主循环中读取全局变量3. 调用esp_report() 构造MQTT消息并发送4. 华为云IoT平台接收并存储数据

9 注意事项

DHT11: 两次读取间隔至少2秒

MQ2: 上电后需预热稳定期

MAX30102: I2C通信需要较大栈空间

GPS: 首次定位需要较长时间,室内可能无法定位

ESP01S: WiFi连接需要5秒等待,MQTT连接需要3秒等待

10 文件依赖关系

mydefine.h (基础定义) ├── drv_dht11.h ├── drv_mq2.h ├── drv_max30102.h │ ├── dht11_app.h --> dht11_app.c ├── MQ2_app.h --> MQ2_app.c ├── max30102_app.h--> max30102_app.c ├── ATGM336H_app.h--> ATGM336H_app.c │ └── esp_app.h --> esp_app.c (引用所有传感器数据)

11 代码仓库

仓库地址https://github.com/drifting-cloudlet/smart_helmet

演示视频已放在对应仓库的github releases上,为对应的zip文件。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2577

    文章

    55356

    浏览量

    793298
  • 操作系统
    +关注

    关注

    37

    文章

    7425

    浏览量

    129546
  • RT-Thread
    +关注

    关注

    32

    文章

    1632

    浏览量

    45115
  • FRDM
    +关注

    关注

    1

    文章

    23

    浏览量

    5701
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    恩智浦FRDM-MCXA153 RT-Thread开发实战(六):I2C总线开发与应用

      工程创建 目前RT-Thread Studio尚未支持恩智浦FRDM-MCXA153开发板BSP,需要从gitee下载最新的主线,通过scons命令创建工程。下载好主线源码后,在
    的头像 发表于 11-21 09:26 2957次阅读
    恩智浦<b class='flag-5'>FRDM-MCXA</b>153 <b class='flag-5'>RT-Thread</b>开发实战(六):I2C总线开发与应用

    风洞悬浮球:基于RT-ThreadMCXA156的简单控制实践 | 技术集结

    目录项目概述硬件选型与连接软件架构设计VL53L0X配置风扇控制(PWM)控制算法远程监控OLED数据显示有待改进的地方项目源码直播回放1项目概述本项目基于RT-Thread实时操作系统
    的头像 发表于 10-17 11:53 5632次阅读
    风洞悬浮球:基于<b class='flag-5'>RT-Thread</b>与<b class='flag-5'>MCXA156</b>的简单控制实践 | <b class='flag-5'>技术</b><b class='flag-5'>集结</b>

    智能门锁:基于RT-ThreadFRDM-MCXA156的多外设嵌入式实践 | 技术集结

    本项目为RT-Thread嵌入式大赛获奖作品,基于恩智浦MCXA156系列微控制构建了一款多功能智能门锁控制系统。目前,恩智浦已有多款产品
    的头像 发表于 01-23 11:06 7836次阅读
    <b class='flag-5'>智能</b>门锁:基于<b class='flag-5'>RT-Thread</b>与<b class='flag-5'>FRDM-MCXA156</b>的多外设嵌入式实践 | <b class='flag-5'>技术</b><b class='flag-5'>集结</b>

    基于RT-ThreadMCXA156的USB HID游戏手柄设计与实现 | 技术集结

    目录项目概述RT-Thread使用情况概述硬件框架软件框架说明软件模块说明效果演示代码地址总结1项目概述1.1实现功能本项目基于NXPFRDM-MCXA156开发板,实现了一个标准的USBHID游戏
    的头像 发表于 02-02 18:53 7863次阅读
    基于<b class='flag-5'>RT-Thread</b>与<b class='flag-5'>MCXA156</b>的USB HID游戏手柄设计与实现 | <b class='flag-5'>技术</b><b class='flag-5'>集结</b>

    FRDM-MCXA156 LPUART1不工作是哪里出了问题?

    我正在使用 FRDM-MCXA156并且MCUXpresso IDE 版本 24.12 我无法让LPUART1工作。 我导入了使用 LPUART0 的示例
    发表于 04-07 06:23

    RT-Thread作品秀】精选作品集,来看看大佬是怎么玩转RT-Thread

    通过GPRS上传数据至云服务,上位机部分接收云端返回数据并进行本地显示。3、基于RT-Thread和MM32L373开发板的药房冷链监控系统
    发表于 05-26 16:46

    RT-Thread发布IoT传感器徽标计划

    任何传感器厂商只要有意向开发兼容RT-Thread操作系统的驱动,从RT-Thread官网下载表格,填写公司信息,即可申请获得使用“sensor driver accessed”LOG
    的头像 发表于 02-19 15:15 4091次阅读

    RT-Thread全球技术大会:萤石研发团队使用RT-Thread技术挑战

    RT-Thread全球技术大会:研发团队使用RT-Thread技术挑战         审核编辑:彭静
    的头像 发表于 05-27 11:36 2545次阅读
    <b class='flag-5'>RT-Thread</b>全球<b class='flag-5'>技术</b>大会:萤石研发团队使用<b class='flag-5'>RT-Thread</b>的<b class='flag-5'>技术</b>挑战

    RT-Thread全球技术大会:RT-Thread构建配置系统

    RT-Thread全球技术大会:RT-Thread构建配置系统,构建系统也称为组件自动化,通常需要通过脚本声明构建行为。         审
    的头像 发表于 05-27 14:39 1950次阅读
    <b class='flag-5'>RT-Thread</b>全球<b class='flag-5'>技术</b>大会:<b class='flag-5'>RT-Thread</b>构建配置<b class='flag-5'>系统</b>

    基于恩智浦FRDM-MCXA153开发板实现RT-Thread的ADC驱动

    数转换(ADC)是现代嵌入式系统中不可或缺的组件,它能将连续的模拟信号转换为离散的数字信号。本文将深入探讨如何在NXP的FRDM-MCXA153开发板上实现和使用RT-Thread
    的头像 发表于 11-01 12:29 4695次阅读
    基于恩智浦<b class='flag-5'>FRDM-MCXA</b>153开发板实现<b class='flag-5'>RT-Thread</b>的ADC驱动

    免费申请 | FRDM-MCXA156评测活动发布!

    RT-Thread现已支持恩智浦官方推出的FRDM-MCXA156开发板并提供BSP!为了让大家更好地体验MCXA156高能效微控制的魅力,RT-
    的头像 发表于 02-10 18:45 1150次阅读
    免费申请 | <b class='flag-5'>FRDM-MCXA156</b>评测活动发布!

    《恩智浦FRDM-MCXA156开发实践指南》上线啦

    RT-Thread率先支持NXPFRDM-MCXA156,并联合恩智浦半导体推出了NXPFRDM-MCXA156开发板评测活动。测评活动顺利完成,并且有了不错的产出,我们将大家的测试文档及代码整理后
    的头像 发表于 04-06 10:51 4011次阅读
    《恩智浦<b class='flag-5'>FRDM-MCXA156</b>开发实践指南》上线啦

    NXP新品FRDM-MCXA346 RT-Thread 评测活动开放,下周四新品直播预约!| 社区活动

    应用开发。RT-Thread社区已率先完成对NXPFRDM-MCXA346的系统支持,并携手恩智浦半导体联合发起FRDM-MCXA346开发板评测活动。活动面向所有
    的头像 发表于 11-14 15:59 1851次阅读
    NXP新品<b class='flag-5'>FRDM-MCXA</b>346 <b class='flag-5'>RT-Thread</b> 评测活动开放,下周四新品直播预约!| 社区活动

    探索FRDM - MCXA156开发板:设计与评估的理想之选

    ,它为工业和消费物联网(IoT)应用提供了卓越的设计与评估环境。 文件下载: NXP Semiconductors FRDM-MCXA156 开发板.pdf 一、开发板概述 FRDM - MCXA156
    的头像 发表于 12-24 11:50 2091次阅读

    【免费申请】NXP新成员FRDM-MCXA366 评测活动 | 社区活动

    开发者高效完成从评估到落地的完整开发流程。恩智浦半导体已对MCXA366MCU进行了RT-Thread的适配。RT-Thread携手恩智浦半导体联合发起FRDM-M
    的头像 发表于 04-09 18:25 82次阅读
    【免费申请】NXP新成员<b class='flag-5'>FRDM-MCXA</b>366 评测活动 | 社区活动