728x90

아두이노 우노 + ESP01(eps8266) 모듈 기준으로 작성되었습니다.


1. RFID카드를 태그하면 wifi를 이용해 웹서버로 RFID의 uid(고유식별자)를 보내는 개발을 하던중...시스템 Setup시 와이파이가 간헐적으로 연결되지 않는 문제가 발생하였다. 

원인은 배선의 접촉불량 또는 esp8266모듈의 와이파이 수신 자체문제로 추정되었다.



2. 해결 방안으로 connectFlag변수를 만들어 esp8266이 와이파이를 잡지못하였을때 false, 연결되었을 때 true가 되도록 하였다.

while(!connectFlag) 으로 connectFlag가 false일때, 

연결을 재시도하는 코드를 작성해 보았다.


 /*
Wifi 연결 함수
*/
void connectWifi(){
  String cmd = "AT+CWMODE=3";
  mySerial.println(cmd);
  delay(5000);
  cmd ="AT+CWJAP=\""+SSID+"\",\""+PASSWORD+"\"";
  mySerial.print(cmd);
  delay(1000);

  bool connectFlag = false;
  while(!connectFlag){
    //connectFlag가 false일때, 와이파이 연결을 반복합니다.
    delay(1000);
    String cmd = "AT+CWMODE=3";
    mySerial.println(cmd);
    delay(5000);
    cmd ="AT+CWJAP=\""+SSID+"\",\""+PASSWORD+"\"";
    mySerial.print(cmd);

    
    if(mySerial.find("OK")){
      //만약 mySerial에서 OK리턴을 find 했다면 연결에 성공한것 입니다.
      Serial.println("Wifi connected");
      //lcd에 결과값 출력
      lcd.clear();
      lcd.print("Wifi connected");
      lcd.setCursor(4,1);
      lcd.print("Let's TAG!");

      connectFlag = true; //와이파이 연결이 되었으니 Flag -> true 로 바꿔 반복문을 빠져나옵니다.
    }else {
      /*
      mySerial.find("OK") -> false 일때, 
      시리얼에서 Ok를 찾지못하였을때,

      즉, (AT+CWJAP="SSID","PASSWORD") 에 대한 OK 리턴을 찾지 못하였을때.
      와이파이 연결이 실패하였을때 LCD에 "Cannot connect to Wifi"를 출력하고 
      반복문을 통해 연결을 재시도합니다.      
      */
      connectFlag = false;
      Serial.println("Cannot connect to Wifi");
      //lcd에 결과값 출력
      lcd.clear();
      lcd.print("Cannot connect");
      lcd.setCursor(8,1);
      lcd.print("to Wifi");
      delay(1000);
      lcd.clear();
      delay(500);
      lcd.print(".");
      delay(500);
      lcd.print(".");
      delay(500);
      lcd.print(".");
      delay(500);
      lcd.print(".");
      delay(500);
      lcd.print(".");
    }
  }
}

3. 성공 영상



+ Recent posts