2차 프로젝트에서 기존 1차에서 쓰던 방식

(AT 커맨드를 통해 ESP-8266 모듈을 직접 제어하고, GET 방식으로 센서 값 전송)

을 그대로 쓸려다 MQTT 통신을 써 볼려니 문제가 생겼다. 

ESP8266과 ESP 01 어댑터를 조합하여 아두이노에 연결하고,

WiFiEsp 라이브러리를 같이 사용했는데,

테스트 코드를 업로드 했을 때 unsupported firmware version / module initialize failed

등등의 오류를 많이 구경하다...해결 방법을 찾아서 정리해본다.

 

0. 펌웨어 교체 - 통신속도(보레이트) 확인

 

최근 나오는 모델은 보통 기본 통신속도가 9600으로 되어있는 경우가 많다. 

또는 아두이노에서 실습을 할려고 통신속도를 변경하는 경우가 많은데, 

 

공식적으론 115200으로 출고가 된다. 

이를 115200으로 원상복구 시켜줘야 하는데

AT+CIOBAUD=115200 또는 AT+UART_DEF=115200,8,1,0,0 명령으로 변경할 수 있다.

사전 설치된 모듈의 펌웨어에 따라 사용 할 수 있는 명령어가 다르니 확인하도록 하자!

#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3); // RX, TX

void setup() {
  Serial.begin(9600);

  mySerial.begin(9600); // 115200인 경우 변경해주면 됨
}

void loop() { 
  if (mySerial.available()) {
    Serial.write(mySerial.read());
  }
  if (Serial.available()) {
    mySerial.write(Serial.read());
  }
}

 

코드를 업로드 한 후 라인 인코딩은 Both NL & CL, 보레이트는 9600으로 설정하고

AT를 입력하여 OK 응답이 날라오는지 확인한다.

 

아두이노와의 배선은 다음과 같이 연결한다.

https://funyphp.com/archive/arduino/20 의 배선도 참고

다만 업데이트 하기 전에 3.3V 핀 위에 있는 RESET 핀과 GND 핀을 쇼트시킨 상태에서 진행해야 성공률이 높다.

(아두이노에 내장된 MCU를 비활성화 시키는 역활을 한다.)

 

1. 펌웨어 파일 업로드하기

esp_iot_sdk_v1.5.0_15_11_27.zip
2.08MB
FLASH_DOWNLOAD_TOOLS_v2.4_150924.rar
5.44MB

상단의 두 파일을 받아 적당한 위치에 압축을 해제한다.

ESP_DOWNLOAD_TOOL_V2.4.exe 파일을 실행하면 다음과 같은 화면이 표시된다.

 

1-1 Download Path Config 설정

순서는 상관 없지만 파일 명과 주소는 반드시 맟줘주어야 한다! 

 

  bin\at\nobooteagle\flash.bin  , ADDR : 0x00000

  bin\at\nobooteagle\irom0text.bin , ADDR :  0x40000

  bin\blank.bin  , ADDR :  0xfe000

  bin\blank.bin  , ADDR : 0x7e000

추가한 뒤 좌측의 체크 표시를 모두 활성화 시켜준다.

 

1-2 기타 설정

 

SPI SPEED : 40MHz

SPI MODE : QIO OR DOUT

FLASH SIZE : DETECTED INFO 표시되는 정보대로 맞춰주기 (대부분 8Mbit이긴 함)

COM PORT & BAUDRATE : 장치관리자에 표시되는 아두이노의 시리얼 포트 / 115200으로 설정

 

START를 누른 뒤 완료되길 기다리면 된다. 설정 값에 문제가 없다면 완료 메세지를 확인할 수 있을 것이다.

 

 

 

다만...ESP-8266 모듈의 단점이 자체 전원 소비량이 많다는 것 (어디까지나 아두이노에 붙여 사용할때의 문제)

인지, 완벽히 호환되지는 않는 듯 하다. 아두이노에 종속적인 센서들을 많이 쓰는 지라

ESP 32로의 이동은 어려워서 아두이노 메가를 사용중에 있는데, 

MQTT 라이브러리와 이런저런 센서를 붙혀서 올리고 하는 과정이 꽤나 손이 많이 간다.

분명 저장 공간상으론 남아도는데 틈만 나면 커넥션이 끊겼다가 다시 붙거나 / 아예 못잡거나 / 무한정 시도하거나 이 세가지의 동작이 지속되고 있다. MQTT 로직이 섞여들어가서 그런건지는 모르겠으나 의도한 동작 때문에

코드를 그렇게 짰는데..  머리가 너무 복잡하다.

 

+ Recent posts