얼마 전 디바이스 마트에서 아두이노 와이파이 모듈인 ESP8266 시리얼 와이파이 모듈 ESP-01을 구매했습니다. 와이파이 기능을 구현해야 해서 모르겠고 일단 주문부터 덜컥했습니다.
logic level 컨버터까지 같이 구입해야 쉽게 통신이 가능하다는 걸 배송받고 알았습니다. 하지만 logic level 컨버터가 없으면 통신이 안 되는 건 아니고, 보드 연결이 귀찮아지는 정도입니다. 다시 주문하면 배송비가 또 붙으니까 그건 싫어서 컨버터 없이 쌩으로 연결했습니다.
디바이스 마트에서 제공하는 상품 상세 설명의 주의사항입니다.
요약하면 다음과 같습니다.
1. 별도의 펌웨어 업로드는 필요 없다.
2. 보드 레이트는 115200으로 설정되어 있다.
3. 3.3V 전원을 인가해야 한다.
펌웨어 업데이트가 복잡하기 때문에 웬만하면 펌웨어 업데이트가 필요 없는 부품으로 구매하시기 바랍니다.
1. 보드 구성
ESP-01 모듈을 연결하기 위해서 아두이노 우노를 사용했습니다. 주의사항에서 알려준 것처럼 3.3V를 인가해야 하는데, 5V → 3.3V로 변환하는 회로 구성을 헤매다가 에듀이노 블로그 포스팅을 발견했습니다.
위 회로도에서 사용된 저항은 모두 1KΩ입니다. 위와 똑같이 연결해주시면 됩니다.
2. AT 명령어
이제 AT Command를 통해 와이파이 모듈을 세팅해 줄 차례입니다. 아까 주의사항에서 ESP01 모듈의 기본 보드 레이트가 115200이라고 알려줬었습니다. 그래서 아두이노 우노와 와이파이 모듈의 보드 레이트를 모두 115200으로 설정해줬습니다.
#include <SoftwareSerial.h>
int RX = 2;
int TX = 3;
SoftwareSerial ESP01(RX, TX);
void setup() {
Serial.begin(115200); //아두이노 우노 보드레이트 115200
ESP01.begin(115200); //와이파이 모듈 보드레이트 115200
ESP01.setTimeout(5000);
delay(1000);
}
void loop() {
if (Serial.available()){
ESP01.write(Serial.read());
}
if (ESP01.available()) {
Serial.write(ESP01.read());
}
}
위 코드를 보드에 업로드하고 시리얼 모니터를 실행시킵니다. 시리얼 모니터의 보드 레이트 또한 115200으로 변경해주세요.
이제 AT를 쳤을 때 OK가 출력되면 정상적으로 연결이 된 것입니다.
여기서 AT가 무응답이라면 아래 3가지를 확인해주세요.
1. 모듈 구매처에서 펌웨어 버전 확인 (펌웨어 업데이트가 필요할 수도 있습니다.)
2. 모듈 구매처에서 기본 보드레이트 확인 후 115200이 아니라면 코드 변경
3. 시리얼 모니터 보드레이트 확인
4. line ending 없음, 새 줄, 캐리지 리턴, Both NL&CR 돌아가면서 확인
이 모듈 자체가 워낙 저가라서 잘 고장난다고 합니다. 위 사항을 모두 체크해도 명령어가 먹지 않는다면 점퍼 케이블이나 모듈에 이상이 있을 수도 있으니 다른 전선&모듈로 확인하시기 바랍니다.
이제 AT 명령어로 WIFI 모드를 설정하고 주변 와이파이를 스캔했습니다.
AT+CWMODE = 1 // Station Mode
AT+CWLAP // 주변 AP 리스트 출력
글자가 다 깨져서 출력이 되었습니다. 보드레이트가 115200라서 통신 속도가 빨라서 글자가 깨진 것 같았습니다. 그래서 AT+UART_DEF=명령어를 통해서 와이파이 모듈의 보드레이트를 9600으로 변경하고, 코드를 변경했습니다.
AT+UART_DEF=9600,8,1,0,0 // 와이파이 모듈 보드레이트 9600으로 변경
#include <SoftwareSerial.h>
int RX = 2;
int TX = 3;
SoftwareSerial ESP01(RX, TX);
void setup() {
Serial.begin(9600); //아두이노 우노 보드레이트 9600
ESP01.begin(9600); //와이파이 모듈 보드레이트 9600
ESP01.setTimeout(5000);
delay(1000);
}
void loop() {
if (Serial.available()){
ESP01.write(Serial.read());
}
if (ESP01.available()) {
Serial.write(ESP01.read());
}
}
보드레이트를 9600으로 변경하고 나니 정상적으로 출력이 되었습니다.
AT+CWJAP="SSID","PASSWORD" // 와이파이 연결
AT+CWJAP? // 연결된 와이파이 출력
AT+CWQAP // 와이파이 연결 해제
와이파이 모듈은 처음 사용해봤는데 어마어마하게 삽질했습니다. 성공해서 다행이지 실패했다면 4개나 산 모듈을 처분하지도 못하고 울고있었을것 같습니다 😭 초기세팅은 성공해서 마음이 놓이네요. 삽질하면서 블로그를 많이 찾아봤는데 너무 복잡한 방법이 많아서 단순하게 정리해봤습니다. 세팅하는데 어려움을 겪고 있다면 언제든지 댓글로 물어봐주세요 :)
잘못된 내용이 있다면 언제든지 댓글이나 메일로 알려주시면 감사하겠습니다.
이 포스팅이 도움이 되었다면 공감 부탁드립니다.
궁금한 점은 언제든지 댓글 남겨주시면 답변해드리겠습니다 :D
'관리하지않음 > 아두이노' 카테고리의 다른 글
[아두이노] Octopus 풍속센서 사용법 (0) | 2020.12.25 |
---|---|
[아두이노] 풍속센서 사용법 (7) | 2020.11.29 |
[아두이노] 서보모터 사용법 (0) | 2020.11.04 |
[아두이노] I2C LCD 사용법 (1) | 2020.11.03 |
라즈베리파이4 아두이노 블루투스 통신하기 (12) | 2020.10.11 |