android things で UART送受信を試した作業メモです。
USB-シリアル ケーブル
amazon等でも購入できます。
接続
接続ピンは公式を参照。
https://developer.android.com/things/hardware/raspberrypi.html
こんな感じです。赤い線は繋ぎません。
android things側の設定
rpiに挿しているandroid things が焼かれているmicro sdカードを抜いてPCに挿して、
ターミナル等でsdカードの名前を確認する。
Macの場合は
$ diskutil list
で確認すると。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
/dev/disk0 (internal, physical): ・・・ /dev/disk1 (internal, virtual): ・・・ /dev/disk3 (external, physical): #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme *15.9 GB disk3 1: 〜 〜 〜 〜 〜 67.1 MB disk3s1 2: 〜 〜 〜 〜 〜 67.1 MB disk3s2 ・・・ 15: 〜 〜 〜 〜 〜 67.1 MB disk3s15 |
こんな感じで表示されるので sdカード(ここではdisk3)の最初のIDENTIFIER(ここではs1)をマウントします。
$ sudo mount -t msdos /dev/disk3s1 /Volumes/pisdcard #pisdcardはmkdirしておけばOK
公式によるとUARTにはBluetooth ModeとApplication Modeがあるそうです。
bluetooth mode
デフォルトではBluetooth modeになっていますので、PCにUSBシリアルを繋いでrpi3を起動するとすぐ試せます。
teraterm等でシリアルポート接続を下記の通り設定してreturnしてみるとプロンプトが返って来ます。
Baud Rate: 115200
Data Bits: 8
Parity: None
Stop Bits: 1
Application Mode
アプリ開発のデバッグで使うのはこちらが多いかと思いますので、application modeにしてアプリでUART送受信を試してみます。
まずは、先ほどのようにsdカードをマウントして、
$ cd /Volumes/pisdcard/
で、cmdline.txtというファイルを開き、
console=serial0,115200 の部分を console=tty0 にする。
次に、config.txtというファイルを開き
dtoverlay=pi3-disable-bt を追加して
enabled_uart=1
core_freq=400
の2行を削除する
rpiに挿し直して電源ON
起動したら adb connect してrpiに接続。
アプリ
今回はサンプルアプリとして、https://github.com/androidthings/sample-uartloopback を使います。
cloneしてandroid studioで開けばすぐにbuildできるので、そのままアプリを run。
teratermで文字を打ってみるとちゃんとエコーバックしてくるのが確認できます。
が、そのままだとターミナルに打った文字が表示されているだけで少し分かり難いので、
送信部分に1文字足してみます。
1 2 3 |
buffer[read] = '/'; read++; mLoopbackDevice.write(buffer, read); |
みたいな感じで文字を付け加えて送信してみると、
打った文字の後ろに ‘/’ が付いて表示されるのでアプリからの送信をteratermで受信出来ている事が確認できます。
これでアプリに対してコマンドを送れるようになったので、コマンドパーサーを作っておけば色々なアプリで使い回せそうです。