SKU:M122














Module13.2 4In8Out 是一款可堆叠的 8 路 MOS 驱动输出 + 4 路无源接点输入 IO 扩展控制模块。它采用 STM32F030 作为 IO 扩展芯片,通过 I2C 协议通信,独立端口支持 9 ~ 24V DC 电源输入,集成 MP1584 DC-DC 电路可为主控设备提供 5V/3A 供电。8 路输出采用 AO3400A MOS 管,共电源阳极,能直接驱动负载,每路最大通断电流 1A;4 路输入为共地无源接点输入,禁止接入有源信号或大于 5V 的信号。模块通过 M5-Bus 接口与主控设备连接,支持堆叠扩展,适用于多通道负载驱动和限位开关、按键检测等应用场景。
| 规格 | 参数 |
|---|---|
| MCU | STM32F030F4P6 |
| 通信接口 | I2C 通信 @ 0x45(可修改) |
| 供电电压 | 9 ~ 24V |
| 输出通道 | 8 路 |
| 输出电流 | 每路 ≤ 1A, 总电流不大于 8A |
| 输入通道 | 4 路 |
| 通道接口规格 | KF2EDGR-2.54-2P |
| 产品尺寸 | 54.0 x 54.0 x 19.7mm |
| 产品重量 | 21.9g |
| 包装尺寸 | 80.0 x 55.0 x 28.0mm |
| 毛重 | 52.5g |


| PIN | LEFT | RIGHT | PIN |
|---|---|---|---|
| GND | 1 | 2 | |
| GND | 3 | 4 | |
| GND | 5 | 6 | |
| 7 | 8 | ||
| 9 | 10 | ||
| 11 | 12 | 3V3 | |
| 13 | 14 | ||
| 15 | 16 | ||
| SDA | 17 | 18 | SCL |
| 19 | 20 | ||
| 21 | 22 | ||
| 23 | 24 | ||
| HPWR | 25 | 26 | |
| HPWR | 27 | 28 | 5V |
| HPWR | 29 | 30 |
#include <M5Unified.h>
#include "MODULE_4IN8OUT.h"
MODULE_4IN8OUT module;
void setup() {
M5.begin();
while (!module.begin(&M5.In_I2C, MODULE_4IN8OUT_ADDR)) {
Serial.println("4IN8OUT INIT ERROR");
M5.Lcd.println("4IN8OUT INIT ERROR");
delay(1000);
};
Serial.println("4IN8OUT INIT SUCCESS");
M5.Lcd.println("4IN8OUT INIT SUCCESS");
}
long interval = 0;
bool level = false;
void loop() {
for (uint8_t i = 0; i < 4; i++) {
if (module.getInput(i) == 1) {
M5.Lcd.fillRect(60 + 60 * i, 0, 25, 25, TFT_BLACK);
M5.Lcd.fillRect(60 + 60 * i, 0, 25, 25, TFT_BLUE);
} else {
M5.Lcd.fillRect(60 + 60 * i, 0, 25, 25, TFT_BLACK);
M5.Lcd.drawRect(60 + 60 * i, 0, 25, 25, TFT_BLUE);
}
M5.Lcd.drawString("IN" + String(i), 40 + 60 * i, 5);
}
M5.Lcd.drawString("4IN8OUT MODULE", 60, 80, 4);
M5.Lcd.drawString("FW VERSION:" + String(module.getVersion()), 70, 120, 4);
if (millis() - interval > 1000) {
interval = millis();
level = !level;
for (uint8_t i = 0; i < 8; i++) {
module.setOutput(i, level);
if (level) {
M5.Lcd.fillRect(20 + 35 * i, 200, 25, 25, TFT_BLACK);
M5.Lcd.fillRect(20 + 35 * i, 200, 25, 25, TFT_GREEN);
} else {
M5.Lcd.fillRect(20 + 35 * i, 200, 25, 25, TFT_BLACK);
M5.Lcd.drawRect(20 + 35 * i, 200, 25, 25, TFT_GREEN);
}
M5.Lcd.drawString("OUT" + String(i), 18 + 35 * i, 180);
delay(50);
}
}
// if (M5.BtnB.wasPressed() || M5.Touch.getDetail().wasClicked()) {
// if (module.setDeviceAddr(0x66)) {
// Serial.println("Update Addr: 0x66");
// }
// }
// M5.update();
}