Androidのメモとか

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

スマホ(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を更新したら、遅延がなくなりました。 快適快適!

2017年が始まりました

Happy New Year 2017

今年もよろしくお願いします

2016年はLTを初めてやってみたり、ESP8266にぞっこんだったり、いろいろ楽しい1年でした。一番の思い出は、この京急遅延チェッカー。

relativelayout.hatenablog.com

さて、今年の目標。

Done is better than perfect.

一説にはマーク・ザッカーバーグ氏が言ったとか言ってないとか、まぁそんなのはどうでも良いんですが、個人的には好きな言葉です。個人的にはPerfectという言葉が大嫌いなので、Perfectに物事を進めようとか思ったこともないですが(笑)、何事もきっちりDoneできるようにしたいです。とりあえずDoneできるだけのフルスタック感あるエンジニアになりたいです。

Happy New Year 2017

今年の初詣で引き当てたおみくじ。

学問

雑念が多すぎる勉学せよ

はい。

地味だけど役に立ったガジェット・オブ・ザ・イヤー的なアレ(しかも4つ)

愛すべきガラクタ達。

Amazon Dash Button

Amazon Dash Button

[asin:B01L2WOS0W:detail]

IoT界隈だけでなく、多方面に影響を与えたガジェットではないでしょうか。とりあえず購入された人も多いハズ。ハック目的に使えるかなと思いつつ、ボタン押下検知が意外と泥臭かったり、個人的には使いみちに困っています・・・。

正確に言うと役に立ってはいませんが、これから役に立つようなハックをする!という決意を込めて。

取り急ぎ首から下げてみまして、どこでもファブリーズ注文できるマンになってみたりしました。来年こそはちゃんといじり倒して上げる予定です。多分。

Peak Design AL-2

Peak Design AL-2

これをガラクタと呼ぶのは少し失礼かもしれない。一眼とかのストラップを簡単に取り外し・取り付けができるようになるガジェット。勉強会とかに行って、意外と机が狭かったりすると、ストラップが邪魔だったりするんですが。かと言って、その後の懇親会とかでストラップをつかってカメラをぶら下げたかったり。そんな欲求を満たしてくれる良いガジェットでした。

フェイスマスコット肩たたき棒 ブラウン

フェイスマスコット肩たたき棒 ブラウン

仕事をしていて、肩が凝ったときにトントン。ムシャクシャしてきたときにトントン。イライラしてきたときにトントン。愛くるしいルックスとは裏腹に、適度な硬さがあり、肩叩き機としては最適。あれ、肩たたきって、「た」が何個でしたっけ・・・?

SLIMPORT VGA/HDMI Adapter

SLIMPORT VGA/HDMI Adapter

eBayで購入。スマホからのHDMI出力といえば、MHLが有名ですが、実はSLIMPORTという規格もあります。LG端末の一部が対応していて、MHLと違って給電が必要ありません。

スマホで発表するダァシェリェスの人 #iotlt

A photo posted by n0bisuke (@n0bisuke) on

前回のIoTLTは、実はスマホで発表してきました。ラップトップ不要で登壇できるので、本当に楽。問題は接続性が未知数なところ。

来年も

よろしくおねがいします。

クリスマスなのでローストポークをArduinoでつくる

クリスマスといえば肉

クリスマスといえば、KFCやファミチキなどのジャンキーな肉が合法的に食すことができる数少ない機会として知られている。一方で、一旦ジャンキーな肉に一度手を染めてしまうと、一時は満たされるものの、徐々に耐性ができてしまい、次第にジャンキーな肉の摂取量が増えてきてしまいます。最終的には依存性という形で私達の健康を脅かす存在になってしまいます。嘘です。

せっかくのクリスマスなので、ローストポークを作ってみたいと思います。

Arduinoで低温調理します

以前(前のブログで)も同様のネタをやりましたが改めて。まずは熱源ですが、スロークッカーを使います。

ローストポーク

スロークッカーは単純に電気を熱に変換して、ただひたすら温める器具です。なので、通常の火加減だと温まりすぎてしまい、肉が固くなってしまいます。そこをArduinoを使って温度コントロールをします。

ローストポーク

Arduinoに温度センサーとソリッドステートリレーを接続します。温度センサーを鍋の中に入れて、常時温度を監視します。そして、温度がある閾値を超えたら、リレーを使ってスロークッカーの電源を切り、逆に閾値を下回ったら電源を入れて、鍋の温度を上げます。

Arduinoはこんな感じで実装します

コードも以前と同じ。ただし、今回バジェットの関係で豚肉を用いるため、念のためターゲットの温度を70℃とし、すこし高めに設定しています。

int MAX = 1024;
float B = 3435;
float T0 = 298.15;
float R0 = 10.0;
float R1 = 0.98;
float TARGET = 70.0;


void setup() {
  Serial.begin(9600);
  pinMode(2, OUTPUT); // ソリッドステートリレーのON/OFF
  pinMode(12, OUTPUT); // 温度センサーのON/OFF
  pinMode(13, OUTPUT); // インディケーターLEDのON/OFF
}

void loop() {
  digitalWrite(12, HIGH);
  delay(1000);

  float temperature = getTemperature(analogRead(0));
  cookWithLove(temperature);
  Serial.println(temperature);

  digitalWrite(12, LOW);
  delay(9000);
}

float getTemperature(int analogInput) {
  Serial.println(analogInput);
  float r = calcResistance(analogInput);
  float t = calcTemperature(r);
  return t;
}

float calcResistance(int input) {
  return R1 * (MAX - input) / input;
}

float calcTemperature(float resistance) {
  float k = 1 / (log(resistance / R0) / B + (1 / T0));
  return k - 273.15;
}

void cookWithLove(float temperature) {
  digitalWrite(13, HIGH);
  delay(100);
  digitalWrite(13, LOW);
  delay(100);
  digitalWrite(13, HIGH);
  delay(100);
  digitalWrite(13, LOW);
  delay(100);

  if (temperature < TARGET) {
    digitalWrite(2, HIGH);
    digitalWrite(13, HIGH);
  } else if (temperature > TARGET)  {
    digitalWrite(2, LOW);
    digitalWrite(13, LOW);
  }
}

肉を投入して調理開始

ローストポーク

肉は予め塩コショウを擦り込んで、若干のオリーブオイルをベタベタ塗った状態でジップロックに入れて一晩冷蔵庫で寝かしています。念のため、調理開始直前に肉の表面だけは軽くフライパンで焼いておきます。

ローストポーク

再びジップロックに幽閉して、スロークッカーにチャポンして、スイッチオン。冷水から温めると時間がかかりそうだったので、スロークッカーには予め温水を入れておきます。

ローストポーク

1−2時間(くらいだったはず)で、試しに肉(3パック準備したうちの1パック)を取り出してみて、切ってみました。いやー美味です。写真はすごく赤く写ってますが、それなりに火は通ってます。ただし、残りの2パックは計3−4時間加熱しました(してしまった)が、かなりパサパサになってしまったので、熱し過ぎには注意です。真似をしてもいいですが、食中毒になっても知りません。また、美味しすぎて食べ過ぎてしまっても責任は持ちません。

というわけで、良いホリデーシーズンを。

[asin:B0044X2E5S:detail]

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

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