基于STM32的智电表系统课题设计思路:python友好界面、ADC、UART串口、数据分析
1. 项目选题与需求分析
1.1 选题背景和动机
随着社会的快速发展,电力的消耗不断增加,如何高效管理和监测用电成为了一个重要的课题。传统的电表只能提供简单的用电计量,无法满足现代家庭和工业对用电数据实时监控、远程控制及数据分析的需求。因此,开发一款基于STM32单片机的智能电表系统,不仅可以提高用电管理的效率,还能帮助用户更好地了解和控制用电行为,降低电费支出。
1.2 目标用户和市场需求分析
目标用户主要包括家庭用户和小型企业用户。他们希望通过智能设备实时监测用电情况,获取用电数据,并对用电设备进行远程控制。市场上对智能家居和工业自动化的需求日益增加,为智能电表系统提供了广阔的应用前景。根据市场调研,用户对于电力监控系统的需求主要集中在以下几个方面:
-
实时监测电量和用电情况。
-
远程控制电源的开关。
-
通过数据分析优化用电行为。
-
友好的用户界面,便于操作和查看数据。
1.3 功能需求与非功能需求的定义
功能需求:
-
实时采集和显示电压、电流、功率和累计用电量。
-
通过OLED显示屏展示实时数据。
-
通过串口与Python程序进行数据传输,实现远程控制。
-
提供数据统计和趋势分析功能。
-
允许用户通过可视化界面控制电表开关。
非功能需求:
-
系统应具备良好的稳定性和可靠性。
-
硬件和软件的响应时间应在合理范围内。
-
用户界面应简单易用,便于操作。
-
系统应具备良好的扩展性,以便后续功能的增加。
2. 系统架构设计
2.1 系统整体架构图
2.2 硬件平台选择
本项目采用STM32F4系列单片机作为核心控制器,具有强大的处理能力和丰富的外设接口,适合嵌入式应用。同时,选择高精度电流和电压传感器(如ACS712和ZMPT101B)进行电量测量,OLED显示屏用于数据展示,电源控制模块用于控制负载的开关。
2.3 软件架构设计
软件部分主要基于STM32的HAL库进行开发,使用Keil或STM32CubeIDE作为开发环境。同时,Python程序使用Tkinter库或PyQt库实现可视化界面,处理数据的传输和显示。
3. 关键技术与实现
3.1 传感器与执行器的选择与使用
-
电流传感器:使用ACS712传感器进行电流测量,其输出为与输入电流成比例的电压信号。
-
电压传感器:使用ZMPT101B模块进行电压测量,输出信号同样为与输入电压成比例的电压信号。
-
OLED显示屏:使用0.96英寸的OLED屏幕,通过I2C接口与STM32进行连接,实时显示电量数据。
3.2 通信方式
本项目通过UART(串口)实现STM32与电脑端Python程序之间的数据交互。使用串口通信协议,STM32将实时采集的数据发送给Python程序,以便进行显示和控制。
3.3 数据处理与控制算法
在数据处理方面,使用滤波算法(如卡尔曼滤波)对电流和电压信号进行平滑处理,减少噪声影响。通过简单的线性回归算法分析用户的用电趋势,为用户提供用电建议。
用户界面采用Python的Tkinter库进行开发,界面设计友好,功能模块清晰。具体设计包括:
-
实时数据展示:界面上包括实时电压、电流、功率和累计用电量的显示区域,用户可以直观地查看当前的用电状态。
-
历史数据记录:提供历史用电数据的查询功能,用户可以选择日期范围查看过去的用电情况,帮助用户分析用电趋势。
-
控制面板:用户可以通过按钮控制电表的开关状态,实时更新电表状态,并在界面上反馈给用户。
-
数据导出功能:允许用户将用电数据导出为CSV文件,便于后续分析和记录保存。
4. 项目开发过程
4.1 硬件设计与原理图
在硬件设计中,我们选用了STM32F4系列单片机,电流传感器ACS712,电压传感器ZMPT101B,以及OLED显示屏(如SSD1306)。以下是整个系统的原理图示意:
-
电流传感器(ACS712):连接至STM32的ADC引脚,用于实时监测电流。
-
电压传感器(ZMPT101B):同样连接至ADC引脚,用于实时监测电压。
-
OLED显示屏(SSD1306):通过I2C接口连接STM32,用于显示实时数据。
-
电源控制模块:通过继电器或MOSFET控制设备的开关。
4.2 软件开发流程
软件开发主要分为STM32固件开发和Python可视化界面开发,以下是详细步骤和代码示例。
4.2.1 STM32固件开发
环境搭建:使用STM32CubeIDE进行开发,创建新项目并配置所需的外设(ADC、I2C、USART等)。
代码示例:
- ADC配置和读取:
#include "stm32f4xx_hal.h"ADC_HandleTypeDef hadc1;// ADC初始化 void ADC_Init(void) {__HAL_RCC_ADC1_CLK_ENABLE(); // 使能ADC1时钟hadc1.Instance = ADC1;hadc1.Init.Resolution = ADC_RESOLUTION_12B; // 12位分辨率hadc1.Init.ScanConvMode = DISABLE; // 单通道模式hadc1.Init.ContinuousConvMode = ENABLE; // 连续转换模式hadc1.Init.DiscontinuousConvMode = DISABLE;hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; // 软件触发HAL_ADC_Init(&hadc1); }// 读取ADC值 uint32_t Read_ADC(void) {HAL_ADC_Start(&hadc1); // 启动ADC转换HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY); // 等待转换完成return HAL_ADC_GetValue(&hadc1); // 获取ADC值 }
- I2C配置和OLED显示:
#include "ssd1306.h"// OLED显示初始化 void OLED_Init(void) {ssd1306_Init(); // 初始化OLED }// 显示数据 void Display_Data(float voltage, float current) {ssd1306_SetCursor(0, 0);char buf[20];sprintf(buf, "Voltage: %.2fV", voltage);ssd1306_WriteString(buf, Font_7x10, White);sprintf(buf, "Current: %.2fA", current);ssd1306_SetCursor(0, 10);ssd1306_WriteString(buf, Font_7x10, White);ssd1306_UpdateScreen(); // 更新显示 }
- UART配置:
UART_HandleTypeDef huart2;// UART初始化
void UART_Init(void) {__HAL_RCC_USART2_CLK_ENABLE(); // 使能USART2时钟huart2.Instance = USART2;huart2.Init.BaudRate = 9600; // 波特率9600huart2.Init.WordLength = UART_WORDLENGTH_8B;huart2.Init.StopBits = UART_STOPBITS_1;huart2.Init.Parity = UART_PARITY_NONE;huart2.Init.Mode = UART_MODE_TX_RX;HAL_UART_Init(&huart2);
}
4.2.2 Python可视化界面开发
在Python部分,我们将使用Tkinter库来创建一个图形用户界面 (GUI),用于实时显示电表数据并控制开关。我们将通过串口与STM32进行通信。
环境准备
首先,确保已安装Python和必要的库。可以使用以下命令安装PySerial和Tkinter(Tkinter通常默认安装):
pip install pyserial
代码示例
- 建立串口连接:
import serial import time# 配置串口 ser = serial.Serial('COM3', 9600, timeout=1) # 替换为实际的串口号 time.sleep(2) # 等待串口初始化
- 创建Tkinter GUI:
import tkinter as tkclass SmartMeterApp:def __init__(self, master):self.master = mastermaster.title("智能电表监控")self.label_voltage = tk.Label(master, text="电压: -- V")self.label_voltage.pack()self.label_current = tk.Label(master, text="电流: -- A")self.label_current.pack()self.btn_on = tk.Button(master, text="开启电源", command=self.turn_on)self.btn_on.pack()self.btn_off = tk.Button(master, text="关闭电源", command=self.turn_off)self.btn_off.pack()self.update_data()def update_data(self):# 从串口读取数据if ser.in_waiting > 0:line = ser.readline().decode('utf-8').rstrip() # 读取一行数据voltage, current = self.parse_data(line)self.label_voltage.config(text=f"电压: {voltage:.2f} V")self.label_current.config(text=f"电流: {current:.2f} A")self.master.after(1000, self.update_data) # 每秒更新一次def parse_data(self, data):# 解析数据格式 "Voltage: X.XX, Current: Y.YY"try:parts = data.split(',')voltage = float(parts[0].split(':')[1].strip())current = float(parts[1].split(':')[1].strip())return voltage, currentexcept:return 0.0, 0.0 # 如果解析失败,返回0def turn_on(self):ser.write(b'ON\r\n') # 发送开启命令def turn_off(self):ser.write(b'OFF\r\n') # 发送关闭命令if __name__ == "__main__":root = tk.Tk()app = SmartMeterApp(root)root.mainloop()
4.2.3 主循环与数据处理
在STM32的主循环中,我们需要定期读取电流和电压数据,更新OLED显示,并通过UART发送数据。
int main(void) {HAL_Init(); // 初始化HAL库SystemClock_Config(); // 配置系统时钟ADC_Init(); // 初始化ADCUART_Init(); // 初始化UARTOLED_Init(); // 初始化OLEDwhile (1) {// 读取电流和电压uint32_t adc_value_current = Read_ADC(); // 假定此函数已读取电流uint32_t adc_value_voltage = Read_ADC(); // 假定此函数已读取电压// 将ADC值转换为实际电流和电压float current = (adc_value_current / 4095.0) * 10.0; // 假设量程为10Afloat voltage = (adc_value_voltage / 4095.0) * 220.0; // 假设量程为220V// 显示数据Display_Data(voltage, current);// 发送数据到PCSend_Data(voltage, current);HAL_Delay(1000); // 延迟1秒}
}
5. 总结与展望
总结项目的技术点
本项目成功实现了基于STM32的智能电表系统,主要技术点包括:
-
高效的数据采集:通过高精度ADC和传感器,实时监测电量数据,保证数据的准确性。
-
友好的用户界面:利用Python的Tkinter库开发的可视化界面,使得用户可以方便地查看和控制用电情况。
-
灵活的数据通信:通过UART串口实现STM32与Python程序的实时数据交互,保证了系统的响应速度。
-
数据处理与分析:应用滤波和简单线性回归算法进行数据处理与分析,为用户提供用电趋势的预测和建议。
相关文章:
基于STM32的智电表系统课题设计思路:python友好界面、ADC、UART串口、数据分析
1. 项目选题与需求分析 1.1 选题背景和动机 随着社会的快速发展,电力的消耗不断增加,如何高效管理和监测用电成为了一个重要的课题。传统的电表只能提供简单的用电计量,无法满足现代家庭和工业对用电数据实时监控、远程控制及数据分析的需求…...
博弈论1:拿走游戏(take-away game)
假设你和小红打赌,玩“拿走游戏”,输的人请对方吃饭.... 你们面前有21个筹码,放成一堆;每轮你或者小红可以从筹码堆中拿走1个/2个/3个;第一轮你先拿,第二轮小红拿,你们两个人交替进行;拿走筹码堆…...
【人工智能解读】神经网络(CNN)的特点及其应用场景器学习(Machine Learning, ML)的基本概念
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默, 忍不住分享一下给大家。点击跳转到网站 学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……) 2、学会Oracle数据库入门到入土用法(创作中……) 3、手把…...
Spring Cloud与Spring Cloud Alibaba:全面解析与核心要点
Spring Cloud与Spring Cloud Alibaba:全面解析与核心要点 一、引言 在当今的分布式系统开发领域,Spring Cloud和Spring Cloud Alibaba都是极为重要的框架。它们为构建大规模、高可用、分布式的应用系统提供了丰富的工具和组件。本文将深入探讨Spring C…...
Java 泛型
1. 泛型 (1) 泛型:定义类、接口、方法时,同事声明了一个或多个类型变量(如<E>),称为泛型类、泛型接口、泛型方法、它们统称为泛型。可以在编译阶段约束要操作的数据类型 public static void main(String[] args) {//没加泛型 可以放任何…...
CentOS7 搭建 MQTT(mosquitto)环境并收发数据
零:说在前面 最近在研究物联网相关内容,需要接收 Modbus 协议的数据。上游数据源提出由对方整合数据后使用 MQTT 协议将数据发送过来,因此需要了解一下什么是 MQTT。 首先,它是一个类似 kafka 的“发布/订阅”模式的消息框架&…...
操作系统课后习题2.2节
操作系统课后习题2.2节 第1题 CPU的效率指的是CPU的执行速度,这个是由CPU的设计和它的硬件来决定的,具体的调度算法是不能提高CPU的效率的; 第3题 互斥性: 指的是进程之间的同步互斥关系,进程是一个动态的过程&#…...
Mac Goland dlv 升级
Mac Goland dlv 升级 问题表现 WARNING: undefined behavior - version of Delve is too old for Go version 1.22.1 (maximum supported version 1.21)查看当前Goland dlv 版本 ☁ ~ /Applications/GoLand.app/Contents/plugins/go-plugin/lib/dlv/mac/dlv version Delve…...
vue使用pdfh5.js插件,显示pdf文件白屏
pdfh5,展示文件白屏,无报错 实现效果图解决方法(降版本)排查问题过程发现问题查找问题根源1、代码写错了?2、预览文件流的问题?3、pdfh5插件更新了,我的依赖包没更新?4、真相大白 彩蛋 实现效果图 解决方法…...
【FFmpeg】FFmpeg 内存结构 ⑥ ( 搭建开发环境 | AVPacket 创建与释放代码分析 | AVPacket 内存使用注意事项 )
文章目录 一、搭建开发环境1、开发环境搭建参考2、项目搭建 二、AVPacket 创建与释放代码分析1、AVPacket 创建与释放代码2、Qt 单步调试方法3、单步调试 - 分析 AVPacket 创建与销毁代码 三、AVPacket 内存使用注意事项1、谨慎使用 av_init_packet 函数2、av_init_packet 函数…...
[Unity Shader] 【游戏开发】【图形渲染】Unity Shader的种类2-顶点/片元着色器与固定函数着色器的选择与应用
Unity 提供了不同种类的 Shader,每种 Shader 有其独特的优势和适用场景。在所有类型的 Shader 中,顶点/片元着色器(Vertex/Fragment Shader)与固定函数着色器(Fixed Function Shader)是两种重要的着色器类型。尽管它们具有不同的编写方式和用途,理解其差异与应用场景,对…...
Unity 动画曲线研究(Dotween插件)
动画的曲线的介绍 动画曲线(Animation Curve)是一种用于描述动画属性值随时间变化的图形工具。 我们可以通过给自己的动画片段设定不同的动画曲线,使动画效果具有不同表现力。 常见的动画曲线设定有: 线性(Linear&…...
适合小白的超详细yolov8环境配置+实例运行教程,从零开始教你如何使用yolov8训练自己的数据集(Windows+conda+pycharm)
目录 一、前期准备所需环境配置 1.1. 虚拟环境创建 1.2 下载yolov8源码,在pycharm中进行配置 1.2.1 下载源码 1.2.2 在pycharm终端中配置conda 1.3 在pycharm的terminal中激活虚拟环境 1.4 安装requirements.txt中的相关包 1.5 pip安装其他包 1.6 预训练…...
Linux中输入和输出基本过程
1.文件内核级缓冲区 前面在如何理解Linux一切皆文件的特点中提到为了保证在Linux中所有进程访问文件时的方式趋近相 同,在f ile 结构体中存在一个 files_operations 结构体指针,对应的结构体保存所有文件操作的函 数指针(这个结构体也被称为…...
二、FIFO缓存
FIFO缓存 1.FIFO缓存介绍2.FIFO缓存实现3.FIFO缓存总结 1.FIFO缓存介绍 FIFO(First-In-First-Out)缓存 是一种简单的缓存淘汰策略,它基于先进先出的原则来管理数据。当缓存达到容量限制并需要淘汰元素时,最先进入缓存的元素会被移…...
Linux_挂载nas
1、安装挂载nas必要的服务 yum -y install nfs-utils rpcbind 2、挂载nas sudo mount -t nfs -o vers3,nolock,prototcp,noresvport <NAS-IP>:/path/to/shared /yourNasPath mount 命令详解: -t :文件系统类型 ,这里指定的挂载类…...
uni-app开发AI康复锻炼小程序,帮助肢体受伤患者康复!
**提要:**近段时间我们收到多个康复机构用户,咨询AI运动识别插件是否可以应用于肢力运动受限患者的康复锻炼中来,插件是可以应用到AI康复锻炼中的,今天小编就为您介绍一下AI运动识别插件在康腹锻炼中的应用场景。 一、康复机构的应…...
现代密码学总结(上篇)
现代密码学总结 (v.1.0.0版本)之后会更新内容 基本说明: ∙ \bullet ∙如果 A A A是随机算法, y ← A ( x ) y\leftarrow A(x) y←A(x)表示输入为 x x x ,通过均匀选择 的随机带运行 A A A,并且将输出赋给 y y y。 ∙ \bullet …...
按照字幕拆解视频实战
1. 基本实现思路 字幕文件处理: 提取字幕内容和时间戳(如 SRT 文件格式)。解析字幕中的开始时间和结束时间。 视频切割: 使用字幕的时间戳,剪辑对应时间段的视频。每段字幕对应一个子视频。 输出子视频: …...
2.11.静态链表
一.静态链表的基本概念: 1.上图说明:索引为0处是头结点,头结点不存储数据,但存储下一个结点的数组下标,本例中头结点里存储的下一个结点的数组下标为2,即索引为2的结点为头结点后的第一个结点,以…...
分页查询在数据库中的好处
分页查询在数据库中的好处主要体现在以下几个方面: 提高性能: 减少数据传输:分页查询只返回请求的页面数据,而不是整个数据集,这减少了网络传输的数据量,降低了网络延迟和带宽消耗。减少内存使用࿱…...
电子应用设计方案-54:智能AI人工智能机器人系统方案设计
智能 AI 人工智能机器人系统方案设计 一、引言 随着人工智能技术的快速发展,智能 AI 机器人在各个领域的应用越来越广泛。本方案旨在设计一个功能强大、智能高效、交互友好的人工智能机器人系统,以满足不同场景下的用户需求。 二、系统概述 1. 系统目标…...
μC/OS-Ⅱ源码学习(6)---事件标志组
快速回顾 μC/OS-Ⅱ中的多任务 μC/OS-Ⅱ源码学习(1)---多任务系统的实现 μC/OS-Ⅱ源码学习(2)---多任务系统的实现(下) μC/OS-Ⅱ源码学习(3)---事件模型 μC/OS-Ⅱ源码学习(4)---信号量 μC/OS-Ⅱ源码学习(5)---消息队列 本文进一步解析事件模型中,事件标志…...
ASP.NET|日常开发中读写TXT文本详解
ASP.NET|日常开发中读写TXT文本详解 前言一、读取 TXT 文本1.1 使用StreamReader类 二、写入 TXT 文本2.1 使用StreamWriter类 三、文件编码问题3.1 常见编码格式 四、错误处理和性能考虑4.1 错误处理4.2 性能考虑 结束语优质源码分享 ASP.NET|日常开发中…...
《C 语言向量运算:点亮人工智能几何计算之路》
在人工智能蓬勃发展的时代,数学运算作为其坚实的基石发挥着不可替代的作用。而向量的点积与叉积运算,更是在人工智能的几何计算领域有着独特且关键的地位。今天,就让我们一同深入探讨如何在 C 语言中实现向量的点积、叉积运算,并领…...
HarmonyOS 获取进程相关的信息process 常用的几个方法
获取进程相关的信息,提供进程管理的相关功能。 process 1. EventListener 2. isIsolatedProcess 3. is64Bit 4. getStartRealtime 5. getPastCpuTime 导入模块 import { process } from kit.ArkTS; 属性 名称类型可读可写说明uidnumber是否进程的用户标识。…...
Linux 权限管理实践:精确控制用户对 systemctl 和 journalctl 命令的使用
前言 在 Linux 系统管理中,精确控制用户对特定命令的访问权限是一项关键的安全实践。使用 systemctl 和 journalctl 命令时,不当的权限设置可能会导致不必要的风险。本篇博客将详细讨论如何通过 sudoers 文件和 Polkit 策略为不同用户配置 systemctl 和…...
图像处理之滤波
中值滤波、均值滤波、高斯滤波和双边滤波是常见的图像处理技术,主要用于去噪和图像平滑。低通滤波和高通滤波用于处理图像中的频率成分。它们的主要区别在于它们所允许通过的频率范围。滤波、卷积、去噪、模糊、提取特征是一个意思。 卷积就是两个矩阵的乘法&#…...
html基础-认识html
1.什么是html html是浏览器可以识别的的标记语言,我们在浏览器浏览的网页就是一个个的html文档 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>认识html</title> </head> <body><h1…...
金智塔科技联合浙大人工智能研究所发布全新“智信”可信行业数据空间,共促数字金融创新发展!
由中国计算机学会(CCF)主办,CCF数字金融分会、同济大学、上海立信会计金融学院联合承办,金智塔科技作为金牌合作单位的数字金融领域年度巅峰盛会——首届CCF中国数字金融大会于2024年12月7日在上海成功举办。中国工程院院士蒋昌俊任大会主席,…...
基于单片机的语音识别自动避障小车(论文+源码)
1.系统设计 此次基于单片机的语音识别自动避障小车,以STC89C52单片机作为系统的主控制器,利用超声波模块来实现小车与障碍物距离的测量并通过LCD液晶显示,当距离低于阈值时会通过WT588语音模块进行报警提示,并且小车会后退来躲避…...
使用layui的table提示Could not parse as expression(踩坑记录)
踩坑记录 报错图如下 原因: 原来代码是下图这样 上下俩中括号都是连在一起的,可能导致解析问题 改成如下图这样 重新启动项目,运行正常!...
EF Code 多对多表关系建设和Linq 知识点
自引用组织结构树,比如部门、组织 除了根节点,其他节点都有一个父节点,也包含多个子节点,那么在定义表结构时,既要申明父表的关系,也要申明子表的关系 EF Code 多对多 builder.ToTable("T_Student&…...
Maven 的下载
目录 1、Maven 官方地址2、下载3、解压4、配置本地仓库 1、Maven 官方地址 https://maven.apache.org/ 2、下载 3、解压 将下载的压缩包解压到任意位置 4、配置本地仓库 在 Maven 的安装目录下新建文件夹,用来当作 Maven 的本地仓库 进入 conf 目录下ÿ…...
VPN模式
拓扑结构 实验图: 路由器router 配置 DHCP配置 需要右键激活 路由器项配置网关 dns项配置ip DNS服务配置 正向区域 选择不允许动态更新 反向区域 创建主机 正向 验证是否创建成功 反向查找区域 输入网段 使用默认名称---不允许动态更新 KALI机的验证 web服务…...
LeetCode 热题 100-两数之和(简单)
1. 两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。 你可以按任意顺序返回答案。…...
【C语言】拆解C语言的编译过程
前言 学习C语言的过程中,涉及到各种各样的关键词,在我们点击编译的时候,都会做什么呢?让我们来拆解一下 C语言的编译过程 C语言的编译过程包括预处理、编译、汇编和链接四个主要步骤。每个步骤都有其特定的任务和输出文件类型&am…...
RabbitMQ中的Work Queues模式
在现代分布式系统中,消息队列(Message Queue)是实现异步通信和解耦系统的关键组件之一。RabbitMQ 是一个广泛使用的开源消息代理软件,支持多种消息传递模式。其中,Work Queues(工作队列)模式是一…...
OpenCV圆形标定板检测算法findGrid原理详解
OpenCV的findGrid函数检测圆形标定板的流程如下: class CirclesGridClusterFinder {CirclesGridClusterFinder(const CirclesGridClusterFinder&); public:CirclesGridClusterFinder...
快速理解类的加载过程
当程序主动使用某个类时,如果该类还未加载到内存中,则系统会通过如下三个步骤来对该类进行初始化: 1.加载:将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区的运行时数据结构,然后生成一个…...
monorepo代码管理框架
1. 新建 vue3-component 文件夹 2. 运行pnpm init 3. pnpm i vue typescript 4. 新建.npmrc shamefully-hoisttrue link-workspace-packagestrue 5. ts文件配置 pnpm tsc --init 默认.bin路径下的tsc 6. 新建pnpm-workspace.yaml packages:- packages/** # all packages- p…...
LabVIEW实现蓝牙通信
目录 1、蓝牙通信原理 2、硬件环境部署 3、程序架构 4、前面板设计 5、程序框图设计 6、测试验证 本专栏以LabVIEW为开发平台,讲解物联网通信组网原理与开发方法,覆盖RS232、TCP、MQTT、蓝牙、Wi-Fi、NB-IoT等协议。 结合实际案例,展示如何利用LabVIEW和常用模块实现物联网系…...
R环境配置 以及Debug方法 (VSCode, conda, 远程R)
生物信息学中的R环境配置 以及Debug方法 开始设置1、建议使用VSCode conda 远程R2、 VSCode配置安装插件安装好插件后,远程设置链接成功后,设置项目 3、 linux conda 和 远程R配置4、VScode 远程访问R环境下面配置远程R 5、开始Debug新建个R文件&#…...
ComfyUI 与 Stable Diffusion WebUI 的优缺点比较
ComfyUI与Stable Diffusion WebUI都是AI绘画领域比较知名两款产品,两者存在诸多差异,本篇就带你熟悉二者的优劣,方便自己做出决策。 界面与操作 ComfyUI:界面简洁直观,通过节点和连线的方式构建工作流,用…...
Ubuntu 系统下安装 Nginx
一、Nginx是什么 是一个高性能的 HTTP 和反向代理 web 服务器,同时也提供了 IMAP/POP3/SMTP 服务。 是一款轻量级的 Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少&…...
【Qt】drawText字体大小问题探究
背景 软件的一个功能是: 打开图片在图片上绘制序号,序号的样式是圆圈内包含数字将带有序号的图片打印出来 实现思路也很简单,在屏幕上显示时重写paintEvent函数,利用QPainter完成图片和序号的绘制。打印时只需要将QPainter对应…...
视频汇聚平台:Liveweb视频流媒体平台视频监控系统解决方案
数字化技术在安防领域的广泛应用已经成为公安等重要执法部门的重要趋势,主要得益于无线网络通信技术和计算机技术的快速进步。传统的视频监控系统存在诸多局限,例如只能进行现场监视,报警信息传输简单,无法远距离传输视频信号&…...
Android开发中有关MediaPlayer 播放.mp3文件使用之一
我们在项目中,经常会添加一个简单的语音提示:我们通常会选择MediaPlayer播放SD文件中的.MP3文件或者存到assets下的.mp3文件。正常使用流程如下: 一、播放assets下的.mp3文件 根据assets获取需要播放的文件名 getApplicationContext().getAs…...
Leetcode经典题11--加油站
题目描述 在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。 给定两个整数数组 gas 和…...
23种设计模式之状态模式
目录 1. 简介2. 代码2.1 State (定义抽象状态接口)2.2 StartState (实现具体状态类)2.3 EndState (实现具体状态类)2.4 Context (定义上下文类)2.5 Test (测试类…...