ESP 32控制无刷电机2
import machine
import time
import socket
import network
from machine import I2C, Pin, ADC
def start_ap():
"""
启动ESP32的AP模式
"""
ap = network.WLAN(network.AP_IF)
ap.active(True)
ssid = 'ESP32_APTest'
password = '12345678'
ap.config(essid=ssid, password=password)
# 设置其他可选参数
ap.config(authmode=3) # WPA2-PSK加密
ap.config(max_clients=10) # 最大允许客户端连接数
print('AP模式已启动')
print('SSID:', ssid)
print('IP地址:', ap.ifconfig()[0])
def start_udp():
"""
初始化UDP套接字
"""
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_socket.bind(("0.0.0.0", 7788)) # 绑定端口7788
udp_socket.setblocking(False) # 设置为非阻塞模式
print("UDP套接字已启动,端口:7788")
return udp_socket
def read_voltage(adc, R1=10000, R2=4700, samples=100):
"""
读取ADC平均值并计算分压后的电压值
- 参数:
- adc: ADC对象
- R1: 分压电阻1 (默认10kΩ)
- R2: 分压电阻2 (默认4.7kΩ)
- samples: 采样数量 (默认100)
- 返回值: 测量电压(单位: 伏)
"""
try:
total = 0
for _ in range(samples):
total += adc.read()
adc_value = total / samples # 平均ADC值
divider_ratio = (R1 + R2) / R2 # 分压比
voltage = (adc_value * 3.3 / 4095) * divider_ratio # 转换为实际电压
return round(voltage, 2)
except Exception as e:
print("读取电压时出错:", e)
return 0.0
def main():
"""
主程序
"""
# 初始化ADC引脚
adc = ADC(Pin(34)) # 使用GPIO34(ADC1通道6)
adc.atten(ADC.ATTN_11DB) # 设置衰减范围为11dB(量程0-3.6V)
# 配置PWM参数
pwm_pin = 14 # 根据实际硬件连接情况调整引脚编号
pwm_freq = 500 # PWM频率设置为500Hz
pwm = machine.PWM(machine.Pin(pwm_pin), freq=pwm_freq, duty=0)
# 测试PWM输出
pwm.duty(1023)
time.sleep(2)
pwm.duty(400)
time.sleep(2)
# 启动AP模式和UDP套接字
start_ap()
udp_socket = start_udp()
print("系统已启动,等待UDP数据...")
# 初始化计时器
last_print_time = time.time()
while True:
try:
# 尝试接收UDP数据(非阻塞)
try:
recv_data, sender_info = udp_socket.recvfrom(1024) # 缓冲区大小为1024字节
recv_data = recv_data.decode('utf-8').strip() # 解码为字符串并去掉多余空白
print(f"接收到数据: {recv_data} 来自 {sender_info}")
# 读取电压
# vbat = read_voltage(adc) + 0.55 # 补偿+0.55V
# print(f"当前电压: {vbat} V")
# 判断电压范围
# if vbat > 7.7:
if recv_data.startswith('D') or recv_data.startswith('C'):
pwm.duty(0) # 关闭PWM输出
print("指令接收,PWM关闭")
else:
# 提取数值并设置PWM
if len(recv_data) >= 5:
raw_value_str = recv_data[1:5] # 截取数值部分
try:
raw_value = int(raw_value_str)
value = raw_value // 2
if 500 <= value <= 1000:
pwm.duty(value)
print(f"设置PWM占空比为: {value}")
else:
print("接收到的数值转换后不在500到1000的范围内")
except ValueError:
print("无法解析接收到的数值部分")
else:
print("接收到的数据长度不足")
# else:
# pwm.duty(0) # 低电压时关闭PWM
# print("电压过低,PWM关闭")
except OSError:
# 如果没有数据到达,继续执行
pass
except Exception as e:
print("主循环中发生错误:", e)
# 每秒打印一次电压值
current_time = time.time()
if current_time - last_print_time >= 1:
vbat = read_voltage(adc) + 0.55 # 补偿+0.55V
print(f"abc当前电压: {vbat} V")
if vbat < 7.0:
pwm.duty(0) # 低电压时关闭PWM
last_print_time = current_time
time.sleep(0.1) # 避免循环过快
if __name__ == "__main__":
main()
相关文章:
ESP 32控制无刷电机2
import machine import time import socket import network from machine import I2C, Pin, ADC def start_ap(): """ 启动ESP32的AP模式 """ ap network.WLAN(network.AP_IF) ap.active(True) ssid ESP32_APTest …...
揭开人工智能中 Tokens 的神秘面纱
揭开人工智能中 Tokens 的神秘面纱 在人工智能,尤其是自然语言处理(NLP)领域,"tokens" 是一个频繁出现且至关重要的概念。对于理解语言模型如何处理和理解人类语言,tokens 起着基础性的作用。那么ÿ…...
萌新学 Python 之 random 函数
random 模块:主要用来生成随机数 先导入包:import random randint(a, b),生成 [a, b] 之间的整数,包含边界 a 和 b,a 和 b 为整数 random(),生成的是 [0,1) 之间的浮点数,包含 0 不包含 1 r…...
2-2linux系统IO
文章目录 linux系统文件io1 open /close1.1 open1.2 close1.3 示例1.3.1 打开已经存在的文件 2 read/write2.1 read2.2 write使用 遗留问题:新创建的文件权限很奇怪3 lseek3.1 文件指针的移动3.2 文件拓展 perror函数 linux系统文件io 系统函数是系统专有的函数&am…...

周边游平台设计与实现(代码+数据库+LW)
摘 要 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对旅游信息管理的提升,…...

视频批量分段工具
参考原文:视频批量分段工具 选择视频文件 当您启动这款视频批量分段工具程序后,有两种便捷的方式来选择要处理的视频文件。其一,您可以点击程序界面中的 “文件” 菜单,在下拉选项里找到 “选择视频文件” 按钮并点击;…...
Android -- 使用Sharepreference保存List储存失败,原因是包含Bitmap,drawable等类型数据
1.报错信息如下: class android.content.res.ColorStateList declares multiple JSON fields named mChangingConfigurations 2.Bean类属性如下: data class AppInfoBean( val appName: String?, val appIcon: Drawable, val appPackage: String?,…...

java项目之基于ssm的图书馆书库管理系统(源码+文档)
风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的图书馆书库管理系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 该系统可以实现图书信息管理…...
编写一个程序,输入一个数字并输出其阶乘(Python版)
编写一个程序,输入一个数字并输出其阶乘 要计算一个数字的阶乘,可以编写一个简单的 Python 程序,使用循环或者递归来实现: 1. 使用 for 循环计算阶乘 # 输入一个数字 num int(input("请输入一个数字: "))# 初始化阶乘结果 facto…...
dify基础之prompts
摘要:在大型语言模型(LLM)应用中,Prompt(提示词)是连接用户意图与模型输出的核心工具。本文从概念、组成、设计原则到实践案例,系统讲解如何通过Prompt解锁LLM的潜能,提升生成内容的…...
实践教程:使用DeepSeek实现PDF转Word的高效方案
🎈Deepseek推荐工具 PDF文件因其跨平台、格式稳定的特性被广泛使用,但在内容编辑场景中,用户常需将PDF转换为可编辑的Word文档。传统的付费工具(如Adobe Acrobat)或在线转换平台存在成本高、隐私风险等问题。本文将使…...

网络安全审计员
在当今数字化时代,随着信息技术的迅猛发展,网络安全问题日益凸显,成为各行各业不容忽视的重要议题。特别是对于企业、政府机构等组织而言,网络安全不仅关乎数据资产的安全,更与组织的声誉、客户信任乃至法律法规的遵从…...
算法-二叉树篇13-路径总和
路径总和 力扣题目链接 题目描述 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回…...

如何设计一个短链系统?
短链系统设计的关键要点: 系统功能实现 短链生成:接收长链接,先检查是否已有对应短链,存在则直接返回。否则,使用分布式 ID 生成器(如号段模式、SnowFlake 算法、数据库自增 ID、Redis 自增等)生成唯一 ID,或通过哈希算法(如 MurmurHash)处理长链接得到哈希值。再将生…...

医疗行业电脑终端如何防病毒——火绒企业版杀毒软件
医疗物联网技术广泛应用,使得医院网络空间中增加了诸多新型终端设备。这些设备类型多样、型号各异,风险暴露面积大。火绒安全对医疗机构终端安全出现的问题、不足、需求等,提出整体解决方案。 医疗行业终端安全防护痛点 系统老旧 医院、区…...

云平台DeepSeek满血版:引领AI推理革新,开启智慧新时代
引言:人工智能的未来——云平台的卓越突破 在当今科技飞速发展的时代,人工智能(AI)技术正深刻地改变着我们生活与工作方式的方方面面。作为AI领域的创新者与领航者,云平台始终走在技术前沿,凭借无穷的热情…...
Java进阶——数据类型深入解析
Java数据类型深入解析 本文主要介绍 Java 数据类型的相关知识,包括8 种基本类型、默认值、字面量表示、自动装箱与拆箱、类型转换规则(隐式转换、强制转换)、浮点型精度问题、字符与字符串、引用类型比较与常量池、数值溢出与处理、类型推断等…...

R语言+AI提示词:贝叶斯广义线性混合效应模型GLMM生物学Meta分析
全文链接:https://tecdat.cn/?p40797 本文旨在帮助0基础或只有简单编程基础的研究学者,通过 AI 的提示词工程,使用 R 语言完成元分析,包括数据处理、模型构建、评估以及结果解读等步骤(点击文末“阅读原文”获取完整代…...

深度解析 ANSI X9.31 TR-31:金融行业密钥管理核心标准20250228
深度解析 ANSI X9.31 TR-31:金融行业密钥管理核心标准 在当今数字化金融时代,信息安全至关重要,而密钥管理则是保障金融数据安全的核心环节。ANSI X9.31 TR-31作为金融行业密钥管理的关键标准,为对称密钥的全生命周期管理提供了坚…...

视频字幕识别和翻译
下载的视频很多不是汉语的,我们需要用剪映将语音识别出来作为字幕压制到视频中去。 剪映6.0以后语音识别需要收费,但是低版本还是没有问题。 如果想要非汉语字幕转成中文,剪映低版本不提供这样功能。但是,用剪映导出识别字幕&am…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...

Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...

《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...