{
"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
}