ラベル I2C の投稿を表示しています。 すべての投稿を表示
ラベル I2C の投稿を表示しています。 すべての投稿を表示

2021年2月23日火曜日

Si7021 + Rasspberry PI + GoLang

HDC1080の記事を書いたあとに、「産業用高精度 温度湿度」センサーと書いてあったのできっとすごいセンサーだと思って amazonでポチッた

ポチったあとにデータシートみて驚愕したんだけどI2Cのアドレスは 0x40 固定だった

HDC1080とまったく同じだ。 

RaspberryPi3 だと I2Cが一個しかないので一個しかぶら下げられない。なんという事でしょう。Pi4なら複数のI2Cがあるけど

温度/湿度なんてI2Cほど速度いらないから1-wireのほうがいいのかな。こちらはデバイス毎に固有アドレスがあるし。 

どこかからソースパクってこよう、は安易すぎた 

なかなか古いデバイスのようで、GoLang + Si7021 でググるといくつか github にヒットする

けどなんかこうGoLangのバージョン依存してたり、OS依存しててコンパイルできなかったりした

結局 ここのデータシート 読んで自分で書いた方が早かった。3時間も無駄にしたよ.. 


CRCはちゃんと計算しよう 

最初10分で書いた信頼性がなさすぎた
実験でケーブルが短い時は大丈夫だったけど、3mの単芯ケーブルにしたら通信エラーが起きているっぽくで、湿度が-50%とかになってる

他のセンサー(DC-CO2-20)では通信エラーが起きていないので、デバイスのドライブが弱いのかな、と人のせいにしてはいけない 。ちゃんとCRC計算しよう...


ハードウェアの結線

Raspberry PIとの結線は SDA,SDL, 3.3V , GND の4本だけ

GoLang は 1.16 で macOSを使用 

アドレスの確認

# i2cdetect -y 1

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f

00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 

10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

0x40にいた。HCM1080と同じアドレスだ。困る。

 

I2Cをsudoしなくても読めるようにする

これはグラフツールのzabbixが読めるようにする設定
ユーザー名がpiの人は zabbix を pi にするとよさそう

# sudo usermod -aG i2c zabbix


パッケージの準備

% mkdir si7021

% cd si7021

% go mod init si7021

go: creating new go.mod: module si7021

go: to add module requirements and sums:

go mod tidy


% go mod tidy

go: finding module for package github.com/davecheney/i2c

go: found github.com/davecheney/i2c in github.com/davecheney/i2c v0.0.0-20140823063045-caf08501bef2


ソース

// macOS closs compile

// GOOS=linux GOARCH=arm go build 

package main



import (

  "fmt"

  "os"

  "time"

  "github.com/davecheney/i2c"  // go get github.com/davecheney/i2c

  "encoding/binary"

)


const (

    wait = 100 * time.Millisecond // 100milisec 

)


func write(dev *i2c.I2C, s string) {

  chars := []byte(s)

  dev.Write(append([]byte{0x40}, chars...))

  time.Sleep(wait)

}



func help() {

    fmt.Println( "exp: hdc1080 0 or 1 (0=Ondo 1=Shitudo 9=reset")

}



// 2byteの値から1byteのcrcを返す

func calcCRC(seed byte, buf []byte) byte {

  for i := 0; i < len(buf); i++ {

    seed ^= buf[i]

    for j := 0; j < 8; j++ {

      if seed&0x80 != 0 {

        seed <<= 1

        seed ^= 0x31

      } else {

        seed <<= 1

      }

    }

  }

  return seed

}


func Reset() {

    dev, _ := i2c.New(0x40, 1)


    dev.Write([]byte{0xFE}) // CMD_RESET

    time.Sleep(wait * 5)

}


func ReadData(cmd byte) float32 {

    var i float32

    var b  = []byte{0, 0, 0}

    var b2 = []byte{0, 0}

  

    // 0x40 is I2C address , 1 is /dev/i2c-1

    dev, _ := i2c.New(0x40, 1)

    cnt := 0;

    

again:

    dev.Write([]byte{cmd}) // CMD_TEMPTURE

    time.Sleep(wait)

    dev.Read(b) // 3byte読み込み

    b2[0] = b[0]

    b2[1] = b[1] // 素人すぎるプログラムww

    

    crc := calcCRC( 0x00 , b2 )

    if crc != b[2] {

        fmt.Fprintln( os.Stderr , "CRC error")

        time.Sleep( wait * 10 ) // 1秒

        Reset()

        time.Sleep( wait * 10 ) // 1秒

        

        cnt += 1

        if cnt > 5 {

            return -1

        }   // error

        goto again

    }


    i = float32(binary.BigEndian.Uint16(b2))

    time.Sleep(wait)

    return i

}


func main() {

  if len(os.Args) < 2 {

    help()

    os.Exit(-1)

  }


  switch os.Args[1] { 

  case "0":

      f32 := ReadData(0xF3) // / CMD_TEMPTURE

      if ( f32 != -1 ) {

          c := float32(f32) * 175.72 / 65536. - 46.85

          fmt.Printf("%.2f\n",c)

      } else {

           fmt.Println(-1)

      }

  case "1":

      f32 := ReadData(0xF5) // / CMD_HUM

      if ( f32 != -1 ) {

          c := float32(f32) * 125. / 65536. - 6.

          fmt.Printf("%.2f\n",c)

      } else {

           fmt.Println(-1)

      }

  case "9":

    Reset()


  default:

    help()

  }

}




コンパイル

GOOS=linux GOARCH=arm go build 

これでバイナリができたので、RaspberryPIに scp して実行

# 温度

$ ./si7021 0

21.715549316406246


# 湿度

$ ./si7021 1

39.543670654296875


# リセット送信 (いるのかな? )

$ ./si7021 9



高精度?

うーんと、精度はどうなんだろう

hdc1080と温度で0.5度くらい、湿度で1%くらいの差くらい

hdc1080も割と高精度なんでは...


おしまい

2021年2月14日日曜日

Raspberry PI 4 には I2C が沢山あった

Raspberry PI4 は I2C がいっぱいあった

 電力をあまり食わせたくなかったので最新のRaspberry4(Rspi4)ではなく、PI3系(Rspi3)を好んで使っていたんですが、なんとRaspberry PI 4は BCM2711を搭載しているので、I2Cを4つも追加できるとの事

 Rspi3以前でもI2C-0を使おうと思えば使えたんですが、いろいろなHAT(拡張ボード)を上に乗っける時にこの端子でHATのチップと通信しているものが多く事実上使えませんでした

2021年1月24日日曜日

二酸化炭素 測定 自作 DS-CO2-20

二酸化炭素センサー到着しました

中国からDS-CO2-20が届きました。

2週間かからなかったです。

他の人が注文したのと一斉に送付するのでタイミングがよかったのでしょう。

日本のAmazonからも購入できますがちょっと高いです。 AliExpressは$25ほどでした

     データシートはこちら

準備編はこちら

校正なしで正確だった。びっくり


窓をあけたらちゃんと430ppmになりました。

これはいまの地球の二酸化炭素のベース値です。20年前は400ppm以下だったので地球規模で二酸化炭素が増えてるのがわかりますね。

いままでの簡易測定器では一週間くらい使うとどんどん狂って数値が低くなり、窓を開けると200ppmとか地球ではなくなるので、一週間後が楽しみです


コロナ渦では1,000ppm以下推奨

病院や待機施設では1,000ppm以下になるよう空調を調整しているそうです。

一般家庭では2,000ppmくらいは普通に到達しますので、かなり良いコンディションといえるでしょう。

自宅もこれくらいを目指して喚起を心がけたいですな。



DC-CO2-20センサーの注意点


どのバージョンかわからん


DC-CO2-20はいくつかバージョンがあって、バージョン2.9からI2C対応のようです

それ以前のバージョンだとUART(RS232C/TTL)専用だったり、SELECTが逆だったりするようです

幸い自宅に届いたのはV2.9以上のようです

どのバージョンなのかを読み取る方法はありません!

ケースにも袋にも書いてありませんし、I2Cで読んだパラメーターにもそれらしい値はありませんでした

I2Cができなかった場合は、V2.9以外であれば後述の6番ピンを10kΩでプルアップしてみてください。 

V2.6だとプルアップでI2Cのようです。 

プルダウン/プルアップしてもI2Cに反応がなく、UARTで読み出せない場合は壊れているかもしれません...


ピンの幅が2mm


ICチップの2.54mmではなくファン系の2mm幅だったので基盤に直付けできない


I2Cのアドレス変更できない


通常I2Cは異なるアドレスをハードウェアのショートピンなどで変更すれば、同じセンサーを複数I2Cの同一バスにぶら下げられるんですが、これはダメかもしんない
でもひょっとしたら温度センサーみたいにアドレス自動設定かもしんない
2個買えばよかった


実機


センサー工作


さてデータシートの通りに配線します

センサー    機能名                      ラズパイのPIN

1 VCC                        4    (5V)

2 GND                        6    (GND)

3 SDA                        3    (GPIO2) SDA

4 SCL                        5    (GPIO3) SCL

5 RESET                    開放(リセット用に使うかも)

6 I2Cmode=L             9    (GND)

7 PWM                      開放(使わない)

なぁんだ、簡単だね...と思ったらですね、センサーの端子のピッチが2mmだって。

ファンのコネクターに使われるタイプのピッチですね。

ICの幅である2.54mmじゃなかったので、ICソケットに差して使う事ができません。

とりあえず線をハンダで直付けします...センサー交換したい時めんどくさいなぁ


ピカピカ点滅しています。

この時最大200mAも電流が流れます(スペックシートより)。連続だと電池は無理ですね

リセット端子をLにすると止まりますが、内部のマイコン復帰に0.5秒くらいかかるようです 



Raspberry PI側


配線を終了後、Raspberry PIで I2Cが動作するように設定します。

ラズパイのI2Cの設定方法についてはこちらの記事も参考に。

記事中でconfig.txtで50000を指定しているのはクロックを50KHzの設定です。

I2Cは100kbitと10kbitのモードがあるので、まぁ中間あたりを指定しているだけです


ラズパイのCLIターミナル(sudo su - でroot済み)を開けて、

# i2cdetect -l

i2c-1 i2c       bcm2835 I2C adapter           I2C adapter

 

i2c-1 があるので1台検出できました。

続いて1番にどのアドレスが割り当てられているかを見てみます

 

# i2cdetect -y 1

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f

00:          -- -- -- -- -- 08 -- -- -- -- -- -- -- 

10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

以下略


I2Cの1番のアドレス0x08に何か検出しています。

この0x08がアドレスとなるので、i2cgetとかi2cdumpで指定すると値が読み出せます。


DS-CO2-20 のデータシートによると

アドレス 値                        意味
00,01     'BM' 固定
02,03     フレームサイズ。      8byte固定っぽい
04,05     CO2の値。ppm。    これがほしい
06,07     キャリブレーションパラメーター1 hi/lo
08,09     キャリブレーションパラメーター2 hi/lo
0a,0c     チェックデジット。    00から09まで足した値がhi/loで入っている


との事なので、04と05を読み出せば良いようです。

仕事で使うなら12byte全部読んでチェックデジットも計算すべきでしょう。

# i2cdump -y 1 0x08

No size specified (using byte-data access)

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef

00: 42 4d 00 08 03 85 00 00 0c 7e 01 a9 00 00 00 00    BM.???..?~??....

10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................

正しく読めているようです

二酸化炭素の量は4byte目と5byte目なのでw付きでワード読み出しします

  • -yは即座に値を表示
  • 最初の1はI2Cの1番Bus (i2c-1とでていた数値)
  • 0x08はセンサーのアドレス
  • 4は4バイト目から読み出せ
  • wはワード読み出し

# i2cget -y 1 0x08 4 w

0x9403

うん、せっかく4,5byteと読み出したいのにエンディアン逆だ。めんどくせぇ。

 

i2cgetにL/Hを逆に読み出す方法はないようです。古いコマンドだしね。仕方ないね。

bashは16進数変換と四則演算ができるので上位バイトを256倍して下位バイトと足し合わせます

 

# echo $((`i2cget -y 1 0x08 4`*256 + `i2cget -y 1 0x08 5`))


977

おお、部屋は977ppmとの事

自宅にはGC-02という二酸化炭素検出器があるので、その表示は990ppm

誤差23ppmなので一般家庭で使う分には十分です


省電力化


スペックシートによると測定中ピカっと光っている時は最大200mAも流れているんだそうです。

5V電源が常時とれれる環境であればまぁ大丈夫ですが、NETATMOみたいに単四電池で半年とか動作させるなら間欠動作にさせないといけないですね。

5番ピンをLOWホールドにすればRESETがかかった状態で点滅がとまります。

復帰には0.5秒ほどかかるようです。ピカピカ1回分というところかな。

ただ2波式であっても安定には数分かかるらしいので、測定の度にリセットはすべきではないのかなぁ。わからん。 


zabbixと連携


グラフで出せるようになります。

 

zabbixエージェント(クライアント) 


センサーをつけたzabbix_agent.confの設定 

# vi /etc/zabbix/zabbix_agentd.conf


PidFile=/var/run/zabbix/zabbix_agentd.pid

LogFile=/var/log/zabbix-agent/zabbix_agentd.log

LogFileSize=0


Server=zabbixサーバーのIP


ServerActive=127.0.0.1


UserParameter=co2,/bin/bash -c "echo $((`i2cget -y 1 0x08 4`*256 + `i2cget -y 1 0x08 5`))"


AllowRoot=1

Include=/etc/zabbix/zabbix_agentd.conf.d/*.conf


I2Cをsudoしなくても読めるようにする

これはグラフツールのzabbixが読めるようにする設定

group i2cにzabbixを足しておく。AllowRoot効いてないのかなぁ

 AllowRootのせいではなく、usermodコマンドで i2cインターフェイス に権限を渡す必要があるのを忘れていた(前の自分の記事で気づいた) 

最近のLinuxはセキュリティが厳しくて無駄に難しくなってるねぇ 

chmod 777 くらいじゃダメなんだよね(20年前のじじぃ知識) 


# sudo usermod -aG i2c zabbix

 

# vigr


i2c:x:998:pi,zabbix


 

zabbixサーバー


zabbixサーバーのほうでは、zabbix_agentのco2の項目を読み出せばok

# zabbix_get -s クライアントのIP -k "co2"

950




end

2019年8月4日日曜日

知育器の豆電球を使ったニッカドディスチャージ

 電子リレー(IRF520)と電流・電圧測定(INA219) と、近くの文房具屋さんで埃をかぶって売ってた「知育キット豆電球ソケットセット」を使ってENELOOPの放電器を作る。

 ダイソーとかだと知育玩具が売ってなかった。

 amazonのほうが安いんだけどこういう町のお店にはお金使いたいし。

 前に書いたblogの簡単応用

電子リレー(IRF520)のblog

電流・電圧測定(INA219)のblog

 

方針

 豆電球で電力を消費させ、解放電圧で0.9Vになったら放電をとめてENELOOPを痛まないように、なおかつニッカド水素特有の「メモリー現象」の回復(リフレッシュ)を行いたい。

 中途半端に放電した状態で途中充電すると容量が減ってしまうのでこういうのが欲しかった。

 単体の機材は売ってるし、電子回路で自作するものもいくつか公開されている。

 んが、これは負荷をかけた状態で0.9VになったらOFFにするという仕組みで、実はENELOOPにはもう少し電力が残っている。

 最後のひと絞りまで使い尽くすけどいたわり放電というのはマイコン IOT制御ならでは。

 

ハードウェア接続

  • IRF520は GPIO 21(40番ピン)と39番ピン(GND) を接続。pigpio + python3 で制御

     

実際の回路はこちら。1.2Vでは豆電球が暗いので手ブレしてる orz

OS

Rasberry PI の OSは、Raspbian Buster Lite 2019-07-10 のものを使った。

 

Python3の殴り書きソース

$vi discharge.py

#!/usr/bin/env python

# csvに出力したかったのでflush()を使いたい
import sys

# GPIOのコントロール
import pigpio

# sleep用
import time

# 現時刻取得用
from datetime import datetime
# 電力計のライブラリインポート
from ina219 import INA219
from ina219 import DeviceRangeError

SHUNT_OHMS = 0.1

# Raspi GPIO21(40番PIN)を出力設定にする
pi = pigpio.pi()
pi.set_mode(21,pigpio.OUTPUT)
# 電流測定の初期化
ina = INA219(SHUNT_OHMS)
ina.configure()

# 豆電球をoffにしておく
pi.write(21,0)
# 電池はすぐに電圧を復帰しないので、0.05秒待ってやる
time.sleep(0.05)
# 初期電圧を計る
voltage = ina.voltage()
print("%.3f" % voltage)

# 解放電圧が0.9V以上なら、whileでループ
while voltage > 0.9:
    pi.write( 21,1 )      # 電球ON
    time.sleep( 30 )      # 30秒豆電球を点灯
    power = ina.power()   # 消費電力を計る
    pi.write( 21,0 )      # 電球OFF
    time.sleep( 0.05 )    # ちょっとだけ待つ
    voltage = ina.voltage() # 解放電圧を計る
    print("%s,%.3f,%.3f" % (datetime.now().strftime("%Y/%m/%d %H:%M:%S"),voltage,power))
    sys.stdout.flush()    # python3だとこれがないと逐次出力にならない

# これがないと32回目の起動で失敗する。pigpioの仕様。
pi.stop()

 

使ってみた

6:09 に放電を開始、9:26 に0.7Vになったので放電を停止したようだ

2019/08/04 06:09:33,1.352,201.463
2019/08/04 06:10:03,1.348,200.976
2019/08/04 06:10:33,1.344,199.024
2019/08/04 06:11:03,1.340,197.805
中略
2019/08/04 09:25:33,1.032,115.122
2019/08/04 09:26:03,0.988,103.902
2019/08/04 09:26:33,0.752,54.390

この時点で解放電圧をテスター測ってみると、1.02Vもあり、やはり解放電圧は相当高めであった。

 

2019年8月3日土曜日

RaspberryPI + INA219 を使って電圧、電流を測定する

 せっかくRaspberry PI に Zabbix という値を監視して、美しくグラフを描いてくれるツールを入れたので色々監視したくなってきた。

 I2Cの電流/電圧計と安いRaspberry PI Zero W とか使えばいいんじゃね?

 

これを使ってやりたい事

  • 鉛蓄電池の現在の電圧を知りたい

    自作の180Wソーラーパネル4枚 + MPTTチャージャー + 鉛蓄電池(でっかいの8台)+AC100Vコンバーター(サイン波)で自分の部屋の電気をまかなっている

    鉛蓄電池が11Vを切ると電池保護の為にAC100Vを出すコンバーターが出力を止めてしまうので切れる前にZabbixからメールを飛ばして「あと10分で電池切れ!」とかしたい

  • ニッカド電池の電圧を知りたい

    テスターだと解放電圧なので、10mAとか流しながら実測の電圧を知りたい

  • USB電力テスターは買った方が安くて高機能だが、作ってみたい

  • 温度センサーとか10℃でアナログ電圧の1V出すものがあるので水槽の水温とか測りたい

    いやーでもデジタル温度センサーのほうがいいかな..(DS18B20など)

     

とまぁいろいろ夢が膨らむので、まずは電流と電圧を同時に計測できる仕組みがほしい。

 

I2C対応の電流/電圧計

 amazonで見つけたのは5個で¥1,000-(@¥200-)のINA219 DC電流電源センサー(実は中華コピー品だった)

 ±3.2Aまでの電流、26Vまでの電圧測定ができるらしい。200円で。

 注目は±3.2A。ブラスマイナスとあるので、太陽光+充電池の充放電記録に使える!?

 正規のものは¥1,300もするけど、パチモンは¥200なのでそっちを買った。

 この基盤についてるシャント(shunt※)は、0.1Ωのチップ抵抗(!)を使っていて26V / 3.2Aとなんと83ワットも測れる。ほんとかね。まぁUSBの5V 2.4Aくらいなら持つだろう。

(※ shunt : 小さく正確な抵抗を電線の途中に挟んでその電圧差で電流を計る仕組み。主にDCで使うが100Aとかの電流も割と正確に、安価に測れる)

 

 

Rasberry PIの準備

 Raspberry PI3のI2C通信は2組あって1組目は

  • GPIO2(3番ピン)がデータピン (SDA)
  • GPIO3(5番ピン)がクロックピン(SCL)

 電源はラズパイの1番ピンに3.3VがでているのでこれをVCCとして使う。

 最初はpigpioを使ってI2Cを素でアクセスして値を取ろうとしたが、INA219は安い割にはやたらに高機能で、分解能優先、速度優先、消費電力優先、電圧電流アラート送信などいろいろ相反する設定があって、何をどう設定すれば正しく動作するんだか調べるのが面倒くさい。マニュアルぶ厚い。

 面倒くさいならどこかにライブラリがあると思ったので検索したらバッチリあった。

 ありがとうありがとう。

 pigpioとは違い、Raspberry PI のI2C機能をONにする必要がある。

 少し長めなので別blog (ラズパイでI2Cを使う )に切り出した。

 

gitからライブラリを手に入れる

Raspberry Pi Python Library for Voltage and Current Sensors Using the INA219

https://github.com/chrisb2/pi_ina219

このpython用のライブラリをpython3に組み込みむ。

# pip3 が入っていない場合は別途 apt install してください

apt-get -y install python3-pip


# git側ではpipコマンドを使ってますが、python3にも対応していたのでpip3で導入
# 万一古いのが入っているとダメになるらしく、念の為一度uninstallする必要があるらしい
sudo pip3 uninstall pi-ina219
sudo pip3 install pi-ina219

で、gitの例題をそのままコピー

遅くて分解能は低くなるかもしんないけど、全自動で値を読み取る、とREADMEに書いてあった

$ vi iv.py

#!/usr/bin/env python
from ina219 import INA219
from ina219 import DeviceRangeError

SHUNT_OHMS = 0.1

def read():
    ina = INA219(SHUNT_OHMS)
    ina.configure()

    print("Bus Voltage: %.3f V" % ina.voltage())
    try:
        print("Bus Current: %.3f mA" % ina.current())
        print("Power: %.3f mW" % ina.power())
        print("Shunt voltage: %.3f mV" % ina.shunt_voltage())
    except DeviceRangeError as e:
        # Current out of device range with specified shunt resistor
        print(e)

if __name__ == "__main__":
    read()

 

何も繋がず実行してみる

$ python3 iv.py

Bus Voltage: 0.884 V
Bus Current: 0.000 mA
Power: 0.000 mW
Shunt voltage: -0.010 mV

Bus VoltageはV+を解放しているのでノイズを拾って0.8Vと出ているようだ。

 エラーが出た?

FileNotFoundError: [Errno 2] No such file or directory: '/dev/i2c-1'

エラーがでた場合は、OSでI2CをONにしていないので、

sudo raspi-config で Interface Options→I2C をONにしてリトライ


それでも同じエラー

/frb/i2c-1 に読み取り権限がないのかもしれません

i2cグループに自分のID(というか読み取らせたい人)を追加します

$ sudo usermod -aG i2c 自分のID

例 : sudo usermod -aG i2c zabbix  (zabbix_agentに読み取らせたかった)
 


ラズパイの電圧を計る

INA219の V+ を RasPIの2番PINに接続する。

V-はどこにも繋いではいけない!!(これは罠だ!!)

V-にGNDを差してしまうと0.1Ωで電源をショートさせてしまう事になり回路が焼けてしまうだけでなく

最悪やけどを負ってしまう。

V-は電流を測るためのマイナス方向への接続。

測りたい電池のマイナス側はラズパイのGNDに繋ぎます

アイソレーションの心配あるけど仕方ない

気を取り直してもう一度実行。

$ python3 iv.py 
Bus Voltage: 5.048 V
Bus Current: 0.000 mA
Power: 0.000 mW
Shunt voltage: 0.000 mV

電源電圧が 5.048V という事がわかった。

V-を使った電流を測定するような配線をする記事は別に書く事にする

 

複数同時接続も可能

INA219のI2Cアドレスは、データシートからは0x40,0x41,0x44,0x45 が選択できる。

https://www.adafruit.com/product/904

 デフォルトは0x40で基盤のADDR0,ADDR1をハンダでショートさせると4台までのINA219を1つのI2C線にぶら下げる事ができる。