質問: ラズベリーパイ>mm-txs03で温度取得 ラズベリーパイで温度を取得しようとしています。 センサーはmm-txs03でサンハヤトさんから購入しました。気圧と温度が両方取得できるセンサーでlps331apの仕様となっています。 shで取得しようと思っているのですが、データは一応拾っているのですが、摂氏に仕様と計算させても、どうしてもおかしな温度になってしまします。ちなみに、気圧はほぼ合っていると思います。 計算方法をご存じの方、ぜひ教えてください。よろしくお願いいたします。 手動で値を取得した場合 $sudo i2cset -y 1 0x5d 0x20 0x90 $sudo i2cget -y 1 0x5d 0x2b 0xd8 $sudo i2cget -y 1 0x5d 0x2c 0xce $sudo i2cset -y 1 0x5d 0x20 0x00 値の計算 ced8 -> 52952 (16進数 -> 10進数) 42.5+(52952÷480.0)=152.816666667 152度だと、計測場所は体感18度程度なのでかなりかけ離れていると思います。 実際の計算式は下記のとおりです。 #!/bin/bash ### set active mode sudo i2cset -y 1 0x5d 0x20 0x90 pressout_th=`i2cget -y 1 0x5d 0x2b` pressout_tl=`i2cget -y 1 0x5d 0x2c` rawdattemp=`echo "0x${pressout_tl:2:2}${pressout_th:2:2}"` rawdattm=`printf %d $rawdattemp` echo "scale=2;42.5+($rawdattm/480.0)" |bc ### set power down sudo i2cset -y 1 0x5d 0x20 0x00 ---- eof ---- 下記ページを参考に作って見ました。 http://news.mynavi.jp/articles/2014/08/19/raspberry-pi3/002.html http://news.mynavi.jp/articles/2014/08/19/raspberry-pi3/003.html よろしくお願いいたします。
回答: 回答1さんのお礼文にある >符号をつけても外しても16進数の部分を10進数に変換すると同じ値「ced8 -> 52952」となります。 http://news.mynavi.jp/articles/2014/08/19/raspberry-pi3/003.html ここのプログラムの変数定義は short int temp; つまり符号付16bitなので 0xced8 -> -12584 なので 42.5 + (-12584 / 480) = 16.28°C <エコ暖房ですね! 因みにwindows付属の「電卓」なら 表示>プログラマ 左下の「word」 <符号付16bit選択 デフォルトはqword 符号付64bit このままで16進10進変換してはいけません <かなりの人がハマる http://www.ne.jp/asahi/shared/o-family/elecroom/avrmcom/lps331ap/lps331aptest.html にあるlps331ap 日本語マニュアル↓ http://www.ne.jp/asahi/o-family/extdisk/lps331ap/lps331ap_djp.pdf 17/18ページ に詳しい解説があります