pdf-icon

Module13.2 4IN8OUT

SKU:M122

説明

MODULE 13.2 4IN8OUT は、4ch パッシブ入力/スイッチ + 8ch MOS 駆動出力ドライブモジュールです。I2C IO チップとして STM32F030 を採用し、9-24V DC 入力をサポートし、5V への DC-DC 回路が内蔵されています。

製品の特徴

  • Basic/Fire/Core2/CoreS3に対応
  • STM32F030をIOチップとして採用、I2C通信、I2Cアドレスはレジスタの変更により変更可能
  • 8チャネルMOSドライブ回路はVCCを共有、チャネル負荷<1A
  • 4チャンネル受動入力は同じGNDを共有、アクティブ信号または>5V信号は不可
  • MP1584内蔵、9〜24V -> 5V DC-DCコンバータ。

含まれるもの

  • 1x モジュール 13.2 4IN8OUT
  • 13x 2P ターミナル

アプリケーション

  • 多チャンネル負荷駆動 (リレー, バルバ, 単相モータ, シンガルLED)
  • リミットスイッチやボタンテスト

仕様

仕様 パラメータ
入力電圧 9~24V
出力チャンネル 8
入力チャンネル 4
出力負荷 各チャンネル1A以下
通信インターフェイス I2C
I2Cアドレス デフォルト0x45、レジスタ0xF0を変更することにより変更可能
製品重量 21.9g
梱包重量 52.5g
製品サイズ 54*54*13mm
梱包サイズ 95*65*25mm

ピンマップ

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

回路図

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

Video