Module13.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.
Features
- Compatible with Basic/Fire/Core2/CoreS3
- 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
Applications
- Multi-channel load drive (Relay, Valva, Single-phase Motor, Singal LED)
- Limit Switch or Button test
Specifications
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 | 95*65*25mm |
PinMap
M5Core | GPIO22 | GPIO21 | 5V | GND |
4IN8OUT MODULE 13.2 | SCL | SDA | 5V | GND |
Schematic
Function of on-board toggle switch
In the red box below is the control toggle switch of boot0. Turn it to end 1 and pull it up to be the firmware scrub mode. Dial to 0 end pull down is to read the user program from the flash memory, that is, normal usage mode
Protocol
UIFlow
How to use Module 4in8out on the UIFlow 1.0 graphical programming platform and related API instructions.
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;
}
Video