This website is available for multi language.

I2C: スレーブとしてデータを受け取る

今回はI2Cのスレーブとしてobnizを利用します。

obnizのスレーブモートではマスターから書き込まれたデータの受信のみが可能です。
マスターに対してデータを送る機能は持っていません。

初期化

配線などについてはI2Cマスターのドキュメントをご覧ください。

スレーブとして設定しますが、配線はマスターのときと変わりません、自分のsdaを相手のsdaと。sclを相手のsclとつなぎ、プルアップ抵抗をつけるだけです。

ただし、最初の設定で少し違うのが、アドレスの指定です。
マスターは相手に支持をするだけなので自分のアドレスがないのですが、
スレーブにはあります。
なのでobnizのアドレスを決める必要があります。

i2c.start({mode: "slave", sda: 0, scl: 1, slave_address: 0x01});

このように指定します。
まず、modeはslaveでスレーブとします。
次にアドレスをslave_addressで指定します。
ここで指定できるのは7bitなので、0x00から0x7Fまでの数値となります。

今回はアドレスを0x01にしています。
これによりマスターから0x01に対して送られたデータを受信できます。

データを受信するとonwritten関数が呼ばれます

i2c.onwritten = function(data){

}

試してみましょう。
マスターと接続し、マスターから0x01に対してデータを送ります。
すると、受信できると思います。

var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function () {
  var i2c = obniz.getFreeI2C();
  i2c.start({mode: "slave", sda: 0, scl: 1, slave_address: 0x01});
  i2c.onwritten = function(data){
    console.log(data);
  }
}

受信したデータはdataに配列として入っています。
現在のobnizではデータはフラグメント化されます。
つまり、I2Cでは本当はデータの長さがあり、ここからここまでが1つのデータとなっているのですが、
それがバラバラになり届く可能性があります。UARTの受信と同じです。



Next : BLE: セントラル-ペリフェラルを探す

最短で翌日に届きます

obniz BoardはAmazonや公式ストアから購入できます。最短で当日出荷いたします。
取り扱い店舗はこちらから。

製品紹介

フォーラム

obnizフォーラムでは、obnizユーザー同士で意見交換することができます。
疑問・質問もお気軽にどうぞ。

フォーラム

お問い合わせ

製品・サービスに関するお問い合わせや、導入・開発のご相談など、お気軽にお問い合わせください。

お問い合わせフォーム