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シリアル変換モジュール」

FT232RL USBシリアル変換モジュール

Raspberry Pi 3で使用できるシリアルピンの配置は次のようになっています。

  • 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の表示を次に示します。

TeraTermへの表示