Raspberry PiでArduinoをI2C経由でコントロール(python使用)
- 2017/12/13
- 23:57
Raspberry PiでArduinoをI2C経由でコントロール(python使用)
こんにちはRoboTakaoです。ようこそ「極力ローコスト ロボット製作 ブログ」にお越しくださいました。
前回はRaspberry PiとArduinoをI2Cでとりあえずつないでみて、Raspberry Pi側のpythonのライブライリーをインストールしたりしてみました。
前回の記事はこちらを参照してください。
今回はI2C経由でRaspberry PiとArduinoをつないだ上で、ブレッドボード上のスイッチを押したらRaspberry Pi側からArduinoにスイッチオンの情報をI2Cで送信して、その情報をもとにArduinoはオンボードのLEDを点灯させるようにしてみます。
わかりやすいようにスイッチを押したらRaspberry Pi側でもLEDを点灯するようにします。Raspberry Pi側はpythonでコードを書きます。

結線図
まずは結線は下のようにしました。
ArduinoはNanoです。

コード
Raspberry Pi側のpythonコード
import smbus
import RPi.GPIO as GPIO
import time
bus = smbus.SMBus(1)
GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.OUT) #GPIO4
GPIO.setup(25, GPIO.IN) #GPIO25
while True:
command = GPIO.input(25)
GPIO.output(4, command)
if command == True:
bus.write_byte(0x04, ord('1'))
if command == False:
bus.write_byte(0x04, ord('0'))
time.sleep(0.1)
GPIO.cleanup()

Arduino側のスケッチ
#include
void setup(){
pinMode(13, OUTPUT);
Wire.begin(4); // join i2c bus with address #4
Wire.onReceive(requestEvent); // register event
}
void loop(){
}
void requestEvent(){
char ch = Wire.read();
if (ch == '1'){
digitalWrite(13, true);
}
if (ch == '0'){
digitalWrite(13, false);
}
}

結果
地味ですが、ボタンを押すとArduinoのLEDがつきました。
つまりI2Cで通信できているということです。
それでは今回はこの辺で失礼します!ありがとうございました。
スポンサードリンク