非公式Rock研究所

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

Uart Communication-送信編

注意:当サイトに掲載されている手順は動作を保証するものではないもの、また、当サイトに掲載されている情報をもとに電子回路を作成した結果によって生じたことについて、一切の責任を負えないことをご了承ください。

【Article】「GPIOページに掲載する記事について」 - 非公式Rock研究所
https://informal-r-labo.net/posts/article005



ここではUart通信を使ってRock4c+から接続先のPCへ文字列データの送信を行う。

事前準備

Uart通信を行うためには事前にRock4c+に設定を行う必要がある。設定がまだの場合は、以下のリンクを参考に必要な設定を行うこと。

【GPIO】Uart Communication-準備編 - 非公式Rock研究所
https://informal-r-labo.net/posts/config007

設定内容

今回はUart4を使って通信する。設定内容は以下の通りである。

hw_intfc.confファイルの中身

Pythonコード

~/pyディレクトリに"Uart_send.py"のファイル名でviを起動し、編集モードで以下のコードを入力する。
(Rock4c+には日本語が入力できないため、カッコ書きのコメント行は入力不要。)

# (ライブラリのimport)
import mraa
import time

# (Uart4を指定)
port = "/dev/ttyS4"
uw = mraa.Uart(port)

# (Uart通信では一般的な設定)
# (ボーレートは9600)
uw.setBaudRate(9600)
# (データビット数:8,パリティビット:なし,ストップビット:1,フロー制御なし)
uw.setMode(8, mraa.UART_PARITY_NONE, 1)
uw.setFlowcontrol(False, False)

# (データ送信開始)
# (末尾の\r\nは改行コード)
uw.write(bytearray('Hello World!\r\n', 'utf-8'))
# (動きを付けるために次の文字列を送信するまで1秒待機)
time.sleep(1)
# (2つ目の文字列を送信)
uw.write(bytearray('Hello Uart Communication!\r\n', 'utf-8'))

コーディングが完了すれば保存する。

uart.writeの引数には文字列を直接渡すことはできず、バイト形式である必要がある。そのためbytearrayを使用している。
(文字列のままだとエラーになる。)

紹介したPythonコードについて参考にしたサイトのリンクを貼っておく。

mraa/examples/python/uart_sender.py at master · eclipse/mraa · GitHub
https://github.com/eclipse/mraa/blob/master/examples/python/uart_sender.py

Pythonのbytearray()関数の全引数・戻り値・具体的な使用例を解説! | ゴマフリーダムのPython教室
https://gomafree-tech.com/?p=1906

接続先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+が起動しない。)

接続完了後の機器全体

Uart通信を強調したかったため、Rock4c+へのコマンド入力はSSH接続ではなく、本体からコマンド入力するHDMIとキーボードを接続した。これでPCとRock4c+の接続は完了である。

接続先PCの受信準備

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

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

minicomが起動し上記画面が表示されればPC側の受信準備は完了である。

コードの実行

Rock4c+の結線が間違っていないか確認し、問題なければ作成したRock4c+のPythonコードを管理者権限で実行する。
(GPIOを操作するには管理者権限が必要。)

$ sudo python3 ~/py/Uart_send.py

実行すると、PCのminicom画面にプログラムで入力した文字列が出力される。

Uart_send.pyの1行目出力 Uart_send.pyの2行目出力

ただの2行の文字列だが、出力結果が1秒間隔で画面に表示されるため、時間軸で通信を感じることができておもしろい。