14章:ESP-WROOM-02とArduinoIDEで WiFiClient

    作成2015.10.31

  1. ESP-WROOM-02とArduinoIDEで WiFiClientの参考アドレス
    Arduino/doc/reference.md
    https://github.com/esp8266/Arduino/blob/master/doc/reference.md#wifiesp8266wifi-library
    WiFi(ESP8266WiFi library)
    これは、無線LANシールドライブラリにほとんど似ています。
    WiFiServer、WiFiClient、およびWiFiUDPは、ほとんどWiFiシールドライブラリと同じように動作します。 http://www.arduino.cc/en/Reference/WiFi:でコマンドを見ることができます。


  2. スケッチの作成とプログラムの書込み方法
    (1)"arduino.exe"をダブルクリックで起動します。
    (2)http://arduino.esp8266.com/stable/package_esp8266com_index.jsonの設定が完了しているものとします。
    (3)メニュー「ファイル」_「スケッチの例」_「ESP8266WiFi」_「WiFiClient」を選択します。
    (4)以下のスケッチが設定されます。
    /*
     *  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 
    
    const char* ssid     = "your-ssid";
    const char* password = "your-password";
    
    const char* host = "data.sparkfun.com";
    const char* streamId   = "....................";
    const char* privateKey = "....................";
    
    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 = "/input/";
      url += streamId;
      url += "?private_key=";
      url += privateKey;
      url += "&value=";
      url += value;
      
      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");
    }
    

    (5)以下を修正します。
    const char* ssid = "your-ssid";//無線LANのSSID
    const char* password = "your-password";//無線LANのパスワード
    const char* host = "data.sparkfun.com";//パソコンのIPアドレス
    const char* streamId = "....................";//適当に"TCP_TEST"
    const char* privateKey = "....................";//適当に"KEY"
    const int httpPort = 80;//TCPサーバのポートとりあえず8089とします。


    (6)USBシリアル変換モジュールをパソコンに接続し、デバイスマネージャーのポートで接続ポートを確認します。(COM14に接続しました。)

    (7)ESP-WROOM-02のフラッシュ書き換え時のピン設定
    *ENピン:(Chip Enable.)→High(10kΩプルアップ)
    *GPIO-15ピン:(Type I/O MTDO;HSPI_CS; UART0_RTS)→LowHigh(10kΩプルダウン)
    *GPIO-2ピン:(Type I/O UART Tx during flash programming)→High(10kΩプルアップ)
    *GPIO-0ピン:(Type I/O SPI_CS2)→Low(10kΩプルダウン)(Lowでラッシュ書き換えモード)
    *TXピン:USBシリアル変換モジュールのRX
    *RXピン:USBシリアル変換モジュールのTX
    *GNDピン:USBシリアル変換モジュールのGND

    (7)ESP-WROOM-02の電源を投入します。
    (8)メニュー「ツール」_「ポート」_「COM14」を選択します。
    (9)メニュー「スケッチ」_「マイコンボードに書込む」を選択します。
    (10)書込みが完了します。
    (11)GPIO-0ピン:(Type I/O SPI_CS2)→High(10kΩプルアップ)に戻します。
    (12)ESP-WROOM-02の電源を再投入します


  3. Windows側ソフト(仮想COMポートソフトウエア)
    1章:簡単WiFi-UARTモジュール [ESP-WROOM-02]の動作テスト(1)のHW Virtual Serial Portを使用します。
     仮想COMポートソフトウエアのインストールを実行します。


  4. 仮想COMポートソフトウエアと接続するCDCソフト
     何でもよいにですが、ソースのある
    2章:簡単WiFi-UARTモジュール [ESP-WROOM-02]の動作テスト(2)のCsharp Simple CDC Demo.exeを使用します。


  5. .評価手順
    (1)仮想COMポートソフトウエアを起動します。
    (2)Csharp Simple CDC Demo.exeを起動します。
    (3)Csharp Simple CDC Demo.exeの送信文字列にABCDEFGHIJKLMNOPQRSTUVWXYZを入力します。
    (4)\r\n有り送信ボタンを3回押します。
    (5)Arduinoのシリアルモニターを開きます。
    (6)ESP-WROOM-02の電源を投入します。

    (7)Arduinoのシリアルモニターには以下が表示されます。
    Connecting to 実際のSSIDが表示されます。
    ........
    WiFi connected
    IP address:
    192.168.11.7
    connecting to 192.168.11.2
    Requesting URL: /input/TCP_TEST?private_key=KEY&value=1
    ABCDEFGHIJKLMNOPQRSTUVWXYZ
    ABCDEFGHIJKLMNOPQRSTUVWXYZ
    ABCDEFGHIJKLMNOPQRSTUVWXYZ

    closing connection
    connecting to 192.168.11.2
    Requesting URL: /input/TCP_TEST?private_key=KEY&value=2

    closing connection
    connecting to 192.168.11.2
    Requesting URL: /input/TCP_TEST?private_key=KEY&value=3

    closing connection

    (8)Csharp Simple CDC Demo.exe側には以下が表示されます。
    GET /input/TCP_TEST?private_key=KEY&value=1 HTTP/1.1
    Host: 192.168.11.2
    Connection: close

    GET /input/TCP_TEST?private_key=KEY&value=2 HTTP/1.1
    Host: 192.168.11.2
    Connection: close

    GET /input/TCP_TEST?private_key=KEY&value=3 HTTP/1.1
    Host: 192.168.11.2
    Connection: close

    (9)画面を以下に示します。





  6. 実行結果の検討
    (1) WiFiClient側では、毎回WiFi送信毎にTCPサーバへの接続要求、送信、受信をくりかえしています。
    (2)TCPサーバ側から、クライアント側に接続要求を出すことができません。
    (3)従って、クライアント側からの接続要求、送信後、TCPサーバからの返信が繰り返されることになります。
    (4)上記の条件ですとクライアント側からの接続要求が無い限り、任意のタイミングでTCPサーバからの送信ができないことになります。
    (5)クライアント側からの接続要求が初期設定のみの場合、接続を切らずに継続することにより任意のタイミングでTCPサーバからの送信が可能です。
    (6)ただし、この場合複数のクライアントと接続できません。
    (7)Windows用のTCPサーバを自作する場合どうするか?
    (8)同期サーバーのソケットの例
    https://msdn.microsoft.com/ja-jp/library/6y0e13d3(v=vs.110).aspxと
    https://msdn.microsoft.com/ja-jp/library/system.net.sockets.tcplistener(v=vs.110).aspx
    はプログラム構造が簡単になりますが、接続待ちのタイミングでロック状態となる問題があります。
    (8)非同期なサーバーのソケットの例
    https://msdn.microsoft.com/ja-jp/library/fx6588te(v=vs.110).aspx
    は、ロック状態となりませんが、プログラム構造が複雑になります。
    (9)接続を初期設定のみにするか?毎回おこなうか?迷います!!
    (10)いずれにしても、ESP-WROOM-02とArduinoIDEで WiFiClientは簡単に動作することが確認できました。


  7. ESP-WROOM-02とArduinoIDEで WiFiClientまとめ
    (1)ESP-WROOM-02とArduinoIDEで WiFiClientは思いのほか簡単に動作しました。
    (2)ESP-WROOM-02のWiFiClientサンプルプログラムで使用している命令は全て、WiFiシールドライブラリ(http://www.arduino.cc/en/Reference/WiFi)の内容に含まれていました。
    (3)Arduinoの簡潔な記述が適用できるのはすばらしい!!
    (4)TCPサーバとTCPクライアントのサンプルプログラムのほとんどが、毎回TCPクライアント側から接続要求し、TCPクライアント側から送信して、TCPサーバから返信して接続を切断するシーケンスになっています。
    (5)しかし、実際の使用条件では、パソコン(TCPサーバ)から任意のタイミングでTCPクライアント側に送信して、TCPクライアント側から返信をもらったほうが便利です。
    (6)この点についてはもう少し検討してみたいと思います。




15章:TCPサーバから任意タイミング送信タイプのWiFi無線に行く。

トップページに戻る。