继电器是用小电流控制大电流开关的「电控开关」,相当于一个可以用程序控制的电闸。
[接线图占位,后续添加]
文字说明(具体接法见下方代码注释):
VCC → 外接 5V(继电器线圈耗电,不要从 Pico 的 3V3 取;若你的模块明确支持 3.3V 低功耗也可接 3V3)GND → 和 Pico 的 GND 连在一起(共地)IN1 / IN2 → Pico GP15 / GP14(控制两个继电器)# ============ 接线 ============
# 5V 双路继电器模块: VCC → 外接 5V(线圈耗电,不要从 Pico 3V3 取)
# GND → 和 Pico GND 连一起(共地)
# IN1 → Pico GP15
# 注意:用「继电器模块」而非裸继电器!模块带光耦隔离+三极管驱动,GPIO 只需很小电流,安全
# =============================
from machine import Pin
import time
# 国产模块大多「低电平触发」(IN 给低电平吸合);也有高电平触发的
# 拿不准就先让 ACTIVE_LOW=True 跑一下,如果调用 turn_off() 反而吸合,就改成 False
ACTIVE_LOW = True
relay = Pin(15, Pin.OUT)
def turn_on():
relay.value(0 if ACTIVE_LOW else 1) # 吸合
def turn_off():
relay.value(1 if ACTIVE_LOW else 0) # 断开
# 上电先把继电器置为断开,避免 Pico 启动瞬间 GPIO 浮空导致误吸合一下
turn_off()
print('继电器:', '低电平触发' if ACTIVE_LOW else '高电平触发')
while True:
turn_on(); print('继电器开'); time.sleep(2)
turn_off(); print('继电器关'); time.sleep(2)
# ============ 接线 ============
# 5V 双路继电器模块 VCC → 外接 5V,GND → 和 Pico GND 共地
# 模块 IN1 → Pico GP15
# 按键一脚 → Pico GP14,另一脚 → GND(用内部上拉,按下读到 0)
# =============================
from machine import Pin
import time
ACTIVE_LOW = True
relay = Pin(15, Pin.OUT)
key = Pin(14, Pin.IN, Pin.PULL_UP)
def set_relay(on):
relay.value(0 if (on == ACTIVE_LOW) else 1)
set_relay(False) # 上电先断开
state = False
print('按一下按键切换继电器')
while True:
if key.value() == 0: # 按键被按下(接地)
state = not state
set_relay(state)
print('继电器', '开' if state else '关')
time.sleep_ms(300) # 简单防抖
# ============ 接线 ============
# 5V 双路继电器模块 VCC → 外接 5V,GND → 和 Pico GND 共地
# 模块 IN1 → Pico GP15
# 光敏电阻 + 10kΩ 分压:中间点 → Pico GP26(ADC0),两端分别 → 3V3 和 GND
# =============================
from machine import Pin, ADC
import time
ACTIVE_LOW = True
relay = Pin(15, Pin.OUT)
adc = ADC(Pin(26))
LIGHT_THRESHOLD = 30000 # 光线值低于此值就吸合(越小越暗)
def set_relay(on):
relay.value(0 if (on == ACTIVE_LOW) else 1)
set_relay(False)
print('光线低于', LIGHT_THRESHOLD, '时继电器吸合')
while True:
v = adc.read_u16()
if v < LIGHT_THRESHOLD:
set_relay(True); print('暗 → 开')
else:
set_relay(False); print('亮 → 关')
time.sleep(1)
IN 给低电平吸合),也有高电平触发的。先确认自己模块的触发方式,把 ACTIVE_LOW 改成对应值;不确定就跑一下基础示例看逻辑反不反。VCC 接外接 5V(线圈耗电),GND 和 Pico 共地。Q: 继电器逻辑反了(想开却关、想关却开)?
A: 触发方式设反了。把 ACTIVE_LOW 从 True 改成 False(或反之)即可。
Q: 上电时继电器「啪」响一下?
A: Pico 启动瞬间 GPIO 浮空导致误吸合,属正常。程序开头先 set_relay(False) 置断开即可。
Q: 能用它控制家里的灯/插座吗? A: 技术上可以,但 220V 有触电危险,学生不要碰,课堂只演示低压直流小负载。