ラズパイと温度センサで部屋の室温をブログに公開してみた

実際の回路

メインブログのほうで、ラズパイ2と温度センサを利用してブログに管理人宅の部屋の温度を公開する回路を作ってみました。

これで、自分(管理人)が部屋の温度を確認できます。

ただ、一からコードを書くことはできないので、世の中(ネット)に出回ってるサンプルコードを組み合わせています。

一度、ラズパイ・マイコン・温度センサ(LM35)で作った回路を、ラズパイ・温度センサ(ADT7410)に変更してます。

プログラムや回路はありません。製作途中の話や現在発生してるバグについて書いてます。

ラズパイで何か作りたかった

元々サーバー用にと購入したラズベリーパイですが、購入してから4カ月ほどOS入れただけで使っていませんでした。

で、WordPressのブログをVPSで行う必要があって(WordPressはPHP・MySQLで動くCMS)、VPSを使う前にローカル環境でテストしていました。

それから、VPSを使うことが無くなり一般的なレンタルサーバーを利用すことになったのでラズパイの出番も無くなり・・・

なので、ラズパイの特徴でもある電子工作を始めたかったのですね。

ラズパイで電子工作を始める前に、以前専門学校のような所の「電子情報科」に行ってたこともあって、その時にマイコンに興味を持ち始めたので、ある程度知識はあった。

といっても回路やプログラムに理解しているというよりは、「こういう動作になる」程度。PWMでさsin波出すとかLCDに数字を文字列に変換させて表示させるとかはサンプルコード使わないと動かせないレベルです(;^_^A

電子回路も同様で、スイッチのプルアップは分かる程度。まあ、色々動かすことは好きなんだけど論理的に理解するのが苦手です。だから数学なんかもダメ(+_+)、オームの抵抗でさえネット上のツールに頼ってます。

理論とか理解できてないレベルですが、自前で(学校とは関係なく)購入してたマイコンや電子部品の中に温度センサもあったので、ラズパイで部屋の温度を測定することにしました。

ラズパイで温度センサLM35を動かせないのでマイコンを経由することにした

ただ、温度センサはLM35という電圧が変化するアナログタイプのセンサなので、AD変換が搭載されていないラズパイだと使うことが出来ないのです。

ラズパイでLM35を利用方法を考えて

  • AD変換モジュールを使う
  • マイコンでAD変換してマイコンとラズパイで通信をする

と思いついたのはこの2点。AD変換モジュールはラズパイ購入時に一緒に買った入門書に書いてあった。

手元には、AVRマイコンがあり、AD変換モジュールは持ってません。なので、AD変換モジュールを購入する必要があったので、温度センサLM35をマイコンでAD変換をして温度に置き換えて、ラズパイとシリアル通信することにしました。

ラズパイの特徴でもあるネット接続で室温をブログに表示させる

ただ、マイコンで温度を読み取るだけだとラズパイは要りません。ラズパイにはマイコンと違いネットと接続できる特徴があるので「ブログに温度を表示させよう」と考えました。

マイコンとラズパイの通信にはシリアル通信(UART)を使います。I2Cも考えたけどマスター側は以前やったことあるのですが、スレーブ側が未経験なので諦めました。

ラズパイとPYthonで知りある通信はここ参考。

Pythonでシリアル通信 - Qiita
pySerialを使ったシリアル通信 未だに組み込み系においては何かとお世話になるシリアル通信。最近ではRaspberry Piなどの組み込みようとに使えるLinuxボードが出てきているので、Pythonからシリアル通信が使えると...

これでマイコンで取得した温度(情報)をラズパイで扱うことが出来ます

しかし、ローカル環境にあるラズパイに外部のネットワークからアクセスする方法はやったことが無いので不明です。ルーターの設定で行けそうなんだけど分からない。

なので、思いついたのがFTPで温度のファイルを上げること。

ラズパイはPythonが使えます。そのPythonでFTP接続してファイルをアップロードする方法がネット上にもありました。

【Python】FTPでサーバーにファイルをアップロード
この記事では、Python言語とFTPでサーバーにファイルをアップロードするプログラムについてソースコード付きで解説します。

アップロードするファイルはJavaScriptにしました。温度のjsファイルをブログのHTMLファイルで読み込めば表示される仕組みです。

ブログはWordPressなのでPHPも使えるんですけど、JavaScriptが手軽で簡単そうです。

室内温度をブログに表示させるブロック図

室内温度をブログに表示させるブロック図

こんな感じでやり取りします。

実際の回路

実際の回路

実際の回路です。ブレットボードにAVRマイコンと温度センサ(LM35)が付いています。あとは電源用LEDだけで、抵抗は使っていますがシンプルです。

本当はノイズ対策とかしたほうがいいのだろうけど、結果的に動いてるので大丈夫でしょう。

ブログに表示させてる温度

ブログに表示させてる温度

ブログのサイドバーに表示させてる温度です。

時計の温度計とラズパイ・マイコン

時計の温度計とラズパイ・マイコン

これで約1年間は運用していました。

回路シンプルにI2C温度センサ購入して改良

ただ、AVRマイコンを別の用途に使いたかったのと回路をもっとシンプルにしたかったので、地元のマルツで温度センサを購入しました。ついでにラズパイ Zero WHも購入して、こっちでもいろいろ。

ラズパイ Zero WH購入は、今まで使っていたラズパイPi2をサーバーが落ちてないか定期的にチェックをしてたのもあって、あまり電子工作用(テスト用)に使いたくなかったから。

ラズパイと温度センサ(I2C)

ラズパイと温度センサ(I2C)

これをブレットボードで作りました。

ただ、ブレットボードとラズパイとのI2Cにノイズが載ってるようで時々通信エラーになります。また、温度センサのピンヘッダを指で触れてもエラーになります。

なので、ユニバーサル基板で作り直いしました。温度センサは直付けではなくてピンヘッダーで抜き差しできるようにしてます。

基板化した温度センサの回路

基板化した温度センサの回路

同じI2CのLCDに温度を表示させました。ほとんどピンソケット使用なのでなんちゃってブレットボードに近いですね(笑)

ただ、ラズパイZERO WHは動作確認用です。なので、後で、ラズパイ2に変えてプログラムも少し修正してFTPでアップロードしてます。

ブログに室内温度表示の改良版

ブログに室内温度表示の改良版

改良して表示させたのがこれです。以前とあまり変わってませんが、cssで温度毎に色分けするようにしています。

プログラムにちょっとしたバグが。ある温度条件で色が表示されない

ただ、プログラムにバグがあります。10度未満になると表示される色が指定の色にならず、白になり背景と同化して見えない。

  • 10度未満になると色分けの条件が40度以上になる
  • 40度以上はCSSで文字(数字)をグラデーションにしてるが表示が白になる
  • 40度以上になることはないと思うので、とりあえずCSSを10度未満の色に変更

と課題があります。多分条件指定にしてる整数部分(文字列)の桁のif文が間違ってるな・・・[9]度なら[09]にしてるとかで10度未満の条件に入らない。

これは修正が必要ですね。後日(いつか)やる予定です。

この電子工作ブログでも温度表示させました

このブログでも温度を表示するようにしました。

この電子工作ブログにも温度表示

この電子工作ブログにも温度表示

サイドバーに表示してます(15分毎に更新)。

メインブログのほうで書いていたプログラムに、このブログにも温度データのjsファイルをFTPでアップロードするようにしました。「メインブログ・この電子工作ブログ」で2回、温度ファイルをアップロードしてます。

jsファイルの場所「https://coronblog.net/electronic/etc/ondo.js

まあ、このブログのURLの上位ディレクトリがメインブログになってるので、メインブログに置いてある温度データのjsファイルを読み込めばいいんですけどね。プログラム修正してから気づきました(;^_^A

参考資料

AVRマイコンの使い方(ニコニコ動画)

「零からの電子工作」 剣菱P さんの公開マイリスト - ニコニコ動画
「零からの電子工作」 剣菱Pさんの公開マイリストです。

ラズパイでシリアル通信

Pythonでシリアル通信 - Qiita
pySerialを使ったシリアル通信 未だに組み込み系においては何かとお世話になるシリアル通信。最近ではRaspberry Piなどの組み込みようとに使えるLinuxボードが出てきているので、Pythonからシリアル通信が使えると...

PythonでファイルをFTP接続でアップロードする

【Python】FTPでサーバーにファイルをアップロード
この記事では、Python言語とFTPでサーバーにファイルをアップロードするプログラムについてソースコード付きで解説します。

コメント

タイトルとURLをコピーしました