Zao SDKシリアルトンネリングをGPIOヘッダのUARTピンで使う方法
はじめに
Jetson Nano Developer Kit (以下 Jetson Nano) はUARTを内蔵していて信号線がGPIOヘッダ (J41、40-Pin Expansion Header) に出ています。
この記事では、Zao SDKのシリアルトンネリングをデフォルトのUSBシリアルケーブルではなく内蔵UARTで使用し、GPIOヘッダでデータ入出力する方法を解説します。
これにより、3.3V UARTに対応したマイコンやセンサとの接続が容易になります。
接続イメージ
接続
Jetsonと通信をするためのデバイスを以下のように接続します。
- Jetson Nano Pin 6 (GND) --- 通信デバイスのGND
- Jetson Nano Pin 8 (TxD) --- 通信デバイスのRxD
- Jetson Nano Pin 10 (RxD) --- 通信デバイスのTxD
Jetson NanoのJ41ヘッダ配列はこちらでも確認することができます。
GPIOヘッダからの信号取り出し
ログイン
既にZao SDKが動作している場合は、Jetson Nano の画面はZao SDKのTUI画面になっているはずです。 以降の操作をするためにログインが必要ですのでAlt+F2
を押下してtty2のログイン画面に移ってログインして下さい。 TUI画面に戻る場合はAlt+F1
入力で戻れます。
シリアルコンソールの停止
Zao SDKでUARTを使うため、デフォルトでUARTポートで動いているシリアルコンソールを無効にします。以下のコマンドを実行して、nvgetty.serviceが自動起動しないようにします。
$ sudo systemctl disable nvgetty.service
今後の起動では内蔵UARTがシリアルコンソールに占有されなくなります。
Zao SDKの設定
Zao SDKのZaoSerialProxyTtyの設定を変更します。これは、どのポートをZao SDKが利用するかを指定します。
/dev/ttyTHS1が内蔵UARTに対応するLinux上のシリアルポート名になります。
sudo vi /usr/local/etc/zao/SerialProxyTty.conf
等でテキストエディタを起動し設定ファイルを編集します。
SERIAL_TTY_DEVICE=/dev/ttyTHS1
これで準備は完了です!
Jetson Nano再起動後にZao Cloud View側とシリアルデータを送受信できるようになります。
距離センサのデータをArduino経由で送信
次に、超音波距離センサーのデータをZaoSDKを介して送信する方法について解説しています。この方法は、温度センサーやCO2センサーなどの他の様々なセンサーデータを送信する際にも使用することができます。
まずは配線図デス。Arduinoは5V信号を、Jestonは3.3V信号を使用します。したがって、これらの信号レベルを一致させるために、ロジックレベル変換ICを利用します。下記の画像は具体的な配線方法を示しています。
次にArduinoにプログラムを書き込みます。以下に示すコードは、超音波距離センサーから取得したデータをシリアル経由で送信するためのものです。
#include <SoftwareSerial.h>
#define TrigPin 3
#define EchoPin 2
#define TXPin 0
#define RXPin 1
double soundspeed = 331.5 + 0.61 * 25;
double distance = 0;
bool f = true;
SoftwareSerial serial1(RXPin, TXPin);
void setup() {
Serial.begin(9600);
serial1.begin(115200);
pinMode(LED_BUILTIN, OUTPUT);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
}
void loop() {
trigger();
double t = pulseIn(EchoPin, HIGH);
if (t > 0) {
t = t / 2;
distance = t * soundspeed * 100 / 1000000;
Serial.println(distance);
serial1.println(distance);
}
delay(200);
f = ! f;
digitalWrite(LED_BUILTIN, f);
}
void trigger() {
digitalWrite(TrigPin, LOW);
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH );
delayMicroseconds( 10 );
digitalWrite(TrigPin, LOW );
}
これを実行すると、ZaoViewのシリアルポートから距離データが取得できます。
以上の方法により、映像と共に多種多様なセンサーデータを送信することが可能となります。
関連資料
- Zao SDKのWEBサイト
- NVIDIA Application Note: "Jetson Nano Developer Kit 40-Pin Expansion Header GPIO Usage Considerations"
Discussion