Raspberry Pi 3とパソコンとをUSB-シリアル変換で接続し、Python言語で作成したサンプルプログラムをRaspberry Pi 3で実行して、シリアル接続による通信を確認します。なお、パソコン側では、シリアル端末としてTeraTermを使用します。
Raspberry Pi 3のシリアル設定
Raspberry Pi 3のシリアル設定は、シリアル機能を持ったGPIOピンを使用し、USB-シリアル変換は、 秋月電子の「FT232RL USBシリアル変換モジュール」を使用します。
*RaspberryPiに接続するUSB-シリアル変換ICは3.3Vのものを使ってください。5Vのものを使用すると、RaspberryPiが破損する可能性があるので、レベル変換モジュールを使用する必要があります。
秋月電子の「FT232RL USBシリアル変換モジュール」
- USB-シリアル変換「FT232RL USBシリアル変換モジュール」のGNDとGPIOの6番(Ground)
- USB-シリアル変換「FT232RL USBシリアル変換モジュール」のTXDとGPIOの10番(RXD)
- USB-シリアル変換「FT232RL USBシリアル変換モジュール」のRXDとGPIOの8番(TXD)
コンソールとしてシリアルポートを使うことを止める設定変更です。
最初に、/boot/cmdline.txt を編集します。コンソールとして使用するのを「console=tty1」だけにするために、「console=ttyAMA0,115200」を削除します。
次に、シリアルからのログインを無効化するために/etc/inittabを編集しましたが、Raspberry Pi 3以降では、serial-getty@ttyAMA0.serviceサービスをdisableにします。
$ sudo systemctl stop serial-getty@ttyAMA0.service $ sudo systemctl disable serial-getty@ttyAMA0.service
※参考
元に戻したい時は下記のコマンドを実行します。
$ sudo systemctl enable serial-getty@ttyS0.service $ sudo systemctl start serial-getty@ttyS0.service
最後に再起動をして準備は完了です。
$ sudo reboot
パソコンのシリアル設定
Raspberry Pi 3とパソコンをUSBのケーブルで設定すると、次のようにデバイスマネージャによりCOM3として認識されました。最初の接続では、USBドライバプログラムのインストールが行われます。
シリアル端末としてTeraTermを使用します。COM3のシリアルポート設定のために、メニュから「設定」→「シリアルポート」を選択し、次のように設定します。
端末の設定のために、メニュから「設定」→「端末」を選択し、次のように設定します。
readlineメソッドでシリアルデータを読み込むため、「LF」の設定が必要となります。
サンプルプログラム「serialtest.py」の作成
最初に、サンプルプログラムを動作させるために、Pythonのシリアルポート操作ライブラリをインストールします。
$ sudo apt-get install python-serial
パソコンとシリアル接続して通信するサンプルプログラム「serialtest.py」を次に示します。パソコンからのシリアルデータを受信して、受信文字数とその内容を表示し、折り返し受信したシリアルデータをそのまま送信します。なおRaspberry Pi 3では、シリアル通信に使用するデバイスは、’/dev/ttyS0’に割り当てられていました。
import serial import time def main(): con=serial.Serial('/dev/ttyS0', 115200) print con.portstr while 1: str=con.readline() print len(str) print str con.write(str) if __name__ == '__main__': main()
python3で実行する場合は、printメソッドに()が必要になります。
サンプルプログラムの実行
Raspberry Pi 3でサンプルプログラム「serialtest.py」を実行した結果を次に示します。
$ python serialtest.py /dev/ttyS0 14 123412345678 11 qwertyui
パソコン側のTeraTermの表示を次に示します。