そもそもTX1自体はかなり小さなボード
なので、本来の機動性を生かすため、接続ボードを探して購入してみました。必要最小限のコネクタ、GPIO、i2c、UARTを持ったボード
CTI Orbitty Carrier for Jetson TX1 です。定価は、約170$ !!、さらに送料手数料が約120$!!!!!!、さらにさらに日本の税関から1200円の追徴金!!!!!!!!!、とても信じられないくらいの恐怖のボードでした。この価格でもTX1は当然付いてません。対象は企業向けなんでしょうね。くれぐれも請求予想金額をよく確認してから購入すること。degi-keyとは諸費用が雲泥の差です(アメリカから5日くらいで着きましたけど)。
ただし、TX1の絶対数を考えるとしょうがないかもしれません。ま、
愚痴はさておき、本題へ
普通に使っている限りは、触った感じはPi3ほど熱くならない様な.....。放熱板を外すと高さがグンと縮まります。平面的にはPi3より少し小さい。
まずSATAインターフェイスは搭載していないので、必要ファイルはSDカードへ(caffe,Toch7など)コピー。TX1は金属でシールドされているので、WifiやBluetoothはアンテナ無しではつながりません。開発キットのアンテナがあまりにも不細工(大きなうさぎの耳)なので、コネクタのちょうど合うこんなのを(ZigBee平面アンテナ TWE−AN−P4208−100)秋月から2個取り寄せました。
もともとXBEE向けみたいです。XBEEのコネクタを確認するとTX1とドンピシャ。最終的にはこんなにちっちゃいのに全く問題ありません。TX1用のアンテナには安いし絶対お勧め。
開発ボードからTX1本体の差し替えは、ビスを外せば、軽く抜けるためチョー簡単で、Edisonの様にあまり気を使わなくてもOKでした。
あと、このボードにTX1を接続すると、開発ボードとは異なり、ファンが回りっぱなしになります。ボードメーカーのホームページから、カーネルを再インストールしないとダメ。差し替えソフトは6/15付けでjetpak2.1用と書いてあり、危ないのでインストール中止にしました(私のは最新版2.2)。内容はfanのPWM制御だけなのに??。
GPIOとi2cのテスト
NVIDAでは、先に販売されたTK1と私の持っているTX1では、まだ取扱方法について混乱があるらしく、Pythonで使うGPIOやi2cのライブラリについて一体何を使えば良いのか一切説明がありません。いつものように試行錯誤でやってみたら。今回のボードセットでGPIOは、ここから https://github.com/derekstavis/python-sysfs-gpioダウンロードしてREADME.mdの通りインストール。i2cはsmbus( sudo apt-get install python-smbus)で一応動きました。
このボードについているGPIOは4本で3.3V出力。ボードのピン番号11〜14それぞれ187,186,89,202に指定すれば簡単にLチカができました。
from twisted.internet import reactor
from sysfs.gpio import Controller, OUTPUT, INPUT, RISING
import time
Controller.available_pins = [187, 186, 89, 202]
pin = Controller.alloc_pin(187, OUTPUT)
while True:
pin.set()
time.sleep(0.5)
pin.reset()
time.sleep(0.5)
# Controller.dealloc_pin(187) ===>Close!!
i2cは、おきまりのi2cツール群をインストールしてから(sudo apt-get install libi2c-dev i2c-tools)sudo i2cdetect -y -r 1 でi2cアドレスを確認。その後 python-smbus をインストールします。i2cの接続確認は、いつものOMRON D6T赤外線非接触温度センサーです。前にもPi3関連で書きましたが、smbusライブラリのi2cバッファは32bit止まりのため、D6Tの温度測定ポイントである16個目のデータが、どんなに逆立ちしても読み込めません。テストと考えて諦めました。そうそう。システム関連のデータを変更することになるため、実行には「sudo」を付けることをお忘れなく。でも一般的なi2cセンサーならpython-smbusの標準関数でなんとかなると思います。
import smbus
import time
D6T_addr = 0x0A
D6T_cmd = 0x4C
tdata=
y =
i=0
x = smbus.SMBus(1)
while i<1000:
x.write_byte(D6T_addr, D6T_cmd)
y=x.i2c_read_device(D6T_addr, 35)
for var in range(0, 16):
tdata.append((y[(var*2)+2]+(y[(var*2)+3]<<8)))
print tdata
tdata=[]
time.sleep(0.1)
i=i+1
OMURON D6T練習ソース
[268, 303, 301, 272, 271, 307, 311, 272, 276, 301, 309, 285, 300, 314, 313, 37421]
[268, 303, 301, 272, 271, 307, 311, 272, 276, 301, 309, 285, 300, 314, 313, 37421]
[268, 303, 300, 272, 272, 307, 311, 272, 276, 302, 309, 285, 300, 314, 313, 37422]
[268, 303, 300, 272, 272, 307, 311, 272, 276, 302, 309, 285, 300, 314, 313, 37422]
実行すると最後の16個目が......。
とにかくUSBでカメラは繋がったし、i2c、GPIO、それにIGZOディスプレイも動作確認できました。まだ確認できていませんが2つ付いているUARTも問題ないと思います。でも本命は「ディープラーニング」ですから。
続けて3本ほど記事を書いてしまいましたが、あまりの面白さにPi3やEdisonが霞んでしまいそう。
資金不足になってしまったので、これからちょっとアルバイト。
1ヶ月後ぐらいに。また。