fc2ブログ

2024-12

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コマンドを使って確認してみます。


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で使用できるシリアルピンの配置は次のようになっています。
Raspberry Serial Pin

簡単に接続はできますが、初期設定では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()


このプログラムを使って通信した結果は次のようになりました。
シリアル通信結果2


まとめ:


今回は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ブログユーザー)

NEW ENTRY «  | BLOG TOP |  » OLD ENTRY

カレンダー

11 | 2024/12 | 01
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -

FC2カウンター

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

未分類 (7)
日記 (7)
wiiremote (1)
google (1)
回路 (3)
psp (1)
programing (15)
linux (0)
OpenWRT (3)
kinect (1)
Raspberry Pi (8)

検索フォーム

RSSリンクの表示

リンク

このブログをリンクに追加する

google adsense