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