2台のarduinoをI2Cバスで接続して通信を行う実験
今日はI2Cバスの学習のため2台のArduinoをI2Cバスで接続する実験を行いました。
きむ茶ガレージハウスさんのHPのI2Cの実験の記事で勉強させていただきました。
この前作成した4桁7セグLEDを接続しているArduino(スレーブ)にマスタのArduinoから
表示データを送信して表示するといった構成です。
マスターから見ると、4桁7セグLED表示器は完全にブラックボッスであり、たた単純に
表示データを送るだけです。
思っていたよりも簡単に通信でき、遅れ等も感じられずに表示ができました。
取りあえず、イメージはつかめました。
実際にはエラー処理、制約、バスケーケーブル最大長などの考慮も必要でしょう。
写真の真ん中のは Arduino Pro mini です。Aliexpressで$3.84で売っていたので試しに
買ってみたのですが、ちゃんと動きます。基板上に実装できるサイズなので、
いろいろと使えそうです。
このちっこいArduino pro mini 使えばICたくさん使わなくても簡単にモジュールが作れそうです。
プログラムソースファイル
スレーブ側
// // arduino I2Cスレーブ // #include <Wire.h> #include <led7segfont.h> #include <Static7Seg.h> #include <stdlib.h> // 4桁7セグLED制御 インスタンスの作成 Static7Seg seg(8,12,11); char buf[20]; // マスタからの表示用データ受信し表示する void receiveEvent(int howMany) { int n = 0; // 送信された全てのデータを受信 while(Wire.available()) { buf[n++] = (char)Wire.read(); } buf[n] = '\0'; // 受信したデータを7セグLEDに出力 seg.print(buf); } void setup() { seg.print(""); Wire.begin(8) ; // I2Cの初期化、自アドレスを8とする Wire.onReceive(receiveEvent) ; // 割込み関数の登録 } void loop() { }
マスタ側
// // arduino I2Cマスタ // #include <Wire.h> #include <stdlib.h> void setup() { Wire.begin() ; // I2Cの初期化、マスターとする delay(5000) ; // 5秒後に開始 } // データの送信 void seg_print(char *str) { Wire.beginTransmission(8) ; // 通信の開始処理、スレーブのアドレスは8とする Wire.write((byte *)str, strlen(str)) ; // 通信データ送信 Wire.endTransmission(); } // 繰り返し実行されるメインの処理関数 void loop() { seg_print(""); delay(1000); seg_print("1"); delay(1000); seg_print("12"); delay(1000); seg_print("345"); delay(1000); seg_print("1234"); delay(1000); seg_print("3.141"); delay(1000); seg_print(" 1"); delay(1000); seg_print(" 12"); delay(1000); seg_print(" 123"); delay(1000); seg_print("1234"); delay(1000); seg_print(""); delay(200); seg_print("1234"); delay(200); seg_print(""); delay(200); seg_print("1234"); delay(200); seg_print(""); delay(200); seg_print("1234"); delay(2000); }
« arduinoでI2C接続LCDモジュールを利用する | トップページ | 明けましておめでとうございます »
「arduino」カテゴリの記事
- Arduino IDE+Arduino STM32環境で指定と異なるgccが使われてしまう(2025.01.23)
- Zorin OSでArduino Uno互換機(CH340)が認識しない(2025.01.19)
- Arduino IDE 2.3.4でArduino STM32を利用する(2025.01.12)
- Arduino用 SKK日本語変換ライブラリの開発 その1(2024.12.28)
- NeoPixel(WS2812B)の制御 その5(2024.09.15)
「AVR」カテゴリの記事
- NeoPixel(WS2812B)の制御 その5(2024.09.15)
- Arduino用SJIS漢字フォントライブラリ SDカード版を作成しました(2018.10.30)
- ATtiny13AでI2C接続キャラクタLCDを利用する(4)(2018.04.16)
- ATtiny13Aで赤外線リモコン受信センサーを使う(2)(2018.04.15)
- ATtiny13AでHC-SR04を使った距離計測(2018.04.14)
コメント