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

【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欧姆)
电路连接
  1. 将LED的正极(长引脚)连接到ESP32的GPIO 2,负极连接到电阻后再接地(GND)。
  2. 将按钮一端接到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模块旨在改进图像处理和计算机视觉任务中的上采样过程&#xff0…...

光模块基础知识

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 下拉列表;// 定义选项数组&#xff0c;包含 value 和可选的 labeloptions: Array<SelectOption> [{ value: aaa },{ value: bbb },{ value: ccc },{ value: ddd },{ value: eee },{ value: fff },{ value: ggg },{…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...