一、项目概述
本项目基于 NXP FRDM-MCXN947 开发板,结合 Zephyr RTOS 实现了温湿度数据采集 + ESP32 BLE 蓝牙透传 核心功能:通过 ADC 采集模拟输出型 SHT30 温湿度传感器数据,完成电压到温湿度的算法转换;
基于 ESP32 BLE AT 指令集,实现蓝牙透传模式配置与数据双向通信;
主控循环调度 LED 心跳指示、温湿度采集、蓝牙数据收发,实现全流程自动化。
核心硬件清单

二、硬件方案
2. 硬件连接
SHT30 与 MCXN947:
SHT30 温度输出 → MCXN947 ADC0_A0(J4-Pin2)
SHT30 湿度输出 → MCXN947 ADC0_B0(J4-Pin4)
供电:3.3V / 地
ESP32 与 MCXN947(UART):
MCXN947 TX(P4_3) → ESP32 RX(GPIO16)
MCXN947 RX(P4_2) → ESP32 TX(GPIO17)
波特率:115200,8N1
三、软件实现(基于 Zephyr RTOS)
项目代码模块化设计,分为 3 个核心模块,整体架构如下:
主循环介绍:
while (1) {
// 1. LED状态翻转(心跳指示)
gpio_pin_toggle_dt(&led);
led_state = !led_state;
// 2. 蓝牙状态机处理(核心)
bluetooth_task();
// 3. 温湿度采集与打印
if (sht30_fetch() >= 0) {
int32_t temp = sht30_temp();
int32_t rh = sht30_rh();
printf("LED:%s | T:%d.%d℃ | RH:%d.%d%%\n",
led_state ? "ON" : "OFF",
temp / 10, abs(temp % 10), // 0.1℃单位拆分
rh / 10, rh % 10);
// 4. 透传模式:发送温湿度数据到ESP32
if (bluetooth_get_state() == BLE_STATE_TRANSPARENT) {
char send_buf[32];
int len = snprintf(send_buf, sizeof(send_buf),
"%d.%d,%d.%d\r\n",
temp / 10, abs(temp % 10),
rh / 10, rh % 10);
bluetooth_send((uint8_t *)send_buf, len);
}
}
// 5. 透传模式:接收ESP32数据并打印
if (bluetooth_get_state() == BLE_STATE_TRANSPARENT) {
uint8_t rx_buf[64];
int rx_len = bluetooth_recv(rx_buf, sizeof(rx_buf) - 1);
if (rx_len > 0) {
rx_buf[rx_len] = '\0';
printf("BLE_RX_DATA: %s", rx_buf);
}
}
k_msleep(SLEEP_TIME_MS); // 1秒循环
}显示效果:

设计源码:见附件src.zip
我要赚赏金
