UART(USB to TTL シリアル変換ケーブル)

今回は、USB to TTL シリアル変換ケーブルを使って、PCとRaspberry Piの間でUART通信をする。

RaspberryPiでRS232C機器を制御した - Qiita
Raspberry Pi でシリアル通信 – 或る阿呆の記
Macからraspberry piにシリアル通信 - devの忘備録
RaspberryPi3でシリアル通信を行う - Qiita

DSD TECHのシリアル変換
DSD TECHのシリアル変換

Amazon CAPTCHA

DSD TECHのシリアル変換SH-U09C

中身
中身

中身はこうなってるので、

こうやって繋ぐ
こうやって繋ぐ

説明書見てないけど、TXが白、RXが黒、GNDがグレー、として、繋ぐ。
(どうも色配置が納得いかないが。)

USB側をPCに挿す
USB側をPCに挿す

USB側をPCに挿す。

USBデバイスを認識してセットアップ。
USBデバイスを認識してセットアップ。

ただデバイスマネージャは警告
ただデバイスマネージャは警告

ただデバイスマネージャは警告。

ドライバがインストールされてない
ドライバがインストールされてない

ドライバがインストールされてない。

FTDIのUSBシリアル変換器のドライバのインストール法(1) - しなぷすのハード製作記

ドライバを入れる。

Virtual COM Port Drivers

ここの、

2.12.28
2.12.28

x64の2.12.28を選ぶ。

コンピュータを参照して~
コンピュータを参照して~

「コンピュータを参照して~」を選択。

ドライバのフォルダを選択
ドライバのフォルダを選択

ダウンロードしたドライバのzipを解凍したフォルダを選択

次へ
次へ

これで次へ。

これでドライバが更新された
これでドライバが更新された

これでドライバが更新された。

下は治ったけど、今度は上がおかしい
下は治ったけど、今度は上がおかしい

下は治ったけど、今度は上がおかしい。
上も同じドライバを選択して更新すると、

上も治ってCOM5が現れる
上も治ってCOM5が現れる

上も治ってCOM5が現れる。

Tera TermでもCOM5が選択できる
Tera TermでもCOM5が選択できる

Tera TermでもCOM5が選択できる。
RasPi側は、

/boot/config.txt
/boot/config.txt

/boot/config.txtを開いて、

dtoverlay~の行を追加
dtoverlay~の行を追加

こんな風にdtoverlay~の行を追加。

/boot/cmdline.txt
/boot/cmdline.txt

今度は、/boot/cmdline.txtを開いて、

変更前
変更前

変更前は、console=serial0~と書かれている部分を、

変更後
変更後

変更後は、削除。
(console=tty1~は残しておく。)

デバイスを確認
バイスを確認

バイスを確認。
あまりにもいっぱいあるけど・・・。

ttyAMA0
ttyAMA0

ttyAMA0を使う。
(これがUART1?なのかな。)
dialoutグループだがrootオーナー。

serial1がttyAMA0に
serial1がttyAMA0に

serial1がttyAMA0にシンボリックリンク
(serial1=ttyAMA0(=ttyS1?ってttyS1はないけど・・・。))

reboot
reboot

設定し終わったんでいったんreboot。

黒を8番ピン、白を10番ピン
黒を8番ピン、白を10番ピン

黒を8番ピン、白を10番ピンに。
(黒がRXなので、RasPiのTXは8番ピン、白がTXだから、RasPiのRXは10番ピン。)

繋ぐとドバァーって出てくる
繋ぐとドバァーって出てくる

繋ぐとドバァーって出てくる。
ちょっと不安だが、やりとりしたいので、とりあえず、

Raspberry pi で SSH ログアウト後もプロセスを残したい - 子育てしながらエンジニアしたい

screenコマンドをインストール。

screenコマンドのインストール
screenコマンドのインストール

screenコマンドのインストール。

インストール終わった
インストール終わった

インストール終わったので、

/dev/ttyAMA0に対して
/dev/ttyAMA0に対して

/dev/ttyAMA0に対して、

$ screen /dev/ttyAMA0 115200

してみる。

RasPi側
RasPi側

RasPi側はこうなるが、
PC側では相変わらず変な文字列が流れ続ける。
ここでハマりどころがいくつかあって、

Raspberrypi 3 でUART通信(コンソール&汎用) - Qiita

にある、

enable_uart1
enable_uart1

enable_uart=1も効果なし。
(よく見ると、"enable_uart1"になってるダメだwww。)

raspi-config
raspi-config

raspi-configで、

Raspberry Pi UART Communication using Python and C | Raspberry Pi

シリアルを有効にしたけど、これも関係なさそう。
いろいろ見てて気づいたのが、

グレーのGNDを6番ピンに
グレーのGNDを6番ピンに

グレーのGNDを繋いでなかったので、RasPiのGNDである6番ピンに。
そうすると、Tera Term側の変な文字列の流れが止まった。
RasPi側からは文字列を送れるが、Tera Term側はできず。
RasPi側を再起動したら、Tera Term側にLinuxのログイン画面というかフォームが表示された。
piユーザでsshログインするみたいなやつか。
でもただのチャットをやりたいので、

Raspberry PIのGPIO上シリアルとArduinoの通信 - Qiita

serial-getty@ttyAMA0.serviceというサービスの停止をしてみる。

サービス停止
サービス停止

サービス停止と無効化。
あ、そうだ。

シリアルポート設定
シリアルポート設定

ボーレートを合わせないと。

115200
115200

最初、9600になってるので、115200に変更。
これでRasPi再起動して、Tera Termで"abc"と入力すると、

RasPi側に"abc"
RasPi側に"abc"

RasPi側に"abc"。
RasPi側で"xyz"を入力すると、

Tera Term側で"xyz"
Tera Term側で"xyz"

Tera Term側で"xyz"が出る。

とにかく、ハマったポイントとしては、

  • GNDにちゃんとつなぐ。
  • サービスは止めとけ。

ってところかな。