9章:TCPサーバ使用でArduino uno からトランスペアレントモード起動

    作成2015.10.13

  1. Arduino unoとESP-WROOM-02接続回路図
     Arduino unoとESP-WROOM-02接続回路図を以下に示します。





  2. ブレークアウトボードのピン設定
    (1)ENピン:(Chip Enable.)→Highに設定します。
    (2)GPIO-15ピン:(Type I/O MTDO;HSPI_CS; UART0_RTS)→Lowに設定します。
    (3)GPIO-2ピン:(Type I/O UART Tx during flash programming)→Highに設定します。
    (4)GPIO-0ピン:(Type I/O SPI_CS2)→Highに設定します。
    (5)TXピン:(Type I/O GPIO-1)→通信相手のRXに接続
    (6)RXピン:(Type I/O GPIO-3)→通信相手のTXに接続
    (7)3V3ピン:→3.3V電源供給
    (8)GNDピン:→アース
    と設定します。


  3. 評価回路外観
     評価回路外観を以下に示します。





  4. Arduino unoのスケッチ
    Arduino unoのスケッチは以下となります。
     以下のスケッチにおいて、「SSID」「パスワード」「パソコンIPアドレス」「ポート」を 実際の環境に合わせて設定する必要があります。
    //ESP-WROOM-02 TEST
    void setup()
    {
      Serial.begin(115200);
      while (!Serial) 
      {
        ; // wait for serial port to connect. Needed for Leonardo only
      }
      delay(100);
      Serial.println("AT+CWMODE=1\r\n");
      while (recvFind("OK",500)==false){Serial.println("NG\r\n");}
      Serial.println("AT+CWJAP=\"SSID\",\"password\"\r\n");
      while (recvFind("OK",5000)==false){Serial.println("NG\r\n");}
      Serial.println("AT+CIPSTART=\"TCP\",\"パソコンIPアドレス\",ポート\r\n");
      while (recvFind("OK",500)==false){Serial.println("NG\r\n");}
      Serial.println("AT+CIPMODE=1\r\n");
      while (recvFind("OK",500)==false){Serial.println("NG\r\n");}
      Serial.println("AT+CIPSEND\r\n");
      while (recvFind("OK",500)==false){Serial.println("NG\r\n");}
    }
    
    void loop() // run over and over
    {
        if (Serial.available())
        Serial.write(Serial.read());
    }
    
    String recvString(String target, uint32_t timeout)
    {
        String data;
        char a;
        unsigned long start = millis();
        while (millis() - start < timeout) {
            while(Serial.available() > 0) {
                a = Serial.read();
          if(a == '\0') continue;
                data += a;
            }
            if (data.indexOf(target) != -1) {
                break;
            }   
        }
        return data;
    }
    
    bool recvFind(String target, uint32_t timeout)
    {
        String data_tmp;
        data_tmp = recvString(target, timeout);
        if (data_tmp.indexOf(target) != -1) {
            return true;
        }
        return false;
    }
    


  5. Arduino unoの評価手順
    (1)Arduino unoをUSBに接続します。
    (2)Arduinoのシリアルモニタを開きます。
    (3)MyTcpListener.exeをダブルクリックで起動します。
    (4)接続ボタンを押します。
    (5)ESP-WROOM-02に3.3V電源を供給します。
    (6)Arduinoのリセットボタンを押します。
    (7)以下のようになります。



    *以上でトランスペアレントモードの初期設定が完了してATコマンドは使用できなくなります。
    *再度ATコマンドを有効にするには「+++」を送信するか、ESP-WROOM-02モジュールのリセットまたは電源のOFF/ONが必要となります。

    (7)TCPサーバ側の送信文字列に「abcdefghijklmnopqrstuvwxyz」を入力し、「\r\n有り送信」ボタンを3回押します。
    (8)以下のようになります。





  6. TCPサーバ使用でArduino uno からトランスペアレントモード起動まとめ
    (1)Arduino unoのシリアル信号は5VでESP-WROOM-02の信号は3.3Vのため電圧変換が必要となる。
    (2)1kΩと2kΩの抵抗分圧でボーレート115200bpsの信号は、波形歪みや遅れ無しに変換できる。
    (3)Arduino unoのハードシリアルポートはUSBと共用のため、独立に制御できない。
    (4)このため、シリアルモニタでは、Arduino unoが送信したデータのみを表示できる。
    (5)Arduino unoが受信したデータは表示できない。
    (6)Arduinoは便利な関数(millis()、data_tmp.indexOf(target)等)が準備されており、簡潔なスケッチとなる。
    (7)仮想COMポートソフトウエア(HW Virtual Serial Port)は接続完了後第1回目の送受信がうまく作動しないためダミー送信が必要となる。
    (8)TCPサーバ(MyTcpListener.exe)は接続完了後第1回目の送受信から正常に作動する。
    (9)仮想COMポートソフトウエア(HW Virtual Serial Port)より、TCPサーバ(MyTcpListener.exe)方が使いやすい。




10章:WIFI制御動くおもちゃの製作に行く。

トップページに戻る。