LoginSignup
17
18

More than 5 years have passed since last update.

IoT、はじめの一歩。ESP-WROOM-02でゴニョゴニョした足跡

Last updated at Posted at 2016-02-17

インターネッツ・オブ・シングスしたいですよね。
でも、何から手を付けてよいやら分かんないっすよね。
ググッてみたら、妙にハードル高い記事多いし、逆に簡単だけど、ホントの最初の最初しかねえよ!みたいな...

ってなわけで、私がESP-WROOM-02というゴイスーなWi-Fiモジュールを使ってゴニョゴニョした際の足跡をば。

ESP-WROOM-02がゴイスーな理由

  • 安い(モジュール単品だと数百円)
  • 簡単(Arduinoが使えるぜ!)
  • 小さい(2.0cm×2.0cmぐらい?)
  • 参考記事多い!(超大事)

買い物しよう

よろしく作り込んでくれているコイツを買いましょう。

あと、持ってない人は「半田ごて」と「半田」も買いましょう。
開発ボード単体で遊ぶ分には不要ですが、ブレッドボードにぶっ刺したりするには自分で半田付けし、ピンを付けたげる必要があります。

なお、「開発ボードが売り切れていた」「いきなりハードモード希望」の方は、

等を参考に頑張ってください。

シリアル通信してみたり、Wi-Fi繋いだり、スマホからGETしたりしよう

そもそも「シリアル通信」ってなんじゃい?って方は、これでも読んで知ったかぶりしよう。

セットアップについては、こちらの記事が素晴らしく分かり易いので、これ読んで頑張ってください。

なお、記事はちゃんと最後のコメント欄まで読むようにしましょう。↓ココ超大事です。

ESP FLASH DOWNLOAD TOOLでSTARTボタンを押す前に、IO0スイッチを押した状態で、RESETボタンを押して離し、IO0スイッチを押した状態のまま、ESP FLASH DOWNLOAD TOOLのSTARTボタンを押さないと、ファームウェアの書き込みが出来ませんでした。

ファーム書き込み時に上記のコマンド入力が必要です。波動拳出すより簡単なので大丈夫。

スマホからWi-Fi設定出来るようにしよう

色んな場所で使いたいよね!ってことで、Wi-Fi設定をブラウザから出来るようにしてみましょう。

HTTPでGETしちゃおう

Wi-Fi繋がったら次はHTTPリクエストですね。

以下メソッドを作って、Wi-Fi接続完了直後とかにぶち込んじゃいましょう。
シリアルモニタを起動させて再起動すると、お天気情報のJSONが表示されます。ゴイスー。

/**
 * HTTPリクエスト(GET)
 */
void http_get() {
  HTTPClient http;
  http.begin("http://weather.livedoor.com/forecast/webservice/json/v1?city=400040");
  int httpCode = http.GET();
  if(httpCode) {
      Serial.printf("[HTTP] GET... code: %d\n", httpCode);

      if(httpCode == 200) {
          String payload = http.getString();
          Serial.println(payload);
      }
  } else {
      Serial.printf("[HTTP] GET... failed, error: %d\n", httpCode);
  }

  http.end();
  delay(5000);
}

せっかくだからArduinoでJSON扱おう

採ってきたJSONをよしなに扱えるようにデコードしましょう。
下記のライブラリを使います。
https://github.com/bblanchon/ArduinoJson
使い方は
 1. GithubからzipでDL
 2. Arduino IDEのメニュー開く
 3. スケッチ>ライブラリをインクルード>.ZIP形式のライブラリをインストール
でDLしたzipファイルを選択しインスコ。

コードはこんな感じで。

#include <ArduinoJson.h>
/**
 * HTTPリクエスト(GET)
 */
void http_get() {

  const int BUFFER_SIZE = JSON_OBJECT_SIZE(4) + JSON_ARRAY_SIZE(1);
  StaticJsonBuffer<BUFFER_SIZE> jsonBuffer;

  HTTPClient http;
  http.begin("http://api.fixer.io/latest?base=USD&symbols=JPY");
  int httpCode = http.GET();
  if(httpCode) {
      Serial.printf("[HTTP] GET... code: %d\n", httpCode);

      if(httpCode == 200) {
          String payload = http.getString();
          Serial.println(payload);

          /* JSONデコード */
          char* json = new char[payload.length() + 1];
          payload.toCharArray(json, payload.length() + 1);
          JsonObject& root = jsonBuffer.parseObject(json);
          if (!root.success()) {
              Serial.println("parseObject() failed");
          }

          const char* date = root["date"];
          Serial.println(date);
      }
  } else {
      Serial.printf("[HTTP] GET... failed, error: %d\n", httpCode);
  }

  http.end();
  delay(5000);
  http_post();
}

なお、先述のお天気情報だとデータ量が大きすぎるのか、改行が入ってると駄目なのか、
何にせよ上手いこといかなかったので、呼び先は為替情報APIに変更してます。
別のJSONライブラリ使えば上手く行くかも。。

HTTPでPOSTしちゃおう

次はPOST。ESP8266HTTPClientを使ったやり方になります。
送り先は各自適当にサーバ立てるなりしてお試し下さい。

/**
 * HTTPリクエスト(POST)
 */
void http_post() {
  HTTPClient http;
  const char * headerkeys[] = {"User-Agent","Set-Cookie","Cookie","Date","Content-Type","Connection"} ;
  http.begin("http://hogehoge/hogehoge/");
  http.addHeader("Content-Type", "application/x-www-form-urlencoded");
  int httpCode = http.POST(String("parameter1=value1& parameter2=value2"));
  Serial.printf("[HTTP] POST... code: %d\n", httpCode);
  Serial.println(http.getString());
}

SPI通信しよう

IoTのTをやりましょう!!
というわけで3軸ジャイロセンサーを買います。

こちらを以下の通りに配線します。配線コードは適当に買って下さい。

ESP-WROOM-02側 センサ側
ピン1:VDD ピン1:VDD
ピン3:SPI_CLK ピン2:SPC
ピン5:SPI_MOSI ピン3:SDI
ピン4:SPI_MISO ピン4:SDO
ピン6:SPI_CS ピン5:CS
ピン18:GND ピン8:GND

Arduinoのプログラムは下記参照。そのままペタッと貼り付けて、書込み実施すると動きます!
ブレッドボードを手に持ってグリグリ動かしてみましょう!きっと面白いよ!

なお、ここまでの記事内容に従って、Arduino IDEの設定を行っている場合は、
シリアルモニタの表示が文字化けしてしまうので、

Serial.begin(9600);

の「9600」を「115200」に書き換えます。

センサから取った値をインターネッツに放り投げよう。

ってなところで、適当にサーバおっ立てましょう。Djangoとか簡単でいいと思うよ!
んで、そこに向かってセンサの値を放り投げちゃえば...This is IoT!! Yeah!!

17
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
18