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…...
OpenClaw学术利器:Phi-3-vision-128k自动批改作业与生成错题集
OpenClaw学术利器:Phi-3-vision-128k自动批改作业与生成错题集 1. 为什么需要自动化作业批改系统 作为一名经常需要批改大量作业的教育工作者,我深知手工批改的痛点。每次面对堆积如山的作业本,不仅耗时费力,还难以系统性地记录…...
2026简历模板服务商推荐排行 最新口碑榜 AI智能/高性价比
一、摘要据易观分析2026年行业报告显示,国内简历模板服务市场规模同比增长38%,但市场集中度较低,近40%的服务商存在模板更新滞后、服务响应不及时等问题;80%的求职者表示,优质简历模板能提升50%以上的面试邀约率&#…...
运维工具汇总
一、远程工具列表 1. MobaXterm site: MobaXterm隧道使用_mobaxterm怎么读-CSDN博客 二、httpclient 1. small:https://zhuanlan.zhihu.com/p/701243358 2.small2: 客户端下载 | Reqable API抓包调试 API测试一站式工具 small2: https://reqable.com/zh-CN/download/ …...
慕尼黑工业大学突破:让AI医生像真正的放射科医生一样诊断病情
在传统的医学诊断中,放射科医生需要像侦探一样工作——他们不是简单地看一张X光片或CT图像就下结论,而是要仔细翻阅整套医学影像资料,在不同的切片之间寻找线索,调整显示设置来看得更清楚,有时还需要使用专业工具进行测…...
discuz所有下载版本和升级工具,2.0版本
此文章仅作参考,已无效,移步到3.0版本 下载版本: !!!升级UCenter和升级工具使用(都在里面)Discuz! X3.2 - X3.4 升级至 Discuz! X3.5 详细教程 - 程序发布 - Powered by Discuz! …...
AI人脸隐私卫士企业应用:会议合影自动脱敏合规方案
AI人脸隐私卫士企业应用:会议合影自动脱敏合规方案 关键词:企业隐私合规、会议合影脱敏、人脸自动打码、MediaPipe、本地离线处理、数据安全、GDPR、个人信息保护 摘要:在企业日常运营中,会议、团建、培训等活动产生的合影照片&…...
Magisk+EdXposed+抹机王 组合安装避坑指南:从环境配置到权限优化
1. 环境准备:搭建稳定的测试平台 第一次接触MagiskEdXposed抹机王组合的朋友,最容易在环境配置环节翻车。我见过太多人因为基础环境没搭好,导致后续步骤全盘崩溃的情况。这里分享一个经过20设备验证的稳定方案:Win10系统雷电模拟…...
Windows下TensorFlow CPU加速终极方案:AVX2指令集优化版安装指南
Windows平台TensorFlow CPU性能飞跃:AVX2指令集优化实战手册 当你在PyCharm中运行TensorFlow代码时,是否见过这样的警告:"Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2"?…...
AnyLogic-Pypeline:打破仿真与AI壁垒的智能集成方案
AnyLogic-Pypeline:打破仿真与AI壁垒的智能集成方案 【免费下载链接】AnyLogic-Pypeline A custom AnyLogic library for running Python inside an AnyLogic model (Java) 项目地址: https://gitcode.com/gh_mirrors/an/AnyLogic-Pypeline 还在为AnyLogic与…...
R语言中的loess函数:从原理到实战时序数据分析
1. 理解loess回归:从数学原理到生活场景 第一次接触loess函数时,我盯着金融数据里那些弯弯曲曲的折线图发愁——传统的线性回归画出来的直线根本抓不住股价的波动规律。这就像用直尺画蒙娜丽莎的微笑,技术没错,但完全不对味。loes…...
