IoT何をいまさら(57) M5Stack, ENV UNIT

JosephHalfmoon

以前に購入させてもらったものの、眠っていたセンサがありました。M5Stack用のENV UNIT、環境センサユニットです。お手頃価格で温度、湿度、圧力が測定できるもの。だたちょっと引っかかるところがあって買った直後に後回しにしてそれっきりなっていました。今回ある切っ掛けがあり動かしてみたのです。このセンサユニット、M5Stack GrayのGroveコネクタに接続するのですが、I2Cバス上に5Vのデバイスと3.3Vのデバイスが混在しているのに、レベル変換ICとか無しで平気で動く。なぜなの?根性だせば出来る?

ちょっとやる気になった切っ掛けはSwitchScience社のWebみていて気付いた「悲しいお知らせ」です。引用させていただきます。

私は、DHT12センサに各段の思入れはないのでありますが、デバイスのディスコンの報に接する度、ちょっと悲しい。DHT12センサ(温度、湿度センサ)は購入済のM5Stack用のENV UNITに搭載されております。一度も使わない内に「悲しいお知らせ」かい。とりあえず、サンプルプログラムくらいは動かしておかないと申し訳ない。。。

ということでサンプルプログラムをビルドいたしました。M5Stack用のライブラリの中に、サンプルプログラムが入っているので、それをビルドしてM5 Stack Greyに書き込んでみます。なお、下のスクリーンショットのnote:のところに書いてありますが、Adafruit_BMP280ライブラリが未インストールの場合は、ライブラリのマネージャを呼び出して、インストールしておかないとなりませぬ。

まあ、サンプルプログラムなので、ビルドにも書き込みにも何の問題もありません。ただ気になるのが、I2Cバスの電圧問題。以前に M5StackのGroveコネクタ という回でも書いているのですが、M5Stack GreyのGroveコネクタに出ている信号は以下の4本であります。

  • GND
  • 5V電源
  • SCL(I2Cのクロック)
  • SDA(I2Cのデータ)

ここでSCLとSDAはM5Stick Greyの内部で抵抗介して3.3Vに吊り上げられている、というのが、「M5StackのGroveコネクタ」の回での結論でした。出ている電源は5V、でも信号線は3.3V。

さて、ENV UNITには DHT12温度湿度センサと、BMP280気圧センサの2つが搭載されています。Switch Science社のENV UNITのページ掲載の回路図によれば、

  • ENV UNIT内部にレギュレータを持っており5Vから3.3Vを生成
  • BMP280は3.3V電源デバイスなので上記の3.3Vを与えて動作させている
  • DHT12は3.3Vでも5Vでも動作可能だが、こちらは5V電源に接続
  • SCLとSDAは、4.7kΩの抵抗を介して5Vにつりあげている
  • DHT12のSCL, SDAだけでなくBMP280のSCL, SDAも上記のSCL, SDAに接続

どちらの信号線もチップ側はオープンドレインでしょうが、コネクタを接続すれば、5Vに吊り上げられた信号と3.3Vに吊り上げられた信号が接続されてしまう。

とりあえずコネクタ接続前に、M5Stackの信号線を取り出して(グダグダの空中配線なので不安定なのはお許しください)久しぶりのAnalog Discoveryで観察。まずは、SCL。やっぱり3.3Vでクロック出ているように見えます。

念のため、SDAも。やっぱり3.3V。

意を決して、コネクタを差し込みます。ま、当然ですが、

M5StackのLCD上に、温度、湿度、気圧が表示された

です。動いているところは上のアイキャッチ画像を御覧ください。問題なく動いておりますよ。そのときのI2Cバスの波形はというと、こんな感じ。まず、SCL。3.7Vか、3.8Vくらいまで振れていないか?

次にSDA。こちらは、3.6Vくらい?SCLもSDAも明らかにコネクタ接続前より、

振れ幅増えてね

DHT12は5Vデバイスなので壊れることはないにせよ、5V電源に対して3.5Vちょいくらいまでしか、信号のHighが来ないけれど大丈夫か?データシート見てみると、Vihは電源電圧の70%(中国語だったので多分)、電源5Vであれば3.5V。ギリギリだな。

一方、BMP280は3.3Vデバイスです。こちらは壊れないのか心配?データシートのThe absolute maximum ratingsを恐る恐る眺めてみれば、Voltage at any interface pin のMaxとして記載されているのは、VDDIO + 0.3 V。回路図によればVDDIOにもレギュレータ生成の3.3Vが接続されています、つまり許容限界3.6V。わずかに超えているような気もするけれども、微妙。

UNIT側のプルアップ5V4.7kΩに対して、内部で3.3V1kΩくらいで吊り上げたら、「間をとって」3.6Vくらいに落ち着くのかしらん。。。この実例を見る限り、動いてしまうので「電子工作的にはOK」なのかな。 でもまったくマージン無いように見えます。「量産、電子デバイス的にはマズイ」だろうなと。「良い子はマネしないでください的な」。どうせ回路図見るような人しか買わないのだろうから、いいのか。。。

IoT何をいまさら(56) BLE SniffingツールでWireshark へ戻る

IoT何をいまさら(58) SeeedStudio、Wio Terminalへ進む