IO 扩展板外部锁存轻松同步控制数百路继电器
零部件与物料
| IO 扩展板 | ×2 |
| 继电器扩展板 | ×2 |
| 16 路继电器模块 | ×2 |
| Arduino Nano R3 | ×1 |
项目简介
需同时同步控制成百上千路继电器?使用 IO 扩展板 + 继电器扩展板,启用**外部锁存**特性:以极其紧凑的位格式下发继电器新状态,再由单根 GPIO(来自 MCU 或 IO 扩展板输出)触发锁存,所有继电器同一时刻翻转。详见《Control Up to 65,280 Relays with Your Arduino》项目。
外部锁存配置示例(单块 16 路继电器板)
> g4o1;g10n;el10
ok
ok
10
>
g4o1:GPIO4 设为输出高电平(锁存线默认高)g10n:GPIO10 启用下降沿检测el10:继电器扩展板外部锁存使能于 GPIO10
随后设置继电器状态,再拉低 GPIO4 1ms 触发锁存:
> e1o;e10o;e16o
ok
ok
ok
> g4o0,1
ok
>
扩展至双 IO 扩展板 + 双继电器板(共 64 路)
两块 IO 扩展板通过 9 位多点协议级联,最多支持 255 块。Arduino Nano 通过 HardwareSerial9Bit 库通信。
接线图
IO 扩展板 GPIO4 接继电器扩展板锁存输入,GPIO10 作为外部锁存触发源。两块 IO 扩展板串联 TX/RX,地共用。
Arduino 代码
#include
#include "IOExpander9Bit.h"
#include
#define MAX_BOARDS 2
void setup() {
Serial9Bit.begin(115200, SERIAL_9N1);
Serial9Bit.write(0); // 切换到 9-bit 模式
wdt_enable(WDTO_8S);
for (uint8_t b = 1; b <= MAX_BOARDS; b++)
SerialCmdDone(b, "eb1"); // 使能继电器扩展板
SerialCmdDone(1, "g4o1;g10n;el10"); // 板1 配置外部锁存
SerialCmdDone(2, "g10n;el10"); // 板2 仅使能锁存
}
void loop() {
static uint16_t i = 0;
uint8_t r[2];
r[0] = ~(uint8_t)(i >> 8);
r[1] = ~(uint8_t)i++;
SerialWriteRelayExpander(1, r, 2); // 板1 写入
delay(50);
r[0] = ~r[0]; r[1] = ~r[1]; // 板2 取反
SerialWriteRelayExpander(2, r, 2);
delay(50);
SerialCmdDone(1, "g4o0,1"); // 触发锁存(下降沿 1ms)
wdt_reset();
}
演示视频
原理图
展示双 IO 扩展板级联、继电器扩展板与 16 路继电器模块连接、外部锁存信号走向。
制造工艺