pdf-icon

Module13.2 4In8Out

SKU:M122

説明

Module13.2 4In8Out は、8 チャンネル MOS ドライブ出力 + 4 チャンネル無電源接点入力 の IO 拡張モジュールです。I2C の IO 拡張チップとして STM32F030 を採用し、9〜24V の電源入力に対応し、内蔵で 5V DC-DC 回路に変換します。

特徴

  • Basic/Fire/Core2/CoreS3 などのホストに対応
  • IO 拡張チップとして STM32F030 を採用、I2C によりホストと通信、I2C アドレスはレジスタ書き込みで変更可能
  • 共通電源正極 MOS トランジスタドライブ回路(A3400)8 チャンネルを搭載し、直接負荷を駆動可能、各チャンネル最大通断電流 1A
  • 共通グランド無電源接点入力 4 チャンネル、アクティブ信号や 5V を超える信号を接続不可
  • 内蔵 MP1584 9~24V -> 5V DC-DC 回路

含まれるもの

  • 1 x Module13.2 4In8Out
  • 13 x 2P 端子

アプリケーション

  • マルチチャンネル負荷駆動(リレー、エアバルブ、単方向モーター、信号表示灯など)
  • リミットスイッチ、ボタン検出

仕様

仕様 パラメータ
MCU STM32F030F4P6
動作電圧 9~24V
出力チャンネル 8
入力チャンネル 4
出力電流 各チャンネル 1A、総電流 8A 以下
通信インターフェース I2C
I2C アドレス デフォルト 0x45、レジスタ 0xF0 書き込みで変更可能
製品重量 21.9g
梱包重量 52.5g
製品サイズ 54 x 54 x 13mm
梱包サイズ 95 x 65 x 25mm

操作説明

オンボードトグルスイッチの機能
下図赤枠内は boot0 制御用のトグルスイッチで、1 側にするとハイレベルでファームウェア書き込みモードになります。0 側にするとローレベルでフラッシュからユーザープログラムを読み込む、すなわち通常使用モードとなります。

回路図

ピンマップ

M5-Bus

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

製品サイズ

ソフトウェア

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_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 foundrn", nDevices);
    return nDevices;
}

UiFlow1

通信プロトコル

動画