Uart Communication-受信編
注意:当サイトに掲載されている手順は動作を保証するものではないもの、また、当サイトに掲載されている情報をもとに電子回路を作成した結果によって生じたことについて、一切の責任を負えないことをご了承ください。
【Article】「GPIOページに掲載する記事について」 - 非公式Rock研究所
https://informal-r-labo.net/posts/article005
ここではUart通信を使って接続先のPCからキー入力を行い、Rock4c+にデータ受信させる。
事前準備
Uart通信を行うためには事前にRock4c+に設定を行う必要がある。設定がまだの場合は、以下のリンクを参考に必要な設定を行うこと。
【GPIO】Uart Communication-準備編 - 非公式Rock研究所
https://informal-r-labo.net/posts/config007
設定内容
【Uart Communication-送信編】と同様、Uart4を使って通信する。具体的な設定内容は以下のとおり。
- /boot/hw_intfc.confファイルはuart4を"on"に設定
- /boot/extlinux/extlinux.confファイルは初期状態のまま
Pythonコード
~/pyディレクトリに"Uart_recieve.py"のファイル名でviを起動し、編集モードで以下のコードを入力する。
(Rock4c+には日本語が入力できないため、カッコ書きのコメント行は入力不要。)
# (ライブラリのimport)
import mraa
import time
# (Uart4を指定)
port = "/dev/ttyS4"
u = mraa.Uart(port)
# (Uart通信では一般的な設定)
# (ボーレートは9600)
u.setBaudRate(9600)
# (データビット数:8,パリティビット:なし,ストップビット:1,フロー制御なし)
u.setMode(8, mraa.UART_PARITY_NONE, 1)
u.setFlowcontrol(False, False)
while True:
# (読み取り可能なデータがあるか)
if u.dataAvailable():
# (接続先よりデータ読み取り)
recieve_data = u.readStr(200)
# (入力文字が改行コードであれば)
if recieve_data == '\r':
# (接続PCに改行コードを返却、Rock4c+画面に改行出力)
u.write(bytearray('\n\r', 'utf-8'))
print()
else:
# (接続PCに入力文字を返却、Rock4c+画面に出力)
u.write(bytearray(recieve_data, 'utf-8'))
print(recieve_data, flush=True, end='')
コーディングが完了すれば保存する。
今回は接続先PCからminicomを使ってキー入力するが、上記Pythonコードは1文字ずつ読み取る。その際、読み取った文字を即時に画面出力させるために、print関数の引数に"flush=True"を指定している。(この引数を指定しないと、接続先PCでEnterキー(改行)が打ち込まれるまでRock4c+の画面に文字が出力されなかった。)
また、使用するPCによっては改行コードが異なるため、環境によっては改行コードの部分を変更する必要がある。
紹介したPythonコードについて参考にしたサイトのリンクを貼っておく。
mraa/examples/python/uart_receiver.py at master · eclipse/mraa · GitHub
https://github.com/eclipse/mraa/blob/master/examples/python/uart_receiver.py
pythonで print の出力結果を即時表示, 強制表示, フラッシュさせる(主にjupyter) #Python - Qiita
https://qiita.com/mmsstt/items/469a9346ce545709f53c
接続先PC(minicom)設定
次は接続先PCの設定を行う。
接続にはminicomを使用する。minicomのインストールは以下のページを参照されたい。
【Config】コンソールアクセス(シリアル接続)- 非公式Rock研究所
https://informal-r-labo.net/posts/config011
具体的にはminicomの設定ファイルである、".minirc.dfl"にRock4c+のPythonコードに設定したボーレートやデータビットなどを設定する。
まず、以下のコマンドで、管理者(root)権限を取得する。
$ sudo su -
カレントディレクトリが/rootディレクトリに変わるので、このrootディレクトリの”.minirc.dfl”ファイルを確認する。もし以下と異なる場合はviコマンドで編集する。
pu baudrate 9600
pu bits 8
pu parity N
pu stopbits 1
pu rtscts No
デバイスの接続
PCとRock4c+を物理的に接続していく。
接続には次のシリアルアダプターを使用する。
DSD TECH SH-U09C USB - TTLシリアルアダプター + FTDI FT232RLチップ
シリアルアダプターに付属されているケーブルの接続を行う。
このシリアルアダプターは出力する電圧を選ぶことができる。今回は3.3V出力にしたいので、上の写真のようにVCCと3V3をジャンパスイッチで接続する。
次にシリアルアダプターと付属のケーブルを接続する。物理的にはどちらの向きでもさすことができるが、上の写真のようにVCCと記載されているPinに赤色のケーブルがささるようにする。
すると、シリアルアダプターのGNDは黒色、TXDは青色、RXDは緑色になる。
最後にRock4c+とケーブルを接続する。
Uart4はTXがpin19、RXがpin21なので上の写真のように、
- 黒色をpin14
- 緑色をpin19
- 青色をpin21
に接続する。
最後にシリアルアダプターのUSBとPCはまだ接続していない状態で、Rock4c+に電源をいれ、青色LEDが点滅してからシリアルアダプターのUSBをPCに接続する。(Rock4c+の通電前にシリアルアダプターをPCにつないでしまうと、Rock4c+の電源を入れてもbootがうまくいかず、Rock4c+が起動しない。)
ここではRock4c+のUart受信の結果をスクリーンショットしたかったため、Rock4c+側は別のPCからSSH接続で制御することにした。
コードの実行
Rock4c+の結線が間違っていないか確認し、問題なければ作成したRock4c+のPythonコードを管理者権限で実行する。
(GPIOを操作するには管理者権限が必要。)
$ sudo python3 ~/py/Uart_recieve.py
コード実行後のRock4c+の画面である。受信待ちの状態であるため、画面には何も表示されていない。
接続先PCからキー入力
PC側に以下のコマンドを実行し、minicomを起動する。
$ sudo minicom -D /dev/ttyUSB0
minicomが起動したらキー入力してみる。
キー入力するとRock4c+の画面にも入力した文字が表示される。
自由にキー入力でき、しかも結果がリアルタイムに画面表示されておもしろい。