【雕爷学编程】MicroPython手册之 ESP32 电容式触摸

在这里插入图片描述
MicroPython是为了在嵌入式系统中运行Python 3编程语言而设计的轻量级版本解释器。与常规Python相比,MicroPython解释器体积小(仅100KB左右),通过编译成二进制Executable文件运行,执行效率较高。它使用了轻量级的垃圾回收机制并移除了大部分Python标准库,以适应资源限制的微控制器。

MicroPython主要特点包括:
1、语法和功能与标准Python兼容,易学易用。支持Python大多数核心语法。
2、对硬件直接访问和控制,像Arduino一样控制GPIO、I2C、SPI等。
3、强大的模块系统,提供文件系统、网络、图形界面等功能。
4、支持交叉编译生成高效的原生代码,速度比解释器快10-100倍。
5、代码量少,内存占用小,适合运行在MCU和内存小的开发板上。
6、开源许可,免费使用。Shell交互环境为开发测试提供便利。
7、内置I/O驱动支持大量微控制器平台,如ESP8266、ESP32、STM32、micro:bit、掌控板和PyBoard等。有活跃的社区。

MicroPython的应用场景包括:
1、为嵌入式产品快速构建原型和用户交互。
2、制作一些小型的可 programmable 硬件项目。
3、作为教育工具,帮助初学者学习Python和物联网编程。
4、构建智能设备固件,实现高级控制和云连接。
5、各种微控制器应用如物联网、嵌入式智能、机器人等。

使用MicroPython需要注意:
1、内存和Flash空间有限。
2、解释执行效率不如C语言。
3、部分库函数与标准版有差异。
4、针对平台优化语法,订正与标准Python的差异。
5、合理使用内存资源,避免频繁分配大内存块。
6、利用原生代码提升速度关键部位的性能。
7、适当使用抽象来封装底层硬件操作。

总体来说,MicroPython让Python进入了微控制器领域,是一项重要的创新,既降低了编程门槛,又提供了良好的硬件控制能力。非常适合各类物联网和智能硬件的开发。
在这里插入图片描述
ESP32 是一款功能丰富的微控制器,集成了 Wi-Fi 和蓝牙连接功能,适合物联网开发的强大而实惠的平台。ESP32 的主要特点有:

1、处理器:CPU:Xtensa 双核(或单核)32 位 LX6 微处理器,工作频率为 160 或 240 MHz,性能可达 600 DMIPS。超低功耗(ULP)协处理器。
2、内存:520 KiB RAM,448 KiB ROM。
3、无线连接:Wi-Fi:802.11 b/g/n。蓝牙:v4.2 BR/EDR 和 BLE。
4、外设:12 位 SAR ADC 最多支持 18 个通道,2 个 8 位 DAC,10 个触摸传感器,4 个 SPI,2 个 I2S,2 个 I2C,3 个 UART,SD/SDIO/MMC 主机控制器,SDIO/SPI 从设备控制器,以太网 MAC 接口,CAN 总线 2.0,红外远程控制器,电机 PWM,LED PWM 最多支持 16 通道。
4、安全性:硬件加速 AES、SHA-2、RSA、ECC、随机数生成器(RNG)等。
5、可靠性:工作温度范围为 –40°C 到 +125°C。具有动态电压调整和时钟门控等功能,可适应外部条件的变化和降低功耗。
6、灵活性:可作为独立系统运行应用程序或作为主机 MCU 的从设备,通过 SPI / SDIO 或 I2C / UART 接口提供 Wi-Fi 和蓝牙功能。具有高度集成的天线开关、RF balun、功率放大器、低噪声放大器、滤波器和电源管理模块等。

在这里插入图片描述
MicroPython 的 ESP32 电容式触摸是一种利用 ESP32 的内置电容式触摸传感器来实现人机交互的功能。电容式触摸传感器是一种基于电容变化原理的触摸检测设备,可以在不需要外部力的情况下,通过人体的接触来触发信号。

MicroPython 的 ESP32 电容式触摸的主要特点有:

支持多达 10 个电容式触摸通道,分别对应 GPIO4、GPIO2、GPIO15、GPIO13、GPIO12、GPIO14、GPIO27、GPIO33、GPIO32 和 GPIO0。
支持设置不同的阈值和滤波器,以适应不同的触摸条件和环境。
支持使用中断或轮询的方式来检测触摸事件,提高响应速度和灵活性。
支持与其他模块和功能结合,如 LED、PWM、ADC、DAC、音频等,实现丰富的交互效果。

MicroPython 的 ESP32 电容式触摸的应用场景有:

可以用于制作各种触摸按键、触摸开关、触摸滑块等简单的输入设备。
可以用于实现各种触摸控制、触摸调节、触摸选择等复杂的输入功能。
可以用于实现各种触摸反馈、触摸提示、触摸音效等有趣的输出效果。
可以用于创作各种触摸游戏、触摸艺术、触摸乐器等创意的交互作品。

MicroPython 的 ESP32 电容式触摸需要注意的事项有:

在连接电容式触摸传感器时,需要注意正确区分输入端和输出端,以及正确连接电源和地线。
在编写程序时,需要注意合理设置阈值和滤波器,以避免误触或漏触的情况。
在运行程序时,需要注意保护人体和设备,避免静电或过压的影响。

以下是 MicroPython 的 ESP32 电容式触摸的几个实际运用程序参考代码案例:

案例1:使用一个 GPIO 引脚作为电容式触摸通道,实现一个简单的开关控制 LED 灯的亮灭。

from machine import Pin, TouchPad # 引入 Pin 和 TouchPad 模块
from time import sleep # 引入 sleep 函数

led = Pin(12, Pin.OUT) # 创建一个 Pin 对象,指定引脚号为 12,并设置为输出模式
touch = TouchPad(Pin(4)) # 创建一个 TouchPad 对象,指定引脚号为 4
touch.config(500) # 设置电容式触摸通道的阈值为 500

while True: # 循环执行以下代码
    value = touch.read() # 读取电容式触摸通道的值
    print(value) # 打印该值
    if value < 500: # 如果该值小于阈值,说明检测到了触摸
        led.value(1) # 设置 LED 灯为亮
    else: # 否则
        led.value(0) # 设置 LED 灯为灭
    sleep(0.1) # 延时 0.1 秒

案例2:使用两个 GPIO 引脚作为电容式触摸通道,实现一个简单的音量控制功能,通过 JQ6500 MP3 模块播放音乐。

from machine import Pin, TouchPad, UART # 引入 Pin,TouchPad 和 UART 模块
from time import sleep # 引入 sleep 函数

uart = UART(2, 9600) # 创建一个 UART 对象,指定串口号为 2,并设置波特率为 9600
touch1 = TouchPad(Pin(2)) # 创建一个 TouchPad 对象,指定引脚号为 2
touch2 = TouchPad(Pin(15)) # 创建另一个 TouchPad 对象,指定引脚号为 15
touch1.config(500) # 设置电容式触摸通道 1 的阈值为 500
touch2.config(500) # 设置电容式触摸通道 2 的阈值为 500

volume = 15 # 定义一个变量 volume,用于存储音量值,初始值为 15
uart.write(b'\xAA\x13\x0F\xBB') # 通过串口向 JQ6500 MP3 模块发送指令,设置音量为 15

while True: # 循环执行以下代码
    value1 = touch1.read() # 读取电容式触摸通道 1 的值
    value2 = touch2.read() # 读取电容式触摸通道 2 的值
    print(value1, value2) # 打印这两个值
    if value1 < 500: # 如果通道 1 的值小于阈值,说明检测到了触摸
        volume += 1 # 音量值加一
        if volume > 30: # 如果音量值大于 30,将其限制在 30
            volume = 30
        uart.write(b'\xAA\x13' + bytes([volume]) + b'\xBB') # 通过串口向 JQ6500 MP3 模块发送指令,设置音量为 volume
        print('Volume up:', volume) # 打印音量增加的信息
        sleep(0.5) # 延时 0.5 秒,防止重复触发
    if value2 < 500: # 如果通道 2 的值小于阈值,说明检测到了触摸
        volume -= 1 # 音量值减一
        if volume < 0: # 如果音量值小于 0,将其限制在 0
            volume = 0
        uart.write(b'\xAA\x13' + bytes([volume]) + b'\xBB') # 通过串口向 JQ6500 MP3 模块发送指令,设置音量为 volume
        print('Volume down:', volume) # 打印音量减少的信息
        sleep(0.5) # 延时 0.5 秒,防止重复触发
    sleep(0.1) # 延时 0.1 秒

案例3:使用三个 GPIO 引脚作为电容式触摸通道,实现一个简单的颜色选择功能,通过 RGB LED 灯显示不同的颜色。

from machine import Pin, TouchPad, PWM # 引入 Pin,TouchPad 和 PWM 模块
from time import sleep # 引入 sleep 函数

led_r = PWM(Pin(12), freq=1000, duty=0) # 创建一个 PWM 对象,指定引脚号为 12,并设置频率为 1000 Hz 和占空比为 0,用于控制 LED 灯的红色通道
led_g = PWM(Pin(13), freq=1000, duty=0) # 创建一个 PWM 对象,指定引脚号为 13,并设置频率为 1000 Hz 和占空比为 0,用于控制 LED 灯的绿色通道
led_b = PWM(Pin(14), freq=1000, duty=0) # 创建一个 PWM 对象,指定引脚号为 14,并设置频率为 1000 Hz 和占空比为 0,用于控制 LED 灯的蓝色通道

touch_r = TouchPad(Pin(4)) # 创建一个 TouchPad 对象,指定引脚号为 4,用于检测红色通道的触摸
touch_g = TouchPad(Pin(15)) # 创建一个 TouchPad 对象,指定引脚号为 15,用于检测绿色通道的触摸
touch_b = TouchPad(Pin(33)) # 创建一个 TouchPad 对象,指定引脚号为 33,用于检测蓝色通道的触摸
touch_r.config(500) # 设置电容式触摸通道 R 的阈值为 500
touch_g.config(500) # 设置电容式触摸通道 G 的阈值为 500
touch_b.config(500) # 设置电容式触摸通道 B 的阈值为 500

while True: # 循环执行以下代码
    value_r = touch_r.read() # 读取电容式触摸通道 R 的值
    value_g = touch_g.read() # 读取电容式触摸通道 G 的值
    value_b = touch_b.read() # 读取电容式触摸通道 B 的值
    print(value_r, value_g, value_b) # 打印这三个值
    if value_r < 500: # 如果通道 R 的值小于阈值,说明检测到了触摸
        led_r.duty(1023) # 设置 LED 灯的红色通道的占空比为最大值,即亮度最高
    else: # 否则
        led_r.duty(0) # 设置 LED 灯的红色通道的占空比为最小值,即亮度最低
    if value_g < 500: # 如果通道 G 的值小于阈值,说明检测到了触摸
        led_g.duty(1023) # 设置 LED 灯的绿色通道的占空比为最大值,即亮度最高
    else: # 否则
        led_g.duty(0) # 设置 LED 灯的绿色通道的占空比为最小值,即亮度最低
    if value_b < 500: # 如果通道 B 的值小于阈值,说明检测到了触摸
        led_b.duty(1023) # 设置 LED 灯的蓝色通道的占空比为最大值,即亮度最高
    else: # 否则
        led_b.duty(0) # 设置 LED 灯的蓝色通道的占空比为最小值,即亮度最低
    sleep(0.1) # 延时 0.1 秒

案例4:使用电容式触摸检测按钮是否被按下

from machine import Pin, I2C
import time

# 配置I2C接口
i2c = I2C(scl=Pin(4), sda=Pin(5))

# 初始化电容式触摸传感器
touch_sensor = MicroBitTouchSensor(i2c)

while True:
    # 读取触摸状态
    touch_state = touch_sensor.read()

    # 如果触摸状态为按下,则执行相应操作
    if touch_state == "down":
        print("Button pressed!")
        time.sleep(1)
    elif touch_state == "up":
        print("Button released!")
        time.sleep(1)

案例5:使用电容式触摸检测滑动方向

from machine import Pin, I2C
import time

# 配置I2C接口
i2c = I2C(scl=Pin(4), sda=Pin(5))

# 初始化电容式触摸传感器
touch_sensor = MicroBitTouchSensor(i2c)

while True:
    # 读取触摸状态
    touch_state = touch_sensor.read()

    # 根据触摸状态确定滑动方向
    if touch_state == "down":
        print("Swipe down")
    elif touch_state == "up":
        print("Swipe up")
    else:
        print("No touch detected")
    time.sleep(1)

案例6:使用电容式触摸实现缩放功能

from machine import Pin, I2C, PWM
import time

# 配置I2C接口
i2c = I2C(scl=Pin(4), sda=Pin(5))

# 初始化电容式触摸传感器和PWM模块
touch_sensor = MicroBitTouchSensor(i2c)
pwm = PWM(Pin(18), freq=1000)

while True:
    # 读取触摸状态
    touch_state = touch_sensor.read()

    # 根据触摸状态调整屏幕亮度
    if touch_state == "down":
        pwm.duty(512)  # 增加亮度
    elif touch_state == "up":
        pwm.duty(0)  # 减小亮度
    else:
        pwm.duty(128)  # 保持当前亮度
    time.sleep(1)

案例7:触摸开关灯

from machine import TouchPad, Pin

touch_pad = TouchPad(Pin(14))  
led = Pin(2, Pin.OUT)

while True:
  if touch_pad.read() < 50:
    led.value(1)
  else:
    led.value(0)

这个示例使用触摸控制LED。

示例8:触摸音乐播放

from machine import TouchPad 
import audio

touch = TouchPad(Pin(14))
audio.set_volume(20)

while True:
  if touch.read() < 50:
    audio.play('music.mp3')

这个示例使用触摸控制音乐播放。

示例9:触摸画板

from machine import TouchPad
import ssd1306  

touch = TouchPad(Pin(14)) 
screen = ssd1306.SSD1306()

while True:
  x = touch.read()
  y = touch.read() 
  screen.pixel(x, y, 1) # 绘画点
  screen.show()

这个示例实现了一个简单的触摸绘制画板。这些示例展示了在ESP32上使用触摸的不同方式。

请特别注意,以上示例仅供参考,具体的使用方法可能因不同的硬件平台和MicroPython版本而有所差异。在实际编程中,你需要根据你所使用的硬件和具体需求进行适当的调整。

在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MicroPython-ESP32 是一个专门为 ESP32 设计的 MicroPython 库,它提供了许多 ESP32 的驱动程序和功能模块,可以方便地在 ESP32 上开发 MicroPython 项目。 MicroPython-ESP32 库包含了以下功能模块: - machine:提供了访问 GPIO、ADC、PWM、I2C、SPI、UART 等硬件资源的方法。 - network:提供了访问 WiFi、Ethernet 等网络资源的方法。 - time:提供了时间相关的方法,如获取当前时间、延时等。 - uos:提供了文件系统相关的方法,如创建文件、删除文件等。 - ujson:提供了 JSON 编码和解码的方法。 - urequests:提供了访问 HTTP 网络资源的方法。 - usocket:提供了访问 Socket 网络资源的方法。 - ustruct:提供了字节序列和 C 结构体之间转换的方法。 - utime:提供了时间相关的方法,如获取当前时间、延时等。 使用 MicroPython-ESP32 库很简单,只需要将库文件拷贝到 ESP32 上,并在 MicroPython 代码中引入需要的模块即可。例如,以下代码演示了如何使用 MicroPython-ESP32 库中的 machine 模块控制 ESP32 的 GPIO: ```python import machine # 配置GPIO 2为输出模式 p2 = machine.Pin(2, machine.Pin.OUT) # 将GPIO 2输出高电平 p2.value(1) # 将GPIO 2输出低电平 p2.value(0) ``` 需要注意的是,MicroPython-ESP32 库的使用需要先安装 MicroPython 固件。可以从 MicroPython 官方网站下载 ESP32MicroPython 固件,并使用 esptool.py 工具将固件烧录到 ESP32 上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驴友花雕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值