4章:Arduino uno から[ESP-WROOM-02]のトランスペアレントモード起動

    作成2015.10.05

  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. 電圧変換前後のシリアル信号波形
     測定条件
    (1)ボーレート:115200bps
    (2)電圧スケール:2V/div
    (3)時間スケール:20μs/div
    (4)送信信号:"j"
    (5)変換前信号:黄色
    (6)変換後信号:緑色



    *変換後信号の波形歪みや遅れがないことが確認できます。


  5. 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;
    }
    


  6. Arduino unoの評価手順
    (1)Arduino unoへの電源供給はUSB電源を使用します。
    (2)ESP-WROOM-02に3.3V電源を供給します。

    (3)「HW Virtual Serial Port」をダブルクリックで起動します。
    *「Settings」タブで「TCP Server Mode」のみチェックして後ははずします。
    *「Virtual Serial Port」タブでPort Name:COM15、IP Address:0.0.0.0、Port:8089と設定します。
    *「Create COM」ボタンを押します。
    *デバイスマネージャでCOM15の起動を確認します。

    (4)Arduinoのシリアルモニタを開きます。
    (5)Csharp Simple CDC Demo.exeをダブルクリックして、操作ウインドウを開きます。
    (6)COM15に接続します。
    (7)以下のようになります。



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

    (8)この後、理由が良くわからないのですがCOM15側で送信文字列が空白のまま数回
    「\r\n有り送信」ボタンを押す必要があります。
    (9)このとき、画面に変化はありません。
    (10)COM15側の送信文字列に「abcdefghijklmnopqrstuvwxyz」を入力し、「\r\n有り送信」ボタンを3回押します。
    (11)以下のようになります。





  7. Arduino uno から[ESP-WROOM-02]のトランスペアレントモード起動まとめ
    (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)ハード的な制約があるが、プログラムは容易です。
    (8)反面、AE-USBPIC44基板は、シリアル信号が3.3VでESP-WROOM-02と互換性があり、また5V信号でも問題なく動作する。
    (9)AE-USBPIC44基板は、USBとシリアル信号が独立に制御できる反面、プログラムは複雑となる。




5章:TCPサーバプログラム自作の検討(1)に行く。

トップページに戻る。