2017年4月29日土曜日

iOSアプリ - Oyakodon

世の中でマストドンというサービスが話題になっているようなので勢いだけでクライアントアプリを作ってみました。
名前も勢いだけの語呂で「Oyakodon」。


マストドンとは?

ざっくり言うと Twitter のようなサーバ(インスタンス)があちらこちらに立ち上がっている状態でしょうか。
各インスタンスは独立な存在で、ユーザアカウントも別々です。

ただし、異なるインスタンスのユーザをフォローしたり、他のユーザがフォローしている
外部インスタンスのユーザの投稿がタイムラインに出てきたりと、インスタンス間で微妙な繋がりがあります。

そのため、Twitter や Facebook のように中央集権的に特定の企業が権限を持っていたり、
サーバダウンによってサービス全体が停止することがありません。

マストドンクライアントアプリ - Oyakodon

特徴その1:複数インスタンスのタイムラインをフリック切り替え
インスタンスが分散して存在しているため、マストドンを使っていると複数のアカウントを使い分けたくなってきます。
他のマストドンアプリは設定画面からアカウントを切り替える仕組みになっているものが多いようです。
それはそれでインスタンスを独立に扱えるので良いのですが、多数のタイムラインを一度に見るには不向きですね。

そこで、画面を横フリックすることで次々にタイムラインを見ることに特化したアプリを作ってみました。
とにかくサクサクとインスタンスを切り替えることに特化したので、同一インスタンス内で表示できるタイムラインは1つです。
マストドンには「連合」「ローカル」など複数のタイムラインがありますが、それらの切り替えはあえて設定内に押し込みました。
他のアプリではインスタンス内の切り替えが表に出ていてインスタンス切り替えが設定内なので、このアプリでは逆の考え方ですね。

特徴その2:ストリームタイムライン表示
マストドンのWeb表示の特徴の1つにストリームタイムラインがあります。
ストリームタイムラインではユーザ操作なしでほぼリアルタイムにタイムラインが更新されていきます。
これをアプリでやろうとすると色々問題があるので不採用としているアプリが多いようです。

Oyakodon では問題点に目を瞑ってストリームタイムライン表示にしました。
バッテリー消費が大きいと思うので外出中などの使用の際はご注意ください。
また、若干強引にWebの表示をそのまま嵌め込んだので、時折表示が乱れる場合があります。
おかしくなるケースを見つけた方はご指摘ください。

既知の問題

v1.0 では既知の問題がいくつかあります。
数点については既に修正済みバージョンをAppStoreに申請中なのですがレビューに時間がかかっているようです。
他にも見つけた方はコメント欄等でご指摘いただけると助かります。
  • iOSのバージョンによってはPawoo など一部のインスタンスへのログインに失敗する。
  • Pixiv, niconico などのアカウント連携でのログインができない。
  • ヘッダ部分のタイトル等は不要。

今後の機能拡張予定

AppStore レビュー欄や Twitter, mstdn.jp などでもご指摘をいただいていますが、
今後、次の点について拡張する予定です。

  • タイムライン切り替えを快適にする目的の拡張
    - タイムラインを表示する順序の並び替え機能。
    - 広告削除手段
  • iPhone/iPad を立て掛けてタイムラインを流しっぱなしにする目的の拡張
    - 横向き表示
    - ヘッダ部分を一切表示しない設定
    - iOSのスリープを無効化する設定
  • マストドンをマルチインスタンスで利用する目的の拡張
    - インスタンス追加の画面の改良
    - インスタンス追加の画面で他のインスタンスを紹介

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 が熱暴走します。
そこで、画面上に室温を表示するようにしました。
(適当な理由を付けていますが、ただ単にやってみたかっただけ。)