記事一覧

Raspberry PiでArduinoをI2C経由でコントロール(python使用)

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でコードを書きます。

RasArI2C13.png

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

RasArI2C10.png

コード
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()


RasArI2C11.png

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);
}
}


RasArI2C12.png

結果
地味ですが、ボタンを押すとArduinoのLEDがつきました。
つまりI2Cで通信できているということです。



それでは今回はこの辺で失礼します!ありがとうございました。

スポンサードリンク

コメント

コメントの投稿

非公開コメント

プロフィール

RoboTakao

Author:RoboTakao
みなさんご訪問ありがとうございます。ロボット作りたいけどお小遣いそんなにないし、簡単でローコストでロボットを作るための私のプロジェクトを紹介します。

ウェブサイトもありますのでそちらもよろしくお願いします。
http://robotakao.jp/

スポンサーリンク