ちょっと Tea Time!? ボケ防止?(温湿度、気圧計 AHT20+BMP280を使ってみる)
2025.5.20
就寝前に寝床とノートPCで通販サイトをサーフしていたら、安価なモジュールを見つけたので
買ってみました。なにやら、温湿度だけでなく気圧もはかれるそうです。
別に、温湿度なんか計ろうとは思っていませんが、こういったデバイスを使ってみたいなあ〜という
好奇心だけです。
それに、使うためには英文マニュアルを読んで、中身を理解して、プログラムを書いて、となると
ボケ防止にはちょうどいいテーマです(笑。
まあ、ボケ防止だけでなく、これから暑くなる季節ですから温湿度をモニターできるのはいいかもです。
とはいえ、暑くなったらすぐ冷房いれちゃうので関係ないけどなあ〜。
こんなものが安価であったので、買ってみることにしました。
届いたものはこれだけです。マニュアルなんかありません。いつものことなので、慣れました。
中身はシンプルでいいです。
まずはデータシートを入手
つかっている素子はAHT20というものと、BMP280というものなので、ネットでデータシート
を探してきます。
AHT20.pdf
BST-BMP280-DS001-11.pdf
なんと、気圧計ってBOSCHの製品なのね。こんなものも作っているんだ!
データシートをみていると、AHT20(温湿度計)は、簡単に使えそうです。
それに対してBMP280は、データシートの分量も多いし、理解するには結構時間がかかりそうです。
まあ、目的のボケ防止にはいいでしょう!
まずはAHT20から(温湿度計)から
どうやら、必要になりそうな情報は下記の2ページ程度のようです。
まとめると、
I2Cアドレスは0x70 です。
送出データは下記になります。
初期化 : 0x70 + 0xBE + 0x08 + 0x00
測定トリガー : 0x70 + 0xAC + 0x33 + 0x00
トリガーをかけると75ms後にデータが読み込める。
(ステータスをチェックしてもよい)
読み込み : 0x71+ステータス+5バイトデータ(前半2.5バイトが湿度、後半2.5バイトが気温)
リセット: 0x70+0xBA (リセットには20ms必要)
ちょっとややこしいのが、データ5バイトの内、中央のバイトは前後半で湿度と気温情報が混ざっていることでしょうか。
まあ、とりあえず動かしてみましょう!
動かしてみる!
すでにI2Cで動いているボード(検討中のゲインフェーズアナライズ)の拡張コネクタにとりつけです。
基板にはI2Cのプルアップ抵抗(4.7k)がついているので、あってもいいのですが、とりあえず重複するので
とりはずします。そして、コネクタをとりつけて基板に接続です。
I2Cのプルアップ抵抗は取り外しておきました。
こんな形でコネクタを取り付けです。
検討中のゲインフェーズアナライザの拡張コネクタに取り付けです。
適当なデータシートだなあ〜 2025.5.26
こういったデバイスをつかうときに、勿論データシートはよみますが、本文をじっくり読むというより、
図表を頼りにすることが多いです。というのも、そこにほとんど重要な情報がありますし、
タイミングなどはそこから読み取ることが多いです。
しかし、このデータシートですが、かなりつくりがいい加減です。
I2Cのタイミングチャートなんかは、どこかの図表をBMPでコピペしたような解像度です。
それに、タイミングチャートの記号と表の記号が全然一致しないので、何をいいたいのか
サッパリです。それに単位の間違いもあります。データのセットリングタイムが100usなんて
有り得ません。そこは100nsでしょう。表の単位は上の行から単純にコピペしたからでしょう。
PDFで拡大すると、文字は綺麗だけど図表はボケボケ。おそらく、どこかの図表の
BMPでのコピペでしょう。
これなんか酷いなあ〜。マークの表示が全然一致していないし、それどころか
単位までまちがっていると思われます。DATA SETTING TIMEが最小で100us
なんてありえません。100nsの間違いでしょう。それにSETTING TIMEってあまり
いわないなあ〜。SETUP TIME かSETTLING TIMEが普通ではないかなあ〜。
こんなデータシートの製品ですが、ほんとに動くのかなあと心配になってきます。
やっぱりなあ〜
最初にデータシート通りのシーケンスで動かしてみましたが、うまく動きません。
受信時にI2Cでエラーが発生して停まってしまいます。受信時のエラーというのも
よくわかりません。なんせデータをうけとっているだけですから、エラーになる要素
なんてないのになあ〜。
色々と試してみて、どうやら受信時にマスターからACK(Lレベル)を返すか、NACK
(Hレベル)とするかが重要でなようす。すなわち受信データの途中ならACKを返して、
最終データの後はNACKにしないといけないようです。これって、I2Cの常識なのかなあ〜?
とにかくI2CではSTOPを送ったら、終了となるはずだと思うのですが。
どうやら、最後の受信データのあとにACKを送ると、AHT20は次のデータの準備をしてしまうけど、
そこにストップビットが送られてくるものだから内部でエラーが生じてハングアップしてしまうような感じです。
これって、I2Cデバイスとして問題ありじゃないかなあ〜。
とにかく、ストップビットが送られてきたら、処理を停止してスタンバイ状態になる必要があると
思うのだけどなあ〜?
とにかく、正常に動かすために、マニュアルの正誤です。
データを読み込む場合の最後はNACKにする必要があります。
STATEのみを読み込む場合も、最後はNACKにする必要があります。
まあ、ある意味、すこし勉強になりました。
まだ気温が24℃、湿度が55%なので快適です。これから暑くなるのだろうなあ〜。
バーナ―で基板を炙るとみるみる温度が上がっていきます。このセンサって何度までつかえたっけ?
次は気圧計
(つづく)