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,可以看到输出如下:

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

相关推荐
智码看视界16 小时前
Edge AI 全栈1:ESP32 传感器采集到云端大模型推理的完整链路
人工智能·物联网·嵌入式·esp32·aiot·全栈开发·edgeai
Freak嵌入式20 小时前
告别硬件差异!MicroPython Signal 类:让你的 GPIO 代码跨板运行无压力
嵌入式
v_for_van1 天前
C语言__attribute__
服务器·c语言·开发语言·mcu·嵌入式·嵌入式实时数据库
xx~t2 天前
嵌入式——进程与线程1
linux·c语言·学习·嵌入式·进程与线程
潘潘的嵌入式日记2 天前
协议旧指令该不该删?4 个检查决定删除还是保留兼容
重构·嵌入式·协议·经验·代码维护
虎王物联3 天前
工业Modbus TCP协议深度实战:STM32 HAL库实现从机通信与数据上云
stm32·物联网·网络协议·tcp/ip·嵌入式
小柯博客3 天前
06 · 统一 libcamerasrc 与架构定型:3A、CPU 归因与一次黑屏回归
c语言·stm32·单片机·嵌入式硬件·架构·嵌入式·视频编解码
fanged5 天前
Yocto1--环境搭建和验证
大数据·搜索引擎·嵌入式
捷瑞电子工坊5 天前
FreeRTOS中断管理:从原理到实践(标准库版)
嵌入式·freertos·实时操作系统·任务通知·临界区·中断管理·二值信号量