obnizのパーツライブラリにある温度・湿度センサー「SHT20」。パーツライブラリ以外にあまり情報がないので、起こったトラブルとその対処法を記録に残します。
温度・湿度センサー「SHT20」購入
SHT20は、Amazonで900円くらいで買えます。
ピンのはんだ付けは必要でした。
パーツライブラリのコード調整
SHT20のピンは4本ですが、サンプルコードでは6本指定があります。
1 |
var sensor = obniz.wired("SHT20", {vcc : 0, sda:1, scl:2, adr:3, gnd:4, addressmode:5}); |
adrとaddressmodeは、指定しなくても問題なく動作しました。
たまに出るエラーに注意
温度、湿度を定期的に取得していると、たまに下記のエラーが発生します。
i2c0: writing error. Communication Failed. Maybe, target is not connected.
エラーは大きく2パターンあり、数値を取得できない場合と、-2で取得する場合です。
特に気温-2度は、ありえる数字なので要注意です。
エラーの対処法
使う場面で対処は異なりますが、今回はエラーや不正値の場合、前回の値を代入する対処とします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
const obniz = new Obniz("obnizID"); let temp, humid; obniz.onconnect = async () => { const sensor = obniz.wired("SHT20", {vcc: 0, sda:1, scl:2, gnd:3}); const timer = async () => { let t = await sensor.getTempWait().catch(e => { return temp; //前回の値代入 }); let h = await sensor.getHumidWait().catch(e => { return humid; //前回の値代入 }); //不正値の場合前回の値代入 if(t === -2){ t = temp; //前回の値代入 } if(h === -2){ h = humid; //前回の値代入 } temp = Math.round(t * 10) / 10; humid = Math.round(h * 10) / 10; console.log(temp, humid) }; setInterval(timer, 1000 * 60 * 10);//10分毎 }; |
sensor.get・・・でエラーがでたら前回の値代入。
これだけでは解決せず、-2と取得することがあります。
センサーで取得する気温や湿度の値は、少数点15位くらいまであり、-2ピッタリになることはまずありえません。
もし、-2だった場合も、前回の値を代入することにしました。
追記:超高温・高湿度エラー
まだエラーが発生しました。
まれに、気温が「53.1℃」とか、湿度「96.8%」とか、異常に高い数値を取得してしまいます。
window.onerrorで、ブラウザがエラーを感知した時、前回の値を代入するように追記して、様子をみます。