シェルスクリプトマガジン vol.69 特集の拡張基板「Jetson & Pi 電力測定ボード」を使ってみました

f:id:karaage:20200911014457j:plain:w640

シェルスクリプトマガジン特製「Jetson & Pi 電力測定ボード」

 久しぶりのJetson Nanoの話題です。11/25発売のシェルスクリプトマガジン vol.69を購入しました。

f:id:karaage:20201126214313j:plain:w640

 この本で特集されているJetson NanoとRaspberry Pi用の雑誌特製の拡張基板ですが、実は以前からモニターテストに参加していました。本も発売し情報解禁となったので、紹介してみたいと思います。

 なお、基板は雑誌には付属しておらず、別途購入するという形になります。販売はBit Trade Oneさんですが、Amazonからも買えます、便利ですね。部品は実装済みなので初心者でも安心です。

Jetson & Pi 電力測定ボードを動かしてみた

 特製基板では、Jetson NanoとRaspberry Piの電力を測定することができます。早速動かしてみた様子を紹介したいと思います。なお、基板に関しては、あくまでテストに協力しただけで、製作には関わっておりません。また、テストしたものは試作段階のもののため、製品版とは異なる可能性があることはご了承ください。

 基板は以下のような見た目です。可愛らしいですね。 f:id:karaage:20200830173534j:plain:w640

 裏面は部品無し。 f:id:karaage:20200830173559j:plain:w640

準備

 まずは事前準備です。Jetson Nanoは起動できる状態であれば特別な準備は不要だったと記憶しています。

 Raspberry Piの場合は、Raspberry Piの設定 -> インターフェイスのタブから以下の通り「I2C」を有効にしてください。

f:id:karaage:20200911014845p:plain:w640

 基板に拡張基板を接続します。向きに注意してください(この後の、動作確認の写真などで確認ください)。

 ここからは、Jetson Nano/Raspberry Pi 共通の操作です。

 続いて、I2Cデバイスの接続確認をします。以下コマンドで確認します。

$ i2cdetect -y -r 1

 以下のようにデバイスのアドレス(3c, 40)が表示されたらOKです。

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- 3c -- -- -- 
40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --    

 続いて、以下コマンドを実行して必要なライブラリをインストールします。

$ pip3 install adafruit-circuitpython-ina260
$ pip3 install adafruit-circuitpython-ssd1306

 これで準備は完了です。

テスト

 テスト用プログラムを作成します。とりあえずディスプレイに電流・電圧・消費電力を表示させます。以下のコードをtest.pyというファイル名で保存しましょう。

# Excerted from https://github.com/adafruit/Adafruit_CircuitPython_SSD1306/blob/master/examples/ssd1306_pillow_text.py

# Imports the necessary libraries...
import time
import board
import digitalio
from PIL import Image, ImageDraw, ImageFont
import adafruit_ssd1306
import adafruit_ina260

# Setting some variables for our reset pin etc.
RESET_PIN = digitalio.DigitalInOut(board.D4)

# Very important... This lets py-gaugette 'know' what pins to use in order to reset the display
i2c = board.I2C()
oled = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c, addr=0x3C, reset=RESET_PIN)
ina260 = adafruit_ina260.INA260(i2c)

# Clear display.
oled.fill(0)
oled.show()<200b>

# Create blank image for drawing.
image = Image.new("1", (oled.width, oled.height))
draw = ImageDraw.Draw(image)

# Load a font in 2 different sizes.
font = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf", 14)

while True:
    draw.rectangle((0, 0, oled.width, oled.height * 2), outline=0, fill=0)

    # Draw the text
    draw.text((0,  0), "Current: {}".format(ina260.current), font=font, fill=255)
    draw.text((0, 20), "Voltage: {}".format(ina260.voltage), font=font, fill=255)
    draw.text((0, 40), "Power  : {}".format(ina260.power),   font=font, fill=255)

    # Display image
    oled.image(image)
    oled.show()

    # time.sleep(1)

 以下を実行すると、ディスプレイに情報が表示されます。

$ python3 test.py

 Jetson Nanoでの動作 f:id:karaage:20200911014457j:plain:w640

 Raspberry Piでの動作 f:id:karaage:20200911010335j:plain:w640

 良い感じですね。

まとめ

 シェルスクリプトマガジン vol.69 特集の拡張基板「Jetson & Pi 電力測定ボード」を使う方法を簡単に紹介してみました。手軽にJetson、Raspberry Piの電源情報が確認できてなかなか良いかなと思います。

 最近、Jetson Nanoあまりさわれていませんでしたが、Jetpack 4.5がそろそろ出るという話もありますし、少し熱が戻ってきました。また少し触ってみて、何かしら実験してみたいなーとか考えています。

参考リンク

20200724_回路図_02 - Google スライド

20200501_Jetson_Current_Voltage_Power_sample_01 - Google スライド

GitHub - adafruit/Adafruit_CircuitPython_SSD1306: Adafruit CircuitPython framebuf driver for SSD1306 or SSD1305 OLED displays. Not for use with displayio. See README.

GitHub - adafruit/Adafruit_CircuitPython_INA260: CircuitPython driver for the TI INA260 current and power sensor

関連記事