Raspberry Pi でシリアル通信
概要:
Raspberry Piとマイコンをシリアルでつなぐために、2つの方法を試してみました。
1.USB-シリアル変換ケーブルを使った通信
2.Raspberry PiのGPIOピンを使った通信
これらを試し、Pythonでサンプルプログラムを実行するまでやってみました。
実験環境:
・Raspberry Pi
・USB-シリアルコンバータ(FT232RL)
・Python実行環境
・python-serialライブラリ
USB-シリアル変換ケーブルを使った通信:
多くのシリアル変換ケーブルで使用されているFTF232というICは、
Linux2.6.31から標準で導入されているため、USBポートに挿せば認識します。
認識しているかをlsusbコマンドを使って確認してみます。
このように簡単に認識できます。
GPIOピンを使った通信:
RaspberryPiのGPIOピンにはシリアル機能を持ったものがあり、
これを使うことでマイコンと簡単に通信することができます。
*RaspberryPiに接続するUSB-シリアル変換ICは3.3Vのものを使ってください。
5Vのものを使用すると、RaspberryPiが破損する可能性があります。
Raspberry Piで使用できるシリアルピンの配置は次のようになっています。
簡単に接続はできますが、初期設定ではGPIOのシリアルピンは
任意の文字列を出力するポートとして使えないため設定を変更する必要があります。
最初に、/boot/cmdline.txt を以下のように編集します。
初期値:
編集後:
次に、/etc/inittab 内の以下の行をコメントアウトして、シリアルからのログインを無効化します。
最後に再起動をして準備は完了です。
動作実験:
最初に、サンプルを動かすためにPythonのシリアルポート操作ライブラリをインストールします。
通信する方法によって、以下のように操作するデバイスが変化します。
・ USB-シリアル変換ケーブルを使用する場合:/dev/ttyUSB?を使用
・ GPIOピンを使用する場合:/dev/ttyAMA0を使用
最後に適当なプログラムを作成し、パソコンと通信させてみます。
作成したサンプルは以下のようなものになります。
このプログラムを使って通信した結果は次のようになりました。
まとめ:
今回はRaspbery Piを使ったシリアル通信の方法について書きました。
次はArduinoかXBeeと連携させて遊ぼうかなと考えています。
参考サイト:
・シリアルインターフェースについて: Raspberry Pi serial interfacing
・GPIOピンについて: More on Raspberty Pi serial ports
・GPIOピンの配置について: RPi Low-level peripherals
Raspberry Piとマイコンをシリアルでつなぐために、2つの方法を試してみました。
1.USB-シリアル変換ケーブルを使った通信
2.Raspberry PiのGPIOピンを使った通信
これらを試し、Pythonでサンプルプログラムを実行するまでやってみました。
実験環境:
・Raspberry Pi
・USB-シリアルコンバータ(FT232RL)
・Python実行環境
・python-serialライブラリ
USB-シリアル変換ケーブルを使った通信:
多くのシリアル変換ケーブルで使用されているFTF232というICは、
Linux2.6.31から標準で導入されているため、USBポートに挿せば認識します。
認識しているかをlsusbコマンドを使って確認してみます。
pi@raspberrypi:~$ lsusb
Bus 001 Device 004: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
このように簡単に認識できます。
GPIOピンを使った通信:
RaspberryPiのGPIOピンにはシリアル機能を持ったものがあり、
これを使うことでマイコンと簡単に通信することができます。
*RaspberryPiに接続するUSB-シリアル変換ICは3.3Vのものを使ってください。
5Vのものを使用すると、RaspberryPiが破損する可能性があります。
Raspberry Piで使用できるシリアルピンの配置は次のようになっています。
簡単に接続はできますが、初期設定ではGPIOのシリアルピンは
任意の文字列を出力するポートとして使えないため設定を変更する必要があります。
最初に、/boot/cmdline.txt を以下のように編集します。
初期値:
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait
編集後:
dwc_otg.lpm_enable=0 rpitestmode=1 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait
次に、/etc/inittab 内の以下の行をコメントアウトして、シリアルからのログインを無効化します。
2:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
最後に再起動をして準備は完了です。
sudo reboot
動作実験:
最初に、サンプルを動かすためにPythonのシリアルポート操作ライブラリをインストールします。
sudo apt-get install python-serial
通信する方法によって、以下のように操作するデバイスが変化します。
・ USB-シリアル変換ケーブルを使用する場合:/dev/ttyUSB?を使用
・ GPIOピンを使用する場合:/dev/ttyAMA0を使用
最後に適当なプログラムを作成し、パソコンと通信させてみます。
作成したサンプルは以下のようなものになります。
import serial
import time
def main():
# USB-Serialを使用する場合、ttyUSB0
# GPIOピンを使用する場合、ttyAMA0
# con=serial.Serial('/dev/ttyUSB0', 19200, timeout=10)
con=serial.Serial('/dev/ttyAMA0', 19200, timeout=10)
print con.portstr
while 1:
str=con.readline()
print str
con.write(str)
if __name__ == '__main__':
main()
このプログラムを使って通信した結果は次のようになりました。
まとめ:
今回はRaspbery Piを使ったシリアル通信の方法について書きました。
次はArduinoかXBeeと連携させて遊ぼうかなと考えています。
参考サイト:
・シリアルインターフェースについて: Raspberry Pi serial interfacing
・GPIOピンについて: More on Raspberty Pi serial ports
・GPIOピンの配置について: RPi Low-level peripherals
● COMMENT FORM ●
トラックバック
http://chicklab.blog84.fc2.com/tb.php/46-20001463
この記事にトラックバックする(FC2ブログユーザー)