2026 M-Design设计竞赛-光伏运行参数监测系统
该项目使用了STM32,ESP32,INA226,BH1750,实现了光伏运行参数监测系统的设计,它的主要功能为:oled屏幕显示温度,电压,电流,光照强度,可以通过按键设置温度阈值,温度过高进行声光报警。长按按键可以查看储存的信息,并且可以通过点灯科技app查看这些数据。
标签
嵌入式系统
STM32
2026 M-Design设计竞赛
喜欢看电视
更新2026-06-09
23

一、项目介绍和创意介绍

项目名称

光伏运行参数监测系统

项目简介

本项目设计并实现了一套基于STM32F103C8T6微控制器与ESP32物联网模块的光伏运行参数监测系统。系统实时采集光伏电池板的输出电压、输出电流、环境温度以及光照强度,通过0.96寸OLED屏幕进行本地集中显示。用户可通过三个按键灵活设置温度报警阈值,当温度超过阈值时,系统自动触发声光报警(蜂鸣器+LED)。长按按键可进入历史数据查看模式,浏览最近100组采集记录。所有实时数据(温度、电压、电流、光照)通过UART发送至ESP32,ESP32支持WiFiManager一键配网(保存配置至Flash),并通过点灯科技(Blinker)平台上传至云端,用户使用手机APP即可远程查看光伏系统运行状态。本系统适用于小型光伏电站监控、太阳能路灯管理、户外光伏实验教学等场景。本项目完成了2026 M-Design设计竞赛的任务四

创新点

  • 多参数融合监测:集成电压、电流、温度、光照四类关键参数,全面评估光伏组件工作状态。
  • 声光报警+阈值可调:用户按键设置温度上限,超限后蜂鸣器与LED双重报警,避免光伏板过热损坏。
  • 历史数据存储与回看:系统循环存储最近100组数据,长按按键即可翻阅历史温度、电压、电流、光照值,便于故障追溯。
  • 物联网云监控:ESP32采用WiFiManager实现Web配网,配置信息掉电保存;点灯科技APP实时显示四维数据
  • 低功耗本地显示:OLED采用I2C接口,刷新周期1秒,兼顾实时性与功耗。

二、硬件介绍

主要硬件组件

  • 主控芯片:STM32F103C8T6(ARM Cortex-M3内核,72MHz)
  • 物联网模块:ESP32-WROOM-32(WiFi+蓝牙,用于配网与云上传)
  • 传感器
    • 电压/电流检测:INA226(高精度双向电流/功率监测,I2C接口)
    • 温度检测:DS18B20(数字温度传感器,单总线)
    • 光照检测:BH1750(数字光照强度,I2C接口)
  • 显示模块:0.96寸OLED(I2C接口,128×64分辨率)
  • 交互模块:3个轻触按键(设置键、增加键、减少键)
  • 报警模块:有源蜂鸣器(3.3V)、红色LED
  • 电源:5V直流输入,经LDO为系统供电

硬件连接说明

  • STM32与INA226:I2C1(PB6-SCL,PB7-SDA),地址0x40
  • STM32与BH1750:I2C1(与INA226共用总线),地址0x23
  • STM32与OLED:I2C2(PB10-SCL,PB11-SDA),地址0x3C
  • STM32与DS18B20:单总线GPIO(例如PA0,代码中为DS18B20_Init2()
  • STM32与按键PA8 PA12 PB3
  • STM32与报警
    • 蜂鸣器:PA1(高电平鸣叫)
    • LED:PA2(高电平点亮)
  • STM32与ESP32:UART1(PA9-TX,PA10-RX),波特率115200
  • ESP32额外引脚
    • GPIO9:配网按键(低电平触发,重新进入配网模式)

三、方案框图和项目设计思路

方案框图

image.png

设计思路

系统遵循“采集-处理-本地显示-云端上报”的架构:

  1. 采集层
    • INA226检测光伏输出电压(0~27V,可扩展分压)和输出电流(量程±3.2A,分流电阻0.1Ω)。
    • DS18B20测量环境温度(-55~125℃,精度±0.5℃)。
    • BH1750测量光照强度(1~65535 lux)。
  2. 处理与决策层
    • STM32每1秒读取所有传感器数据。
    • 与用户通过按键设定的温度阈值比较:若温度 ≥ 阈值,则拉高PA1(蜂鸣器)和PA2(LED)进行声光报警;否则关闭报警。
    • 数据打包成字符串格式(例如t25.5v12.34i123.45p 567.8),通过UART发送给ESP32。
  3. 本地交互层
    • OLED四行显示实时温度、电压、电流、光照。
    • 短按设置键进入阈值设置界面,按增加/减少键修改阈值,再次短按保存并返回主界面。
    • 长按设置键(≥800ms)进入历史数据查看模式,按增加/减少键翻阅最近100组存储的数据。
  4. 云端传输层
    • ESP32上电后尝试读取Flash中保存的WiFi SSID/密码和Blinker设备密钥。
    • 若成功连接WiFi则初始化Blinker,每1秒接收STM32串口数据并推送到APP。
    • 若连接失败或用户按下GPIO9配网键,ESP32启动WiFiManager配网门户(ESP32-Config),用户通过手机配置后保存至Flash并重启。

四、原理图和PCB设计介绍

原理图设计特点

image.png

  • 高精度电流采样:选用0.1Ω大功率分流电阻(2W),INA226内置16位ADC,可检测±3.2A电流,分辨率约0.1mA。IN+和IN-差分走线至分流电阻两端。
  • 电压检测:INA226的VBUS引脚直接测量光伏输出电压(经分压电阻匹配至36V以内),本设计可直接连接锂电池或光伏输出。
  • 双I2C总线:INA226和BH1750挂载在I2C1,OLED挂载在I2C2,避免地址冲突并提高刷新速度。
  • 按键硬件消抖:每个按键软件配合10ms定时器去抖。
  • 报警驱动:蜂鸣器和LED使用STM32的PA1/PA2输出高电平即可驱动。
  • 串口电平匹配:STM32和ESP32均为3.3V逻辑,可直接连接TX/RX。

PCB设计介绍

image.png

五、软件流程图和关键代码介绍

软件流程图

image.png

  1. STM32初始化
    • 时钟、GPIO、I2C、UART、定时器初始化。
    • OLED初始化并清屏。
    • DS18B20初始化(检测传感器)。
    • INA226初始化(配置量程、转换时间、平均值模式)。
    • BH1750初始化(连续高分辨率模式)。
    • 启动定时器(10ms周期,按键扫描),使能UART接收中断。
  2. 主循环
    • 每1秒调用jiance()读取所有传感器值 → 更新OLED显示 → 打包数据通过UART发送。
    • 若当前在主界面(OLED==0)且温度≥阈值,则报警;否则停止报警。
    • 检测按键标志:
      • 短按设置键(keynum==2):切换至阈值设置界面(OLED=1)。
      • 长按设置键(keynum==22):切换至历史数据查看界面(OLED=2)。
      • 在设置界面,短按增加/减少键(keynum==3/1)修改temp_set2,再次短按设置键保存并返回主界面。
      • 在历史查看界面,按增加/减少键切换索引num1,显示对应历史数据。
  3. ESP32程序
    • 上电读取NVS中保存的WiFi配置和Blinker密钥。
    • 若有效则连接WiFi并初始化Blinker;若失败或长按GPIO9则启动WiFiManager配网门户。
    • 配网成功后保存新配置,并重启Blinker。
    • 循环接收串口数据,解析出温度、电压、电流、光照,通过BlinkerNumber组件推送到APP。

关键代码介绍

1. STM32端:周期采集与数据打包(jiance()

c

void jiance(void)
{
if(uwTick - aa > 1000) // 1秒周期
{
do temp2 = DS18B20_ReadTemp2(); while(temp2>99||temp2<-1);
light = BH1750_ReadLight();
current = INA226_ReadCurrent() * 1000; // 转为mA
v = INA226_ReadVoltage();
// 打包格式:t温度 v电压 i电流(ma) p光照
sprintf(t, "t%4.1fv%4.2fi%8.2fp%7.1f", temp2, v, current, light);
HAL_UART_Transmit(&huart1, (uint8_t*)t, strlen(t), 50);
aa = uwTick;
// 循环存储100组数据
tt[num] = temp2; ii[num] = current; ll[num] = light; vv[num] = v;
num = (num + 1) % 100;
}
}

2. STM32端:温度报警与阈值设置

c

// 主循环中判断
if(temp2 >= temp_set2) // 超过设定阈值
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET); // 蜂鸣器
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET); // LED
}
else
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET);
}
// 阈值设置界面(OLED==1)中,按键修改temp_set2
if(keynum==1) temp_set2--;
if(keynum==3) temp_set2++;

3. STM32端:按键长短按识别(定时器10ms)

c

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
static uint8_t i[3], a[3];
// 读取三个按键电平(PA8, PA12, PB3),i[x]记录连续按下次数
// 当按键释放时,根据a[x]值判断:2~80为短按(20~800ms),>80为长按
// 设置全局 keynum 供主循环使用
}

4. ESP32端:WiFiManager配网与Blinker上传(main.cpp)

cpp

void setup() {
// 初始化串口(UART1,引脚6(RX),7(TX))与STM32通信
MySerial.begin(115200, SERIAL_8N1, 6, 7);
pinMode(9, INPUT_PULLUP); // 配网按键
// 读取Preferences中保存的SSID/密码/密钥
// 若有效则连接WiFi并初始化Blinker;否则进入配网模式
}
void loop() {
Blinker.run();
if(MySerial.available()) {
// 解析 't...v...i...p...' 格式数据
// 更新 BlinkerNumber 组件(temp, ll, vi, pwr)
}
// 按下配网键时重新进入配网模式
}

六、功能展示图及说明

实物外观

f57d4af2603b3c8469470cfb075a1450.jpg

  • 正面:0.96寸OLED屏幕显示四行数据,下方三个按键(减少设置增加),LED指示灯。
  • 侧面:电源输入接口(光伏板或适配器),蜂鸣器开孔。

本地显示效果


  • 4eed55b55172719050334e328227231a.jpg
  • eea76228f53bd4aef422f06ce2e644d3.jpg
  • 主界面:四行分别显示温度(℃)、电压(V)、电流(mA)、光照强度(Lux)。
  • 阈值设置界面:屏幕显示“temp-setting”和当前阈值(如35℃),按增减键调整,再按设置键保存。
  • 历史数据界面:显示存储序号、温度、电压、电流、光照值,按增减键翻页。

手机APP监控界面(点灯科技)


  • 8bc1a44e46de73941425fd88e4f2b036.jpg
  • 实时数据卡片:温度、电压、电流、光照,数值每秒刷新。

配网流程

  1. ESP32首次上电或长按配网键,WiFi名称为ESP32-Config
  2. 手机连接该WiFi,浏览器自动弹出配置页面。
  3. 输入家庭WiFi SSID、密码和点灯科技设备密钥(在Blinker APP中获取)。
  4. 保存后ESP32自动连接云端,并开始转发数据。

七、设计中遇到的难题和解决方法

ESP32串口数据粘包与解析错误

  • 问题:STM32每1秒发送一次数据,ESP32接收时可能因数据格式不完整导致atof解析出0。
  • 解决方法
    • 定义的t%4.1fv%4.2fi%8.2fp%7.1f格式简洁可靠,便于调试

八、对本次竞赛的心得体会

通过本次光伏运行参数检测系统的设计与实现,我获得了以下深刻体会:

技术创新方面

  • 光伏监测的实用价值:光伏组件输出受温度和光照影响显著,实时监测并报警可有效防止热斑效应和过温损坏,对提升光伏系统寿命具有重要意义。
  • 物联网赋能传统能源:将本地监测数据上传云端,运维人员无需亲临现场即可掌握电站运行状况,大幅降低人工巡检成本。
  • 低成本方案:STM32+ESP32组合成本不足50元,配合INA226(约15元)、BH1750(约5元),整体BOM低于100元,适合分布式光伏节点部署。

工程实践方面

  • 多传感器协同设计:学习了I2C总线上挂载多个设备的地址管理、时序容错、电源去耦等技巧。
  • 数据协议设计:自行定义的t%4.1fv%4.2fi%8.2fp%7.1f格式简洁可靠,便于调试和扩展。
  • WiFiManager集成:首次使用该库实现了免代码烧录的配网过程,用户体验极大提升。

社会应用价值

  • 本系统可用于家用光伏板监测、太阳能路灯智能管理、学校光伏实验教学等场景,助力可再生能源的推广与普及。
  • 报警功能可在光伏板异常高温时及时提醒用户,避免火灾隐患。

个人成长方面

  • 全栈开发能力:同时完成了STM32底层驱动、ESP32物联网应用、点灯科技平台配置,覆盖了从传感器到云端的完整链路。
  • 问题解决能力:面对I2C通信不稳定、串口数据丢包等问题,通过查阅文档、抓取波形、逐步隔离最终解决。
  • 文档与代码规范:养成了详细的注释和版本管理习惯,为后续项目迭代打下基础。

未来改进方向

  • 增加光伏板输出功率计算(P=U×I)并显示在APP上。
  • 加入SD卡数据记录功能,实现长期数据存储。
  • 增加远程控制功能(通过APP下发命令,控制光伏输出继电器)。
  • 采用更低功耗的ESP8266或支持DeepSleep,延长电池供电时间。

通过本次竞赛,我不仅完成了一套实用的光伏监测系统,更深入理解了嵌入式物联网项目的完整开发流程。感谢竞赛平台提供的锻炼机会,也感谢指导老师的帮助。我将继续在绿色能源和物联网领域探索,为可持续发展贡献技术力量。

附件下载
C3-Web-BLIKER-bishe.zip
C3-Web-BLIKER-bishe.zip
团队介绍
本人是自动化专业学生,隶属于叶佳敏团队
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号