#author("2019-04-21T23:03:13+09:00","default:qua","qua")
* WiFi [#uc577eec]
WiFiボードESP-Wroom-02
#author("2019-04-21T23:14:11+09:00","default:qua","qua")

#ref(http://www.ist.aichi-pu.ac.jp/lab/qua/~qua/pbl/img/ESP_breakout1-1_500.jpg,200x200)

[[メーカー情報ページ:https://www.switch-science.com/catalog/2341/]]

** ピン配置 [#w3caf4a0]
写真奥から、
|GND|GND|
|IO0|10kΩ抵抗経由で3.3V|
|IO2|未接続|
|EN|10kΩ抵抗経由で3.3V|
|RST|10kΩ抵抗経由で3.3V|
|TXD|ArduinoのRx|
|RXD|ArduinoのTx|
|3V3|3.3V|

** 接続 [#ef8ab517]
- Arduinoとの接続~
Arduino UNOでは、Rx, Txの代わりに、3.3V⇔5V変換をして、デジタル2, 3番ピンに接続する。下の図は、MOSFET(BSS138)を用いて、RXDをデジタル3番ピンに接続する例である。
#ref(http://www.ist.aichi-pu.ac.jp/lab/qua/~qua/pbl/img/bss138.png,250x160)
これを用いた接続図を下に示す。
#ref(http://www.ist.aichi-pu.ac.jp/lab/qua/~qua/pbl/img/ESP-WROOM-02-Arduino.png,350x450)

- WiFiルータとの接続
 SSID MeoBankSD_pbl
 パスワード Wikiのパスワードと同じ

** プログラミング [#i872dfd6]
- ArduinoとWiFiの間の通信速度の設定

 #include <SoftwareSerial.h>
 SoftwareSerial mySerial(2, 3); // RX, TX
 
 bool recvFind( String target, uint32_t timeout=1000 );
 String recvString( String target, uint32_t timeout=1000 );
 void clear_rx();
 
 const unsigned long newBAUD=57600;
 
 unsigned long bauds[]= {
   300,1200,2400,4800,9600,14400,
   19200,28800,31250,38400,57600,115200
 };
 
 void setup() {
   int i;
   int flag;
   unsigned char c;
   Serial.begin(9600);
   while (!Serial) {
     ; // wait for serial port to connect. Needed for native USB port only
   }
   Serial.println("Goodnight moon!");
   flag = 0;
   for( i=0; i<12; i++ ){
     Serial.println( "Trying "+String(bauds[i])+" BAUD" );
     mySerial.begin( bauds[i] );
     clear_rx();
     mySerial.println("AT+UART_DEF="+String(newBAUD)+",8,1,0,0");
     if( recvFind( "OK" ) ){
       flag = 1;
       break;
     }
   }
   clear_rx();
   if( !flag ){
     Serial.println( "?????" );
   } else {  
     clear_rx();
     Serial.println( "BAUD="+String(newBAUD) );
   }
   mySerial.begin( newBAUD );
   clear_rx();
   delay( 100 );
   mySerial.println( "AT" );
 }
 
 void clear_rx()
 {
   while( mySerial.available() ){
     mySerial.read();
   }
 }
 
 bool recvFind( String target, uint32_t timeout=1000 )
 {
   String data;
   char a;
   unsigned long start = millis();
   while (millis() - start < timeout) {
     while(mySerial.available() > 0) {
       a = mySerial.read();
       if(a == '\0') continue;
       data += a;
     }
     if (data.indexOf(target) != -1) {
       return true;
     }   
   }
   return false;
 }
 
 void loop() { // run over and over
 char buf[128];
 int i, j;
   if (mySerial.available()) {
     Serial.write(mySerial.read());
   }
   if (Serial.available()) {
     mySerial.write(mySerial.read());
   }
 }

- ライブラリの利用

[[ライブラリ:http://www.ist.aichi-pu.ac.jp/lab/qua/~qua/pbl/lib/ITEADLIB_Arduino_WeeESP8266-master.zip]]

// ESP-WROOM-02をUART Download Modeで使う場合、
// IO0を10kΩ抵抗経由でGNDに接続
// IO2を10kΩ抵抗経由で3.3Vに接続


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS