아두이노프로세싱 프로그래밍

SoftwareSerial 라이브러리에 의한 ESP8266 ESP-01 AT 명령어 반응 시험:II

coding art 2017. 6. 29. 14:34
728x90


아두이노는 0번 1번 핀을 통해 PC와의 시리얼 통신을 하는 반면에 아두이노에 설치된 ESP-01 모듈은 아두이노와 별도로 설치된 SoftwareSerial을 통해 통신을 하게 된다.
위의 배선도를 참조하여 디지털 데이터 핀 8번과 9번을 SoftwareSerial의 RX 와 TX 로 설정하자.

통신 속도는 앞 단계에서 이미 9600으로 설정하였음을 참조하자.

setup() 문에서 통신 속도를 9600으로 설정한다.





loop()문에서 우선 하단에 위치한 while()문에서 시리얼 버퍼를 점검하기로 한다. Serial.available() 에 뭔가 들어 있으면 >0 이므로 Serial.read()에 의해 버퍼 내용을 읽어 문자 a에 저장한다.

이는 시리얼 모니터에서 예를 들면 맨 처음 AT를 입력하고 전송 버튼을 눌렀을 경우에
아두이노에서 버퍼를 통해 수신한 데이터를 다시 시리얼 모니터 창에 Serial.write() 명령에 의해 출력해 줌과 동시에 ESP-01 모듈에


software.write()에 의해 전달한다.

ESP-01 모듈에 출력한 다음 당연히 ESP=01 모듈로부터 대답을 수신해야 할 필요가 있다.

이 부분을 loop()문 상단의 while() 문이 담당하게 된다. 여기서는 softSerial.available()을 체크해 보면 반응이 있는지 여부를 알 수 있다. 그 대답이 \0 아니거나 \r 즉 return 이 아니거나 \n  즉 줄바꿈이 아니라면 계속 수신하여 시리얼 창에 출력해 주는 것이다.


Firmware 업데이트 된 이후 Bare Minimum 이 업로딩된 상태에서 즉 시리얼 통신 0번과 1번이 연결된 상태에서 시험했던 AT  명령 몇가지를 SoftwareSerial() 에 의해 시험해 보기로 한다.

AT
AT+GMR
AT+CWMODE?
AT+CWLAP


그림에서 초록색 박스 친 부분이 입력이며 빨간색 박스가 ESP-01 로부터의 응답이다.









ESP_01

#include <SoftwareSerial.h>
SoftwareSerial softSerial(8, 9); // RX, TX

void setup() {
  uint32_t baud = 9600;
  Serial.begin(baud);
  softSerial.begin(baud);
  Serial.print("SETUP!! @");
  Serial.println(baud);
}

void loop() {
    while(softSerial.available() > 0)
    {
      char a = softSerial.read();
      if(a == '\0')
        continue;
      if(a != '\r' && a != '\n' && (a < 32))
        continue;
      Serial.print(a);
    }
   
    while(Serial.available() > 0)
    {
      char a = Serial.read();
//      Serial.write(a);
      softSerial.write(a);
    }
}//끝