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 先同时点亮,之后同时关闭:

相关推荐
Zwawa6 小时前
把 AO 接回来:黑线和白底之间到底差了多少
c语言·单片机·嵌入式
花 满 楼7 小时前
HSM自学之路——阶段5安全启动专题与实践
安全·嵌入式·汽车电子·hsm·安全启动
Jason_zhao_MR8 小时前
新一代电能数据采集终端方案
linux·人工智能·嵌入式硬件·fpga开发·嵌入式
dozenyaoyida1 天前
Zephyr静态注册机制详解:SYS_INIT和BT_CONN_CB_DEFINE为什么没人调用也执行
嵌入式·nordic·链接器·zephyr·蓝牙开发
蓝天居士2 天前
PY32F系列MCU在OTA时App区概率性跑不起来的根因分析(3)
mcu·嵌入式
jianqiang.xue2 天前
【CStackGUI 实战】画板 drawpad:鼠标拖拽作图、撤销 / 重做、导出 PNG
单片机·嵌入式·cstackgui·c语言gui·可视化拖拽
嵌入式分享3 天前
BSP调试#01:RTC(RK3588)
嵌入式·实时音视频
嵌入式分享3 天前
嵌入式分享#38:踩坑实录!我在 RK3576 HDMI 搭错线
嵌入式
oku620894 天前
单片机底层系列:C 库运行时——从 libspace 到多任务与中断安全
嵌入式
Zwawa4 天前
反馈:让系统知道自己做得对不对
c语言·单片机·嵌入式