Module 13.2 4IN8OUT
SKU:M122
Description
MODULE 13.2 4IN8OUT is a '4-Channel Passive Input/Switch + 8-Channel MOS Drive Output' drive module. Adopt STM32F030 as the I2C IO chip, support 9-24V DC input, with internal DC-DC circuitry to 5V.
Product Features
- Compatible with Basic/Fire/Core2
- Adopt STM32F030 as the IO chip, I2C communication, I2C address is changeable by modifying the register
- 8-channel MOS Drive circuitry share the same VCC, channle load <1A
- 4-channel Passive Input share the same GND, no active signal or >5V signal allowed
- With internal MP1584, 9~24V -> 5V DC-DC converter
Include
- 1x MODULE 13.2 4IN8OUT
- 13x 2P Terminal
Application
- Multi-channel load drive (Relay, Valva, Single-phase Motor, Singal LED)
- Limit Switch or Button test
Specification
Spec |
Parameter |
Input Voltage |
9~24V |
Output Channel |
8 |
Input Channel |
4 |
Output Load |
<1A each Channel |
Communication Interface |
I2C |
I2C Address |
Default 0x45, changeable by modifying the register 0xF0 |
Net Weight |
21.9g |
Gross Weight |
52.5g |
Product Size |
54*54*13mm |
Package Size |
125*68*23mm |
Pinmap
M5Core |
GPIO22 |
GPIO21 |
5V |
GND |
4IN8OUT MODULE 13.2 |
SCL |
SDA |
5V |
GND |
Schematic
Protocol
Example
Arduino
#include <M5Stack.h>
#include "MODULE_4IN8OUT.h"
MODULE_4IN8OUT module;
int _I2C_dev_scan();
void setup() {
M5.begin(1,1,1,1);
while (!module.begin(&Wire, 21, 22, MODULE_4IN8OUT_ADDR)) {
Serial.println("4IN8OUT INIT ERROR");
M5.Lcd.println("4IN8OUT INIT ERROR");
_I2C_dev_scan();
delay(1000);
};
Serial.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_GREEN);
} else {
M5.Lcd.fillRect(60 + 60 * i, 0, 25, 25, TFT_RED);
}
M5.Lcd.drawString("IN" + String(i), 40 + 60 * i, 5);
}
M5.Lcd.drawString("4IN8OUT MODULE", 60, 80, 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_BLUE);
} else {
M5.Lcd.fillRect(20 + 35 * i, 200, 25, 25, TFT_BLACK);
M5.Lcd.drawRect(20 + 35 * i, 200, 25, 25, TFT_BLUE);
}
M5.Lcd.drawString("OUT" + String(i), 18 + 35 * i, 180);
}
}
delay(500);
}
int _I2C_dev_scan() {
uint8_t error, address;
int nDevices;
Serial.println("[I2C_SCAN] device scanning...");
nDevices = 0;
for (address = 1; address < 127; address++ ) {
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0) {
Serial.print("[I2C_SCAN]: device found at address 0x");
if (address < 16)
Serial.print("0");
Serial.print(address, HEX);
Serial.println(" !");
nDevices++;
}
else if (error == 4) {
Serial.print("[I2C_SCAN]: unknow error at address 0x");
if (address < 16)
Serial.print("0");
Serial.println(address, HEX);
}
}
Serial.print("[I2C_SCAN]:");
Serial.printf(" %d devices was found\r\n", nDevices);
return nDevices;
}
UIFlow