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: Centra-search a peripheral

You will Get in Few Days

Circuit for Starter “obniz Board” is available on Amazon and other online stores.
You can get it at below

Our products and resellers

Forum

Visit our developer’s forum to discuss and discover technologies.

Forum

Contact

Feel free to contact out support and technical team.

Contact us