站内搜索
发作品签到
瑞萨-ESP多传感互联显控
专业版

瑞萨-ESP多传感互联显控

简介

本项目基于瑞萨RA6E2和ESP32-S3,实现了温湿度、烟雾浓度的实时采集与传输,并可通过微信小程序远程查看。系统采用双MCU架构,性能稳定可靠,提供完整的环境监测解决方案。

简介:本项目基于瑞萨RA6E2和ESP32-S3,实现了温湿度、烟雾浓度的实时采集与传输,并可通过微信小程序远程查看。系统采用双MCU架构,性能稳定可靠,提供完整的环境监测解决方案。
立创·地奇星RA6E2开发板征集令

开源协议

GPL 3.0

创建时间:2025-12-11 12:05:26更新时间:2025-12-15 09:46:20

描述

Renesas & Esp32s3 物联网环境监测网关

视频链接:

B站视频--功能演示及介绍

项目简介

本项目是一套基于 瑞萨 (Renesas) RA6E2 的智能化扩展方案。项目以瑞萨单片机为核心主控,负责底层的传感器数据采集与核心业务逻辑;采用 ESP32-S3 “实战派”开发板 作为“智能网关与显示终端”。

两者通过 UART 串口连接,“实战派”负责将瑞萨采集的数据进行可视化展示,并通过蓝牙 (BLE) 将数据透传至微信小程序,实现了传统单片机项目的屏幕升级与移动端物联网 (IoT) 互联。

项目功能

本项目主要实现以下核心功能:

  1. 多维数据采集:由瑞萨 MCU 负责采集环境数据(包括温度、湿度、烟雾浓度及 ADC 电压值),并将数据打包。
  2. 双机通信与解析:ESP32-S3 作为网关,通过 UART 串口实时接收并解析来自瑞萨下位机的格式化数据。
  3. 本地可视化显示:ESP32-S3 将解析后的数据通过 LVGL 图形库在板载 IPS 屏幕上进行实时刷新和展示。
  4. 无线蓝牙透传:集成 Wechat_BLE 服务,支持微信小程序直连。实现将传感器数据实时上报至微信小程序,并预留了反向控制接口。

项目参数

  • 核心主控 (Core MCU):瑞萨 Renesas MCU (负责传感器驱动、底层数据采集)
  • 智能网关/显示终端:ESP32-S3 “实战派”开发板 (双核 Xtensa® LX7, 240MHz)
  • 显示屏幕:2.0寸 IPS 彩屏 (ST7789 驱动)
  • 通信接口:UART (波特率 115200), BLE 5.0
  • 供电方式:Type-C 5V 供电
  • 数据协议:nimble低功耗蓝牙 WiFi

原理解析(硬件说明)

本项目硬件逻辑主要分为 数据采集端数据处理端 两部分,通过物理链路进行连接。

数据采集

image.png

数据处理

image.png

通信链路电路:
ESP32-S3 通过硬件串口 (UART1) 与瑞萨开发板连接,实现全双工或半双工通信。

  • 瑞萨开发板 TX 引脚连接至 ESP32-S3 的 RX 引脚 (IO10)。
  • 瑞萨开发板 RX 引脚连接至 ESP32-S3 的 TX 引脚 (IO11)。
  • 关键点:两块开发板的 GND (地线) 必须连接在一起,以建立公共参考电平,否则无法通信。

软件代码

系统上电后,瑞萨 MCU 初始化传感器并周期性读取数据,通过 printf 或串口发送函数将数据格式化输出。ESP32-S3 端的 UART 接收中断捕获数据包,经由 FreeRTOS 任务进行解析,分发给 UI 线程更新屏幕,同时通过 BLE 协议栈广播数据,等待手机连接。

RA6E2主函数部分代码

/*
 * 立创开发板软硬件资料与相关扩展板软硬件资料官网全部开源
 * 开发板官网:www.lckfb.com
 * 文档网站:wiki.lckfb.com
 * 技术支持常驻论坛,任何技术问题欢迎随时交流学习
 * 嘉立创社区问答:https://www.jlc-bbs.com/lckfb
 * 关注bilibili账号:【立创开发板】,掌握我们的最新动态!
 * 不靠卖板赚钱,以培养中国工程师为己任
 */

#include "app.h"
#include "stdio.h"
#include "string.h" // 用于sprintf

/* BSP头文件引入 */
#include "bsp_uart.h"
#include "bsp_dht11.h"
#include "bsp_mq2.h"
#include "oled.h"

/******************************************************************
 * 函 数 名 称:led_blink
 * 函 数 说 明:LED心跳灯,用于指示系统正在运行
 * 函 数 形 参:无
 * 函 数 返 回:无
******************************************************************/
static void led_blink(void)
{
    /* 翻转LED电平,假设P402是板载LED */
    /* 注意:如果不使用LED或者引脚不同,请自行修改或删除 */
    static uint8_t level = BSP_IO_LEVEL_LOW;

    if(level == BSP_IO_LEVEL_LOW)
    {
        level = BSP_IO_LEVEL_HIGH;
        R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_02, BSP_IO_LEVEL_HIGH);
    }
    else
    {
        level = BSP_IO_LEVEL_LOW;
        R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_02, BSP_IO_LEVEL_LOW);
    }
}

/******************************************************************
 * 函 数 名 称:Run
 * 函 数 说 明:用户主应用程序入口
******************************************************************/
void Run(void)
{
    /* 1. 初始化调试串口 | RX:P100 | TX:P101 | */
    UART0_Debug_Init();

    printf("\r\n--- System Init Start ---\r\n");

    /* 2. 初始化 OLED 屏幕 */
    /* 注意:OLED初始化内部通常会有延时,确保上电稳定 */
    OLED_Init();
    OLED_Clear(); // 清屏
    OLED_ShowString(0, 0, (uint8_t*)"System Init...", 16, 1);
    OLED_Refresh();

    /* 3. 初始化 DHT11 温湿度传感器 */
    DHT11_Init();
    /* DHT11 上电后需要等待一段时间才能稳定读取 */
    /* 为了数据准确,建议先空读两次 */
    DHT11_Read_Data(NULL, NULL);
    R_BSP_SoftwareDelay(1000, BSP_DELAY_UNITS_MILLISECONDS);
    DHT11_Read_Data(NULL, NULL);

    /* 4. 初始化 MQ2 烟雾传感器 (包含ADC初始化) */
    /* 假设 Module_BSP_Init 包含了 MQ2 所需的 ADC 初始化 */
    Module_BSP_Init();

    printf("Sensors Init Complete.\r\n");
    OLED_Clear(); // 初始化完成后清屏准备显示数据

    /* 定义数据变量 */
    float temperature = 0.0f;
    float humidity = 0.0f;
    int mq2_adc = 0;
    int mq2_percent = 0;

    /* 定义OLED显示缓存字符串 */
    char display_buff[32];

    while(1)
        {
            /* --- 步骤1:读取传感器数据 --- */
            if(DHT11_Read_Data(&temperature, &humidity) != 1)
            {
                 // 如果出错,可以选择不打印,或者打印错误标记
                 // printf("Error\r\n");
            }

            mq2_adc = Get_Adc_MQ2_Value();
            mq2_percent = Get_MQ2_Percentage_value();

            /* --- 步骤2:串口打印数据 (已修改) --- */
            // 输出:Temp:25.5,Humi:60.2,Smoke:12,ADC:1205
            printf("Temp:%.1f,Humi:%.1f,Smoke:%d,ADC:%d\r\n", temperature, humidity, mq2_percent, mq2_adc);

            /* --- 步骤3:OLED 显示数据 (保持原样) --- */
            sprintf(display_buff, "Temp: %.1f C   ", temperature);
            OLED_ShowString(0, 0, (uint8_t *)display_buff, 16, 1);

            sprintf(display_buff, "Humi: %.1f %%   ", humidity);
            OLED_ShowString(0, 16, (uint8_t *)display_buff, 16, 1);

            sprintf(display_buff, "Smoke: %d %%    ", mq2_percent);
            OLED_ShowString(0, 32, (uint8_t *)display_buff, 16, 1);

            OLED_Refresh();

            /* --- 步骤4:系统心跳与延时 --- */
            led_blink();
            R_BSP_SoftwareDelay(1000, BSP_DELAY_UNITS_MILLISECONDS);
        }
}

实战派掌机瑞萨app接口

// Task/renesas_task.c
#include 
#include 
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/uart.h"
#include "driver/gpio.h"
#include "esp_log.h"

#include "wechat_ble.h" // 引用上面的头文件
#include "renesas_ui.h" // 引用 UI 协议

#define RX_PIN      10 
#define TX_PIN      11 
#define RX_BUF_SIZE 512
#define BAUD_RATE   115200 
#define TAG "RenesasTask"

static void uart_rx_task(void *arg) {
    uint8_t *data = (uint8_t *) malloc(RX_BUF_SIZE + 1);
    float temp = 0.0f, humi = 0.0f;
    int smoke = 0, adc = 0;

    // 配置 UART
    const uart_config_t uart_config = {
        .baud_rate = BAUD_RATE,
        .data_bits = UART_DATA_8_BITS,
        .parity = UART_PARITY_DISABLE,
        .stop_bits = UART_STOP_BITS_1,
        .flow_ctrl = UART_HW_FLOWCTRL_DISABLE,
        .source_clk = UART_SCLK_DEFAULT,
    };
    uart_driver_install(UART_NUM_1, RX_BUF_SIZE * 2, 0, 0, NULL, 0);
    uart_param_config(UART_NUM_1, &uart_config);
    uart_set_pin(UART_NUM_1, TX_PIN, RX_PIN, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
    
    ESP_LOGI(TAG, "Listening on UART1 (TX:11, RX:10)...");

    while (1) {
        // 读取数据
        const int rxBytes = uart_read_bytes(UART_NUM_1, data, RX_BUF_SIZE, pdMS_TO_TICKS(100));

        if (rxBytes > 0) {
            data[rxBytes] = 0; 
            // 假设数据格式: "Temp:25.5,Humi:60.2,Smoke:12,ADC:1205"
            int n = sscanf((char *)data, "Temp:%f,Humi:%f,Smoke:%d,ADC:%d", &temp, &humi, &smoke, &adc);

            if (n == 4) {
                // 1. 发送给 微信小程序
                ble_send_sensor_data(temp, humi, smoke, adc);

                // 2. 更新 本地屏幕 (解耦调用)
                renesas_ui_update_sensor(temp, humi, smoke, adc);
                
                ESP_LOGI(TAG, "Data Sync: T:%.1f H:%.1f", temp, humi);
            }
        }
        // 不需要延时,uart_read_bytes 会阻塞
    }
    free(data);
    vTaskDelete(NULL);
}

// 初始化函数,在 main.c 调用
void renesas_task_init(void) {
    xTaskCreate(uart_rx_task, "renesas_task", 4096, NULL, 5, NULL);
}

实物图/视频

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

3D模型

序号文件名称下载次数
暂无数据

附件

序号文件名称下载次数
1
微信小程序连接视频.mp4
2
2
运行视频.mp4
1
3
RA_ALL.zip
8
克隆工程
添加到专辑
0
0
分享
侵权投诉
知识产权声明&复刻说明

本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。

请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。

底部导航