Androidのメモとか

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

ESP8266でIFTTT Makerチャネル向けの物理ボタンを作る

まずはIFTTTの物理ボタンを作る

こんな感じ。

IFTTT 物理ボタン

基盤の裏側には皆さんおなじみのESP8266ボードがあります。

ESP8266

スライドスイッチは、USBオスからの5V給電のON/OFFができ、USBの5VとGNDは、ESP8266ボードの5VとGNDにつながっています。

プッシュボタンはESP8266のGNDとGPIO0(Pull-up)につながっていて、ボタン押下をトリガーに、プログラムを走らせることを目論んでます。

IFTTT 物理ボタン

USBオスはめんどくさいので既製品を使います。

サンハヤト USB用変換基板 CK-41

サンハヤト USB用変換基板 CK-41

  • メディア: Tools & Hardware

はんだ付けは苦手なので、テキトーにやっていきます。

プログラム部分を書いていく

今回は試しに、ボタンを押すとTwitterで「#ponponpain」とつぶやくガジェットを作ってみます。

#include <ESP8266WiFi.h>

char ssid[] = "SSID";
char password[] = "PASSWORD";

int button = 0; // GPIO 0(PULL-UPを使う)

WiFiClient wifiClient;

char host[] = "maker.ifttt.com";
char url[] = "/trigger/(IFTTTのトリガー名)/with/key/(IFTTTのKEY)";
int port = 80;

void setup() {
  pinMode(button, INPUT_PULLUP);

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

  // 接続処理
  connectWifi();
  initializeHttpClient();
}

void loop() {
  // 本当は割り込み処理で実装したかったが、Watchdogの例外が起こってしまい断念
  if (digitalRead(button) == LOW) {
    // PONPONPAINを叫ぶ
    ponponpain();
    
    // 立て続けにPOSTができなかったため、ここで一旦切断
    wifiClient.stop();
    initializeHttpClient();
  } else {
    delay(100);
  }
}

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

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

  Serial.println("connected!");
  Serial.println(WiFi.localIP());
}

void initializeHttpClient() {
  if (!wifiClient.connect(host, port)) {
    Serial.println("connection failed");
    Serial.print("client status : ");
    Serial.println(wifiClient.status());
    Serial.print("client connected : ");
    Serial.println(wifiClient.connected());
  } else {
    Serial.println("connection success");
  }
}

// PONPONPAINを叫ぶ
void ponponpain() {
  WiFiClient wifiClient;
  String json = "{\"value1\":\"#ponponpain\"}";


  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のMakerチャネルで、イベント(今回はponponpainという名前)を作成して、そこにHTTP-POSTされた値を、そのままTwitterに投稿するレシピを作成。

いざponponpain

今回、USBオスからの給電に対応したため、モバイルバッテリーに直挿ししても使えます。

ESP8266 IFTTT トリガー

ボタンを押して、しばらくすると・・・

こんな感じで、世界中にponponpainを伝えることができました。

【第2類医薬品】ストッパ下痢止めEX 12錠

【第2類医薬品】ストッパ下痢止めEX 12錠

  • 発売日: 2017/07/01
  • メディア: ヘルスケア&ケア用品

IoT縛りの勉強会! IoTLT vol.20 @ ウフルで登壇してきました

IoTLTとは

iotlt.connpass.com

weekly.ascii.jp

国内最大級のIoTに関するライトニングトーク大会。先月に引き続き登壇してきました。運営の方々やウフルの皆さん、ありがとうございました。

会場に向かう

ウフルさんのオフィスは虎ノ門(!)にあり、最寄り駅が神谷町とのこと。職場の品川からは直線距離は近いもののアクセスがちょっと悪いので、都バスで品川→飯倉片町まで行ってそこから散歩することに。

神谷町

東京タワー、こんにちは。半分観光気分で、写真を撮りまくりました。完全にお上りさんです。

神谷町

飯倉片町から神谷町までは、大使館的な建物が多く、セキュリティレベルが高そうな雰囲気でした。なんか機動隊が乗ってそうなクルマばかりだし、おまわりさん大杉でビビるぜ。

ウフル

そんなこんなで、ウフルさんオフィス到着。エントランスからしてシャレオツなんですが…

ウフル

中も超絶シャレオツでチビリそうです。

いざ発表

www.instagram.com

いままでコソコソ実装してきた、家での消費電力(電流)をESP8266ボードで測定してクラウドにアップロードする話です。

割りとオーディエンスが静かだったので焦りましたが(笑)、ツイッター上では盛り上がってました。

speakerdeck.com

資料はこちらです、ご査収下さい。

懇親会・反省点

懇親会では沢山の方々とお話することができました。

ウフル

  • 結局「電源をどうするのか」という問題は共通の課題
  • クランプ電流センサーへの問い合わせが多かった

1灯2差ソケット+コンセント2個 E26用 [品番]04-7605

1灯2差ソケット+コンセント2個 E26用 [品番]04-7605

  • 発売日: 2006/07/21
  • メディア: Tools & Hardware

  • これを使えば、電球のソケットからコンセントが取れるとの情報を頂きました
  • 今はGoogleスプレッドシートに出力しているが、マカレルのサービスならグラフ化も簡単で無料っぽいので使ってみたい

などなど、色々アドバイスを頂きました。個人的には、一応Androidモバイルアプリエンジニアなので、それと組み合わせた何かを作ってみたいなぁと思っていますが…。おいおい何か作ってみようとおもいます。

Raspberry Pi 3 Model B (Element14)

GR-SAKURAを触ってみる話

GR-SAKURAとは

IoTLTでがじぇるね賞をいただきました。

twitter.com

GR-SAKURAとは、ざっくり言うとArduinoのようなマイコンボードです。有線LANが付いていたり、GPIOの数が非常に多いです。桜色の基盤が印象的です。

GR-SAKURA

基本的にはArduinoとあまり変わらない?

GR-SAKURAはArduinoと違って、WEBコンパイラで実装ができます。たしかに便利なんですが、やっぱりローカルにIDEが欲しい。そんな人向けにIDE for GRが用意されています。Mac版もあるので素晴らしいですね。

gadget.renesas.com

とりあえずダウンロード。起動してみると、GUIも桜色。

IDE for GR

IDEの画面は、色味こそ違うものの基本的にはArduinoIDEと同じような感じ。違和感なく使えそうです。

IDE for GR

せっかくなんで何か作ります

余ってた7セグ液晶を光らせるべく、実装してみます。まぁ、ジャンパワイヤで配線するだけでも一苦労・・・。

GR-SAKURA

今回は、便利ライブラリを使わずに、ゴリゴリ実装してみます。

void setup() {
}

void loop() {
  displayNumbers(0, 2,3,4,5,6,7,8,9,10,11,12,13);
}

void displayNumbers(int numbers, int pin1, int pin2, int pin3, int pin4, int pin5, int pin6, int pin7, int pin8, int pin9, int pin10, int pin11, int pin12){
  pinMode(pin1, OUTPUT);
  pinMode(pin2, OUTPUT);
  pinMode(pin3, OUTPUT);
  pinMode(pin4, OUTPUT);
  pinMode(pin5, OUTPUT);
  pinMode(pin6, OUTPUT);
  pinMode(pin7, OUTPUT);
  pinMode(pin8, OUTPUT);
  pinMode(pin9, OUTPUT);
  pinMode(pin10, OUTPUT);
  pinMode(pin11, OUTPUT);
  pinMode(pin12, OUTPUT);

  digitalWrite(pin1, HIGH);
  digitalWrite(pin2, HIGH);
  digitalWrite(pin3, HIGH);
  digitalWrite(pin4, HIGH);
  digitalWrite(pin5, HIGH);
  digitalWrite(pin6, HIGH);
  digitalWrite(pin7, HIGH);
  digitalWrite(pin8, HIGH);
  digitalWrite(pin9, HIGH);
  digitalWrite(pin10, HIGH);
  digitalWrite(pin11, HIGH);
  digitalWrite(pin12, HIGH);

  displayNumber(0,true,pin12,pin11,pin7,pin4,pin2,pin1,pin10,pin5,pin3);
  displayNumber(0,true,pin9,pin11,pin7,pin4,pin2,pin1,pin10,pin5,pin3);
  displayNumber(0,true,pin8,pin11,pin7,pin4,pin2,pin1,pin10,pin5,pin3);
  displayNumber(0,true,pin6,pin11,pin7,pin4,pin2,pin1,pin10,pin5,pin3);
}

void displayNumber(int number, boolean dot, int com, int a,int b,int c,int d,int e,int f,int g,int dp){
  digitalWrite(com, LOW);
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
  digitalWrite(dp, dot ? HIGH : LOW);

  digitalWrite(com, HIGH);
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
  digitalWrite(dp, HIGH);
}

本当は、任意の数字を表示する実装をしようと思ったんですが、途中で心が折れました。今度、テキトーに修正します。

ちょこっとだけGR-SAKURAを使ってみましたが、Arduinoとあまり変わらない感じが非常にうれしいですね。とくに困ること無く実装できました。まだ、有線LAN関係の実装ができていないので、おいおい実装してみたいと思います。

LINE DEVELOPER DAY 2016に参加してきた

LINE DEVELOPER DAY 2016に行ってきました

LINE DEVELOPER DAY 2016

linedevday.linecorp.com

開催日時 9月29日(木) 10時開場、18時半終了予定 場所 渋谷ヒカリエ9F ヒカリエホール 参加費 無料

去年に引き続きの参加となりました。今回の目玉は何と言ってもLINE NOTIFYとLINE MESSAGING APIではないでしょうか。

聞いた内容を端折ると・・・

LINE DEVELOPER DAY 2016

  • LINEは今年で5周年、230カ国・2億3000万人のユーザーに使われている
  • LINEは先日、上場を果たした(http://www.nikkei.com/article/DGXLASFL28HEH_Y6A920C1000000/)
  • メッセージプラットフォームをベースとして、ゲームや音楽配信などのコンテンツプラットフォームと、決済やMVNOなどのライフインフラプラットフォームを展開している
  • プラットフォームのオープン化に精力的である

LINE DEVELOPER DAY 2016

  • LINE NOTIFYとLINE MESSAGING APIを正式リリースする

  • LINE NOTIFYは無料で外部サービスからLINEメッセージを送ることができる仕組み

  • OAuth2とHTTPSでの通信が基本だが、パーソナルアクセストークンにも対応していて、OAuth2を実装しなくても(たとえばシェルスクリプト)からでもメッセージを送ることができる
  • さらに、IFTTT・マカレル・Githubにも対応し、さまざまなサービスからの通知ができる

  • LINE MESSAGING APIは、いわゆるBOTのプラットフォーム

  • LINE BOTは、以前から一部の提携パートナー(ヤマトなど)で使われていた
  • 今回、そのプラットフォームを一般公開(DEVELOPER TRIALという無料プランもある)、SDKも多くの言語で提供される
  • LINE WEB LOGIN(ユーザー情報管理ができるプラットフォーム)や、LINE BEACON(BLEをつかったビーコンデバイス)をつかって、O2OBOTをつかった、自社ページへのユーザー導入が強化できる

気になったポイント

notify-bot.line.me

  • LINE NOTIFYによって、LINEがSlack的なツールとして使えるようになった
  • Slackでいいじゃん、と思うかもしれないが、非Devユーザーへの通知をSlackで行うのは抵抗があるが、LINEであればそういうユーザーでも使いこなせる
  • IFTTT対応により、MAKE系の工作がかなり捗る。(マイコン→IFTTT MAKER CHANNELS→LINEのような導線が)
  • (たとえばマイコンで家の消費電力を図って、しきい値を超えたらIFTTT経由でLINEに通知するみたいな使い方が簡単にできるようになる)

https://business.line.me/ja/business.line.me

  • LINE MESSAGING APIも一般企業からするとかなり魅力的なのかもしれない
  • コールセンターをこしらえなくても、LINEから時間や場所を気にせずユーザーとのタッチポイントを設けられるのはアツい

その他

入場の管理はQRコードが使われていました。予め、参加登録とLINEアカウントを紐付けておくと、事前にユニークなQRコードが送られてきます。

LINE DEVELOPER DAY 2016

コレを会場にある専用の読取機に読ませて、入場します。

LINE DEVELOPER DAY 2016

LINE DEVELOPER DAY 2016

入場手続きを済ませると、記念品等が窓口でもらえます。

LINE DEVELOPER DAY 2016

記念品は以下の通り。

LINE DEVELOPER DAY 2016

  • ステッカー
  • 食事代(ヒカリエで使える2000円分の商品券)
  • 入場証(記念品?)

LINE DEVELOPER DAY 2016

  • LINE DEV DAY 2016オリジナルLINEスタンプ

LINE DEVELOPER DAY 2016

LINE DEVELOPER DAY 2016

  • サーモタンブラー
  • 木製のデスクトップオーガナイザー
  • ケーブルオーガナイザー
  • BLE BEACON 開発キット

資料

http://www.slideshare.net/linecorp/a-1-opening-introduction http://www.slideshare.net/linecorp/a-2-new-world-by-the-line-bot https://www.slideshare.net/linecorp/a-3-difficult-challenges-that-line-has-overcome http://www.slideshare.net/linecorp/b-1-rinna-and-rinna http://www.slideshare.net/linecorp/a-4-line-login-line-platform http://www.slideshare.net/linecorp/b-2-line-game-cloud-our-personal-ec2 http://www.slideshare.net/linecorp/a-5-security-x-line-platform http://www.slideshare.net/linecorp/b-3-line-bot-live-coding http://www.slideshare.net/linecorp/a-6-group-app-platform https://www.slideshare.net/linecorp/b-4-gravty http://www.slideshare.net/linecorp/a-7-architecture-sustaining-line-live http://www.slideshare.net/linecorp/b-5-stellitequotapply-chromium-opensource-to-line-gamequot http://www.slideshare.net/linecorp/a-8-line-group-call http://www.slideshare.net/linecorp/b-6-new-stream-processing-platformwith-apache-flink http://www.slideshare.net/linecorp/a-9-line-shop-powered-by-armeria http://www.slideshare.net/linecorp/b-7-a-true-agile-team-global-line-news-66467006 http://www.slideshare.net/linecorp/a-10-working-environment-and-culture-for-line-engineers

ESP8266ボードとSDカードモジュールをつかってMicro SDの情報取得と読み書きをしてみる

SDカードモジュールをESP8266ボードに繋ぐ

ESP8266

こんな感じのSDモジュールを使います。

  • CS(⇔ボードのSS(D8)に接続)
  • SCK(⇔ボードのSCK(D5)に接続)
  • MOSI(⇔ボードのMOSI(D7)に接続)
  • MISO(⇔ボードのMISO(D6)に接続)
  • VCC(⇔ボードのVCC(5V)に接続)
  • GND(⇔ボードのGNDに接続)

端子はいわゆるSPIと電源/GND。これらをESP8266の端子につなぎます。CS(ChipSelect)端子は、ボードのSS(SlaveSelect)端子に接続。ジャンパワイヤで繋ぐと、こんな感じでキモくなります。

ESP8266

まずは接続されたSDの情報を引っこ抜いてみる

サンプルコードを参考に、こんな感じのコードを書いてみました。

#include <SPI.h>
#include <SD.h>

int chipSelect = D8;
Sd2Card card;
SdVolume volume;

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

  if (!card.init(SPI_HALF_SPEED, chipSelect)) {
    Serial.println("card.init : error");
    return;
  }

  Serial.println("card.init : success");

  if (!volume.init(card)) {
    Serial.println("volume.init : error");
    return;
  }

  Serial.println("volume.init : success");

  uint32_t size;
  size = volume.blocksPerCluster() * volume.clusterCount() * 512;

  Serial.println("size : " + String(size) + " [B]");

  size /= 1024 * 1024;

  Serial.println("size : " + String(size) + " [MB]");
}

void loop() {

}

SDライブラリを使うと簡単に実装できます。実際に、家にあった2GBのMicroSDの情報を読み取ってみました。

ESP8266

card.init : success
volume.init : success
size : 1986297856 [B]
size : 1894 [MB]

キッチリ容量を取得できてます。

次に書き込み

人間、誰しもがSDを見ると何かを書き込みたいという衝動にかられると思います。僕も書き込んでみます。とりあえず意味不明な文字列を書いてみます。

#include <SPI.h>
#include <SD.h>

int chipSelect = D8;
File file;
String testData = "hogehoge.fugafuga";

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

  if (!SD.begin(chipSelect)) {
    Serial.println("SD.begin : error");
    return;
  }

  Serial.println("SD.begin : success");

  SD.remove("testdata.txt");

  file = SD.open("testdata.txt", FILE_WRITE);

  if (!file) {
    Serial.println("SD.open : error");
    return;
  }

  Serial.println("SD.open : success");

  file.println(testData);
  Serial.println("file.println : " + testData);

  file.close();
  Serial.println("file.close : success");
}

void loop() {

}

で、書いてみました。シリアルモニター的には書けてるとのころ。

ESP8266

SD.begin : success
SD.open : success
file.println : hogehoge.fugafuga
file.close : success

テキストデータを書き込んだSDをMacで読み込んでみると、たしかにファイルができています。

ESP8266

ファイル名は、Arduinoのコード上では全て小文字のtestdata.txtとしていたはずですが、Mac上で見るとTESTDATA.TXTという感じですべて大文字になっています。そして、ファイル作成日時も2000年の元日になっています。

ESP8266

ファイルを開くと、たしかに書き込めています。こちらは小文字のままでした。

最後に読み込み

やっぱり書けたら読みたくなるのが性というもの。

#include <SPI.h>
#include <SD.h>

int chipSelect = D8;
File file;
String testData = "hogehoge.fugafuga";

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

  if (!SD.begin(chipSelect)) {
    Serial.println("SD.begin : error");
    return;
  }

  Serial.println("SD.begin : success");

  file = SD.open("testdata.txt", FILE_READ);

  if (!file) {
    Serial.println("SD.open : error");
    return;
  }

  Serial.println("SD.open : success");
  
  String str = "";

  while (file.available()) {
    str += (char)file.read();
  }

  Serial.println("file.read : " + str);

  file.close();
  Serial.println("file.close : success");
}

void loop() {

}

Stringのまま読む方法が分からず、Char1文字ずつ読み込んで、Stringにappendしています。他にいい方法があれば教えてください。

ESP8266

SD.begin : success
SD.open : success
file.read : hogehoge.fugafuga

file.close : success

取り敢えず読めてそうです。

ESP8266で自宅での電力消費量を測ってみようと思った(パート4)

ESP8266のDeepSleepに対応する電源を探す

前回。 relativelayout.hatenablog.com

ESP8266

ESP8266の目玉であるDeepSleepモード。低消費電力で処理をサスペンドできる。それは良いのだが、あまりにも低消費電力というのが仇となり、最近のモバイルバッテリーでは給電が止まってしまう。

本当はCheeroさんがだしているIoT機器対応のモバイルバッテリーを使えば良いのだが、もしかしたら手持ちのモバイルバッテリーでも対応しているものが有るかもしれない。そういうことで、家中のモバイルバッテリーを試してみた。

ESP8266対応のモバイルバッテリーはこれだ!

まずは前回のエネループ。単3のエネループを2本使うタイプ。意外と単3×2だと心もとないような。

SANYO eneloop USB出力付ハンディ電源(単3形2個セット) KBC-D1BS

SANYO eneloop USB出力付ハンディ電源(単3形2個セット) KBC-D1BS

  • 発売日: 2010/10/21
  • メディア: エレクトロニクス

次に、ソニーのモバイルバッテリー(2台!)。意外と使えました。ただし、容量に関しては一昔前ということもあり少々少なめ。もしかしたら経年劣化で若干ヘタってるかもしれませんが。。。

ソニー バッテリー内蔵型USB ACチャージャー AC-UP100

ソニー バッテリー内蔵型USB ACチャージャー AC-UP100

  • 発売日: 2011/02/10
  • メディア: Personal Computers

どのくらい耐久性が有るか実験

SONY

前回作成した、1分おきに配電盤から消費電流を測るガジェットを使って、バッテリーがどのくらい持つか確認しました。

SANYO eneloop USB出力付ハンディ電源(単3形2個セット) KBC-D1BS ソニー バッテリー内蔵型USB ACチャージャー AC-UP100 SONY スマートフォン用USB出力(2口)機能付 ポータブル電源(高容量リチウムイオン) CP-A2LS
40時間 29.5時間 63.5時間

まぁ、こんなもんでしょうか。どれも数日程度持ちそうということがわかりました。ただ、配電盤監視という用途を考えると、1週間くらい持って欲しい気はしなくもないですが、そこはロジック自体見直しが必要かもしれません。

IoT縛りの勉強会! IoTLT vol.19 @ 三菱総研で登壇してきました

IoTLTとは

iotlt.connpass.com https://codeiq.jp/magazine/2016/03/38409/codeiq.jp

名前の通りIoT関係のLT大会です。去年初めて参加させて頂いた時は若干のむさ苦しさを感じましたが、最近の会はとにかく女性が多い印象。そんなIoTLTで、人生初のLTでの登壇をさせていただきました。

まずは腹ごしらえ

いきなりステーキ

同期といきなりステーキ@新橋。腹が減っては戦はできぬとか言いますよね。すばらしいUXです。何も飲んでませんよ。

いざ溜池山王

twitter.com

とにかく溜池山王ダンジョン怖い。アレは駅ではない、地獄である。ただ、歩いているOLは品川より確実にキラキラしていた。間違いない。

三菱総研

そしてついに三菱総研到着。首相官邸の裏側なんですね・・・マジ東京。いや、実は受付票を印刷していったんですよ。

twitter.com

間違えてA3に印刷しちゃったんですが。全く使うこと無くゲストカードをもらうというアレ。

三菱総研

意外とスーツ姿の人が多くて焦る。そして意外と静か。焦る。

いざLT

三菱総研

初めてのLTなのでかなり緊張しましたが、なんとか喋ってきました。京急は神的存在なんだということは周知できたと思います。

twitter.com

そして、なんと、がじぇるね賞も頂けました!ありがとうございます。またLTをしにお伺いいたしますのでよろしくお願いします。

ポストモーテム

  • 予めプロジェクターの接続確認を行えたのは良かった(常識ですが)
  • 発表時間を守れなかった、今後はきっちり守っていきたい
  • 意外と下品な話題もイケるということが分かった(ダメ)
  • 京急の認知度が低いということが分かった
  • LTするためだけにラップトップを持っていくのがだるい
  • 東京遠い
「Androidのメモとか」は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。

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