当前位置: 首页 > news >正文

基于STM32的智能电表可视化设计:ESP8266、AT指令集、python后端Flask(代码示例)

在这里插入图片描述

一、项目概述

随着智能家居的普及,智能电表作为家庭用电管理的重要工具,能够实时监测电流、电压及功率,并将数据传输至后台进行分析和可视化。本项目以STM32C8T6为核心,结合交流电压电流监测模块、ESP8266 Wi-Fi模块、OLED显示屏和继电器,构建一个智能电表系统。通过AT指令实现ESP8266与Python后端的通信,使得用户能够在可视化界面上实时查看用电情况。

项目目标

  • 实现电流和电压的实时监测。

  • 通过Wi-Fi将数据发送至Python后端。

  • 在OLED显示屏上实时显示监测数据。

  • 控制继电器开关,实现智能电器管理。

技术栈关键词

  • 单片机:STM32C8T6

  • 传感器:交流电压电流监测模块

  • 通信模块:ESP8266

  • 显示模块:OLED

  • 控制模块:继电器

  • 后端技术:Python、Flask、Matplotlib

  • 通信协议:AT指令集

二、系统架构

系统架构设计基于模块化思想,各个功能模块相互独立又紧密协作。以下是系统架构的详细描述:

  1. STM32C8T6:作为主控单元,负责数据采集、处理和控制。

  2. 电流电压监测模块:实时监测家用电器的电流和电压,提供数据给STM32。

  3. ESP8266模块:实现Wi-Fi连接,通过AT指令与Python后端通信。

  4. OLED显示模块:用于显示实时的电流、电压和功率信息。

  5. 继电器模块:根据设定条件控制电器的开关。

系统架构图

以下是系统架构图,清晰展示了各组件之间的交互关系:

采集数据
控制
显示
发送数据
数据传输
数据可视化
STM32C8T6
电流电压监测模块
继电器
OLED
ESP8266
Python后端
用户界面

三、环境搭建和注意事项

1. 开发环境搭建

  • 软件开发:

    • STM32开发环境:使用STM32CubeIDE进行代码编写和调试。

    • Python开发环境:安装Python 3.x及Flask、requests等库,使用pip安装:

      pip install Flask requests matplotlib
      
  • 硬件准备:

    • STM32C8T6开发板

    • 交流电压电流监测模块(如ZMPT101B、ACS712)

    • ESP8266 Wi-Fi模块

    • OLED显示屏(I2C接口)

    • 继电器模块

    • 连接线和面包板

2. 注意事项

  • 电源管理:确保所有模块的电源符合其工作电压,避免损坏。

  • 通信设置:在使用ESP8266时,确保AT指令集正确配置,避免连接失败。

  • 硬件连接:按照电路原理图连接各模块,确保连接牢固,避免短路和接触不良。

  • 安全性:在进行电流监测时,务必注意安全,避免直接接触高压电源。

四、代码实现过程

在这一部分中,我们将详细介绍项目的代码实现过程,特别是如何使用AT指令与ESP8266进行通信,以及各个模块的具体实现。代码将按照系统架构的设计,逐步实现功能模块,确保逻辑清晰且易于理解。

1. 系统初始化

首先,我们需要初始化各个模块,包括电流电压监测模块、OLED显示模块、ESP8266模块和继电器模块。以下是系统初始化的代码示例:

#include "stm32f10x.h"
#include "oled.h"
#include "esp8266.h"
#include "current_sensor.h"
#include "relay.h"void init_system() {// 初始化电流电压监测模块current_sensor_init();// 初始化OLED显示oled_init();// 初始化ESP8266esp8266_init();// 初始化继电器relay_init();
}

2. 数据采集

接下来,我们使用定时器定期采集电流和电压数据。在该函数中,我们将读取数据并在OLED上显示,并调用发送数据到服务器的函数。

void collect_data() {float voltage = read_voltage();  // 读取电压数据float current = read_current();   // 读取电流数据float power = voltage * current;  // 计算功率oled_display(voltage, current, power); // 在OLED上显示数据send_data_to_server(voltage, current, power); // 发送数据到服务器
}

3. 数据传输

在这一部分,我们将详细介绍如何使用ESP8266模块通过AT指令与Python后端进行通信。ESP8266通过串口与STM32连接,接收指令并执行相应的操作。

3.1 ESP8266模块配置

在开始发送数据之前,我们首先需要配置ESP8266模块连接到Wi-Fi网络。以下是一个示例代码,展示如何通过AT指令设置Wi-Fi连接:

void esp8266_init() {// 发送AT指令初始化ESP8266send_command_to_esp("AT\r\n");  // 检查模块是否响应delay(1000);send_command_to_esp("AT+RST\r\n");  // 重置ESP8266delay(2000);send_command_to_esp("AT+CWMODE=1\r\n");  // 设置为STA模式delay(1000);// 连接到Wi-Ficonst char* ssid = "your_SSID";      // Wi-Fi名称const char* password = "your_PASSWORD"; // Wi-Fi密码char command[100];sprintf(command, "AT+CWJAP=\"%s\",\"%s\"\r\n", ssid, password);send_command_to_esp(command);  // 连接Wi-Fidelay(5000);  // 等待连接
}
3.2 发送数据到Python后端

一旦ESP8266连接到Wi-Fi,我们就可以使用AT指令将数据发送到Python后端。以下是发送数据的代码示例:

void send_data_to_server(float voltage, float current, float power) {char command[256];// 连接到服务器sprintf(command, "AT+CIPSTART=\"TCP\",\"192.168.1.100\",5000\r\n");  // 替换为后端服务器IP和端口esp8266_send_command(command);// 发送数据sprintf(command, "AT+CIPSEND\r\n");esp8266_send_command(command);// 构建JSON格式数据sprintf(command, "{\"voltage\": %.2f, \"current\": %.2f, \"power\": %.2f}\r\n", voltage, current, power);esp8266_send_command(command);
}

3.3 AT指令详解

以下是使用的AT指令的详细说明:

  • AT:测试模块是否响应。返回“OK”表示ESP8266正常工作。

  • AT+RST:重置ESP8266模块。这通常用于清除之前的设置。

  • AT+CWMODE=1:设置ESP8266为Station模式(STA),使其可以连接到Wi-Fi网络。

  • AT+CWJAP=“SSID”,“PASSWORD”:连接到指定的Wi-Fi网络。需要替换为实际的SSID和密码。

  • AT+CIPSTART:建立与指定IP和端口的TCP连接。

  • AT+CIPSEND:准备发送数据。发送此命令后,模块会等待数据输入。

  • 数据内容:发送JSON格式的数据,包含电压、电流和功率信息。

4. OLED显示模块

OLED显示模块用于实时显示电压、电流和功率信息。以下是显示函数的示例:

void oled_display(float voltage, float current, float power) {// 清屏oled_clear();// 显示电压oled_print("Voltage: %.2f V", voltage);// 显示电流oled_print("Current: %.2f A", current);// 显示功率oled_print("Power: %.2f W", power);
}

5. 继电器控制

根据特定条件控制继电器的开关,以下是继电器控制的代码示例:

void control_relay(uint8_t state) {if (state) {relay_on();  // 开启继电器} else {relay_off(); // 关闭继电器}
}

6. 时序图

以下是系统的大致时序图,显示各模块之间的交互关系:

STM32 Sensor ESP8266 Python 采集电流电压数据 返回数据 发送数据 数据传输 数据可视化 STM32 Sensor ESP8266 Python

7. Python后端示例

后端使用Flask框架接收数据并进行可视化展示。以下是一个简单的Python后端示例代码:

from flask import Flask, request, jsonify
import matplotlib.pyplot as pltapp = Flask(__name__)# 用于存储数据
data_store = []@app.route('/data', methods=['POST'])
def receive_data():data = request.get_json()voltage = data['voltage']current = data['current']power = voltage * current  # 计算功率data_store.append({'voltage': voltage, 'current': current, 'power': power})print(f"Voltage: {voltage}, Current: {current}, Power: {power}")return jsonify({'status': 'success'})@app.route('/visualize', methods=['GET'])
def visualize():# 数据可视化逻辑voltages = [data['voltage'] for data in data_store]currents = [data['current'] for data in data_store]plt.plot(voltages, label='Voltage (V)')plt.plot(currents, label='Current (A)')plt.xlabel('Time (s)')plt.ylabel('Value')plt.title('Voltage and Current Over Time')plt.legend()plt.show()return "Visualization complete!"if __name__ == '__main__':app.run(host='0.0.0.0', port=5000)

五、项目总结

本项目成功实现了一个基于STM32的智能电表,具备实时监测、数据传输与可视化的功能。通过AT指令与Python后端进行通信,确保了数据的实时性和有效性。具体总结如下:

  • 实时监测:项目能够实时采集电压和电流数据,并计算功率。

  • 数据传输:利用ESP8266模块通过AT指令将数据发送至Python后端,具备良好的扩展性。

  • 可视化展示:后端通过Flask框架实现数据接收和处理,能够方便地进行数据可视化。

  • 控制功能:继电器模块可以根据需求实现对电器的控制,提升了智能家居的实用性。

未来的工作可以集中在优化数据处理算法、扩展更多功能(如故障报警、历史数据记录)以及提升用户界面的友好性等方面。

http://www.lryc.cn/news/519419.html

相关文章:

  • 图片和短信验证码(头条项目-06)
  • 2501,wtl显示html
  • 嵌入式C语言:什么是指针?
  • 解锁 KaiwuDB 数据库工程师,开启进阶之路
  • ffmpeg7.0 aac转pcm
  • 【Pandas】pandas Series rdiv
  • 线程安全问题介绍
  • 为AI聊天工具添加一个知识系统 之27 支持边缘计算设备的资源存储库及管理器
  • 初识verilog HDL
  • VS2015 + OpenCV + OnnxRuntime-Cpp + YOLOv8 部署
  • Notepad++上NppFTP插件的安装和使用教程
  • Kotlin | Android Provider 的实现案例
  • 频域自适应空洞卷积FADC详解
  • Edge浏览器内置的截长图功能
  • GAN的应用
  • Math Reference Notes: 希腊字母表
  • 高通,联发科(MTK)等手机平台调优汇总
  • Rust语言使用iced实现简单GUI页面
  • 使用wav2vec 2.0进行音位分类任务的研究总结
  • 25/1/11 嵌入式笔记<esp32> 初入esp32
  • 基于SMT32U575RIT单片机-中断练习
  • 在Django的Serializer的列表数据中剔除指定元素
  • 我喜欢的数学题
  • Redis解决热key问题
  • 【git】-2 分支管理
  • Win11+WLS Ubuntu 鸿蒙开发环境搭建(二)
  • Meilisearch ASP.Net Core API 功能demo
  • 程序员独立开发竞品分析:确定网站使用什么建站系统
  • selenium+pyqt5自动化工具总结
  • docker GPU安装