非公式Rock研究所

Radxaのシングルボード(主にRock4c+)について書いています

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を使って通信する。具体的な設定内容は以下のとおり。

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 -
minicom設定

カレントディレクトリが/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+とケーブルを接続する。

Rock4c+とケーブルの接続)

Uart4はTXがpin19、RXがpin21なので上の写真のように、

に接続する。

PCに接続後のシリアルアダプター

最後にシリアルアダプターの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
Uart_recieve.pyの実行直後の画面

コード実行後のRock4c+の画面である。受信待ちの状態であるため、画面には何も表示されていない。

接続先PCからキー入力

PC側に以下のコマンドを実行し、minicomを起動する。

$ sudo minicom -D /dev/ttyUSB0
minicom起動直後

minicomが起動したらキー入力してみる。

PCよりキー入力(1文字) PCよりキー入力(1ワード)

キー入力するとRock4c+の画面にも入力した文字が表示される。

PCよりキー入力(複数行)

自由にキー入力でき、しかも結果がリアルタイムに画面表示されておもしろい。