今日はArduinoとラズパイをつないでみたいと思います('ω')ノ
実はMyoWare(筋電センサ)が届いたのですが、ラズパイにはAD変換器がついてないのでそのままでは使えないのです。
ということで、AD変換器がついているArduinoにMyoWareをつけて、ラズパイの方にデータを送るという方法で筋電データを取りたいと思います('ω')ノ
今日はそのラズパイとArduinoをつなぐところまでやっていきます('ω')ノ
USBでつなぐ方法もありますが、ここではI2Cシリアル通信をしてみます
I2CはInter-Integrated Circuitの略で、通信プロトコルの一種です
シリアルデータ(SDA)とシリアルクロック(SCL)の2本の通信線を用います('ω')ノ
シリアルデータ:Arduino[A4] ラズパイ[GPIO2]
シリアルクロック:Arduino[A5] ラズパイ[GPIO3]
それとGND同士をつなぎます('ω')ノ
I2Cの接続のためにまずArduinoにプログラムを書き込みます('ω')ノ
Arduinoには ic2用のライブラリがあるので#include<Wire.h>を書いて使用します
Wire.begin(アドレス)…7ビットのスレーブアドレスを指定。無ければマスターとしてバスに参加する
Wire.onReceive(関数名)…スレーブデバイスがマスターからの送信を受信したときに呼び出される関数を登録する。ここでのスレーブデバイスはArduino、マスターはラズパイです('ω')ノ
ここでは信号を受け取ったらreceive関数へ飛ぶようにしています
receiveではWire.read()で受信したバイトを読み取ります
’A’を受け取るとled関数が呼び出されて、ledが光ります('ω')ノ
次にラズパイのほうにいきます('ω')ノ
設定(Preferences)からラズパイの設定を押します
インターフェイスからI2Cを有効にします('ω')ノ
Arduinoときちんと接続できているかを確認します
i2cdetect -y 1 とコマンドを入力します
これで設定したアドレスが表示されていたらOKです('ω')ノ
0x8がちゃんと表示されてます
ラズパイのプログラムです
smbus(システム管理バス)モジュールをインポートします
bus = smbus.SMBus(1) で引数に1を指定する。
input()で文字を入力させる
もしsakusakuと入力させると、bus.write_byte(0x8, ord('A'))で1バイト’A’を送信します
※write_byte(int addr, char val)
※ord()メソッドは文字をUnicode値に変更する
ということで、sakusakuを入力すると’A’が送信されて。。。
点灯しました('ω')ノやったー
ということでi2c通信ができました('ω')ノ
次回はセンサから値を読み取ってみたいと思います('ω')ノ