MicroPython 开发避坑:用 Signal 类解决不同电路的电平兼容问题

推文

在下面实验中,我们需要将 风雅一号板-七彩触控扩展板 插入到 风雅一号板-通用兼容扩展板 上:

在以下例程中,我们通过 Signal 类控制两个不同电路连接的 LED 灯,其中 GP17 连接的 LED 灯负极连接到了地,对应 GPIO 输出高电平点亮;而 GP16 连接的 LED 灯正极连接到了 +3V3,对应 GPIO 输出低电平点亮。我们通过 Signal 类来包装现有的 Pin 对象,最终实现通过相同方法控制 LED 灯的点亮。

代码如下:

C++ 复制代码
# Python env   : MicroPython v1.23.0
# -*- coding: utf-8 -*-        
# @Time    : 2024/6/21 上午10:32   
# @Author  : 李清水            
# @File    : main.py       
# @Description : Signal类实验,完成对两个不同电路连接的LED进行控制

# ======================================== 导入相关模块 ========================================

# 硬件相关的模块
from machine import Pin, Signal
# 时间相关的模块
import time

# ======================================== 全局变量 ============================================

# ======================================== 功能函数 ============================================

# ======================================== 自定义类 ============================================

# ======================================== 初始化配置 ==========================================

# 上电延时
time.sleep(3)
# 打印调试信息
print("FreakStudio : Signal Class Test")

# 设置GPIO 17为LED1(共阳极)输出引脚,下拉电阻使能
LED1_Pin = Pin(17, Pin.OUT, Pin.PULL_DOWN)
# 设置GPIO 16为LED2(共阴级)输出引脚,下拉电阻使能
LED2_Pin = Pin(16, Pin.OUT, Pin.PULL_DOWN)

# ========================================  主程序  ============================================

# 不使用Signal类,直接使用Pin类时需要考虑外部电路的差异,输入不同电平来点亮LED灯
# LED1输入高电平点亮
LED1_Pin.value(1)
# LED2输入低电平点亮
LED2_Pin.value(0)

# 使用Signal类包装现有的Pin对象
# 对于LED1_Pin不使用反转,高电平-1、低电平-0
LED1 = Signal(LED1_Pin, invert=False)
# 对于LED2_Pin使用反转,高电平-0、低电平-1
LED2 = Signal(LED2_Pin, invert=True)

# 现在可以使用一个方法进行两个LED灯的点亮
LED1.on()
LED2.on()

# 等待5秒
time.sleep(5)

# 获取信号状态
print("LED 1 value :", LED1.value())
print("LED 2 value :", LED2.value())

# 获取引脚状态
print("LED1_Pin value :", LED1_Pin.value())
print("LED2_Pin value :", LED2_Pin.value())

# 关闭两个LED灯
LED1.off()
LED2.off()

# 等待1秒
time.sleep(1)

# 获取信号状态
print("LED 1 value :", LED1.value())
print("LED 2 value :", LED2.value())

# 获取引脚状态
print("LED1_Pin value :", LED1_Pin.value())
print("LED2_Pin value :", LED2_Pin.value())

烧录代码,打开终端,使用 mpremote 连接树莓派 Pico,可以看到输出如下:

我们可以看到 风雅一号板-七彩触控扩展板 上的 HIGHLED 和 LOWLED 先同时点亮,之后同时关闭:

相关推荐
小李不想当小白5 小时前
SPI通信外设与W25Q64 (硬件SPI)(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
Zwawa9 小时前
从 printf 到曲线:把数据送上 VOFA+
c语言·单片机·嵌入式
LCG米1 天前
STM32 ADC多通道DMA定时器触发实测:TRGO触发链、采样率精确控制与乒乓缓冲落地
stm32·单片机·嵌入式·adc
LCG米2 天前
STM32硬件SPI驱动SSD1306 OLED实测:上电黑屏排查、页寻址模式与取模扫描方向陷阱
stm32·单片机·嵌入式硬件·嵌入式
探鸽小钛2 天前
4G 终端 ES8311 - 挂断一次,下次说话就没声了之解决办法
物联网·音视频·嵌入式·esp32·webrtc
Zwawa3 天前
编译器工具链:GCC、Clang、MSVC、ICC、armclang
c语言·嵌入式·编译器
用户8351414049493 天前
Makefile从零写起:每条规则在干什么
嵌入式
pipixia200333 天前
C++继承面试四连问:内存叠加、私有继承、sizeof、权限重映射
c++·面试·嵌入式·继承·面向对象·对象模型
shimly1234564 天前
(undone) 野火嵌入式 (1) 打开例程工程
嵌入式
Zwawa4 天前
一只按键不只“按下”:短按、长按和连按如何共存
c语言·单片机·嵌入式