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」カテゴリの記事
- Freenove Mecanum ホイール カー キットを購入しました(2025.05.28)
- 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)
「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)

コメント