2017年4月8日土曜日

FlashAir+Arduino+Raspberry Piで温湿度計(4):Raspberry Pi で見える化する〜完成

[This report is also available in English.]

もくじ
  1. 準備〜センサから値を読む
  2. iSDIOを使いながらSDカードを読む
  3. Arduino から Raspberry Pi に測定値を送る
  4. Raspberry Pi で見える化する〜完成

ようやく最終回です。
Arduino から送られてきたデータを Raspberry Pi で受け取り、
Java Script で見える化します。

今回作成する PHP, JavaScript は Github に置きました

おさらいですが、全体の通信シーケンスは次のようになります。


データ収集APIでArduinoからの送信を受け付けます。
受け取ったデータはログファイルに書き込んでおき、
タブレット用表示ページのJavaScriptから参照させる流れです。

Raspberry PiでWeb APIを動かす

Apache と PHP で Web API を作ります。
単にパッケージをインストールするだけです。
ググればたくさん情報が見つかりますので詳細は省略します。
pi@raspberrypi ~ $ sudo apt-get install apache2
pi@raspberrypi ~ $ sudo apt-get install php
pi@raspberrypi ~ $ sudo systemctl start apache2
インストール後、/var/www/html/ に置いたファイルを HTTP 経由で参照できるようになります。

データ収集API

2017年4月3日月曜日

FlashAir+Arduino+Raspberry Piで温湿度計(3):Arduino から Raspberry Pi に測定値を送る

[This report is also available in English.]

もくじ
  1. 準備〜センサから値を読む
  2. iSDIOを使いながらSDカードを読む
  3. Arduino から Raspberry Pi に測定値を送る
  4. Raspberry Pi で見える化する〜完成

前回までで Arduino から FlashAir を使う準備が整いました。
今回はついに FlashAir から Raspberry Pi にデータを送ります。
今回作成したソースコードは Github に置いてあります。

Arduino と FlashAir を接続する

図のように接続します。


SD カードの各ピンの意味は次の通りです。
今回はチップセレクトを4番ピンにしました。
シルク意味
CD未使用
CSチップセレクト
CLK同期用クロック
SDOデータ出力
SDIデータ入力
GNDグランド
3.3V3.3V 電源
5V5V電源


FlashAir から設定値を読み込む

せっかく SD 読み書きと iSDIO の両方を使えるようにしたので、SD カード領域に保存した設定値を参照できるようにします。

2017年4月1日土曜日

FlashAir+Arduino+Raspberry Piで温湿度計(2):iSDIOを使いながらSDカードを読む

[This report is also available in English.]

もくじ
  1. 準備〜センサから値を読む
  2. iSDIOを使いながらSDカードを読む
  3. Arduino から Raspberry Pi に測定値を送る
  4. Raspberry Pi で見える化する〜完成

前回はDHT22で温度と湿度を計測しました。

今回は計測結果を送信、、、と言いたいところですが、その前に FlashAir の iSDIO ライブラリを改造します。

FlashAir の iSDIO と SDカード機能を両立させる

FlashAir Developers のチュートリアルに従うと、FlashAir で iSDIO を使って HTTP 接続できます。
FlashAir Developers:Arduino 向けチュートリアル

ところが、このチュートリアルでは SD カードアクセス機能が殺されています。
このチュートリアルのソースを使っていると Arduino 標準の SD カードライブラリが動作しなくなるので、自力でライブラリを改造する必要があります。

FlashAir+Arduino+Raspberry Piで温湿度計(1):準備〜センサから値を読む

[This report is also available in English]

もくじ
  1. 準備〜センサから値を読む
  2. iSDIOを使いながらSDカードを読む
  3. Arduino から Raspberry Pi に測定値を送る
  4. Raspberry Pi で見える化する〜完成

カミさんが「温湿度計が欲しい」と言うので作ってみました。
Arduino で測定した温湿度計を FlashAir で Raspberry Pi に飛ばして Web 表示します。

【今回のポイント】
  • FlashAir, Arduino, Raspberry Pi を連携させてセンサデータを見える化
  • DHT22 で温度と湿度を計測
  • Arduino で浮動小数を文字列変換
  • FlashAir の iSDIO での WiFi 接続と SD カード読み書きを両立 (次回の記事で解説)
  • Chart.js でバブルチャートを表示 (次回の記事で解説)


完成するとこうなります。


複数の部屋のデータが表示されていますが、温湿度計は1台です。
各部屋の比較をしたいだけなので、1箇所ずつ測定してからデータを重ねました。

温湿度計自体はこんな感じ。
顧客(カミさん)からは「思ってたのと違う」という賛辞をいただきました。



全体設計

2017年3月19日日曜日

Raspberry Pi の autofs で NAS のバックアップ

自宅の全てのデータを NAS に保存しています。
NAS は RAID でミラーリングしているとは言え、飛ぶときはミラーもろとも飛ぶので
2台体制で定期的にコピーするようにしています。

2台のメーカーが違っていたり、特定のフォルダだけコピーしたいようなケースでは
NAS が持っているネットワークバックアップ機能では対応できないことがあります。

そこで、我が家では Raspberry Pi で NAS 間のデータバックアップを動かしています。

滅多に変更しないもので、毎回やり方を忘れがちなので備忘録としてメモしておきます。

バックアップの前提

  • NAS2台ともWindowsファイル共有。
  • いつも1台(稼働系)に書き込み。もう1台(冗長系)はバックアップ専用。
  • 冗長系が壊れたら、新しく購入したNASを稼働系にして、元の稼働系を冗長系に置き換える。
  • 稼働系が壊れたら、新しく購入したNASを稼働系にして、冗長系から書き戻す。
    (常に冗長系を旧機種にするため。)
  • NASを再起動しても Raspberry Pi のバックアップ機能には影響がないようにしたい。


IP アドレスの設定

2017年3月12日日曜日

3Dプリンタを温度監視する

以前書いた、Raspberry Pi で3Dプリンタを無線化する方法の続きです。
Web カメラでリモートから監視できるようになったので、クローゼットの棚を3Dプリンタ専用にしてみました。


クローゼットに押し込んで静かになったのは良いのですが、
ちょっと怖いので遠隔監視を強化します。

材料

フィラメントホルダーは amazon で売っていたこれです。 家具の転倒防止用に縦に使うための突っ張り棒を横にして使いました。 通常の突っ張り棒の場合、細すぎてリールの回転が引っかかってしまいます。


カメラは中国製の怪しい暗視カメラです。
リンク先のカメラが私が購入した時のものから変わっているようです。
中華暗視カメラは結構トラブルが多いようなので、購入の際は失敗覚悟で。
赤外線LEDが点灯しないとか、普通のLEDだったとか。
私が購入したものも、ボリュームダイヤルが光量調整ではなくてON/OFFのみでした。
ダイヤル回したら ON というオシャレなユーザインターフェイス。

OctoPrint で映像監視する方法は以前に書いた記事をご参照ください。


温度監視のために温度センサ DS18B20 モジュールを使います。
実はもらいもののセンサー20種セットに偶然入っていました。

DS18B20 センサ単体でも良いのですが、
モジュールにはプルアップ抵抗が内蔵されていて接続が楽です。
ただし、センサ単体とモジュールではピン配列が異なるので要注意。


当然ですが Raspberry Pi。


Raspberry Pi を温度監視

熱暴走を避けるため、Raspberry Pi のCPU温度を監視します。
と言っても、OctoPrint の Plugin を有効にするだけです。
OctoPrint の画面で「Settings」から「Plugin Manager」を開きます。
「Navbar Temperature Plugin」を有効にして再起動すればOK。


室温を温度監視

M3D The Micro はヒートベッドが無いので室温が下がりすぎると造形物が歪みます。
かと言って上げすぎると Raspberry Pi が熱暴走します。
そこで、画面上に室温を表示するようにしました。
(適当な理由を付けていますが、ただ単にやってみたかっただけ。)

2017年1月29日日曜日

iOSアプリにシェアボタンを付ける

iOS アプリ「わたしのほんやさん」をバージョンアップしました。
今回、お気に入りの本を Twitter や Facebook でシェアできるボタンを追加しています。

シェアボタンの作成は非常に簡単です。
ただし、シェア先のサービスでの表示は結構バラバラ。。。

ボタンを配置する


まず、ユーザがタップするためのボタンを配置します。

  1. Storyboard の右下からUIButtonをドラッグしてViewの上にドロップ。
  2. ウインドウ右上の「8」のようなアイコンをクリックし、ViewController のソースを開く。もし他のファイルが開かれてしまったら、図の (2) のところから正しいファイルを選択。
  3. 先ほどドロップしたUIButtonを右クリックのドラッグでViewControllerにドロップ。UIButtonへの参照をメンバ変数として登録する。
  4. UIButtonを右クリックし「Touch Down」をドラッグしてViewControllerにドロップ。タップアクションを IBAction の関数として登録する。


シェアの動作を実装する