IchigoJam+MixJuice+WioNode 超簡単IoTで遠隔地のLED制御

クラウドやIoTモジュール側のソフト開発が不要なWio Nodeであれば、超簡単にインターネットを経由した遠隔地のWioNodeへアクセスすることが出来ます。
開発を行う際に「(通常の)パソコンが不要」であることも特長です。ネットワーク設定やテスト操作はスマートフォンで行います。
ここでは、IchigoJam BASICを使って、遠隔ワイヤレスLチカの実験を行ってみましょう。
写真の左側がWio Nodeモジュール。マイクロUSBで電源を供給する。右側にLEDを接続した。Grove端子には4本のピンがあるが、使用するのは、SIGピンと、GNDピンだけ。Grove専用ケーブルであれば、黄色の線がSIGで、黒がGND。回路が苦手な人は、市販のGrove LEDを使っても良い。より複雑な市販モジュールも、本ブログと同じ手順で簡単に制御できるのが特長。
抵抗(1kΩ)はブレッドボードの最右列と、右から3列目に挿入されている。LED(ガラスパッケージ入り)は右から3列目と最左列に接続されており、アノードが左側。白と赤の信号線には何も接続されていない。
Wio Nodeとは、Seeed Studio社が開発したIoTモジュールです。同社が提供するクラウドサービスを利用することで、遠隔地に設置したWioNodeをインターネット経由で制御することが出来ます。
Wio Nodeには、2つのGrove端子が搭載されており、市販の様々なGroveモジュールを使って機能を拡張することが出来ます。
今回は、LEDをGrove端子へ接続しました。市販のGrove LEDモジュールを購入しても良いですが、Grove端子のSIGピンとGNDピンとの間に抵抗とLEDを直列につないでも良いでしょう。
Groveピン
1.SIG  —-[抵抗]—-[LED]—-GNDへ
2.NC
3.VCC
4.GND

準備するもの

  ・IchigoJam

  ・MixJuice

  ・Wio Node 1,100円 (http://akizukidenshi.com/catalog/g/gM-10631/)

  ・スマートフォン (Wio Node設定用)

  ・周辺機器(モニタ、キーボード、ACアダプタなど)

わずか5分。3つの手順でIoT機器を自由自在に制御できる

    Wio Nodeのセットアップは簡単です。わずか5分。
ステップ1:iOS用(まAndroid用)Wio Link AppをApp Store(Market)からダウンロードする
ステップ2:Wio Link Appを起動し、ユーザ登録を行う
ステップ3:Wio Nodeをインターネットへ接続する
    WIo Link Appを操作して、Wio Node追加の処理を実行します。途中で、Wio Nodeの左側のボタンを4秒以上、押す処理を促されますが、図入りの分かりやすい画面なので、迷うこともないでしょう。

    その後、Wio Nodeは無線LANアクセスポイントとなり、スマートフォンからアクセスできるようになります。スマートフォンを操作し、Wi-Fi接続先をWio Nodeに設定してください。設定すると、スマートフォン上のWio Link AppがWio Nodeへアクセスし、Wio Nodeのネットワーク設定を開始します。このとき、お手持ちの無線LANアクセスポイントのSSIDやパスワードの情報を入力します。
    入力したSSIDはWio Nodeへ保存されます。遠隔地に設置する場合は、以上のネットワーク設定を現地でやり直します。

Wio Nodeへファームウェアを書き込む

ネットワーク設定が終われば、Wio NodeのGrove端子へ接続するハードウェアを選択します。ここでは、LEDを制御するために電球のようなアイコンの「Generic Digital Output」を選びましょう。Grove 端子は2つあるので、それぞれに異なるデバイスを接続することが出来ます。ただし、UARTシリアルとADコンバータは片側にしかありませんので、1つしか接続することが出来ません。
デバイスを選択後、画面最下部がファームウェアをWio Nodeに転送するための送信ボタンになります。そのまま転送しましょう。

HTTP REST API

さて、いよいよ制御方法です。スマートフォンの画面最下部の「View API」をクリックすると、スマートフォンからLEDが制御できます。「ON/OFF」と書かれたテキストボックスに、1または0を入力して制御できることを確認してみましょう。HTTP GET方式やPOST方式といった聞きなれないキーワードが出てきます。それぞれ、MixuJuiceの「MJ GETS」と「MJ P
OSTS」に相当し、情報をWio Nodeから取得するときにHTTP GETを、Wio Nodeを制御するときにHTTP POSTを使用します。
よく分からなくても大丈夫です。ボタンや入力可能な部分は、限られています。適当に試してゆけば、理解できると思います。

また、MicJuiceを接続したIchigoJamから制御することも出来ます。アクセスにはトークン(32桁の16進数)が必要です。スマートフォンの「View API」画面内にいくつかのURL(https://~)が10個くらい表示されます。どの表示も、後半から最後にかけては同じ内容になっていて、「access_talken=」に続いてトークンが示されています。

・IchigoJamを無線LANアクセスポイントへ接続するには、以下を入力する(以降は入力不要)。
 ?"MJ APC <SSID> <PASS>"
・LEDの状態を確認するためのコマンド。<TOKEN>にトークン(32桁の16進数)を入力。
 ?"MJ GETS us.wio.seeed.io/v1/node/GenericDOutD0/onoff_status?access_token=<TOKEN>"
・LEDを制御するためのコマンド。ここでは、LEDをONにする。
 ?"MJ POSTS START us.wio.seeed.io/v1/node/GenericDOutD0/onoff/1?access_token=<TOKEN>"
 ?"MJ POSTS END"

超簡単ですね。

IchigoJam用のプログラムの例

最後に、LEDの点灯状態を確認し、IchigoJam上のボタンSW2を使って、制御するプログラムを作成してみました。行番号3の変数Tには、Wio Link Appに表示された32文字のトークンを記してください。
    new:' for IchigoJam Ver 1.2
    1 cls:?"WIO NODE X MixJuice":uart1
    2 'Token ヲ ヘンスウ T ヘ ダイニュウ シテ クダサイ
    3 T="0123456789ABCDEF0123456789ABCDEF"
    4 ?"BTN: WIO NODE ノ LED ヲ テントウ スル
    5 ?"CC BY Wataru KUNINO
    rem https://bokunimo.net/ichigojam/
    100 'LOOP
    110 gsb500
    120 ?"MJ GETS us.wio.seeed.io/v1/node/GenericDOutD0/onoff_status?access_token=";str$(T)
    130 gsb600
    200 'BTN
    210 ?"BTN ヲ オシテ クダサイ"
    220 if!btn()goto220
    230 ?"LED ";V;"->";!V
    300 'MAIN
    310 gsb500
    320 ?"MJ POSTS START us.wio.seeed.io/v1/node/GenericDOutD0/onoff/";!V;"?access_token=";str$(T)
    330 ?"MJ POSTS END"
    340 wait300:goto100
    500 'CLEAR
    510 wait1:ifinkey()goto510
    520 rtn
    600 'INPUT
    610 wait180:V=0
    620 wait1:I=inkey():?chr$(I);
    630 ifI=0rtn
    640 ifI<>asc(":")goto620
    650 wait1:I=inkey():?chr$(I);
    660 ifI=0?:?"Val=";V:rtn
    670 ifI<asc("0")orI>asc("9")goto650
    680 V=V*10+I-asc("0"):goto650
行番号320の赤文字部分の「D0」を「D1」に書き換えると、左側のGrove端子(裏面から見ると右側の端子)を制御することが出来ます。

課題は消費電力。常に60mA程度が流れている。

消費電力を測定したときの様子です。Wio Nodeは常にクラウドとの通信を行うために、起動した状態となっています。このため、60mAの消費電流が流れ続けます。
したがって、、ACアダプタなどを使用して動かすことになるでしょう(乾電池だと、すぐになくなり使い物にならない)。

by ボクにもわかるIchigoJam用マイコンボード

      IchigoJamとMixJuiceを使ったBTN早押しゲーム

      ストップウォッチを使ってゲーム遊びをした経験。ありますよね。
      STARTとSTOPをいかに短い期間に押すかという単純なゲームです。
      今回は、IchigoJamとMixJuiceを使って、IoT用クラウドサービスAmbientへ結果を送信するBASICプログラムを作成しました。
      教室などで多人数で競えば、楽しいかもしれません。

      必要なもの

      • IchigoJam
      • MixJuice (ファームウェア 1.2.0以上)
      • Wi-Fiによるインターネット回線
      必要なものは、IchigoJamとMixJuiceです。もちろん、純正品でも動作します。ただし、IchigoJamのプッシュボタンがMixJuiceに隠れるので、押しにくいでしょう。ブレッドボードなどにBTN信号を引き出して、タクトキーを接続しても良いでしょう。

      MixJuice用ファームウェアはVer 1.2.0以上が必要

      この実験にはMixJuiceのファームウェアVer 1.2以上が必要です。MixJuiceのファームウェアは下記からダウンロードすることができます。
      MixJuice:
      ファームウェアのバージョンアップ方法については、下記のサイトを参考にしてください。
      IchigoJam + MixJuiceで製作するIoTセンサ
      /MixJuice用ファームウェアのバージョンアップ
      また、プログラムを動かす前に、MixJuiceをインターネットに接続する必要があります。接続するには、下記のコマンドをIchigoJamから入力してください(SSIDとPASSはお手持ちの無線LANアクセスポイントに書かれた内容を使用してください)。
      ?"MJ APC SSID PASS
      SSIDとパスワードは、電源を切っても、MixJuiceへ残っていますので、次回からは、入力の必要はありません。接続状態を確認するには、以下のコマンドを入力します。接続された状態であれば、「1」の値が返ってきます。
      (ただし、このときにプログラムの行番号1が消える場合があります。)
      ?"MJ APS

      CQ出版社のIchigoJam用キット(IF ICH-KIT)を使う方法もある

      私はCQ出版社から販売されている「IchigoJam用コンピュータ電子工作学習キット(IF ICH-KIT)」のPersonal Computer基板とWireless Shield基板を使用しました。MixJuiceの替わりには、ESP-WROOM-02をXBeeモジュールと同じ2mmピッチ基板に実装したものを使用しました。ESPモジュールのファームウェアはMixJuiceのホームページ(http://mixjuice.shizentai.jp/)からダウンロードしたものを書き込みました。

      Personal Computer基板にWireless Shield基板を取り付け、MixJuiceファームウェアを書き込んだESPモジュールをXBeeソケットへ取り付けた。※純正のIchigoJam+MixJuiceでも実験可能

      プログラム:IchigoJamとMixJuiceを使った早押しゲーム「ハヤオシBTN Ambient」

      以下にプログラムを示しますが、いつくかの注意点があります。あらかじめ、よく読んでください。
      • このプログラムを実行すると、ゲームの結果がインターネット上へ送信され、ボタンを押した時刻と速度が自動的に一般公開されます。送信者を特定するような情報は公開されません。
      • 送信するためのIDやキーがプログラムに組み込まれています。これらを他の用途で使用することは、絶対にやめてください。発覚次第、この実験そのものを中止せざる得なくなります。
      上記の注意事項を読んでから、MixJuiceでのダウンロードしてください。もちろん、シリアルなどからIchigoJamへプログラムを転送して利用することも可能です。
      IchigoJamのファームウェアは1.2.1以降を推奨します。Ver 1.1.1でも動作するように留意してありますが、Ver 1.2.1で動作確認しました。

      プログラム転送方法: ボクニモワカル for MixJuiceを利用する場合:

      (1) MixJuiceで以下へアクセスする。

      ?"MJ GET bokunimowakaru.github.io/MJ/

      (2) メニュー[8]ダウンロード ⇒ メニュー[6] Ambient micutil からプログラムをダウンロードする。
      ご注意:
      通常の「カナ版」または「英語版」をご利用ください。「カラー版」はESP-WebTermIJKB専用につき、MixJuiceではご利用いただけません。

      プログラム

      new
      1 cls:?"ハヤオシ BTN":?"Ambient":uart1:gosub950:wait300
      2 'MJ PCT application/json
      3 'MJ POST START ambidata.io/api/v2/channels/725/data
      4 '{"writeKey":"ad3e53b54fe16764","d1":"#"}
      5 'MJ POST END
      6 ' デジタル ニュウリョク ヲ 2 カイ オシ テ クダサイ
      7 ' ソクド ガ Ambient ヘ ソウシン サレマス
      8 ' CC BY Wataru Kunino
      rem https://bokunimo.net/ichigojam/
      100 'MAIN
      110 P=#C1A:cls:?"BTNヲ 2カイ":?"オシテクダサイ":gosub950
      120 if!BTN()goto120elseCLT
      130 ifBTN()goto130
      140 led1:wait1
      150 if!BTN()goto150elseT=tick()
      160 S=600/T:A=S/10:B=S-A*10:led0
      170 lc0,0:gosub300:?A;".";B;" Hz  ":gosub950
      180 lc0,-1:?:gosub600:gosub600:gosub600:gosub600
      190 wait180:goto100
      300 'GRADE
      310 ifS>100?"タツジンデス":return
      320 ifS>50?"スゴイ!ハヤイ":return
      330 ifS>10?"ガンバレ !":return
      340 ?"2カイ オシテネ":return
      600 'TX
      610 ifpeek(P)<>asc("'")letP,P+1:goto610
      620 P=P+1:ifpeek(P)=asc("#")?A;".";B;:goto620
      630 ifpeek(P)<>0?chr$(peek(P));:goto620
      640 ?:return
      950 'TV
      rem https://www.facebook.com/groups/ichigojam/permalink/581632705309820/
      960 let[0],#80,#8A,#85,#8F:lc0,5:forY=0to15:wait4:forX=0to7
      970 C=peek(vpeek(X,Y/8)*8+Y%
      8):?chr$([C>>6&3],[C>>4&3],[C>>2&3],[C&3]);
      980 next:next:return
      IchigoJam-FANグループ尾野さんからいただいたESP-WebTermIJKBで使用する場合のコメント
      uart1:uart2にしないと画面が一致しなくなる。(MixJuiceの場合はuart1)
      wait4:行番号960にウェイトが必要。(MixJuiceの場合はwait不要)
      実行後、「BTNを2回、押してください」のメッセージが表示されたら、IchigoJam上のタクトキー(SW2)を、すばやく2回、押下します。LEDが点灯したままの時は、1回しか押せていません。もう一度、押してください。
      行番号140のwait 1は必要です。なぜ必要かは、150行目と160行目の式を見て考えてみましょう。

      送信結果

      送信した結果は、クラウドサービスAmbientで確認することが出来ます。
      Ambient公開チャネル725

      (NEW) いかに正確な10秒を数えれるか HIT 10 ゲーム

      ほかにも似たようなゲームを紹介しています:
      http://blogs.yahoo.co.jp/bokunimowakaru/55686728.html

      参考情報と宣伝

      IchigoJamの認知度は上がってきていますが、MixJuiceについては知らない人も多いようです。ゲームとの組み合わせで簡単に始めれるコンテンツが登場すると、徐々に広まるのではないかと、期待しています。
      私が設計した学習キット(IF ICH-KIT)は、IchigoJamでI/O入出力や、モータ、ワイヤレス通信の実験を始めるには良いキットです。価格が高い点と、ESPモジュールを容易に接続できない点で、この実験専用としては、お奨めできませんが、どの基板も実験をするうえで使いやすく仕上がっているので、この機会に参考にしていただければ嬉しいです。

      XBeeソケットに装着したESP-WROOM-02モジュール。XBeeソケットとの変換は手配線で行った。MixJuiceファームウェアを書き込み済み。左側のソケットにシリアルを接続し、右側のSW32のボタンを押しながら本体のリセットボタンを押下すると、ファームウェアを書き換えることが出来る。

      キットの各基板のCADデータは、雑誌「1行リターンですぐ動く!BASIC I/Oコンピュータ IchigoJam入門」のP.91の情報を参考にしていただくと、ダウンロードすることが出来ます。そちらを活用していただいても良いでしょう。雑誌およびキットはCQ出版からお買い求めいただけます。
      最新のESP32モジュールでも遊べます
      IchigoJam用コンピュータ電子工作学習キット(IF ICH-KIT)
      https://bokunimo.net/ichigojam/pcb.html
      by ボクにもわかるIchigoJam用マイコンボード
      https://bokunimo.net/ichigojam/

      IchigoJamへのプログラム転送を高速化する(TeraTerm)

      ~お詫び~
      この記事はTeraTerm側の送信バッファの動作の違いによる効果を、IchigoJamの受信バッファの違いによる効果であると勘違いして記載していました。
      実験の内容や結果に相違はありませんが、私の勘違いによって誤解を与えるような表現がありました。TeraTerm限定であることを赤文字にて追記し、一部の表現を取り消し線で取り消しました。Facebookへの投稿メッセージ(https://www.facebook.com/groups/ichigojam/permalink/848499335289821/)については、はじめからTeraTerm限定の話のような書き方になっていましたが、投稿時の私に、そのような意図はなく、当ブログを読んで、実験をしてくださった皆様にご迷惑をおかけしました。
      引き続き、有用な情報が提供できるよう、努力いたしますので、何卒、よろしくお願いいたします。
      2017/1/3
      国野 亘

      TeraTermを使ってシリアル接続したIchigoJamへのプログラム転送時間を約半分にすることが出来ましたので、その方法について説明します。
      ※すべてのプログラム転送が早まるとは限りません。ご容赦ください。
      ※IchigoJamのファームウェアは1.2.1以降が必要です。
      ※TeraTermを使った場合の実験結果です。

      シリアルの送信遅延を 9ミリ秒/字 250ミリ秒/行に設定する

      結論から書くと、TeraTermの「設定」メニュー内の「シリアルポート」ウィンドウを開き、以下のように設定します。これで、(おそらく)通常の転送時間の半分で転送することが出来ると思います。

      原理

      IchigoJamのファームウェア1.2.1以降ではシリアルの受信バッファが128バイトに拡大されました。このバッファを活用することで処理時間を短縮させるのが目的です。
      IchigoJamでは1文字の受信を行うのに約18msの処理時間が必要です。このため従来は18ms以上の送信遅延を設定していました。
      一方で、IchigoJamのプログラムの1行の最大文字数は200文字です。つまりプログラムの1行の半分をバッファで処理することが出来るはずです。そこで、
      ここでは、送信遅延を半分の9msに設定し、1行ごとに250msの遅延を設定することにしました。もし、予め1行の文字数が分かっているのであれば、1行ごとの250msの遅延についても、より短くすることが出来るでしょう。
      ただし、この検証の後に、IchigoJam側が1/60秒ごとに1文字づつしか受信バッファの取り込みを行っていない可能性が高まっています。この場合、本検証による効果はTeraTermのみに限定されたものとなります。
      以下は、貴重な参考情報です。

       - MicJackでは、文字遅延18ms、行遅延18msが最速(IchigoJam FANグループ尾野さん)
       - MicJackで、1度に100文字送った場合、行遅延で1600msが必要。つまり1文字あたり16msを要する。(同上)
       - Windows 10 VC++ コンソールアプリでは、文字遅延16ms、行遅延10msが高速(茶虎さん)
       - 記載していた結果の転送時間17.4秒は、1文字当たり17msであり、上記の結果を裏付けている

      検証方法

      以下のようなデータをTeraTermから転送して検証しました。始めにnewコマンドでプログラムを消去し、次にIchigoJam側の画面のカーソル位置を最下行に移動させます。そして、cltコマンドでタイマーをリセットし、1行あたり200文字のダミープログラムを5行分、入力し、最後に経過時間を表示します。
      new
      fori=1to25:?:next
      clt
      1 '12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567
      2 '12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567
      3 '12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567
      4 '12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567
      5 '12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567
      ?tick()

      実行結果

      1文字の送信遅延を、従来の18msにしたときと、9msにしたときの実行結果を比較しました。その結果、転送時間を約半分に短縮することが出来ました。
      なお、実行後にはプログラムをPCに再転送し、相違がないことをdiffして確認済みです。
             文字遅延設定 行遅延設定  転送時間(結果)    効果
      従来方式    18 ms      50 ms   tick=1925  32.1秒
      提案方式     9 ms     250 ms   tick=1044  17.4秒  ▼ 46 %
      前述のとおり、TeraTermの場合は、1行の文字数に合わせて行遅延設定を変更しても良いでしょう。
      例えば、100文字以下の場合は50ms、100文字以降の場合は文字数をNとして、50+(N-100)×2 msとすれば、上手くゆきそうです(これは未検証です)。
      なお、検証済みの方法も含めて、問題点があるかもしれません。自己責任で活用してください。
      by ボクにもわかるIchigoJam用マイコンボード

      従来のESP-WROOM-02と最新ESP-WROOM-32の比較表を作成

      最新IoTチップESP32を搭載したESP-WROOM-32について、従来のESP-WROOM-02との比較表を作成してみました。
      Bluetoothに対応しただけでなく、MCUがデュアルになり、さらにクロックも2倍、各種の入出力インタフェースも充実しています。
      使ってみて感じたことは、ファームウェアの書き込み速度が大幅に向上したことです。SPIインタフェース部の転送に関わる処理速度が改善されたものと思います。

      気になっていること

      ・周波数範囲(チャンネル範囲)
      データシート「ESP-WROOM-32 Datasheet」によるとWi-Fiの「Wi-Fi Radio Characteristics」の部分で「Input frequency」が2412MHz~2484MHzとあります。これは、PAの測定条件を示しているだけなのか、第1chの中心周波数2412MHzから日本仕様の第14chの2484MHzまでが使えるという意味なのか、どちらなのかが分からないです。
      占有周波数で考えると:
      2400~2484MHzとあった場合: 1ch 2412 MHz ~ 13ch 2472 MHz が使えると解釈できる
      2400~2495MHzとあった場合: 1ch 2412 MHz ~ 14ch 2484 MHz が使えると解釈できる
      中心周波数で考えると(あまり、そんな表記はしない):
      2412~2472MHzとあった場合: 1ch 2412 MHz ~ 13ch 2472 MHz が使えると解釈できる
      2412~2484MHzとあった場合: 1ch 2412 MHz ~ 14ch 2484 MHz が使えると解釈できる
      ・フラッシュ
      従来製品ESP-WROOM-02では、当初4MBのフラッシュが実装されていましたが、最新版は2MBと表明されています。2016年2月に2MB品への移行が示され、11月に2MB品に移行したようです。一方、今回の場合は何も書かれていません。手持ち品が4MBだったので、とりあえず4MBとしました。
      ・クロック
      水晶の周波数は40MHz(従来は26MHz)、CPU動作はArduino IDEのboard.txtの設定で160MHzとなっています。(Facebookグループ「ESP8266環境向上委員会」大野さんからの情報:https://www.facebook.com/groups/927623023964478/permalink/1271155496277894/?comment_id=1272254989501278
      こちらも、実際の製品に実装されている水晶のクロック周波数は分からないです。ご存知の方が居ましたら教えていただけないでしょうか?


      by ボクにもわかる電子工作
      https://bokunimo.net/

      早押しボタン!最新IoTチップESP32とAmbientで遊んでみよう

      ストップウォッチを使ってゲーム遊びをした経験。ありますよね。
      STARTとSTOPをいかに短い期間に押すかという単純なゲームです。
      今日は最新のIoTチップESP32を搭載したESP-WROOM-32を使用し、早押しゲームを行ってみました。結果はIoTセンサ用のクラウドサービスAmbientへ送信します。教室などで多人数で競えば、楽しいかもしれません。
      公開中

      作り方

      Espressifの最新チップESP32が実装されたESP-WROOM-32モジュールのGPIO 0にプッシュスイッチを接続します。論理は押下時にLOWレベルになるようにします。既にファームウェア書き換え用にスイッチを接続している場合が多いでしょう。
      次にArduino IDEをセットアップします。Windowsをお使いの場合は、下記を参照してください。
      Arduino IDEでESP32(ESP-WROOM-32)を使用する方法
      下記はスケッチです。スケッチの作成に当たり、Ambientのライブラリを参考にしました。2016年12月23日現在、ESP32用のライブラリarduino-esp32がサポートしているWi-Fi用コマンドが限られていますので、一部の処理を省略し、作成し直しました。
      スケッチのSSIDとPASSの部分をお手持ちの無線LANアクセスポイントに合わせて設定し、Ambient(https://ambidata.io/)から取得したチャネルIDとライトキーをそれぞれAmbientChannelId とAmbientWriteKey に記入し、ESPモジュールへ書き込みます。
      私が公開しているチャンネルID 725のライトキーをお教えすることも可能です。試していただける方は、ぜひFacebookから連絡ください。
      Facebook
      ESP32用スイッチ早押し ~ボタンを2回押したときの速度をAmbientへ送信する~
      #include <WiFi.h>                           // ESP32用WiFiライブラリ
      #define PIN_LED 2                           // IO 2 にLEDを接続
      #define PIN_SW 0                            // IO 0 にスイッチを接続
      #define AmbientChannelId 725                // チャネルID(整数)
      #define AmbientWriteKey "xxxxxxxxxxxxxxxx"  // ライトキー(16桁の16進数)
      #define SSID "1234ABCD"                     // 無線LANアクセスポイントのSSID
      #define PASS "password"                     // パスワード
      #define HOST "54.65.206.59"
      void setup(){
          pinMode(PIN_LED,OUTPUT);
          pinMode(PIN_SW,INPUT_PULLUP);
          Serial.begin(9600);
          Serial.println("Example Ambient SW");
          WiFi.mode(WIFI_STA);
          WiFi.begin(SSID,PASS);
          while(WiFi.status() != WL_CONNECTED){
              delay(500);
              Serial.print('.');
          }Serial.println();
          Serial.println(WiFi.localIP());
      }
      void loop(){
          WiFiClient client;
          unsigned long t0,t1;
          char s[64],data[64],http[384];
          while(digitalRead(PIN_SW));
          t0=millis();
          while(!digitalRead(PIN_SW));
          digitalWrite(PIN_LED,HIGH);
          delay(8);
          while(digitalRead(PIN_SW));
          t1=millis();
          delay(100);
          while(!digitalRead(PIN_SW));
          dtostrf(1000.L/(double)(t1-t0),5,2,s);
          sprintf(data,"{\"writeKey\":\"%s\",\"d1\":\"%s\"}",AmbientWriteKey,s);
          Serial.print(s);
          Serial.println(" Hz");
          if(!client.connect(HOST,80)){
              Serial.println("connection failed");
              return;
          }
          sprintf(http,"POST /api/v2/channels/%d/data HTTP/1.0\r\n",AmbientChannelId);
          sprintf(s,"Host: %s\r\n",HOST);
          strcat(http,s);
          sprintf(s,"Content-Length: %d\r\n",strlen(data));
          strcat(http,s);
          strcat(http,"Content-Type: application/json\r\n");
          strcat(http,"\r\n");
          strcat(http,data);
          client.print(http);
          delay(30);
          client.stop();
          digitalWrite(PIN_LED,LOW);
      }
      by ボクにもわかる電子工作
      https://bokunimo.net/

      Arduino IDEでESP32(ESP-WROOM-32)を使用する方法・途中版

      ESP32用のArduino IDE開発環境をセットアップしてみましたので、その手順を紹介します。開発環境が正式にリリースされる際には、より簡単なセットアップ方法が登場するかもしれません。
      本ブログは、それまで待てない方が対象です。

      ESP32用Arduino IDE開発環境セットアップ方法
      まずは、Arduino IDEを起動し、環境設定から「スケッチブックの保存場所」を確認して下さい。Windows 710の場合は、以下のディレクトリ・パスが設定されていることが多いようですが、クラウド上のHDDと連携している場合など、OSの設定の違いによっては異なるディレクトリ・パスが表示される場合もあります。
        C:/Users/(ユーザ名)/Documents/Arduino/

      もし、上記のディレクトリ・パス名の中に日本語(全角文字)が含まれている場合は、保存場所を英文字(半角)だけのディレクトリ名へ変更してください。ユーザ名についても必ず英文字を使用してください。なお、エクスプローラで表示されるフォルダ名「ドキュメント」やユーザ名については日本語でもかまいません。

      ここでCygwinを使用します。Cygwinのインストール方法については、後半の「3. CygwinとGitをインストールする」をごらんください。

      Arduino IDEを終了させてから、Cygwinを起動し、確認したディレクトリ・パスをもとに以下のコマンドを実行すると、GitHubからArduinoフォルダへArduino ESP32をダウンロードできます。
        $ cd /cygdrive/c/Users/(ユーザ名)/Documents/Arduino/
        $ git clone https://github.com/espressif/arduino-esp32 hardware/espressif/esp32

      Arduino ESP32のインストールを行うには、ダウンロードしたtoolsフォルダに含まれる、get.exeを実行してください。
        $ cd hardware/espressif/esp32/tools/
        $ chmod a+x *.exe
        $ ./get.exe

      実行時にエラーが発生した場合は、エクスプローラの「管理者として実行する」を使って実行してみます。実行画面の表示が読めないほどの速さですぐに消えた場合は、Cygwinのときと同じエラーが表示されたと考えて良いでしょう。Arduino IDECygwin上で表示されたディレクトリ・パス名に日本語(全角文字)が含まれている場合は、get.exeを実行することができません。Arduinoフォルダを英文字だけのディレクトリ・パスへ変更してください。

      初めてESP32開発ボードをPCUSB接続すると、自動的にUSBシリアル変換IC用ドライバのインストールが開始されます。数分以上の時間を要する場合がありますが、USBを抜かずに、完了するまで待ってください。インストールが完了したら、デバイスマネージャを使ってシリアルCOMポート番号を確認しておきましょう。なお、電源供給の無いUSBハブを使用すると、電源容量が不足し、失敗することがあります。この場合、たとえインストールに成功しても、動作が安定しない場合が多いので、なるべくPC本体のUSB端子へ接続してください。

      Arduino IDEを起動すると、下図のように「ツール」メニューの「ボード」項目内に「ESP32 Arduino」が追加されます。「ESP32 Dev Module」を選択し、また、同じ「ツール」メニュー内の「シリアルポート」項目からCOMポート番号を選択してください。


      開発環境Arduino ESP32は頻繁に、更新されています。定期的に下記のコマンドを実行して、更新すると良いでしょう(実行時はArduino IDEを終了しておく)。
        $ cd /cygdrive/c/Users/(ユーザ名)/Documents/Arduino/hardware/espressif/esp32/
        $ git pull

      以下は2016年12月時点での古いインストール方法です。
      最新版では、上記のようにget.exeを使用することでPython実行環境などのインストールが不要になりました(実際にはPython実行環境がexeに含まれており、以下の作業が自動化された)。

      1.最新の Arduino IDEを下記からダウンロードし、インストールする。

      インストール先は、Cドライブの直下などに「Arduino」フォルダを作成するのがよさそう。Program Filesフォルダへインストールすると、後述のCygwinで操作した時に適切に動作しない場合がある(かもしれない)。
      全てのインストール完了後に起動し、スケッチを作成した時の様子。

      2. Python 2.7.12を下記からダウンロードし、インストールする。

      インストール時のカスタマイズ画面で、一番下に表示される「Add python.exe to Path」の部分の「X」印をプルダウンして、「Will be installed on local hard drive」を選択する。
      Pythonのインストール画面(参考文献から引用)

      3. CygwinとGitをインストールする

      Cygwinと、Gitをインストールする。Gitをインストール済みなら、次へ進んでください。
      なお、Cygwinを入れない方法もある(詳細=git-scm.com)。
      下記からsetup-x86.exe(Windows 32bit版の場合)、またはsetup-x86_64.exe(64 bit版の場合)を実行する。新規インストールも追加インストールも同じEXEで実行できる。
      実行後、下記のマニュアルの1ページ目と2ページ目にしたがって、Cygwinのインストールを行う。
      そして、3ページ目については、一つ目(ダウンロードするサイトの選択)だけを行う。
      「Select packeges」の画面で、「Search」欄に「git」と入力し、以下の項目を探し、選択する。
      重複になるが、Cygwin上で動作するPythonもインストールする。
      バージョン2.8.3   git: Distributed version control system
      バージョン2.7.12  python: Python language interpreter
      本インストールには不要だが、今後、PythonをCygwinで利用する場合は、下記も追加しておく。
      バージョン15.2   python-setuptools: Python packege management tool

      4. pyserialをインストールする

      DOSプロンプトを開いて、以下のコマンドを入力する(赤文字の部分)。

      Microsoft Windows [Version 6.1.7601]
      Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

      C:\Users\xbee>python -m pip install –upgrade pip
      Collecting pip
        Downloading pip-9.0.1-py2.py3-none-any.whl (1.3MB)
          100% |################################| 1.3MB 547kB/s
      Installing collected packages: pip
        Found existing installation: pip 8.1.1
          Uninstalling pip-8.1.1:
            Successfully uninstalled pip-8.1.1
      Successfully installed pip-9.0.1
      C:\Users\xbee>pip install pyserial
      Collecting pyserial
        Downloading pyserial-3.2.1-py2.py3-none-any.whl (189kB)
          100% |################################| 194kB 1.1MB/s
      Installing collected packages: pyserial
      Successfully installed pyserial-3.2.1
      C:\Users\xbee>

      5. ESP32用の開発環境のインストールを行う

      Arduino IDEのフォルダをCドライブの「Arduino」フォルダにインストールしていた場合は、以下のようにコマンドを順に入力する。その他のフォルダの場合は、最初のcdの内容を修正して入力する。

      $ cd /cygdrive/C/Arduino/hardware/
      $ mkdir espressif
      $ cd espressif
      $ git clone https://github.com/espressif/arduino-esp32.git esp32

      引き続き、以下を入力する。

      $ cd esp32/tools
      $ python get.py

      エラーが出た場合は、get.pyをテキストエディタで開き、「import ssl」を追加し、再度、「python get.py」を実行する。

      (省略)
      import tarfile
      import zipfile
      import re
      import ssl
      (省略)

      6. ESP32モジュールまたは開発ボードをPCへ接続する。

      しばらくすると自動的にドライバーがインストールされる。初めてインストールする時は、長い時間がかかることがある。気長に待つか、USBシリアル変換アダプタICのメーカーのホームページからドライバをダウンロードする。
      正しく、インストールされれば、デバイスマネージャへ表示される。

      7. Arduino IDEを起動する。

      8.「ツール」メニューの「ボード」から「ESP32 Dev Module」を選択する。

      項目「ボード」から「ESP 32」を選択し、シリアルポートのCOM番号をESPモジュールが接続されているポートに合わせて設定する。

      トラブル対策

      ■コンパイルエラー Permission Denied
       cd /cygdrive/C/Arduino/hardware/espressif/esp32/tools/
       chmod -R a+x *
      あるいは、toolsフォルダを右クリックして「プロパティ」画面を開き「セキュリティ」タブでアクセス権限を設定(それで対策が可能かどうかは未確認です)。
      過去、私は、Arduino IDEのインストール先をProgram Filesフォルダにしていたことがあります。この場合、適切にアクセス権を設定しても、不具合が生じたので、以降、ドライブの直下にArduinoフォルダを配置するようにしています。
      ■exec: "python.exe": executable file not found in %PATH%
      手順2のWindows用のPythonのインストールで、パスが設定されていなかった可能性がある。手順2を再実行して設定する。
      Windows用のPythonをインストールせずに、Cygwin用のPythonのPATHを設定しても動くかもしれないが(C:\cygwin\bin)、PATHだけの問題ではないと思う。ファイル名はpython-2.7.exe。もちろん、パス設定だけでは動かないことは明白。コピーして、ファイル名を合わせたら、そのまま動く!?(未確認)
      私は、素直!?にWindows用のPythonを追加してしまいました。

      Pythonが2つインストールされます。

      この方法だと、Pythonが2つもインストールされてしまいます。Windows用のPythonフォルダの容量は70MB。重複しないインストール方法は、下記の「参考文献など」を参照してください。少なくともPythonは重複しません。それが最適かどうかは。人によって重複させたくないものが異なると思います。
      セキュリティの観点では、アキレス腱をあまり多くのシステムに握られたくないでしょうから、普段お使いのシステムを中心に環境を整えておくのが良いでしょう。
      あるいは、一つのPythonをうまく共用することも出来るはずです。成功したら、教えてください。
      そのうち使わなくなるインストール方法なので、短期間の使用なのであれば、どんな構成でも良いのですが、こういった中途半端な情報を公開すると、いろいろとクレームが来ることが多いので、その対策のための余談でした。

      インストール後、真っ先に必要になるピン配列用

      ピン配列表(参考文献から引用) ESP8266では不足していたGPIOやADCが充実

      参考文献など

      参考文献・コンテンツの引用:
      https://github.com/espressif/arduino-esp32/blob/master/doc/windows.md

      ボクにもわかるESPモジュール

      http://blogs.yahoo.co.jp/bokunimowakaru/folder/1681421.html

      by ボクにもわかる電子工作
      https://bokunimo.net/