Androidのメモとか

ポキオの日記です。今日も遅延してない。

デブサミ2017に参加・展示して気づいたあれこれ

前回は、展示して頂いたコメントをメインで記事にしました。

relativelayout.hatenablog.com

今回は、気づいたことをちょっとメモっておきます。

使ってみたいmBaaS(っていうんですかね)

devsumi2017

隣で展示してたAnbient。ちょっとまえから気になっていました。

mackerel.io

ArduinoとかESP8266が流行ってて、簡単にセンサーで色んな情報を取ることができるようになりました。ただ、その情報を簡単に可視化するのは結構難しいです。特に、僕みたいにウェッブなエンジニアリングが苦手な人間にとってみれば、苦行でしかありません。そこで、上記のサーヴィスを使えば、簡単に無料で情報を可視化することができます。

プラレールで2進数カウンタ

devsumi2017

人生、無駄を省くことは大切かもしれません。でも、全く無駄のない人生は楽しいのでしょうか?

この展示ではプラレールのポイントレールの曲がる方向を0と1を表していて、プラレールが走ると0b000から0b111という感じで増えていきます。(もしかすると、4bitカウンタの間違いでした。ゴメンナサイ。)

誰の得になるのか。何かの役に立つのか。そういうのはいいんです。作ることが素晴らしいし、発想も素晴らしい。バジェット出してくれる会社も素晴らしい。

ExcelCreater

www.adv.co.jp

www.adv.co.jp

JavaC#からExcelファイルが作成できるプラグインのようなもの。Excelと雁字搦めになったプロジェクトや会社ではかなり重宝しそうな予感。Excelはわりと最強なアプリであり開発環境であったりしますが、Excelから離れてGoogle Spreadsheetとかで代用できれば、こういうツールは不要だったりするんですよね。(まぁ、それができないからExcel使ってるんですよね)

つい買っちゃうオライリー

devsumi2017

会場では、翔泳社さんとオライリーさんの本を安く買うことができます。

www.instagram.com

僕もついつい、「Make: Electronics ―作ってわかる電気と電子回路の基礎 」を買ってしまいました。定価から10%オフ、そして消費税分も割引。かなり安く買えました。

デモにはトラブルはつきもの

一応、会場のAPが有ったので、それ経由で通信するコードに、その場でライブコーディング。モバイルバッテリーでも動くように、ESP8266のDEEPSLEEPも封印し、delay()でLoopするように変更。

#include <ESP8266WiFi.h>
#include <WiFiClient.h>

char ssid[] = "会場のSSID";
char password[] = "会場のPASSWORD";

char unkopage[] = "unkou.keikyu.co.jp";
int led = 14;
int intervalSec = 10 * 60;

void setup() {
  pinMode(led, OUTPUT);
  digitalWrite(led, LOW);

  Serial.begin(115200);
  Serial.println("");
}

void loop() {
  connectWifi();
  String result = getPageSource();
  Serial.println(result);
  disconnectWifi();

  if (result.indexOf("unko-panel") < 0) {
    Serial.println("取得エラー");
    delay(5000);
  } else if (result.indexOf("平常") < 0) {
    Serial.println("遅延してるかもしれません");
    blinkLed(intervalSec * 1000, false);
  } else {
    Serial.println("平常通り運転してます");
    //    ESP.deepSleep(intervalSec * 1000 * 1000, WAKE_RF_DEFAULT);
    delay(intervalSec * 1000);
  }
}

void connectWifi() {
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    blinkLed(1000, true);
  }

  Serial.println("connected!");
}

void disconnectWifi() {
  WiFi.disconnect();
  Serial.println("disconnected!");
}

String getPageSource() {
  WiFiClient client;

  if ( !client.connect(unkopage, 80) ) {
    return String("");
  }

  client.print(String("GET ") + "/" + " HTTP/1.1\r\n" +
               "Host: " + unkopage + "\r\n" +
               "Range: bytes=8000-9000\r\n" +
               "Connection: close\r\n\r\n");
  client.println();

  delay(1000);

  String body = "";

  while (client.available()) {
    body += client.readStringUntil('\r');
  }

  return body;
}

void blinkLed(int msec, boolean fast) {
  int totalTime = 0;

  while (totalTime < msec) {
    int onTime;
    int offTime;

    if (fast) {
      onTime = 5;
      offTime = 95;
    } else {
      onTime = 5;
      offTime = 995;
    }

    digitalWrite(led, HIGH);
    delay(onTime);
    digitalWrite(led, LOW);
    delay(offTime);
    totalTime += onTime + offTime;
  }
}

なかなか会場のWi-Fiが詰まり気味だったりして、情報が取りづらい状態になることもありました。そして・・・

京急が全然遅延しないという事態。いや、遅延しないのはいいことなんですが、肝心のLEDが全然光りません。デモ的にはちょっとアレでした。

やっぱり光り物は強い

マシコムさんのウクレレとか、ギャル電さんとか、本当にキラキラしてました。

devsumi2017

www.instagram.com

やっぱり、光るとインパクト強いですしね、オーディエンスも必然的に多くなります。ちょっとうらやましいですね。京急も光り方が弱いんですかね・・・。

どうでもいいこと

devsumi2017

  • 目黒の天狗(居酒屋)はいい
  • 名刺を忘れてはいけない
  • デブサミの参加登録を忘れてはいけない
  • 雅叙園Amazonオフィス(アルコタワーアネックス)のエスカレーター経由で行くと、坂道を登ったり下ったりしなくて済む
  • 品川⇔目黒は都営バスが走ってる
  • 品川⇔雅叙園は無料シャトルバスが走ってる

www.megurogajoen.co.jp

デブサミ2017に初参戦&コミュニティ展示してきました

デブサミ」に行ってきますって職場で言ったら、「デブばっかり来るのか、暑苦しいな」と言われました。半分あってますが、半分間違ってます。

event.shoeisha.jp

Developer Summit 2017

デブはもちろんデベロッパーのことで、色んなセッションや展示がある、デベロッパーのためのお祭りのようなものです。会場は目黒雅叙園叙々苑かなにかと思ってましたが、実は結婚式場らしいです。

先輩に雅叙園に行ったらトイレに行け」などと謎なことを言われ、全く理解できませんでしたが、実際に行ってみると・・・

雅叙園

トイレに小川が流れてる・・・

雅叙園

個室はまるで竜宮城・・・

雅叙園

天井を見ると金色の屏風のようなものが・・・

なんかすごいところに来てしまったようです。

コミュニティ展示として参加

event.shoeisha.jp

毎度お世話になっているIoTLTさんのメンバーとして参加させていただきました。展示するネタは・・・例の京急ネタです(笑)

speakerdeck.com

relativelayout.hatenablog.com

ありがたい機会を頂き、ちょっと浮かれていたせいで、デブサミ自体の参加登録を忘れてしまうというハプニングもありました(笑)

Developer Summit 2017

とりあえずコミュニティ展示用のパスを頂き、取り敢えず入場・・・。

Developer Summit 2017

当日登録もさせて頂き、なんとかパスをいただきました。

展示開始

こんな感じで展示。 会場でWi-Fiが準備されていたので、その場でコーディングして、会場のAP経由で通信するように修正しました。

Developer Summit 2017

頑張って、看板やらフライヤーも作ってみました。結果的に大成功で、色んな人が展示を見ていってくれました。

Developer Summit 2017

展示スペースは休憩室の一角をお借りする形になっていまして、定常的に人が見に来ているような感じです。特にセッションとセッションの間は、写真の数倍以上の人が押し寄せてくる感じでした。セッションを途中で聞きに行こうかと思ってましたが、ちょっとそんな余裕がなかった印象です。ただ、お名刺をいただく機会が多々あったものの、名刺入れを忘れてしまって・・・痛恨のミスです。

とはいえ、たまに暇になったりするので、色んなブースを眺めたり、デブサミ缶バッチを買ったり、ぶらぶらしてました。

Developer Summit 2017

どんな缶バッチかというと・・・

Developer Summit 2017

デベロッパーにはたまらない缶バッチですね。

www.instagram.com

和気あいあいと展示(笑)

展示で頂いたコメント

JRもほしい、田園都市線もほしい

ごもっとも。JRの振替輸送受託のせいで京急が遅延することがしばしばあるので、JRの遅延も監視できると嬉しいかも。あとは、遅延が定常的に発生する路線とかだと、「うわーまたかー」みたいな感じでわかって嬉しい(?)のかな。

JRによる遅延なのか分かると良い

そうですね、JRの振替輸送(ry

遅延の理由によって光らせ方を変えたり、本線・空港線大師線逗子線久里浜線の何処で遅延しているのか、判断できれば夢が広かるかもしれません。

どういう使い方をするのか?

最近はオフィスのディスプレイの上に置いています。仕事が一段落して帰ろうかなと思ったときに、チカチカ光ってたりすると、「もうちょっと残業していくか・・・」となるわけです。

基盤剥き出しも味がある

ありがとうございます。個人的なモットーは「最小の工数・クソコードで、クオリティをなるべく最大化する」ことなので、あまり外観には凝ってません・・・。3Dプリンターに精通した方で、外装を作ってくれるような優しい方がいらっしゃいましたら、ご連絡下さい!完全に他力本願でございます。

クソコードですね!

はい。だれかAPI切って下さい・・・。

いくらくらいでできるの?

だいたい1000円以下でできます。

  • ESP8266開発ボード(大体400円@eBay)
  • カプセルプラレール(大体200円)
  • Arduino Holder(余所行き用、5枚で1000円位。1枚200円)
  • ジャンパワイヤ・LED(タダ同然)

音(ドレミファインバータ)がほしい

ですよねー。ちょっと検討します。

というわけで

立ちっぱ疲れました。ビール飲みたいです。

気になった展示等、色々あったので、おいおいブログに書こうと思います。

日本Androidの会 2017年2月定例会「Android Things」に行ってきました

Android Thingsは、なんとなく興味があるものの、そこまで本格的に手を付けられていないので、いい機会だと思い聞いてきました。

japan-android-group.connpass.com

場所は六本木ヒルズ

六本木ヒルズ

職場も同じ港区の品川ですが、六本木は行き交う人のクオリティが全く違う、お洒落な大人の街です。自分には不釣り合い過ぎてアウェーな感じを味わいました。会場のGoogleさんは六本木ヒルズの中。トップオブアウェー。

グーグル

グーグル!

聞いてきた内容のメモ

Android Thingsとは

  • 2016年に発表されたAndroidをベースとしたOS
  • Raspberry Piなどで動作可能なくらい軽量である(電話など、IoTに不必要なものは削ってある)
  • 現在、Preview版としてリリースされている

Android Thingsの特徴

  • 単一のアプリしか動かない
  • Things Support Libraryを使うことでGPIOやSPI/I2Cなどの入出力が扱える
  • コンテントプロバイダや、インテントなどは存在しない
  • 基本的にディスプレイは不要(一応GUI操作はサポートされている)
  • HomeActivity :唯一のアクティビティ
  • Google Servicesの一部はつかえる(UI系は一切使えない)
  • UIがないのでRuntime Permissionはなく、Manifestに書けばオッケー
  • Notificationはない

要は、Androidと同じようにJavaで開発できて、UIも作ろうと思えば簡単に作れて、さらにGPIOも扱える、と。そんな感じでしょうか。定例会中で行われていたデモは、かなり初歩的な内容だったので割愛。

[asin:B01CCOXV34:detail]

Android Thingsってどうなの?

プロトタイピングだったり、電子工作だったり、そういうものを作りたいと思えば、今は簡単にできてしまう時代である。それ故に、わざわざAndroid Thingsを使う必要があるのか、何が嬉しいのか、ちゃんと理解した上で使いたい。

(スマホだと表が正しく見られません。ごめんなさい。)

- Android Things
on ラズパイ
Android
スマホ(アプリ)
Raspbian
on ラズパイ
ESP8266 Arduino
値段
主な言語 Java*1 Java*2 Pythonなど Cっぽい言語 Cっぽい言語
GUI
XMLで簡単につくれる

XMLで簡単につくれる

Qtとかちょっとだるい

基本UIなどない*3

基本UIなどない*4
GPIO
バッテリー
消費電力多

バッテリー内蔵だけど・・・

消費電力多

低消費電力

低消費電力
Wi-Fi
内蔵

内蔵

内蔵

内蔵

内蔵してない*5

個人的な主観が入り交じった表を書いてみた。やっぱりAndroid Thingsの肝はGUIが簡単に作れるというところなのだろうか。とはいえ、Android ThingsでのGUI無くても良いというスタンス。GUIが要らないならAndroid Thingsをわざわざ使う必要って・・・Javaが好きとか?(笑)Google Services系が使えるのはアツいのかな。

ESP8266は基本的にディスプレイを使わない用途が多いが、データを上げて、それがWeb上で見られれば良いようなユースケースだったらペインにはならないだろう。結局、何がしたいかによって、何を使うべきなのか変わるし、まぁ好きなの使えよっていうことなのかしら。

(いやいや、こういうユースケースだったらAndroid Things最強でしょ、みたいなのがあれば教えてください)

というわけで

とはいえ、Android Things使ってみたいですね、とりあえず。諸事情でRPiが手元からいなくなってしまったので、だれかRPiくださいたのむ。

developer.android.com

*1:クロスプラットフォームな開発ツールをつかえば、どんな言語でもイケる

*2:クロスプラットフォームな開発ツールをつかえば、どんな言語でもイケる

*3:ディスプレイとか売ってるけど、難しい描画とかは無理

*4:ディスプレイとか売ってるけど、難しい描画とかは無理

*5:内蔵してるやつもあるけど

スマホ(Android)でLTの発表をするためのTIPS

LTやプレゼンはラップトップで行うのがセオリーかもしれません。ただ、ラップトップは重たかったり、かさばったり、アレなんですよね。

なので、最近は勉強会での登壇の際は実はスマホでやってたりします。スマホでの発表で困ったことや良かったことなどをまとめておきます。

スマホから映像を出力する

スマホからの映像出力といえばMHLが有名ですが、私はSlimportという規格を使っています。

http://jp.slimportconnect.com/jp.slimportconnect.com

Slimport対応のスマホは少ないですが、MHLと違い外部からの給電が必要ないので、出先での映像出力などにはモッテコイの規格です。とはいえ、実はNexus5などのLG端末にも対応していたりして、意外と対応端末は多かったり(主にLG製端末)。

スマホでプレゼン

で、私が使っているのはauから発売されていたLGのG Flex(LGL23)です。

www.au.com

2014年に発売された端末で、OSもAndroid 4.2.2止まりだったりしますが、バッテリー容量は3500mAhとかなりの大容量。勉強会でガシガシ使っても電池切れの心配もありません。しかもSIMロック解除済み。au系のSIMでなくても使えるようにしています。

スマホでプレゼン

で、アダプターはこれ。eBayで買いました。

スマホでプレゼン

出力はHDMIVGAの2系統。勉強会の会場の設備が、HDMIのみだったりVGAのみだったりしても楽勝で対応ができます。ただし、Neuxs4/5は、このアダプターにかぎらずVGAの出力ができないようです。その点は注意が必要です。

資料作成はGoogle Slidesで

私はこれで資料を作っています。

www.google.com

今までは宗教上の理由でMacKeynoteで作成することが多かったのですが、やはりAndroidスマホでの発表はやっぱりGoogle Slidesが便利なのかなと思い、Google Slidesを使っています。スマホ上でも編集ができたり、スライドを見ながら何を話すかイメトレできたり、何かとデキる子です。

基本はデキる子なんですが、玉に瑕なポイントも・・・。

スマホでプレゼン

Google Slidesの専用ファイルでスライドを作って、スマホアプリ上でオフラインでも使えるようにしても、なぜかスマホがオフラインだとプレゼンテーションモードにすることができません。かと言って、スマホにSIMを刺してオフラインでない状態にすると、表示する度にスライド上のイメージをインターネットから取得しているようで、なかなかスムーズに表示ができなくなります。

スマホでプレゼン

そんなときは、(スマホがオンラインの状態で)スマホアプリ上でGoogle Slides形式からPowerPoint形式に変換してスマホ上に保存すればいいようです。

スマホでプレゼン

PowerPointは宗教上の理由であまり好きではないですが、こんな感じでスマホ上にPPTXファイルが生成されます。

スマホでプレゼン

でもって、オフライン環境でもこんな感じでスライドをフルスクリーンで表示することができます。

スマホでプレゼンしてみて思ったこと

第一印象としては、ちゃんと使えるということ。いまのところ、プロジェクターとの相性問題は発生していません。出力して解像度が荒くなってしまう事態にも遭遇していないので、今後もスマホでプレゼンしたいと思います。

ただ、Consの部分も上げておくと・・・

  • 発表の途中で怪しいLINEや通知が表示されないようにする必要がある。(SIMを入れないほうが良さそう)
  • 待ち受け画面はさっぱりさせておく。悪趣味な壁紙は避ける。
  • スリープに落ちる時間を長くしたり、ロック画面でのパスワード保護を切っておく。
  • 他の発表者のメモをスマホで取らなければならないので大変。(BTキーボードを使えば良いのかな)

こんな感じ。とはいえ、身軽に勉強会で発表ができるのは素晴らしいです。「プレゼン=ラップトップ」という常識を変えるべく、今後もスマホで発表していこうと思います。

というか、会社でも発表資料はすべてLTっぽくしたいな・・・。発表時間5分で質疑応答なし・・・なんて素晴らしいことか・・・。

IoT縛りの勉強会! IoTLT vol.23 @ ソフトバンク で発表してきました

ちょくちょく顔を出させていていただいているIoTLT、今回も懲りずに発表してまいりました。

iotlt.connpass.com

いざ新橋へ

場所はソフトバンクさん。昔、就活で来たことあるなぁ・・・(笑)

IoTLT

近くには日テレ。ちょうどお天気中継をやっていました。あの黄色い怪獣みたいな子も、ダウンジャケット着るんですね。なんかかわいい。 ただ、お天気中継に気を取られてたせいで、迷子になってしまい、日テレの警備員さんに道を聞く事態に(笑)

IoTLT

日テレの警備員さんのお陰で無事にソフトバンクにたどり着きました。特別に受付も用意されていたり、エレベーターホールにも係の人が立っていたり、かなり手厚い対応が印象的で、迷わず会場まで着くことができました。

IoTLT

25Fの社食と思われるスペースを利用して、会場が作られていました。教壇・演壇のようなものができていて、喋る側としてはちょっとプレッシャー(笑)

IoTLT

ちなみに発表者はソフトバンクホークスのユニフォームが貸し出され、これを来て喋ることに。

IoTLT

お父さん卓上カレンダーも頂けて、もう思い残すことはない状態でIoTLTがスタート。

発表してきました

内容は、先日作った郵便受けハック。

relativelayout.hatenablog.com

資料はこちら。今回もスマホからプロジェクターに出力して発表しました。

speakerdeck.com

くだらないネタ発表でしたが、思いの外受けていた印象だったので一安心。

www.instagram.com

ありがたいコメントの数々・・・ありがとうございました。

確かに、カメラと組み合わせたいところ・・・。問題は電源の確保ですかね。

他の方の素晴らしい発表

今回も色んなお話を聞けました。ソフトバンクの係留気球による基地局設置などは面白かったです。特に印象的というか、今後の創作意欲を掻き立てたのはAmbientでした。

https://ambidata.io/

データをポストすると簡単にグラフ化してくれるウェブサービス。しかも無料。個人で立ち上げてるサービスらしく。サービスを運営している方とお話させて頂き、いろいろなアイディアが湧いてきたので、今後の創作活動に活かそうと思います。

ちなみに

ひょんなことからデブサミへの出展が決まりました!

event.shoeisha.jp

お時間のあるかたは是非見に来て下さいー。そして優しく絡んでください! 場所は目黒雅叙園!なんか叙々苑みたいで美味しそう!(違)

ESP8266を使って郵便受けに何かが届いたら連絡してくれるようなシステムを作る

自宅をESP8266をハックするのが楽しい今日このごろ。今回は、郵便受けに着目してハックをしてみました。

郵便受け ESP8266

主役はESP8266。昨年の年末に海外に発注していたものが、年始に届きました。これで今年も遊べそうです。

郵便受けに何かが届いたことをどう検知するか?

これが一番のポイントです。なんとなく考えてみると、

  • 近接センサーをつかって、郵便物を検知する
  • 圧力センサーをつかって、郵便物を検知する
  • リードスイッチをつかって、郵便受けの蓋が動いたことを検知する

色々と検知する方法はあると思います。ただ、ちょっとどのパターンでも材料費にお金がかかりそうだったり、ちゃんと検知できるか怪しそう。そんな感じで悩んでましたが、100円均一で良さげなグッズを発見。

郵便受け ESP8266

リードスイッチが内蔵されているLEDライト。しかも100円。これは郵便受けハックに使えそうです。

郵便受け ESP8266

もともとは、扉にセンサーを取り付けて、センサーとセンサーがくっついているときはライトは光らず。

郵便受け ESP8266

センサーとセンサーが離れるとライトが付く仕組み。このセンサー部分だけちぎって使えば、郵便受けの蓋が開いたことを検知できそうです。

100円均一グッズを郵便受けにつけてみる

こんな感じで取り付けてみました。意外といい感じ。

郵便受け ESP8266

蓋が閉じた状態では電気的にスイッチが開放されていて、ライトは点いている状態。そして、フタが開くとセンサーとセンサーが近づき、電気的にスイッチが短絡されて、ライトが消えました。

工作開始

早速、センサー部分だけ切り取って、ESP8266に接続してみました。

郵便受け ESP8266

郵便受けのフタが開くと短絡することを利用するために、こんな感じの実装にしてみました。

ESP8266

これだけ。

リードスイッチをGNDとRSTにつなぎました。これは何を意味しているかというと、郵便受けのフタが開いたらリードスイッチを短絡させて、ESP8266をリセットさせて、再び郵便受けのフタが閉じたらESP8266のシーケンスを1から走らせるつもり。なので、コーディングはこんな感じ。

#include <ESP8266WiFi.h>
#include <WiFiClient.h>

char ssid[] = "xxxxxxxx";
char password[] = "yyyyyyyy";

char host[] = "maker.ifttt.com";
char url[] = "/trigger/EVENT_NAME_HERE/with/key/KEY_FOR_IFTTT_MAKER_CHANNEL";
int port = 80;

void setup() {
  Serial.begin(115200);
  Serial.println("");

  pinMode(BUILTIN_LED, OUTPUT);
  digitalWrite(BUILTIN_LED, LOW);

  delay(1000); // スイッチはチャタるものなので、1秒位してから処理を始める

  connectWifi();
  httpPostJson();
  disconnectWifi();

  ESP.deepSleep(0, WAKE_RF_DEFAULT); // 引数に0を指定することで、RSTがGNDに落ちることがなければずっとDEEP SLEEPする

  delay(1000);
}

void loop() {
}

void connectWifi() {
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(100);
  }

  Serial.println("connected!");
}

void disconnectWifi() {
  WiFi.disconnect();
  Serial.println("disconnected!");
}

void httpPostJson() {
  WiFiClient wifiClient;
  String json = "{}"; // 空のJSONをおくる(詰めるものがない)

  if (!wifiClient.connect(host, port)) {
    Serial.println("connection failed");
    return;
  }

  Serial.println("http post...");
  wifiClient.println(String("POST ")  + url + " HTTP/1.1");
  wifiClient.println(String("Host: ") + host);
  wifiClient.println("Cache-Control: no-cache");
  wifiClient.println("Content-Type: application/JSON");
  wifiClient.print("Content-Length: ");
  wifiClient.println(json.length());
  wifiClient.println();
  wifiClient.println(json);
}

スイッチはチャタる。疑いようのない事実です。今回は面倒なのでソフトウェア的に、メインのシーケンスを1秒遅れで開始することで回避しています。RSTが複数回GNDに落ちてもきっと大丈夫です。

そして、通知先はIFTTTのMaker Channelにしています。Maker ChannelへのHTTP POSTをTriggerにして、LINEが発火するように仕込んでみました。

そして年賀状が来た

松の内ギリギリに工作したので、日時がアレですが、一応郵便物を検知して、IFTTT/LINEが飛ぶようになっていることを確認。

郵便受け ESP8266

ちなみに、LINEがNotificationをあげると、Pebbleにも通知がくるようになっているので・・・

郵便受け ESP8266

Pebbleも震えるというハイテク感。郵便受けハック、大成功です。

もちろん仕様バグは存在します

大成功とか言ってますが。

  • 郵便受けに取り付けているESP8266の電源を付けた直後は、一通りのシーケンスが走ってしまうので、LINEが発火してしまう
  • 郵便受けのフタが閉まらないくらいの大きな郵便物が届いた際は、RSTがGNDに落ちたまま戻ってこないので、ESP8266がDEEP SLEEPしたままになってしまう
  • 郵便物が届いたことはわかるが、何が届いたかは分からない

そんなバグは抱えていますが、DEEP SLEEPのお陰で、1週間以上動き続けています。さすがESP8266。

ESP8266で自宅での電力消費量を測ってみようと思った(パート5、追記あり)

前回。

relativelayout.hatenablog.com

今回はLINE通知機能を追加

前回から間が空いてしまいましたが、折角なので、ちょっと改造。消費電力が一定以上になったら、IFTTT経由でLINEに通知するようにしてみました。

回路はいつもどおりこんな感じ。

ESP8266

電源は3.3Vにアップコンして供給、イヤホンジャックにはクランプ電流センサーを接続します。

ESP8266

こんな感じで、家の分電盤に接続。

ESP8266 電力メーター

コーディングはこんな感じ

いつもどおりのクソコードです。

#include <ESP8266WiFi.h>
#include <WiFiClient.h>

char ssid[] = "xxxxxxxx";
char password[] = "yyyyyyyy";

char host[] = "maker.ifttt.com";
char url[] = "/trigger/TRIGGER_NAME/with/key/KEY";
int port = 80;
int power = D1;

double threshold = 20.0; // しきい値は20A。それ以上の場合はLINE通知する。
int trial = 0; // しきい値を超えていなくても、死活監視のため6時間おきくらいにLINE通知する。
int checkInterval = 60 * 1000; // 1分おきに計測
int notifyInterval = 6 * 60; // 6時間くらいおきには必ずLINE通知する

void setup() {
  pinMode(power, OUTPUT);
  digitalWrite(power, LOW);

  Serial.begin(115200);
  Serial.println("");
}

void loop() {
  trial++;

  digitalWrite(power, HIGH);
  double current = getCurrent();
  digitalWrite(power, LOW);

  Serial.println(current);

  if (current > threshold || trial >= notifyInterval) {
    connectWifi();
    httpPostJson(current);
    disconnectWifi();
    trial = 0;
  }

  delay(checkInterval);
}

void connectWifi() {
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(100);
  }

  Serial.println("connected!");
}

void disconnectWifi() {
  WiFi.disconnect();
  Serial.println("disconnected!");
}

double getCurrent() {
  Serial.println("get current...");
  long total = 0.0;
  int sample = 200;

  for (int i = 0; i < sample; i++) {
    int sensorValue = analogRead(A0);
    float voltage = sensorValue * (3.2 / 1023.0);
    int voltageInt = voltage * 100;
    int current = (voltageInt - 158) * 30;
    total += current * current;
  }

  float result = total / sample / 10000.0;

  return sqrt(result);
}

void httpPostJson(double data) {
  WiFiClient wifiClient;
  String json = "{\"value1\":\"" + String(data) + "\"}";


  if (!wifiClient.connect(host, port)) {
    Serial.println("connection failed");
    return;
  }

  Serial.println("http post...");
  wifiClient.println(String("POST ")  + url + " HTTP/1.1");
  wifiClient.println(String("Host: ") + host);
  wifiClient.println("Cache-Control: no-cache");
  wifiClient.println("Content-Type: application/JSON");
  wifiClient.print("Content-Length: ");
  wifiClient.println(json.length());
  wifiClient.println();
  wifiClient.println(json);
}

IFTTT側の設定

IFTTT側も設定しておきます、予めLINEとIFTTTを連携しておいて、なにかIFTTTに大してHTTP POSTされたら、LINE通知がされるようにします。

ESP8266 電力メーター

いざ稼働開始

取り敢えず、しきい値を0Aにして、1分おきにLINE通知されるようにしてみます。

ESP8266 電力メーター

いっぱい来た・・・。ただ、リアルタイム性はなさそうな感じ・・・。試しに、しきい値を20Aに戻して、通常運転してみました。IFTTT→LINEに通知する際に、トリガーがあった時刻も含めるようにしてテスト・・・。

ESP8266 電力メーター

うーん、トリガーから30〜45分経って、やっとLINEに通知されました。ボトルネックは何処なのかはわかりませんが、やっぱりリアルタイム性は期待できそうにありません。

追記

IFTTTのKEYを更新したら、遅延がなくなりました。 快適快適!

「Androidのメモとか」は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。

このブログは個人的なメモ書きであったり、考えを書く場所であります。執筆者の所属する団体や企業のコメントや意向とは無関係であります。また、このブログは必ずしも正しいことが書かれているとは限らず、誤字脱字や意図せず誤った情報を載せる場合がありえます。それが原因で読者が不利益を被ったとしても、執筆者はいかなる責任も負いません。ありがとうございます。