脳汁portal

アメリカ在住(だった)新米エンジニアがその日学んだIT知識を書き綴るブログ

raspberryPi3とWindowsPCでシリアル通信する方法

接続

raspberryPi側

調べると色々出てきますが、変換ケーブルのGND, TXD, RXDをRaspberryPiのGPIOに差し込みます
ここで注意が必要なのが、送信と受信を対にするために以下のように接続します

f:id:portaltan:20161201180555j:plain

PC側

PC側は普通にUSBに差すだけです。
差したあとにデバイスマネージャーで認識されているか確認しましょう
f:id:portaltan:20161201160935p:plain

設定

raspberryPi側

調べていくと、raspberryPiのシリアル通信ポートは既に他の用途で使われているようで、これを使えるようにする方法がRaspberryPiのモデルやRaspbianのversionによって様々で、ちょっと苦戦しました。
最終的に私がうまくいった方法は・・・

1. raspi-configでserial通信を有効化する
2. /boot/config.txtへ追記
$ sudo vi /boot/config.txt
  enable_uart=1 # 末尾へ追記する
3. getty無効化
sudo systemctl stop serial-getty@ttyS0.service
sudo systemctl disable serial-getty@ttyS0.service
4. 再起動する

通信(確認)

PC側 ⇒ raspberryPi

今回はターミナルとしてteratermを利用しました
接続方法を選択する際にTCP/IPではなくシリアルを選択します
f:id:portaltan:20161201160947p:plain

raspberryPiのボーレートは115200なので、「設定 > シリアルポート」から、ボーレートの変更を行います
f:id:portaltan:20161201160953p:plain

変更後にエンターキーを一度押すとログイン画面が表示されます。
f:id:portaltan:20161201160958p:plain

raspberryPi ⇒ PC側

色々方法はあるようですが、今回はscreenを利用して確認をします

screen /dev/ttyS0 115200

これでscreen経由で入力した情報がシリアル側へ表示されればOKです
f:id:portaltan:20161201175006p:plain

おまけ

/boot/cmdline.txtの編集

このままだとシリアル通信側に全てコンソール情報が常に表示されてしまうので、cmdline.txtファイルを編集することでそれを防ぐことができます

$ sudo vi /boot/cmdline.txt
  dwc_otg.lpm_enable=0 console=tty1 console=serial0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
  # console=serial0, 115200を削除します
RS232とか422とかttlとか

シリアル通信に色々通信の種類があって、ラズベリーパイが対応しているのはttlという通信方式
もしrs232で送信されたシリアル通信をラズベリーパイ側で受信するには、以下のような232の信号をttlに変更するレベルシフターをかませる必要がある
www.aitendo.com