マスターモード 読み/書き

SPIの設定が完了したら通信が可能となります。マスターモードでは自分が親なので、自分が好きなタイミングでデータを送信できます。何もしていないのに勝手に受信することはありません。SPIでは送信するときに送信したデータと同じ量のデータを受け取ります。言い換えると、SPIは「データの交換」を行う通信となります。

データの送信にはspi.writeWait()を利用します。データの配列を指定します。下の例では[0x01, 0x02, 0x03]の3バイトを送信します。そして、送った結果通信相手から受け取った3バイトが返り値となります。送信データと受信データの長さは必ず一致します。

var spi = obniz.getFreeSpi();
spi.start({mode:"master", mosi:0, miso:1, clk :2, frequency:100000}); 
var ret = await spi.writeWait([0x01, 0x02, 0x03]);
console.log(ret.length); //=> 3

また、SPIはUARTと同じく実際の相手が存在しなくても通信には成功します。送信に成功し、送信したデータと同じ長さのデータを受け取ります。ただし受け取ったデータは意味のないものとなります。

一度に送信可能なデータはobnizOSやobniz.jsのバージョンに依存します。通常1KByteとなります。

受信データを必要としない送信

spi.writeWait()ではデータを送信し、受信データを受け取るまで待機します。受信データが必要ない場合(例. 接続先がディスプレイで受信が必要ない場合)はspi.write()を利用します。

var spi = obniz.getFreeSpi();
spi.start({mode:"master", mosi:0, miso:1, clk :2, frequency:100000}); 
spi.write([0x01, 0x02, 0x03]);

write()関数はwriteWait()と同じくデータをmosiから送信しますが、misoから入ってきたデータをすべて無視します。awaitしないので、大量のデータや連続したデータもインターネット経由でデバイスのSPIから送ることが可能です。