Arduinoで動く8pinの小さなマイコンATtiny402に温湿度センサー(DHT20,I2C接続)をつなぎ,7segLED(TM1637ドライバー)で表示してみました。

当初はCH32V003につなぐ予定でしたが,,メモリ不足に襲われ,実績のあるATtiny402に変更しました(^^;;;;;。


ATtiny402は4KBのフラッシュと256BのSRAMというメモリ構成です。





[構成と接続図]

7segLEDは3桁タイプのアノードコモンでセール品(1個40円)です(^^;;;。
上段が温度,下段が湿度で小数第一位まで表示します。温度が零下の場合はマイナス記号と2桁表示にしています。





温湿度センサー(DHT20)はI2C接続で,ATtiny402のデフォルトの対応pinにつなぎます。

LEDドライバーTM1637はI2Cに似たシリアル接続でマイコンと通信します。
アノードコモンに対応して,セグメントの8bitは2個のLEDで共有し,桁を選択するGRIDはそれぞれのアノードに接続します。




[プログラム]

プログラムの定義部です。
TM1637ドライバーはセグメントのフォント?データを持っていないので,数字の表示用のデータが必要です。

ATtinyではArduino言語が比較的コンパクトにコンパイルされます。今回の全プログラムでも約3KBに収まり,まだ1KBぐらいは余裕があります。





setupはTM1637のシリアル接続のピン指定と初期化が主です。





loopの温湿度センサー(DHT20)のI2Cでの読み取り部です。

トリガーをかけて計測し,6バイトのデータを読み取ります。
最初の1バイトはコンディションなので今回は無視しています(^^;;;;;






温湿度の計算と表示部です。

"float"は使わなくても良い計算方法があるとは思いますが,マニュアル通りの計算式に近づけてみました。(本当にこれで良いのかな?(^^;;;;;)

表示では温度が零下の場合分けがあります。
また小数点として二桁目の第7ビットをONにしています。






LED表示部です。

command2は表示桁の指定とセグメントデータを送り,command3は表示の明るさなどを指定します。





TM1637のシリアル通信部です。

I2Cのように,
・clock がHighの時にDIOをHigh→Lowでスタート
・clock がHighの時にDIOをLow→Highでエンド
信号になります。

その間に8bitデータをLSBから送りますが,最後にクロックをもう一度送ってACKとする必要があるのが注意点ですね。





以上,今までにPICAXEのBASIC言語RP2040のPythonでやってきたことの焼き直しですが,,ATtiny402がかなり使えるのが分かって良かったです(^^)。

ATtiny402は少し値段が上がりましたが,それでも購入時で76円でしたので,センサーはもとより,ちょっと良い電池ボックスよりもお安いですからね(^^;;;;。