Raspberry Pi 3とArduino間の通信方法まとめ

   2018/03/20

Raspberry Pi 3とArduino間の通信方法としては、SPI、I2C、UARTの3種類がある。
(1-Wireもあるけどここでは割愛)

3種類の接続方法をまとめておく。

SPI

spidevというライブラリを使う方法を紹介。

接続方法

Arduino Raspberry Pi
MISO SPI_MISO(GPIO9)
MOSI SPI_MOSI(GPIO10)
CS SPI_CLK(GPIO11)
SS SPI_CE0_N(GPIO8)
GND GND

事前準備

spidevをインストール

pipでインストール。

コード例

Arduino側のスケッチ

Raspberry Pi側のPythonスクリプト

I2C

smbusというライブラリを使う。
ただし、smbusのインストール方法は、システムのPythonを使うかpyenv上のpythonを使うかで変わってくる。
システムのPythonにただインストールするだけならapt-getで十分だが、その場合pyenv上のPythonからはsmbusが使えない。
かといってこのライブラリはpipでは見つからない。
そこでpyenvを使う場合はsmbus-cffiというライブラリを使う。

自分はpyenv上でPythonを動かしているので、pyenvを使っている前提で説明する。 (とはいえシステムのpythonだとしても、こっちの方法で動くとは思う)

接続方法

Arduino Raspberry Pi
SDA RXD0(GPIO15)
SCL TXD0(GPIO14)
GND GND

事前準備

sudoersにパスを追記

開いたら、次のように修正する。

Before
Default secure_path=”/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin” 
After
Default secure_path=”/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/pi/.pyenv/shims:/home/pi/.pyenv/bin”

色々とインストール


modulesの修正

末尾に下記を追記。

i2c-bcm2708
i2c-dev

raspi-blacklist.confの修正

もしこのファイルに「blacklist i2c-bcm2708」をいう記述があったら、行頭に#をつけてコメントアウトする。

コード例

Arduino側のスケッチ

Raspberry Pi側のPythonスクリプト

UART

PySerialというライブラリを使う方法を紹介。

接続方法

Arduino Raspberry Pi
TX RXD0(GPIO15)
RX TXD0(GPIO14)
GND GND

事前準備

cmdline.txtの編集

開いたら、「console=ttyAMA0,115200」とか「kgdboc=ttyAMA0,115200」という文字列を消す。115200とか書いてある奴は消す。

ttyサービスの無効化

次のコマンドを実行。
RPi3の場合はttyS0に割り当てられてるとか海外のサイトにしか書いてなかったぞ・・・
もちっとみんなバージョンの差異に目を向けようよ・・・
困ってる人がいるんだよ・・・

config.txtの編集

ファイルの一番最後に以下を追記する。

再起動

再起動すると、今までの変更が有効になる。

PySerialをインストール

pipでインストール。

コード例

Arduino側のスケッチ(簡易版)

Arduino側でUARTの割り込み受信用のメソッドを探しているのなら、serialEvent()という関数が使える。
しかし見つけた時はびっくりした。まさか存在しているとは…
日本語リファレンスは全部を網羅しているわけじゃなかったんだね。

Arduino側のスケッチ(serialEvent対応版)

Raspberry Pi側のPythonスクリプト

この記事へのコメントはこちら

メールアドレスは公開されませんのでご安心ください。
また、* が付いている欄は必須項目となりますので、必ずご記入をお願いします。

内容に問題なければ、下記の「コメント送信」ボタンを押してください。

eleven − 6 =

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください