M5Stack 4IN8OUT Multi-channel DC Drive Module (STM32F030)

Price:
Sale price £18
incl. VAT
excl. VAT
Stock:
Only 8 units left
Quantity:

Awesome Extras

M5Stack Core2 v1.1 ESP32 IoT Development Kit - The Pi HutM5Stack Core2 v1.1 ESP32 IoT Development Kit - The Pi Hut
M5StackM5Stack Core2 v1.1 ESP32 IoT Development Kit
Sale price £44.50 incl. VAT excl. VAT
Prototyping Wire Spool Set - 10 Spool - The Pi HutPrototyping Wire Spool Set - 10 Spool - The Pi Hut

The 4IN8OUT Multi-channel DC Drive Module from M5Stack is a 4-Channel Passive Input/Switch + 8-Channel MOS Drive Output drive module.

The module adopts STM32F030 as the I2C IO chip and supports 9-24V DC input, with internal DC-DC circuitry to 5V.

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 shares the same VCC, channel 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

Package Contents

  • 1x 4IN8OUT Multi-channel DC Drive Module
  • 13x 2-pin Terminals

Specifications

Input Voltage 9~24V
Output Channel 8
Input Channel 4
Output Load <1A each Channel
Communication Interface I2C
I2C Address Default 0x45, change by modifying register 0xF0
Net Weight 21.9g
Gross Weight 52.5g
Product Size 54*54*13mm
Package Size 125*68*23mm

Resources

Pinout

M5Core GPIO22 GPIO21 5V GND
4IN8OUT MODULE 13.2 SCL SDA 5V GND

Arduino Example

#include 
#include "MODULE_4IN8OUT.h"

MODULE_4IN8OUT module;

int _I2C_dev_scan();

void setup() {
    M5.begin(1,1,1,1);  // Init M5Stack.  初始化M5Stack

    // while (1) {
    //     _I2C_dev_scan();
    //     delay(1000);
    // }


    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");
}

// void loop() {

// }

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_GREEN);
        } else {
            // M5.Lcd.fillRect(60 + 60 * i, 0, 25, 25, TFT_BLACK);
            // M5.Lcd.drawRect(60 + 60 * i, 0, 25, 25, TFT_GREEN);
            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);
    // 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_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(50);
        }
    }
    // if (M5.BtnB.wasPressed()) {
    //     if (module.setDeviceAddr(0x66)) {
    //         Serial.println("Update Addr: 0x66");
    //     }
    // }
    // M5.update();

    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++ ) {
        // The i2c_scanner uses the return value of
        // the Write.endTransmisstion to see if
        // a device did acknowledge to the 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;
}

Payment & Accreditations

Payment methods
Visa Mastercard Maestro PayPal Amazon Klarna

Your payment information is processed securely. We do not store credit card details nor have access to your credit card information.

Accreditations