趣味の電子工作などの記録。時にLinuxへ行ったり、ガジェットに浮気したりするので、なかなかまとまらない。
RSS icon
  • ESP8266からherokuにデータを送ってみる

    投稿日 2015年 7月 26日 コメントはありません

    これまでに node.js + herokuでHTTP GETコマンドを使って最低限のデータの出し入れができることを確認しました。つまりherokuで実用性はないとはいえ、サーバ側の構築ができるようになりました。ただ、セキュリティとか実用性とかそういうのは考えてないので、とにかく最低限ですし、そもそもデータベースを使っていないのでプログラムを再起動されると消えてしまいます。そしてそれは頻繁に起こります。なので、あくまで「ちゃんと作ればできることがわかる」というレベルです。

    次は、ESP8266からherokuにデータを送って、PCからそのデータを読み取れるか試してみます。簡単に済ますためにESP8266側は先に確認したようにArduino IDEで構築します。heroku側は先の「hello-heroku2」のままにします。

    Arduino側のスケッチはサンプルの「ESP8266WiFi」の下の「WiFiClient」を元にしています。一旦、WiFiClientを開いて、名前(今回は「HerokuClient」にしました)をつけて保存します。
    その後、ESSIDとWiFiのパスワードの設定、先の「hello-heroku2」に合わせたGETメソッドに合わせたURLの生成の部分を修正します。今回は、起動すると1から順にデータをheroku側にセットするだけとしました。

    修正後のソースは以下のようになりました。元のソースはdata.sparkfun.comのサービスにデータを送るようになっていたようですが、今回はそれを変更しています。(コメントは修正していませんので、そのままになっています。また、WiFiの設定関連は当然伏せてありますので、環境に合わせて修正が必要です。)

    /*
     *  This sketch sends data via HTTP GET requests to data.sparkfun.com service.
     *
     *  You need to get streamId and privateKey at data.sparkfun.com and paste them
     *  below. Or just customize this script to talk to other HTTP servers.
     *
     */
    
    #include <ESP8266WiFi.h>
    
    const char* ssid     = "xxxxxxxxxxxxxxxx";
    const char* password = "xxxxxxxxxxxxxxxxxxxx";
    
    const char* host = "whispering-basin-7319.herokuapp.com";
    int count = 1;
    
    void setup() {
      Serial.begin(115200);
      delay(10);
    
      // We start by connecting to a WiFi network
    
      Serial.println();
      Serial.println();
      Serial.print("Connecting to ");
      Serial.println(ssid);
      
      WiFi.begin(ssid, password);
      
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
    
      Serial.println("");
      Serial.println("WiFi connected");  
      Serial.println("IP address: ");
      Serial.println(WiFi.localIP());
    }
    
    int value = 0;
    
    void loop() {
      delay(5000);
      ++value;
    
      Serial.print("connecting to ");
      Serial.println(host);
      
      // Use WiFiClient class to create TCP connections
      WiFiClient client;
      const int httpPort = 80;
      if (!client.connect(host, httpPort)) {
        Serial.println("connection failed");
        return;
      }
      
      // We now create a URI for the request
      String url = "/";
      url += "?DATA=";
      url += String(count++);
      
      Serial.print("Requesting URL: ");
      Serial.println(url);
      
      // This will send the request to the server
      client.print(String("GET ") + url + " HTTP/1.1\r\n" +
                   "Host: " + host + "\r\n" + 
                   "Connection: close\r\n\r\n");
      delay(10);
      
      // Read all the lines of the reply from server and print them to Serial
      while(client.available()){
        String line = client.readStringUntil('\r');
        Serial.print(line);
      }
      
      Serial.println();
      Serial.println("closing connection");
    }
    
    

    これで、ESP8266モジュール側をGPIO0をGNDに落とした状態でリセット解除することでブートローダ状態で待機させてから、ArduinoIDEで「マイコンボードに書き込む」とするとコンパイルと書き込みが行われてプログラムが走り出します。
    事前にシリアルモニタを起動しておくと、

    Screenshot--dev-ttyUSB0

    という感じでWiFiのアクセスポイントに接続し、その後herokuへDATAを1から順にセットしている様子が確認できます。(日本語が文字化けしてますが、まあいいでしょう)
    PC側からherokuにアクセスすると、

    Screenshot-Mozilla Firefox-13

    という感じで、ESP8266からセットしたデータを確認することができました。

    これでESP8266からherokuへのデータのアップロードと、ブラウザによるherokuにアップロードされたデータの確認ができたことになります。実用にするにはheroku側はデータベース使わないとね、とか、複数のESP8266に対応しないとね、とか、セキュリティ全く無いじゃん、とか、山ほど考慮するべきことがありますが、最低限遊べるレベルには到達したのではないでしょうか。

    heroku + node.js + ESP8266 + ArduinoIDEの組み合わせでIoT環境を試すレベルであれば簡単に構築できることがわかりました。もちろん、リソースをかければ本格的な環境にアップグレードすることもできると思います。あとはこの環境をどう使うか、ということですね〜。


  • EMW3165モジュール

    投稿日 2015年 7月 14日 コメントはありません

    Hack a Dayの記事からですが、EMW3165というIoTモジュールが登場しているようです。記事のタイトルでは、「NEW PART DAY: THE ESP8266 KILLER」となっています。

    データシートによれば、

    • 100MHz動作のCortex-M4コア
    • 2MBのSPIフラッシュと512KBのオンチップフラッシュ
    • 128KBのRAM
    • GPIOが22ピン

    というのが概要です。STM32F4とSDIO接続のWiFiチップ、SPIフラッシュ2MBの組み合わせのようですので、いつぞやのEMW3162モジュールと大差ありませんが、今回特筆すべきは価格かもしれません。Seeed studioに出ている価格では$7.95なので、ESP-WROOM-02では容量が足りない、という場合には選択肢に上がってくるかもしれません。(もっとも、FCCとCEマーキングしかないので、日本では使えません)

    ただ、本質的な部品点数ではESP8266の方が少なくなる(当たり前ですが・・)ので、「ESP8266 KILLER」というにはちょっと役不足な感じがします。


  • 技適マーク付きESP8266モジュール入手

    投稿日 2015年 7月 12日 コメントはありません

    早く技適マーク付きESP8266モジュール欲しいな〜、と思ってググっていたら、スイッチサイエンスESP-WROOM-02の技適マーク付きの扱いがあることを発見。さっそくポチってしまいました。7/10に注文して、今日7/11には入手。速くて便利。

    いま改めて気づいたのですが、スイッチサイエンスのプレスリリースが出たのも7/10だったんですねぇ。そちらにはピッチ変換済みモジュールに関する記載もありました。
    モジュールは1.5mmピッチのSMD実装前提の形状ですので、慣れてない人はピッチ変換済みモジュールのほうがお手軽でしょう。

    ESP-WROOM-02

    よくみると、ESP-WROOM-02って、ESP-12にあった青色LEDがなくなってます。まあ、消費電力追い込む場合にはLEDも邪魔ですから、それはそれで良しかと思いますが、デバッグ中は不便そうです。

    一方で、CerevoからもESP-WROOM-02とピッチ変換基板が発売されています。Cerevoって聞き覚えあるけど何だっけ、と一瞬考えてしまいましたが、ustreamなどの機器で結構名前が出ていた会社です。Cerevoの中の人もきっとESP8266の可能性が気になっちゃったんでしょうねぇ。ブログの記事にまでなっちゃってます。

    話をESP-WROOM-02に戻します。さて、こいつならシールド環境などという面倒くさいことを言わずにあれこれできます。これからいろんな人が懐に暖めていたアイデアが花咲くことと思います。自分もアイデアだけはある(あ、部品もある)んですが、なかなか時間が・・・というのと、体調崩してしまっているのでどうなることでしょう。


  • ESP-8266用ArduinoIDEでサンプルを動かす

    投稿日 2015年 7月 11日 1つのコメント

    環境構築とサンプルを動かす話を一つの記事にしたら長くて読みにくくなってしまったので、2つに分割します。この記事は環境構築の続きです。

    ESP8266自身で動かすWebサーバーサンプルのテストと、ESP8266をNTPクライアントにするサンプルのテストです。

    サンプルのコンパイルと書き込み

    以下の手順でサンプルの動作を確認しました。

    1. 「ファイル」⇒「スケッチの例」⇒「ESP8266mDNS」⇒「mDNS_Web_Server」を選択してみます。
    2. 23行目にSSIDを、24行目にパスワードを設定する箇所がありますので、そこにそれぞれの環境に応じた設定をします。
    3. 「ファイル」⇒「名前をつけて保存」で適当なディレクトリを作って保存します。
      (あたり前といえばあたり前ですが、保存しないとうまく動作しません)
    4. ESP8266ボード側はブートローダの起動状態にしておきます。(GPIO0をGNDに落とした状態でリセットをかけて、リセット解除しておきます。リセット解除後はGPIO0はGNDに落ちていても落ちていなくても構いません。なお、ESP8266のファームウェアバージョンはv0.9.5のものを使用しています。)
    5. 「ツール」⇒「シリアルモニタ」でシリアルモニタを起動しておきます。速度は115200bpsです。
    6. 「スケッチ」⇒「マイコンボードに書き込む」でコンパイルと書き込みを行います。
    7. 書き込みが終わると自動的に実行されます。
      screen8
    8. シリアルモニタ側にIPアドレスなどの情報が表示されます。
    9. ブラウザからそのIPアドレスにアクセスすると、ESP8266上で動作するWebサーバからのメッセージ(「Hello from ESP8266 at 192.168.xxx.xxx」)が取得できます。
      下記はAndroid上のブラウザからIPアドレス指定でアクセスした後のシリアルコンソールの表示内容です。
      screen9

    同様にNTPClientなども動作しました。

    Windowsだけではなく、Linuxでもこれだけお手軽に動かせるようになってきています。かなりお手軽にESP8266を動かす環境が整ってきていることを感じますね。

    ※上記の動作確認は接続先のアクセスポイントを含め、シールドルーム内で実施しています。早く技適対応済みのモジュールが入手できるようになって欲しいものです。


  • Linux版ESP-8266用ArduinoIDEのインストール

    投稿日 2015年 7月 10日 1つのコメント

    Linux版のESP8266対応のArduinoIDEのインストールが簡単になっていましたので、その方法でLinux32bit環境(LinuxMint17環境)にインストールしてみました。
    ArduinoIDEの1.6.4からボードマネージャ(Boards Manager)を使ってサードパーティのプラットフォームパッケージのインストールができるようになったようです。そこで、ESP8266用のプラットフォームパッケージが準備された、ということみたいです。
    このプラットフォームパッケージを使うと、超簡単にArduinoIDEからESP8266を使うことができます。現時点ではWindows,MacOS、Linux(32bit/64bit)のパッケージが準備されているようです。

    (7/15に64bit版Linuxでもサンプルのコンパイルまで確認してみました。手順は概ね同じですが、若干の記載漏れを加筆しました。また、64bit版ではファイル名などで32になっているところが64になったりします。)

    このプラットフォームパッケージの特筆すべき点は「AVRマイコンなど他のマイコンを必要とせず、ESP8266モジュール単体でArduinoとして動作しつつ無線LANでの通信ができる」ということです。

    大事なこと(すごいこと)なのでもう一度書きます。Arduinoとして動作させるのに、(書き込み時は別として)ESP8266モジュールと電源以外の部品は必要ありません

    たぶん、ArduinoIDE自体で依存するモジュールがあると思います。build-essentialやdefault-jdkなどは事前にインストールしておくほうが良いかと思います。

    ArduinoIDEのインストール

    arduino.ccからLinux32bit版のArudino IDEをダウンロードしてきます。ダウンロードが完了したら、アーカイブを展開します。

    端末(コンソール)を開いて、ホームディレクトリから

    $ xzcat ダウンロード/arduino-1.6.5-linux32.tar.xz | tar -xv
    $ ./arduino-1.6.5/arduino

    として、開発環境を起動します。
    (ダウンロード場所はディストリビューションなどに応じた場所を指定してください。上記ではホームディレクトリ直下にarduino-1.6.5というディレクトリができて、そこに展開します。)

    screen1

    「ファイル」⇒「環境設定」にて、環境設定の画面を開きます。開いたら、「Additional Boards Managers URLs:」に「http://arduino.esp8266.com/package_esp8266com_index.json」と入力し、OKを押します。

    ※追伸:安定版と開発版のバージョンができているようです。
    安定版は「http://arduino.esp8266.com/stable/package_esp8266com_index.json」、開発版は「http://arduino.esp8266.com/staging/package_esp8266com_index.json」を入力してください。
    どちらを選べばいいかわからない場合は当然安定版の方を選びましょう。

    「ツール」⇒「ボード」⇒「Board Manager …」を選択します。

    screen3

    一番下に、「esp8266 by ESP8266 Community」というのがありますので、ここをクリック(選択)すると、右下に「Install」ボタンが現れますので、「Install」ボタンを押します。

    screen4

    すると、40MBくらいダウンロードした後、Installedになります。

    screen6

    確認したら、「閉じる」でインストールは完了です。
    ESP-8266が使えるかどうかを「ツール」⇒「ボード」で確認します。

    screen7

    メニューに「Generic ESP8266 Module」「Olimex MOD-WIFI-ESP8266(-DEV)」「NodeMCU(ESP8266 ESP-12 Module)」が増えているのが確認できました。

    今回は「Generic ESP8266 Module」で動作させてみます。
    選択すると、「ツール」の下に「CPU Frequency」「Flash Size」「Upload Speed」「ポート」などの設定ができるようになっていました。今回はそれぞれ「80MHz」「512K(64K SPIFFS)」「115200」「/dev/ttyUSB0」としています。

    サンプルの動作確認は次の記事です。


  • (祝)ESP8266モジュールの技適証明

    投稿日 2015年 6月 2日 6個のコメント

    最近、忙しくてESP-8266関連(だけじゃなくてプライベート一般も)に手を出せていないのですが、ESP-8266モジュールで技的マークが写ってる写真が出てたよ、というご報告をTDRKさんからいただきましたので紹介します。

    ESP-8266はリンクを維持したまま消費電力を1mA以下にできるよ、というツイートとともに写真が写っています。

    画像なしで引用しているのですが、下記の技適マーク入りのモジュールの写真が付いています。(直リンクしてますので、見えなくなるかも)

    結局、シールドケースにWiFiのマークやCEマーキング、FCCのID、Espressifのロゴと共に技適の番号が直接入るようですね。

    TDRKさんに教えていただいたこちらのリンクでは、ESP-WROOM-02というモジュール名称が記載されています。FCC、CEに加え、はっきりTELECと書いてあります。(中国のSRRCも記載があります)
    このモジュールに関してはFCCやCEなども初出なのでしょうか、先のTwitterにはすでにFCCに関する質問のTweetも出ています。

    AliExpressやTaobaoで手に入るようなことが書いてありますが、今の時点ではAliExpressではすべてEspressifのロゴのみのシールドケースの写真になってます。価格は数量によりますが$4~5位。ショップが掲示している写真は更新されるのでしょうかね。更新すれば日本からの注文が増えるとなれば、中国人は(良くも悪くも)商売上手なので更新すると思いますが・・・。
    中身は変わらないんでしょうが、マークの有り無しは電波法上重要ですから。

    さて、マーク入りのモジュールが手に入るようになれば、あんなことやこんなことができるようになりそうです。
    ・・・が、まずは時間が欲しいところ・・・。


  • 2月前半の技適証明の公示

    投稿日 2015年 3月 30日 9個のコメント

    ESP8266の開発がArduino IDEでできるようになったというすごいビッグニュースがでたところで気になるのが、日本でESP8266を使うためには避けて通れない技適の行方です。

    この記事で書いたように、2月13日にEspressifの中の人が「#ESP8266 has passed the Japanese TELEC certification!」とツイートしています。

    ・・・で、時々総務省のWebサイトにある技術適合証明等の公示をみていたのですが、さっき見てみたら、2月前半分の公示がでていました(なんで週末に出るんだろ?)。で、テレコムエンジニアリングセンター(TELEC)の2月前半分を見てみると、ずらずらっとたくさん技適認証を受けた機器が並んでいます。この中で電波形式G1D(多分合ってると思うんだけど)で検索して、周波数が2400MHz帯しか出さないものを見ていくと、

    • 三菱電機 AR-0HT6-PANEL2-2 001WWDB3008282~
      3008331 2/12
    • 株式会社日放電子 F400470091 001WWCA3018338~
      3018349 2/9
    • LG Electronics Inc. LG-W100 001-A03356  2/4
    • パナソニック株式会社 CN-GP757VD  001-A05291  2/13

    しかありません。(技術基準適合証明を受けた者の氏名又は名称、特定無線設備の型式又は名称、技術基準適合証明番号、技術基準適合証明をした年月日の順です)

    三菱電機やLGやパナソニックが他社のモジュールの認証を取るということは考えにくいので、この中で怪しいのは2番目の日放電子さんかな、と思います。ちょうど技適の証明番号も12個ということで、ESP-01〜ESP-12のモジュールの種類の数とも一致しています。そこで、総務省の技術基準適合証明等を受けた機器の検索のページで検索してみました・・・が、特に追加の情報はありませんでした。

    さて、実際どうなることやら・・・。技適の問題がクリアになってくれればヒットまちがいなしなんですけどねぇ・・・。あるいは、この日放電子さんというところから日本向けは販売されるんでしょうか・・・?(最悪なのは、他3社のどこかが自家組込み用にTELEC取りました〜、というパターンですが・・・)

    ヤキモキさせてくれますね・・。

    #ESP-01ってシールドケースが無いから技適が通らない気もするけど・・・シールドケースで密閉されてなくてもワンチップだからハードウェア改造で何かできる気もしないし、どうなんだろ?


  • 【すごい】ESP8266がArduino IDEでサポートされる

    投稿日 2015年 3月 30日 4個のコメント

    いつものように、Hack a Dayの記事から。

    タイトル(「ARDUINO IDE SUPPORT FOR THE ESP8266」)だけ見ると、ESP8266をEthernet Shieldとして使えるようになったのかな、と思ってしまうところですが、そんな当たり前の話じゃありません

    『ArduinoでESP8266がサポートされた』のではなく、『Arduino IDEでESP8266がサポートされた』のです。言い換えると、ESP8266単体で動かすIoTアプリケーションの開発がArduino IDEでできるようになったということなのです。(github上のサンプルプログラムにはIoTのプロトコルであるMQTTのサンプルも載っています)

    ESP8266の内部のXtensaプロセッサをArduino IDEがサポートするようになり、ESP8266モジュールだけでArduinoのpinMode(),digitalRead(),digitalWrite(),analogRead()が使える上に、WiFi機能をEthernet Shieldと同様に使えるようです。一方で、PWMはESP8266自体がハードウェアリソースを1chしか持っていないので制約があり、SPIとI2Cはまだ動作しないようです。

    すでに github から Linux(64bit)、Windows、OS X用のArduinoコンパチのIDEがダウンロードできるようになっていて、サポートしている機能の範囲も同じところに書かれています。(Linux版をダウンロードしてみたら70MB以上ありました・・・)

    ESP8266の書き換えは、Hack a Dayのこちらの記事にあるような簡単な回路でできるようです。

    IDEの安定性次第のところはあるかもしれませんが、安定して使えるようになればこれは間違いなく大ブレイクすると思います。これで無線や電子工作に詳しくない人でもArduinoでマイコン制御機器を作ってみるのと大して変わらない感覚で、ESP8266を使ったIoT機器を作ってみるということが可能になるのですから。

    おそらく、Espressif社はWiFiを使ったIoT機器用のチップとしては数量でNo.1になっていくのではないでしょうか。(ちょうど、BluetoothでCSR社が占めているような立ち位置になるんじゃないかと予想します)


  • aitendoにESP8266モジュール登場

    投稿日 2015年 3月 25日 コメントはありません

    たまたまググってたら引っかかりました。

    aitendoでESP8266モジュールを扱い始めたようです。
    形状からするとESP-01モジュールのようですが、売り切れになってました。
    「New」と表示されてますが、いつから扱い始めたんでしょうね。
    (単に自分が気づかなかっただけなのでしょう)


  • 新たなIoTデバイスEMW3162登場?

    投稿日 2015年 3月 25日 コメントはありません

    例によって Hack a Day の記事からです。

    ESP8266とは異なる別のIoTモジュール、その名もEMW3162というモジュールが登場しているようです。(PDFデータシート

    ESP8266モジュールのワンチップIoTモジュールとは異なり、2チップでモジュール構成しています。アプリケーションプロセッサは120MHz動作のSTM32F205を搭載し、アプリケーション領域としてFlash 1MB、RAM128KBが使えるようです。

    WiFiとTCP/IPの処理はライブラリで提供、RTOSおよびGCCの開発ツールもファームウェア開発キットとして提供されるようです。典型的な無線のUART、オーディオ、センサ接続などはファームとして提供されるそうです。(サンプルプログラムの扱いでしょうかね?)

    すでにAliExpressでも$10〜$20/台程度で販売されていますが、モジュール仕様としてWiFiアンテナはオンボードPCBアンテナと外付けアンテナタイプの2種類があるようですので、要注意です。(あまり明確に記載されていません)

    CEとFCCには適合しているようですが、例によって(当然でしょうが)技適に関わる記述はありません。(モジュール写真を見る限りはどれもCEマークしか入っていません)

    第一印象としてはESP8266では扱いきれないようなアプリケーションでない限りはメリットは大きくないような気がします。コスト的にもESP8266の1チップ構成と比べるとデメリットは大きいかと。もちろんモジュール上の120MHz動作のSTM32F205を活かしきれるような用途なら別なのですが、果たしてどの程度そのような用途があるか・・・?