同时控制/同步数百个继电器
组件和用品
| × | 2 | ||||
| × | 2 | ||||
| × | 2 | ||||
| × | 1 |
关于这个项目
需要同时控制和同步数百个继电器?然后将您的 Arduino、ESP8266、Pi、PC 或 Mac 连接到带有继电器扩展器的 IO 扩展器,并使用新的外部锁存功能。
这允许您以非常紧凑的位格式发送新的继电器设置以准备锁存。然后使用来自 MCU 或来自 IO 扩展器的单个 GPIO 线同时输出所有锁存数据。
使用您的 Arduino 项目查看我们的控制多达 65、280 个继电器!
那么为外部锁存设置 IO 扩展器需要什么?使用 IO 扩展器的简单命令结构,让我们设置一个简单的用例,通过外部锁存控制 x16 继电器板。
将 [g]pio 引脚 [4] 设置为具有高 [1] 电平的 [o] 输出,在 [g]pio 引脚 [10] 上,我们启用 [n] 负边沿检测,最后启用继电器 [e] xpander 外部 [l] 锁定引脚 [10]。
>g4o1;g10n;el10
ok
ok
10
>
现在我们可以打开继电器 [e]xpanders [o]n/o[f]f/[s]et 然后使用外部锁存器通过将 [g]pio 引脚 [4] 设置为 [o] 输出来启用它[1] 毫秒的低 [0] 电平。我们希望引脚 4 返回到高电平状态,以便它准备好再次锁存。
>e1o;e10o;e16o
ok
ok
ok
>g4o0,1
ok
现在让我们使用 Arduino Nano 将此项目扩展到 x2 IO 扩展器、x2 中继扩展器和 x2 16 中继板。 x2 IO 扩展器使用最多 255 个 IO 扩展器的多点 9 位协议连接在一起。
IO 扩展器外部锁存图
Arduino代码
/* IO 扩展器
*
* 继电器扩展器外部锁存
*
*/
#include
#include "IOExpander9Bit.h"
#include
//#define SERIAL_DEBUG
#define MAX_BOARDS 2
#ifdef SERIAL_DEBUG
SoftwareSerial swSerial(8,7);
#endif
void setup()
{
Serial9Bit.begin(115200) , SERIAL_9N1);
Serial9Bit.write(0); // 将 IO 扩展器设置为 9 位
#ifdef SERIAL_DEBUG
swSerial.begin(115200);
swSerialEcho =&swSerial;
#endif
wdt_enable(WDTO_8S);
for (uint8_t board =1; board <=MAX_BOARDS; board++)
SerialCmdDone(board, "eb1");
SerialCmdDone(1, "g4o1; g10n;el10"); // 为继电器外部锁存设置GPIO
SerialCmdDone(2, "g10n;el10");
}
void loop()
{
静态 uint16_t i =0;
uint8_t r[2];
r[0] =~(uint8_t)(i>> 8);
r[1] =~ (uint8_t)i++;
SerialWriteRelayExpander(1, r, 2);
delay(50);
r[0] =~r[0]; // 反转 2 板上的所有继电器
r[1] =~r[1];
SerialWriteRelayExpander(2, r, 2);
delay(50);
SerialCmdDone(1, "g4o0,1"); // 锁存所有继电器
wdt_reset();
}
IO 扩展器外部锁存操作
因此,立即获取您的 IO 扩展器并构建您的系统!
代码
- IO 扩展器外部锁存
IO 扩展器外部锁存Arduino
/* IO 扩展器 * * 继电器扩展器外部锁存器 * */#include#include "IOExpander9Bit.h"#include //#define SERIAL_DEBUG#define MAX_BOARDS 2#ifdef SERIAL_DEBUGSoftwareSerial swSerial(8,7);#endifvoid setup(){ Serial9Bit.begin(115200, SERIAL_9N1); Serial9Bit.write(0); // 将 IO 扩展器设置为 9 位#ifdef SERIAL_DEBUG swSerial.begin(115200); swSerialEcho =&swSerial;#endif wdt_enable(WDTO_8S); for (uint8_t board =1; board <=MAX_BOARDS; board++) SerialCmdDone(board, "eb1"); SerialCmdDone(1, "g4o1;g10n;el10"); // 为继电器的外部锁存设置 GPIO SerialCmdDone(2, "g10n;el10");}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);延迟(50); r[0] =~r[0]; // 反转板 2 上的所有继电器 r[1] =~r[1]; SerialWriteRelayExpander(2, r, 2);延迟(50); SerialCmdDone(1, "g4o0,1"); // 锁存所有继电器 wdt_reset();}外部锁存器
示意图
制造工艺