目錄

項目概述
硬件平臺
目錄結構
傳感器模塊詳解
線程架構
構建與燒錄
配置說明
數據流說明
注意事項
文件依賴關系
代碼倉庫
申請試用開發板
1 項目概述
本項目基于 NXP FRDM-MCXA156 開發板,運行 RT-Thread 實時操作系統,實現多傳感器數據采集并通過 ESP01S WiFi模塊 上報至 華為云IoT平臺。文末掃碼申請試用開發板。

1.1 主要功能

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 引腳分配

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_t dopin; // 數字輸出引腳float adc_val; // ADC原始值float ch4ppm; // 甲烷濃度 (ppm)} mq2_device_t;
API接口:
// 初始化MQ2設備rt_err_tmq2_init(mq2_device_t *dev, rt_base_t dopin);// 讀取氣體濃度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_t pin; // 數據引腳rt_uint8_t humidity; // 濕度整數部分rt_uint8_t temperature; // 溫度整數部分} dht11_device_t;
API接口:
// 初始化DHT11設備rt_err_tdht11_init(dht11_device_t *dev, rt_base_t pin);// 讀取溫濕度數據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_t lock; // 互斥鎖rt_uint8_t addr; // I2C地址rt_bool_t initialized; // 初始化標志} 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 {char GPS_Buffer[80]; // GPS原始數據緩沖char isGetData; // 數據接收標志char isParseData; // 數據解析標志char UTCTime[11]; // UTC時間char latitude[11]; // 緯度字符串char N_S[2]; // 南北半球char longitude[12]; // 經度字符串char E_W[2]; // 東西半球char isUsefull; // 定位有效標志} _SaveData;typedefstruct {float latitude; // 緯度 (十進制度)float longitude; // 經度 (十進制度)char N_S; // 南北半球標識char E_W; // 東西半球標識} LatitudeAndLongitude_s;
全局變量:
Save_Data - GPS原始數據結構
g_LatAndLongData - 解析后的經緯度數據
latitude, longitude - 全局經緯度變量
4.5 ESP01S WiFi模塊
文件: esp_app.c/h
功能: 通過MQTT協議將傳感器數據上報至華為云IoT平臺
通信接口: UART1
云平臺配置 (定義在 esp_app.h):
API接口:
// 發送AT指令voidesp_send(constchar *data);// 上報傳感器數據到云端intesp_report(float density, int hr, int temp, int humi);
數據上報格式 (MQTT JSON):
{"services": [{"service_id": "BasedData","properties": {"density": 100.5,"heart_rate": 75,"temperature": 25,"humidity": 60}}]}
5 線程架構
系統采用多線程架構,各傳感器獨立采集:

6 構建與燒錄
6.1 使用Keil MDK
打開project.uvprojx 工程文件
編譯: Project -> Build Target 或 F7
燒錄: Flash -> Download 或 F8
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// dht11_app.c// max30102_app.c
8 數據流說明
[傳感器采集] --> [全局變量更新] --> [esp_thread_entry讀取] --> [esp_report上報] --> [華為云]時序:1. 各傳感器線程周期性采集數據,更新全局變量2. ESP線程在主循環中讀取全局變量3. 調用 esp_report() 構造MQTT消息并發送4. 華為云IoT平臺接收并存儲數據
9 注意事項
DHT11: 兩次讀取間隔至少2秒
MQ2: 上電后需預熱穩定期
MAX30102: I2C通信需要較大??臻g
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文件。
??近期我們陸續開放恩智浦FRDM-MCXA153/A156的試用,掃碼入群報名參加哦~





想要在RT-Thread平臺或社區投放內容?
或想參與相關直播活動及賽事?
RT-Thread已開放對接窗口,
請通過郵件與我們取得聯系,期待合作!
合作郵箱: tongfangyi@rt-thread.com
