【ESP32+MicroPython】硬件控制基础
ESP32是一款功能强大的微控制器,具有多种硬件接口。本文以“ESP32硬件控制”为主题,逐步介绍GPIO(通用输入输出)、PWM(脉宽调制)、ADC(模数转换)等功能的原理与实现,并结合实际硬件进行演示,包括LED灯、按钮、电阻和DS18B20温度传感器等的应用。通过本教程,你将能够掌握ESP32的基本硬件控制技能,并用MicroPython编写控制程序。
GPIO(通用输入输出)
GPIO基础知识
GPIO(General Purpose Input Output)是ESP32控制外部设备的主要方式。GPIO引脚可以设置为输入模式或输出模式,以接收信号或控制设备。
- 输入模式:用于检测按钮等设备的状态。
- 输出模式:用于控制LED、继电器等设备的状态。
GPIO基本操作
硬件准备
- ESP32开发板
- LED灯(1个)
- 按钮(1个)
- 电阻(330欧姆)
电路连接
- 将LED的正极(长引脚)连接到ESP32的GPIO 2,负极连接到电阻后再接地(GND)。
- 将按钮一端接到GPIO 4,另一端接地(GND)。
实现LED点亮与按钮输入控制
from machine import Pin
import time# 初始化LED和按钮引脚
led = Pin(2, Pin.OUT) # 将GPIO 2设置为输出,用于控制LED
button = Pin(4, Pin.IN) # 将GPIO 4设置为输入,用于检测按钮状态while True:if button.value() == 0: # 检测按钮是否按下led.on() # 按下时点亮LEDelse:led.off() # 松开时熄灭LEDtime.sleep(0.1)
- Pin初始化:通过
Pin(2, Pin.OUT)将GPIO 2设置为输出,用于控制LED;GPIO 4设置为输入,用于检测按钮。 - 循环检测按钮状态:每次检测按钮状态,按下时点亮LED,松开时熄灭。
PWM(脉宽调制)
PWM(Pulse Width Modulation)通过调整信号高电平的时间占整个周期的比例,控制LED亮度、电机转速等。
PWM原理
PWM的两个主要参数:
- 频率:信号变化速度。
- 占空比:高电平持续时间占总周期的比例,控制输出强度。
PWM调节LED亮度
硬件准备
- ESP32开发板
- LED灯(1个)
- 电阻(330欧姆)
电路连接
将LED的正极连接到ESP32的GPIO 2,负极连接到330欧姆电阻后接地(GND)。
使用PWM调节LED亮度
from machine import Pin, PWM
import time# 初始化PWM,频率设为1000Hz
led = PWM(Pin(2), freq=1000)# 逐步调节亮度
while True:for duty in range(0, 1024): # 逐渐增加亮度led.duty(duty)time.sleep(0.01)for duty in range(1023, -1, -1): # 逐渐减小亮度led.duty(duty)time.sleep(0.01)
- PWM初始化:
PWM(Pin(2), freq=1000)将GPIO 2设为PWM输出,频率为1000Hz。 - 循环调节占空比:通过
led.duty(duty)控制LED亮度,占空比增大,亮度增加;减小则亮度减弱。
ADC(模数转换)
ADC(Analog to Digital Converter)用于将模拟信号转换为数字信号。ESP32集成了ADC模块,能读取如温度传感器、光线传感器等模拟传感器的信号。
ADC工作原理
ADC将输入电压(通常在0V至VCC之间)转换为数值。ESP32的ADC转换值范围在0至4095之间,0代表0V,4095代表最大电压。
ADC实现实例
硬件准备
- ESP32开发板
- 模拟传感器(如光敏电阻)
- 电阻(10k欧姆)
电路连接
将光敏电阻和10k欧姆电阻串联成一个分压电路,光敏电阻一端接3.3V,另一端连接电阻和ADC引脚(如GPIO 34),然后接地(GND)。
代码实现:读取光线强度
from machine import ADC, Pin
import time# 初始化ADC
adc = ADC(Pin(34)) # 创建ADC对象
adc.atten(ADC.ATTN_11DB) # 设置量程,最大输入电压约为3.3V
adc.width(ADC.WIDTH_12BIT) # 设置分辨率为12位,返回0到4095的值while True:light_intensity = adc.read() # 读取模拟信号print('光线强度:', light_intensity)time.sleep(1)
- ADC初始化:使用
ADC(Pin(34))将GPIO 34配置为ADC输入引脚。 - 设置ADC量程:通过
adc.atten(ADC.ATTN_11DB)设置量程,使最大输入电压接近3.3V。 - 读取ADC值:
adc.read()返回一个介于0到4095的数值,表示当前光线强度。
综合应用:传感器数据的PWM输出
通过综合使用ADC和PWM,可以将传感器的模拟信号用于控制LED亮度,实现动态反馈。例如,根据光线强度控制LED亮度。
硬件连接
- 将光敏电阻电路接到ADC输入(GPIO 34)
- 将LED接到PWM输出(GPIO 2)
综合代码实现
from machine import ADC, Pin, PWM
import time# 初始化ADC和PWM
adc = ADC(Pin(34))
adc.atten(ADC.ATTN_11DB)
adc.width(ADC.WIDTH_12BIT)led = PWM(Pin(2), freq=1000)while True:light_intensity = adc.read() # 读取光线强度duty_cycle = int(light_intensity / 4095 * 1023) # 映射到PWM占空比led.duty(duty_cycle) # 调整LED亮度print('光线强度:', light_intensity, 'PWM占空比:', duty_cycle)time.sleep(0.1)
- 传感器读值映射:将ADC读数(0至4095)映射为PWM占空比(0至1023)。
- 动态控制:根据光线强度自动调节LED亮度,实现自动光照反馈。
总结
通过本教程,你已学习了ESP32的硬件控制基础,包括GPIO、PWM和ADC的使用。熟悉这些功能后,你可以轻松实现传感器数据采集、控制电机和LED等硬件操作。
相关文章:
【ESP32+MicroPython】硬件控制基础
ESP32是一款功能强大的微控制器,具有多种硬件接口。本文以“ESP32硬件控制”为主题,逐步介绍GPIO(通用输入输出)、PWM(脉宽调制)、ADC(模数转换)等功能的原理与实现,并结…...
Python学习从0到1 day26 第三阶段 Spark ① 数据输入
要学会 剥落旧痂 然后 循此新生 —— 24.11.8 一、Spark是什么 定义: Apache Spark 是用于大规模数据处理的统一分析引擎 简单来说,Spark是一款分布式的计算框架,用于调度成百上千的服务器集群,计算TB、PB乃至EB级别的海量数据…...
kafka消费者的消费分区策略有哪些,默认是哪个?
Kafka消费者的分区分配策略主要有以下几种,分别决定了如何将多个分区分配给消费者: 1. Range(范围分配) 描述:将分区连续地分配给消费者。每个消费者负责一段连续的分区。如果有多个消费者,那么消费者会按…...
前端常用时间操作汇总
(1)获取中国标准时间: let now new Date(); // Thu Nov 14 2024 17:13:49 GMT0800 (中国标准时间) (2)获取年份: let year now.getFullYear(); // 2024 (3)获取月份&…...
106. UE5 GAS RPG 使用MVVM
MVVM 是 Model-View-ViewModel的缩写,个人理解它和MVC很相似,有区别的地方在于,在MVC里,Controller会服务多个View,而MVVM里,每个View都拥有一个单独的ViewModel,所以ViewModel相当于精简版的Co…...
Elasticsearch中什么是倒排索引?
倒排索引(Inverted Index)是一种索引数据结构,它在信息检索系统中被广泛使用,特别是在全文搜索引擎中。倒排索引允许系统快速检索包含给定单词的文档列表。它是文档内容(如文本)与其存储位置之间的映射&…...
深度学习:AT Decoder 详解
AT Decoder 详解 在序列到序列的模型架构中,自回归解码器(Autoregressive Translator, AT Decoder)是一种核心组件,其设计目标是确保生成的序列在语义和语法上的连贯性与准确性。自回归解码器通过逐步、依赖前一输出来生成新的输…...
pythons工具——图像的随机增强变换(只是变换了图像,可用于分类训练数据的增强)
从文件夹中随机选择一定数量的图像,然后对每个选定的图像进行一次随机的数据增强变换。 import os import random import cv2 import numpy as np from PIL import Image, ImageEnhance, ImageOps# 定义各种数据增强方法 def random_rotate(image, angle_range(-30…...
C++中volatile限定符详解
volatile是 C 和 C 中的一个类型限定符,它用于告诉编译器被修饰的变量具有特殊的属性,编译器在对该变量进行优化时需要特殊对待。以下是volatile限定符的主要作用: 1. 防止优化 内存访问顺序:在多线程环境或者与硬件交互的程序中…...
如何关闭Python解释器
方法1:采用sys.exit(0)正常终止程序,从图中可以看到,程序终止后shell运行不受影响。 方法2:采用os._exit(0)关闭整个shell,从图中看到,调用sys._exit(0)后整个shell都重启了(RESTART Shell&…...
《TCP/IP网络编程》学习笔记 | Chapter 9:套接字的多种可选项
《TCP/IP网络编程》学习笔记 | Chapter 9:套接字的多种可选项 《TCP/IP网络编程》学习笔记 | Chapter 9:套接字的多种可选项套接字可选项和 I/O 缓冲大小套接字多种可选项getsockopt & setsockoptSO_SNDBUF & SO_RCVBUF SO_REUSEADDR发生地址绑定…...
渗透测试---网络基础之HTTP协议与内外网划分
声明:学习素材来自b站up【泷羽Sec】,侵删,若阅读过程中有相关方面的不足,还请指正,本文只做相关技术分享,切莫从事违法等相关行为,本人一律不承担一切后果 目录 一、HTTP协议各版本介绍 二、HTTP请求的方…...
15分钟学 Go 第 45 天 : 使用Docker容器
第45天:使用Docker容器 目标 在本节中,我们将深入了解Docker及其基本用法,掌握如何使用Docker容器来简化开发和部署流程。 背景知识 Docker是一个开源平台,用于开发、运输和运行应用程序。它使我们能够使用容器技术将应用程序…...
DriveLM 论文学习
论文链接:https://arxiv.org/pdf/2312.14150 代码链接:https://github.com/OpenDriveLab/DriveLM 解决了什么问题? 当前,自动驾驶方案的性能仍然不足。一个必要条件就是泛化能力,需要模型能处理未经训练的场景或不熟…...
YoloV10改进策略:上采样改进|CARAFE,轻量级上采样|即插即用|附改进方法+代码
论文介绍 CARAFE模块概述:本文介绍了一种名为CARAFE(Content-Aware ReAssembly of FEatures)的模块,它是一种用于特征上采样的新方法。应用场景:CARAFE模块旨在改进图像处理和计算机视觉任务中的上采样过程࿰…...
光模块基础知识
1. 光模块的封装 光模块是光收发模块的简称,主要根据不同的外型来区分,而在同一外型中,又有着多种规格;在数据通信领域,最常见的光模块(根据外型区分)分别是SFF、GBIC、SFP、和XFP、QSFP 、XEN…...
【go从零单排】Closing Channels通道关闭、Range over Channels
🌈Don’t worry , just coding! 内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。 📗概念 在 Go 语言中,通道(channel)的关闭是一个重要…...
初始JavaEE篇 —— 文件操作与IO
找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程程(ಥ_ಥ)-CSDN博客 所属专栏:JavaEE 目录 文件介绍 Java标准库中提供操作文件的类 文件系统操作 File类的介绍 File类的使用 文件内容操作 二进制文件的读写操作…...
GitLab实现 HTTP 访问和 SMTP 邮件发送
GitLab实现 HTTP 访问和 SMTP 邮件发送 本教程详细记录了如何配置 SMTP 邮件通知、实现外网 HTTP 访问,并分享在配置过程中遇到的问题及解决方法。 一、准备工作 安装 Docker:确保在 Synology NAS 上安装 Docker 应用。下载 GitLab 镜像:在…...
HarmonyOS ArkTS 下拉列表组件
Entry Component struct Index {defaultValue: string 下拉列表;// 定义选项数组,包含 value 和可选的 labeloptions: Array<SelectOption> [{ value: aaa },{ value: bbb },{ value: ccc },{ value: ddd },{ value: eee },{ value: fff },{ value: ggg },{…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...
Ubuntu系统多网卡多相机IP设置方法
目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机,交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息,系统版本:Ubuntu22.04.5 LTS;内核版本…...
