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

1.1 主要功能

1.2 系統(tǒng)架構(gòu)
+------------------+ +------------------+ +------------------+| 傳感器層 | | 應(yīng)用層 | | 通信層 |+------------------+ +------------------+ +------------------+|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
內(nèi)核: ARM Cortex-M33
主頻: 96 MHz
Flash: 1 MB
RAM: 128 KB
2.2 引腳分配

3 目錄結(jié)構(gòu)
frdm-mcxa156/├── applications/ # 應(yīng)用層代碼│ ├── main.c # 主函數(shù)入口│ ├── mydefine.h # 通用頭文件定義│ ││ ├── drv_dht11.c/h # DHT11 驅(qū)動層│ ├── dht11_app.c/h # DHT11 應(yīng)用層│ ││ ├── drv_mq2.c/h # MQ2 驅(qū)動層│ ├── MQ2_app.c/h # MQ2 應(yīng)用層│ ││ ├── drv_max30102.c/h # MAX30102 驅(qū)動層│ ├── max30102_app.c/h # MAX30102 應(yīng)用層│ ││ ├── ATGM336H_app.c/h # GPS模塊應(yīng)用層│ ││ ├── esp_app.c/h # ESP01S WiFi/MQTT通信│ ││ ├── adc_app.c/h # ADC采集封裝│ └── uart_app.c/h # 串口工具函數(shù)│├── board/ # 板級支持包│ ├── board.c/h # 板級初始化│ ├── Kconfig # 硬件配置菜單│ ├── MCUX_Config/ # NXP MCUXpresso配置│ │ └── board/│ │ ├── clock_config.c/h # 時鐘配置│ │ └── pin_mux.c/h # 引腳復(fù)用配置│ └── linker_scripts/ # 鏈接腳本│├── packages/ # RT-Thread軟件包│ ├── nxp-mcx-cmsis-latest/ # NXP CMSIS支持│ └── nxp-mcx-series-latest/ # NXP MCX系列驅(qū)動│├── .config # RT-Thread配置文件├── rtconfig.h # RT-Thread配置頭文件├── Kconfig # 頂層配置菜單├── SConstruct # SCons構(gòu)建主文件├── project.uvprojx # Keil MDK工程文件└── rtthread.elf/bin # 編譯輸出文件
4 傳感器模塊詳解
4.1 MQ2 氣體傳感器
文件:drv_mq2.c/h,MQ2_app.c/h
功能:檢測甲烷(CH4)等可燃?xì)怏w濃度
數(shù)據(jù)結(jié)構(gòu):
typedefstruct { rt_base_tdopin; // 數(shù)字輸出引腳 floatadc_val; // ADC原始值 floatch4ppm; // 甲烷濃度 (ppm)}mq2_device_t;
API接口:
// 初始化MQ2設(shè)備rt_err_tmq2_init(mq2_device_t*dev,rt_base_tdopin);// 讀取氣體濃度mq2_result_tMQ2_GetPmm(mq2_device_t*dev);// 獲取當(dāng)前甲烷濃度 (應(yīng)用層接口)floatmq2_get_ch4ppm(void);
全局變量:g_mq2_dev- MQ2設(shè)備對象
4.2 DHT11 溫濕度傳感器
文件:drv_dht11.c/h,dht11_app.c/h
功能:檢測環(huán)境溫度和濕度
數(shù)據(jù)結(jié)構(gòu):
typedefstruct { rt_base_tpin; // 數(shù)據(jù)引腳 rt_uint8_thumidity; // 濕度整數(shù)部分 rt_uint8_ttemperature;// 溫度整數(shù)部分}dht11_device_t;
API接口:
// 初始化DHT11設(shè)備rt_err_tdht11_init(dht11_device_t*dev,rt_base_tpin);// 讀取溫濕度數(shù)據(jù)dht11_result_tdht11_read(dht11_device_t*dev,rt_uint8_t*temp,rt_uint8_t*humi);// 獲取當(dāng)前溫度 (應(yīng)用層接口)rt_uint8_tdht11_get_temperature(void);// 獲取當(dāng)前濕度 (應(yīng)用層接口)rt_uint8_tdht11_get_humidity(void);
全局變量:
g_dht11_dev- DHT11設(shè)備對象
g_dht11_temperature- 最新溫度值
g_dht11_humidity- 最新濕度值
4.3 MAX30102 心率血氧傳感器
文件:drv_max30102.c/h,max30102_app.c/h
功能:通過紅光和紅外光檢測心率和血氧
數(shù)據(jù)結(jié)構(gòu):
typedefstruct { structrt_i2c_bus_device *i2c_bus; // I2C總線句柄 rt_mutex_tlock; // 互斥鎖 rt_uint8_taddr; // I2C地址 rt_bool_tinitialized; // 初始化標(biāo)志}max30102_device_t;
API接口:
// 初始化MAX30102設(shè)備max30102_device_t*max30102_init(constchar *i2c_bus_name);// 從FIFO讀取LED數(shù)據(jù)rt_err_tmax30102_read_fifo(max30102_device_t*dev, rt_uint32_t*red_led, rt_uint32_t*ir_led);// 獲取心率 (應(yīng)用層接口)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定位信息 (經(jīng)度、緯度)
通信接口: UART2 (波特率: 9600)
數(shù)據(jù)結(jié)構(gòu):
typedefstruct { charGPS_Buffer[80]; // GPS原始數(shù)據(jù)緩沖 charisGetData; // 數(shù)據(jù)接收標(biāo)志 charisParseData; // 數(shù)據(jù)解析標(biāo)志 charUTCTime[11]; // UTC時間 charlatitude[11]; // 緯度字符串 charN_S[2]; // 南北半球 charlongitude[12]; // 經(jīng)度字符串 charE_W[2]; // 東西半球 charisUsefull; // 定位有效標(biāo)志} _SaveData;typedefstruct { floatlatitude; // 緯度 (十進(jìn)制度) floatlongitude; // 經(jīng)度 (十進(jìn)制度) charN_S; // 南北半球標(biāo)識 charE_W; // 東西半球標(biāo)識} LatitudeAndLongitude_s;
全局變量:
Save_Data- GPS原始數(shù)據(jù)結(jié)構(gòu)
g_LatAndLongData- 解析后的經(jīng)緯度數(shù)據(jù)
latitude, longitude- 全局經(jīng)緯度變量
4.5 ESP01S WiFi模塊
文件:esp_app.c/h
功能:通過MQTT協(xié)議將傳感器數(shù)據(jù)上報至華為云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接口:
// 發(fā)送AT指令voidesp_send(constchar *data);// 上報傳感器數(shù)據(jù)到云端intesp_report(floatdensity,inthr,inttemp,inthumi);
數(shù)據(jù)上報格式 (MQTT JSON):
{ "services":[{ "service_id":"BasedData", "properties":{ "density":100.5, "heart_rate":75, "temperature":25, "humidity":60 } }]}
5 線程架構(gòu)
系統(tǒng)采用多線程架構(gòu),各傳感器獨立采集:

6 構(gòu)建與燒錄
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 # 調(diào)試串口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 傳感器引腳配置
在各應(yīng)用文件中修改引腳定義:
// 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 數(shù)據(jù)流說明
[傳感器采集]-->[全局變量更新]-->[esp_thread_entry讀取]-->[esp_report上報]-->[華為云]時序:1. 各傳感器線程周期性采集數(shù)據(jù),更新全局變量2. ESP線程在主循環(huán)中讀取全局變量3. 調(diào)用esp_report() 構(gòu)造MQTT消息并發(fā)送4. 華為云IoT平臺接收并存儲數(shù)據(jù)
9 注意事項
DHT11: 兩次讀取間隔至少2秒
MQ2: 上電后需預(yù)熱穩(wěn)定期
MAX30102: I2C通信需要較大棧空間
GPS: 首次定位需要較長時間,室內(nèi)可能無法定位
ESP01S: WiFi連接需要5秒等待,MQTT連接需要3秒等待
10 文件依賴關(guān)系
mydefine.h (基礎(chǔ)定義) ├── 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 (引用所有傳感器數(shù)據(jù))
11 代碼倉庫
倉庫地址:https://github.com/drifting-cloudlet/smart_helmet
演示視頻已放在對應(yīng)倉庫的github releases上,為對應(yīng)的zip文件。
-
傳感器
+關(guān)注
關(guān)注
2576文章
55108瀏覽量
791731 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
7405瀏覽量
129374 -
RT-Thread
+關(guān)注
關(guān)注
32文章
1618瀏覽量
44932 -
FRDM
+關(guān)注
關(guān)注
1文章
22瀏覽量
5471
發(fā)布評論請先 登錄
恩智浦FRDM-MCXA153 RT-Thread開發(fā)實戰(zhàn)(六):I2C總線開發(fā)與應(yīng)用
風(fēng)洞懸浮球:基于RT-Thread與MCXA156的簡單控制實踐 | 技術(shù)集結(jié)
智能門鎖:基于RT-Thread與FRDM-MCXA156的多外設(shè)嵌入式實踐 | 技術(shù)集結(jié)
基于RT-Thread與MCXA156的USB HID游戲手柄設(shè)計與實現(xiàn) | 技術(shù)集結(jié)
FRDM-MCXA156 LPUART1不工作是哪里出了問題?
【RT-Thread作品秀】精選作品集,來看看大佬是怎么玩轉(zhuǎn)RT-Thread的
RT-Thread發(fā)布IoT傳感器徽標(biāo)計劃
RT-Thread全球技術(shù)大會:螢石研發(fā)團(tuán)隊使用RT-Thread的技術(shù)挑戰(zhàn)
RT-Thread全球技術(shù)大會:RT-Thread構(gòu)建配置系統(tǒng)
基于恩智浦FRDM-MCXA153開發(fā)板實現(xiàn)RT-Thread的ADC驅(qū)動
免費申請 | FRDM-MCXA156評測活動發(fā)布!
《恩智浦FRDM-MCXA156開發(fā)實踐指南》上線啦
NXP新品FRDM-MCXA346 RT-Thread 評測活動開放,下周四新品直播預(yù)約!| 社區(qū)活動
基于RT-Thread和FRDM-MCXA156的智能頭盔傳感器數(shù)據(jù)采集系統(tǒng) | 技術(shù)集結(jié)
評論