{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "オリジナルの作成:2015/10/25" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## お手軽IoTモジュールESP-WROOM-02\n", "秋月で550円で購入できるWiFIモジュール ESP-WROOM-02*1は、 それ単体でもArduinoとして利用でき、アナログデータをサーバに送信することができます。\n", "\n", "\n", "\n", "初めて使う時には、Wi-Fiモジュール ESP-WROOM-02 DIP化キット(K-09758)\n", "\n", "\n", "\n", "を使うか、スイッチサイエンスのESP-WROOM-02ピッチ変換済みモジュール《シンプル版》 (ボードのみ 162円) を使うと便利です。\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Arduinoで始めるWiFiモジュール\n", "今回参考にしたサイトは、技適済みWi-Fiモジュール「ESP8266」で始めるIoT入門(ブレイクアウトボード実装編)です。\n", "\n", "- http://tech-blog.cerevo.com/archives/859/\n", "\n", "今回は、ESP-WROOM-02の取り付け基板として、上記サイトで紹介されていた CEREVOのブレークアウトボードを使いました。\n", "\n", "最初は、ハンダ付けしたESP-WROOM-02が正しく動作するか確認します。\n", "\n", "\n", "\n", "CEREVOのブレークアウトボードの端子の説明は、以下の通りです。\n", "\n", "\n", "\n", "上記の資料を参考に以下の様にブレッドボードに接続しました。\n", "\n", " | CEREVO\t | ブレッドボード | \n", " |---|---|\n", " | 1 3V3\t | 3.3V | \n", " | 2 EN\t | 10KΩ抵抗で3.3V | \n", " | 9 GND\t | GND | \n", " | 11 RXD\t | USBシリアルのTXD | \n", " | 12 TXD\t | USBシリアルのRXD | \n", " | 13 GND\t | GND | \n", " | 15 RST\t | 10KΩ抵抗で3.3V | \n", " | 18 GND\t | GND | \n", "\n", "シリアルモジュールと USBシリアルモジュール との接続は、以下の通りです。\n", "\n", " | CEREVO\t | USBシリアル | \n", " |---|---|\n", " | 12 TXD\t | RXD | \n", " | 11 RXD\t | TXD | \n", " \n", "USBシリアルモジュールをPCに接続し、Arduinoのシリアルモジュールを起動します。 通信速度は、115200 baudで「CRおよびLF」を選択します。\n", "\n", "最初にATコマンドを入力して、OKが返ってくれば接続は大丈夫です。 次にESP-WROOM-02のファームウェアのバージョンをAT+GMRコマンドで確認しておきましょう。 \n", "\n", "\n", "\n", "### 転送速度の変更\n", "3.3Vで動作するArduino Pro Miniと接続する場合、115200 baudのデータ転送に対応できません。 そこで、ESP-WROOM-02の通信速度を9600 baudに変更します。\n", "\n", "Arduinoのシリアルモニタから以下のコマンドを入力してください。\n", "\n", "```\n", "AT+UART_DEF=9600,8,1,0,0\n", "AT+RST\n", "```\n", "\n", "このあとシリアルモニタの通信速度を9600 baudに変更してOKが表示されれば転送速度変更完了です。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## テストベンチの作成\n", "Arduinoと接続してESP-WROOM-02の実験するために、以下の様にブレッドボードにテストベンチを組み立てました。\n", "\n", "- PCからATコマンドを入力し、ESP-WROOM-02に転送\n", "- メッセージを送信用のスイッチを追加\n", "\n", "\n", "\n", "テストベンチ用のArduinoのスケッチは、以下の通りです。\n", "\n", "```C++\n", "#include \n", "\n", "int sw_pin = 10;\n", "int sTx_pin = 12;\n", "int sRx_pin = 11;\n", "int c;\n", "\n", "SoftwareSerial pc(sRx_pin, sTx_pin);\n", "\n", "void setup() {\n", " pc.begin(9600);\n", " Serial.begin(9600);\n", " while (!Serial) {\n", " ; // wait for serial port to connect. Needed for Leonardo only\n", " }\n", " pinMode(sw_pin, INPUT);\n", " pc.println(\"ESP8266IF3tTest\");\n", " delay(1000);\n", "}\n", "\n", "void loop() {\n", " if (pc.available()) {\n", " while((c = pc.read()) != -1)\n", " Serial.write(c);\n", " }\n", " if (Serial.available()) {\n", " while((c = Serial.read()) != -1)\n", " pc.write(c);\n", " }\n", " if (digitalRead(sw_pin) == LOW) {\n", " pc.println(\"SW pressed\");\n", " delay(500);\n", " }\n", "}\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 通信実験\n", "さあWiFiモジュールを使って通信してみましょう。 一番簡単なテストは、Webサーバにアクセスすることです。 以下のSageサーバにHello World!を出力するページを作成しました。\n", "\n", "- http://www15191ue.sakura.ne.jp/hello.html\n", "\n", "まずは、このページを出力することを目標にしてみましょう。\n", "\n", "\n", "### ESP-WROOM-02をルータに接続\n", "最初にESP-WROOM-02をルータに接続するまでの手順を確認します。\n", "\n", "- ESP-WROOM-02(今回は省略します)\n", "- ATコマンドでOKが返ることを確認\n", "- モード設定(Stationモード1)に設定\n", "- ルータに接続\n", "- 接続状況の確認(プログラム化では不要)\n", "\n", "では順に試してみます。 シリアルモニタでATを入力してReturnキーまたは「送信」ボタンを押します。\n", "\n", "```\n", "AT\n", "\n", "OK\n", "```\n", "\n", "次にAT+CWMODEコマンドでモードをStationモードの1にセットします。 AT+CWMODE=1と入力してください。\n", "\n", "```\n", "AT+CWMODE=1\n", "\n", "OK\n", "```\n", "\n", "ルータに接続するために、AT+CWJAPコマンドを使います。 AT+CWJAP=\"ルータのSSID\",\"ルータ接続パスワード\"を入力してください。\n", "\n", "```\n", "AT+CWJAP= \"ルータのSSID\",\"ルータ接続パスワード\"\n", "\n", "WIFI DISCONNECT\n", "WIFI CONNECTED\n", "WIFI GOT IP\n", "\n", "OK\n", "```\n", "\n", "AT+CIFSRコマンドで、接続状況を確認します。 AT+CIFSRと入力してください。\n", "\n", "```\n", "AT+CIFSR\n", "\n", "+CIFSR:STAIP,\"192.168.179.8\"\n", "+CIFSR:STAMAC,\"18:fe:34:9c:eb:22\"\n", "\n", "OK\n", "```\n", "\n", "私の公開しているSageサーバのWebに接続します。 SageサーバのIPアドレスは、49.212.164.205です。 AT+CIPSTART=\"TCP\",\"49.212.164.205\",80と入力してください。\n", "\n", "```\n", "AT+CIPSTART=\"TCP\",\"49.212.164.205\",80\n", "CONNECT\n", "\n", "OK\n", "```\n", "\n", "AT+CIPSENDコマンドで送信するデータのバイト数を指定します。 今回は、\"GET /hello.html HTTP/1.0\\r\\n\\r\\n\\r\\n\"を送信するので、30バイトとなります。 AT+CIPSEND=30を入力してください。\n", "\n", "つぎに送信する文字列を続けて入力してください。 GET /hello.html HTTP/1.0 次に、2回送信ボタンを押してください(HTTPプロトコルでヘッダと本文の区切りを表します)。\n", "\n", "```\n", "AT+CIPSEND=30\n", "\n", "OK\n", "> GET /hello.html HTTP/1.0\n", "Recv 30 bytes\n", "\n", "SEND OK\n", "\n", "+IPD,303:HTTP/1.1 200 OK\n", "Date: Sun, 25 Oct 2015 02:04:08 GMT\n", "Server: Apache\n", "Last-Modified: Sat, 24 Oct 2015 23:49:16 GMT\n", "ETag: \"c005e-34-522e260431c88\"\n", "Accept-Ranges: bytes\n", "Content-Length: 52\n", "Connection: close\n", "Content-Type: text/html; charset=UTF-8\n", "\n", "\n", "\n", "

Hello World!

\n", "\n", "\n", "CLOSED\n", "```\n", "\n", "これで、無事SageサーバのWebからHello World!のHTMLが送れました。 とても簡単ですね。\n", "\n", "Webサーバの場合は、自動的に接続が切れますが、 クライアントから接続を切る場合には、AT+CIPCLOSEコマンドを使います。\n", "\n", "シリアルモニタに出力された一連の出力は以下の様になりました。\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## スイッチサイエンスのピッチ変換モジュール\n", "スイッチサイエンスの \n", "[ESP-WROOM-02ピッチ変換済みモジュール《フル版》 ](https://www.switch-science.com/catalog/2347/)\n", "は、ブレッドボードの幅と同じサイズのため、以下のようにブレッドボードを2枚使うか、\n", "\n", "\n", "\n", "以下の様にブレッドボードで配線をして、5V電源から3.3Vに変換して使ってください。\n", "\n", "\n", "\n", "\n", "ESP-WROOM-02ピッチ変換モジュールとの結線は以下の通りです。\n", "\n", " | ESP-WROOM-02変換モジュール\t | ブレッドボード | \n", " |---|---|\n", " | 3V3\t | VCC(3.3V) | \n", " | EN\t | 10KΩでプルアップ | \n", " | IO15\t | GNDに接続 | \n", " | IO2\t | 10KΩでプルアップ | \n", " | IO0\t | GND接続でDownloadモード、未接続でBootモード | \n", " | RXD\t | USBシリアルのTXD | \n", " | TXD\t | USBシリアルのRXD | \n", " | RST\t | プルアップしたタクトスイッチに接続 | \n", " | GND\t | GND | \n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.13" } }, "nbformat": 4, "nbformat_minor": 0 }