这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » e起DIY低功耗蓝牙温湿度计-成果贴

共1条 1/1 1 跳转至

e起DIY低功耗蓝牙温湿度计-成果贴

菜鸟
2026-06-17 23:57:53     打赏

一、项目概述

本项目基于 NXP FRDM-MCXN947 开发板,结合 Zephyr RTOS 实现了温湿度数据采集 + ESP32 BLE 蓝牙透传 核心功能:
  • 通过 ADC 采集模拟输出型 SHT30 温湿度传感器数据,完成电压到温湿度的算法转换;

  • 基于 ESP32 BLE AT 指令集,实现蓝牙透传模式配置与数据双向通信;

  • 主控循环调度 LED 心跳指示、温湿度采集、蓝牙数据收发,实现全流程自动化。

  • 二、硬件方案

    1. 核心硬件清单

      图片.png

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 个核心模块,整体架构如下:

    图片.png

    主循环介绍:

    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秒循环
    }

    显示效果:

    2.jpg

    设计源码:见附件src.zip


共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]