aki_iic’s blog

己の欲せざる処人に施す事無かれ、狂人の真似するは即ち狂人なり

コンフリクト

 コンフリクトといってもi2cアドレスのそれであって有機生命体間に稀に見られる通信齟齬ではない。Seeed XIAO拡張ボードに搭載されているi2c OLEDのi2cアドレスは0x78でM5Stack ENV Unit(dht12+bmp280の所謂旧バージョン)を接続するとbmp280のi2cアドレスが0x76のようでOLEDの0x78とコンフリクトする、らしい。事象としてはOLEDの最初の表示は行うが温度は0℃を通知しその後はどちらのデバイスも正常動作しないのでi2cアドレス衝突と推定。回避手段はi2cアドレス変更しか無く拡張ボードのOLEDモジュラのピン設定を変えれば可能のようだが相手がSMD部品でパターン図も未入手故難しそう。ENV UNITの改造は互換性が損なわれるので避けたい。温湿度センサを違うアドレスの素子に変える方法もあるが今使ってる上記センサは他の温度計と表示が0.5℃レベルで一致してるので手放したく無い気持ちが強い。LM60+Teensy3.0+XBeeWifiで構成した時はなかなか温度が合わなくて試行錯誤したので校正済みi2cインタフェースで安価なセンサでArduinoとRPiでサポートされてるセンサが理想なのだが。

 i2cインタフェースで外部機器を接続するなんて20年前ではあまり見られなかった(当時ゲテモノ扱いされた記憶が)がarduino等のシングルチップマイコンやRPiの如き拡張はUSBかi2cかspiかuart以外は機種依存なGPIOポートのみという仕様が一般化すると簡単で拡張性があるi2cが多用されるのも道理でそれ故ユーザがi2cアドレス資源を管理する必要があるという当たり前のお話。i2cは元々家電機器のボード内部インタフェースを想定して設計された仕様(フィリップス故)だからそれを拡張する時点でリスクは覚悟せねばなるまい。事情があるから製品が登場するとはいえi2cアドレス変換やi2c拡張ハブ?は個人的には筋悪技術だと考えるので避けたいところ。

 結論としてはSeeedさんの拡張ボードはお蔵入りで同じSeeedさんのi2cコネクタボードの復帰となった次第。やはりアドレス設定ぐらい自分でコントロール出来る様にボード設計しないと出来合いの代物をただ繋ぐだけなる堕落では上手く行かなかったという教訓で真面目にボード作れとどこぞの神様(ご先祖様かも)の忠告かもしれぬと思ったりする。一度怠けると前の状態に回復する(出来たとして)には相当な労力を要するから運動と同じく日々怠けぬ様技量維持(リハビリ)に励むしかないのであろう(ね)。