[매드정] 아두이노 강좌 - 29. Wifi 모듈 동작(ESP8266) - 4부(패망)



안녕하세요~ 매드 입니다.

이번에는 WiFi 모듈 진짜 진짜 최종!! ㅠㅠ (이거 작성할 때만해도 최종인줄 알았음)
무려 4부까지 와버렸네요 ㅎㅎ

이번 시간에는 실제로 필요한 명령어들을 다루어 보도록 하겠습니다.


29-1. WiFi를 사용하기 위해 알아야할 상식

<AP(출처:구글사진)>


물론 아두이노를 다루는 제 강좌를 보러 오시는 분들이라면 이정도의 상식은 다들 있으시리라 생각하지만 이왕이면 한번 더 정리한다고 생각하고 간단하게 의미만 정리 해보도록 하겠습니다.

우선 WiFi 모듈을 다루기 위해 가장 많이 나오는 공유기!!
AP 라고도 부르는데요. 정확한 명칭은 Access Point라하고 소출력 무선기기라고 합니다. 하지만 공유기라는 명칭이 우리에게 더 친근한건 왜일까요 ㅠ

이 공유기에 우리는 스마트폰을 이용해서 무선 접속하게 되는데 이때 공유기 이름?? 이라고 많이 이야기 하죠? 이를 원래는 SSID 라고 한답니다. ㅎㅎ 그리고 이와 함께 사용 되는 암호를 PASSWORD ㅎㅎ 이정도는 다들 아실려나~


<서버 클라이언트(출처:구글사진)>

서버와 클라이언트의 관계 입니다. 사진은 1:1이지만 실제로 클라이언트는 1:N으로 다수가 될 수 있습니다.

자 그럼 이정도면 충분히 아는 것 같으니 ESP8266 명령어들을 알아볼까요?


29-2. EPS8266 WiFi 명령어

<ESP8266 명령어(출처:구글사진)>

사진에도 명령어가 어느정도 정리되어 있지만 아래 설명하는 명령어들만 있으면 일단 서버에 접속까지 가능합니다~ ㅎㅎ

!! 중요 !! 명령어 뒤에는 \n\r 개행과 리턴문자를 삽입해서 명령어를 인식시켜줘야 합니다.

AT
는 기본 명령어로 WiFi 모듈이 정상 동작하고 있는지도 알 수 있고 통신속도와 통신선이 제대로 연결되어 있는지를 알 수 있는 가장 기본적인 명령어가 되겠습니다.

AT+RST
ESP8266 WiFi 모듈을 스프트리셋하는 명령어 입니다. ㅎㅎ 많이 사용하지는 않지만 갑자기 동작하지 않는다거나 한다면 위급할 때 사용해볼만한 명령어죠?!

AT+CWMODE=1
ESP8266 모듈을 Client 모드로 동작하기 위한 명령어 입니다. 요건 지난 시간에 잠깐 실행해 봤었죠? ESP8266의 경웨 AP 모드, Client 모드, 둘다 지원되는 모드를 사용할 수 있는데요. 요건 취향에 맞게 사용하면 되겠지만 생각에는 Client 모드를 많이 사용하지 않을까요?

AT+CWJAP="SSID","PASSWORD"
자.. 기본 준비는 되었고 바로 공유기에 접속하면 됩니다. 어떻게? 바로 이 명령어를 사용하게 되는데요. 주의할 점이 " " 요렇게 콤마 사이에 넣어줘야 한다는 점이죠! 만약 제대로 접속이 되었다면 언제나처럼 OK 가 날라온다는거!
예) AT+CWJAP="madtime","maduinos"

AT+CIPMUX=0
요건 Single 커넥션 모드 입니다.... 사실 저도 멀티를 안써봐서 어떤건지는 잘 모릅니다. 하하;; 저희가 일반적으로 사용하는 것이 싱글 커넥션 모드라는 것 정도!?

AT+CIPSTART="TCP","서버주소",포트
서버에 접속하는 방법입니다. TCP,UDP가 있는데 요건 통식방식이니까 한번 인터넷 찾아보시면 될 것 같네요! >.< 그리고 접속하고자 하는 서버주소를 적으신다음 마지막에는 포트까지 마무리로 적어주셔야 합니다.
예) AT+CIPSTART="TCP","api.openweathermap.org",80

끝났습니다. 만약 서버에 정상적으로 접속이 되었다면 언제나처럼 OK!~

그런데?? 서버에 정상 접속한것 같기는한데 아무일도 일어나지 않는다구요??
ㅎㅎ 이건 서버마다 조금 다를 수 있는데요. 아마 대부분의 서버는 특정한 명령어를 보내줘야지만 서버에서도 우리가 원하는 명령어를 보내준답니다.

openweathermap 을 기준으로 한번 설명을 해보겠습니다.

여기서 사용되는 서버 명령어 중 하나가 GET 이라는 명령어 입니다.

바로 예를 들어 볼께요

예) GET /data/2.5/weather/KOREA\n\r

대략 이런식입니다. 이렇게하면 서버에서 KOREA 날씨를 보내주는 것이죠 ㅎㅎ 자세한건 서버마다 조금씩 다르지만 GET 이라는 명령어로 보내준다는게 중요한거겠죠?

이게 끝이냐? 아닙니다. 이 GET 이라는 명령어를 그냥 써주는 것이 아니라 GET을 사용하기 전에 GET으로 보내줄 데이터의 길이를 적어주셔야 실제로 명령어를 보내게 됩니다.

AT+CIPSEND=데이터길이
바로 요렇게 데이터의 길이를 적어주시면 됩니다.

하.. 이제 끝났네요.
기나긴 강좌가 끝.... 난 줄 알았습니다. 제대로 동작이 안되네요 ㅠ

위와 같이 사용하시면 우선은 기본적인 ESP8266 WiFi 모듈의 사용은 문제 없다고 보셔도 될 것 같네요! ㅎㅎ(만약 정상적으로 되시면 ㅎㅎ)

만약 서버에서 이상한 문자들이 날라왔고 자세히보니 먼가 날씨 수치나 글씨들이 보인다면 어느정도 성공하셨다고 볼 수 있겠네요.

하나 더 추가하자면 최근에 openweathermap 사용자들이 많아지면서 api key가 있어야지만 사용할 수 있습니다. ㅎㅎ 요건 각자 openweathermap.org 가서 가입하셔서 개인 key를 발행하고 발급받으시면 될 것 같네요!!

글로는 너무 힘드네요 ㅠ 물론 동영상도 ㅋㅋ 재미도 없고 지루하지만 ... ㅠ 좀 더 재밌게 해보도록 노력하겠습니다!!

ㅎㅎ 패망했으니 다음 5부때 !! 제대로 한번 해볼께요..

흐흐.. WiFi 모듈 모두 수고 하셨습니다!!


댓글 쓰기

14 댓글

  1. 안녕하세요. 현재 아두이노를 처음 배우고 있는 학생입니다.
    다름이 아니고, 현재 esp8266 -01 모델과 아두이노를 사용하여, wifi 접속을 통해 기상청에서 정보를 받아서 다른 주어진 업무를 처리하는 코드를 진행 중인데, 벽에 막혀서 너무 답답한 심정으로 글을 올립니다. 제가 힘든 부분은 크게 2가지 입니다.

    1. 인터넷상에 시리얼 모니터를 통한 AT 명령어를 사용하여 wifi를 접속한 사례는 많이 나와 있으나, 코드상에서 직접 코딩하여, 해당 코드를 업로드하여, 아두이노를 통해서 제어하는 글은 이렇다 할 정보가 없어서 어떻게 해야 될지 모르겠습니다.
    -> 어떤식으로 해야 할지 도저히 감히 잡히지를 않네요...

    2. 위와 비슷한 이유로써, 서버에 접속하는 코드 또한 어떻게 처리해야 하는 것인지 궁금합니다.

    그리고 만약에 가능하시다면, 위에 영상에서 사용하셨던 코드를 받아 볼수 있을까요..?
    보내주시면, 해당 코드에 사용 된 클래스들이나, 라이브러리를 조사 해보려고 합니다......

    가능하시다면 xowldns@naver.com 으로 보내주시면, 감사하겠습니다...

    답글삭제
    답글
    1. 안녕하세요~

      알려주시면 메일로 보내드렸습니다.
      날씨 데이터 가져오는 것에 대해서 강좌 준비한다는게 쉽지 않네요 ^^;;

      메일 확인하시면 되고
      배포는 자유이며 출처만 잘 밝혀 주세여~
      감사합니다.

      삭제
  2. 안녕하세요.. 애독자..입니다 제가 ESP8266 을 가지고 날씨 정보를 가지고 오는 프로젝트를 진행 하고 있습니다
    저랑 같은 프로젝트라.. 영상을 보니깐 안되다가 나중에는 정상적으로 되는 영상을 봤습니다

    AT+CIPSTART="TCP","api.openweathermap.org",80

    를 보냈는데 OK라고 뜨더라구요..
    그런데..
    AT+CIPSEND=30
    치니깐 ..크기가 맞지 않는다고 하네요..
    AT+CIPSEND=30
    를 보내고,
    GET /data/2.5/weather/KOREA\n\r........
    쭉 보내는게 맞나요??


    저도 AT 커멘드로 일단 구현 해보려고 하는데 막막하네요..
    혹시 AT커멘드로 날씨 데이터 가지고 오는 소스 를 받아 볼수있을까요??
    가능 하시다면 dlawhdals7@naver.com 로 보내주시면 감사하겠습니다

    답글삭제
    답글
    1. 보내드렸습니다~~ ^^
      openweathermap api 키 와 공유기 id, passwd 수정하시면 될 것 같네요.
      감사합니다.

      삭제
    2. 정말 감사합니다 ... 항상 구독하면서 응원하겠습니다 ...^^

      삭제
  3. 안녕하십니까.
    저도 윗분들과 동일하게 날씨정보를 가지고오는 프로젝트 중입니다.
    저는 와이파이 실드를 연결해서 값을 받아오고있는데 값이 계속 0으로 받아지고,
    저는 우노를 사용하였는데 wiz250을 사용하신분들의 소스를 참고하자니 잘안됩니다 ㅠ
    혹시 우노와 와이파이쉴드를 사용하여 날씨값을 받는 소스있으시면 참고좀 해도될까요?
    key도 다 받아 해봐도 안되고 기존 코코아펩의 오픈소스를 보아도 key넣는 곳이 감이안와 답답한 심정에 글올립니다 ㅠㅠ
    fbehgus2867@naver.com
    소스가 아니라고 조언이라도 해주시면 감사하겠습니다.

    답글삭제
  4. 정말죄송합니다.. 글자수가 초과되어서 소스첨부를 못했습니다.
    https://kocoafab.cc/tutorial/view/654 여기 오픈소스에서
    저는 아두이노 우노와 와이파이 쉴드를 사용하는데..
    어느 부분을 바꿔야 제가 정상적으로 사용할수 있을지 감이안와서 여쭈어봅니다...
    울며겨자먹기로 #include 이것을 WiFi로 바꾸고 돌려보니
    WiFi.init(); 이부분이 오류가 생깁니다
    무슨이유인지 알려주시면 감사하겠습니다...
    fbehgus2867@naver.com

    답글삭제
    답글
    1. 제가 이제서야 리플 확인했네요~
      메일 보내드렸습니다~ ^^ 열공하세요~

      삭제
  5. 안녕하세요 와이파이 모듈로 날씨 받아오는 코드를 찾아 돌고돌아 요기까지 왔습니다.
    esp8266으로 와이파이를 연결하는것까지는 성공을 했고 openapi의 키값도 받았지만
    시리얼 모니터로 날씨정보를 가져오는 것이 막막하여 댓글 남깁니다 ㅠ ㅠ
    소스코드 주석에 설명이 너무 잘 달려있어서 보고 공부를 하고싶습니다.
    julia1450@naver.com 로 보내주시면 정말 정말 정말 감사하겠습니다!!

    답글삭제
    답글
    1. 메일 보내드렸습니다~ ^^ 열공하세요~

      삭제
  6. 작성자가 댓글을 삭제했습니다.

    답글삭제
  7. 안녕하세요. 아두이노 우노R3와 ESP8266을 통해서 프로젝트를 진행중인 대학생입니다.

    저희가 하는 프로젝트는 로드셀(무게 센서)에서 데이터 값을 받아와서 서버(PHP기반)에 전달해주는 프로젝트입니다. 맨 위에 질문 하신 분과 마찬가지로 AT command를 통해서 Wifi연결하는 것은 잘 나와있지만 소스코드를 통해서 Wifi를 접속하는 것이 문제가 되고 있습니다. AP에 연결되는 것이 한 번 됬다가 한 번 끊기고 다시 됬다가 끊기고를 반복하고 있어 이를 해결하고자 합니다. 어떻게 해야 할까요?
    코드 확인이 필요하시면 이메일로 보내겠습니다! 제 이메일은 leemanun@naver.com 입니다

    답글삭제
  8. 안녕하세요 아두이노 우노 esp8266 을 이용하여 날씨 관련 제품을 개발하는 프로젝트를 진행중인 대학생입니다!
    아직 초보자라 어려운 점이 많은데 코드 설명과 유튜브 영상을 통해 api 와 와이파이 모듈 사용에 대해 조금 더 배울 수 있을 것이라는 생각이 듭니다
    혹시 코드를 받아 자세히 공부해보고 싶은데 받을 수 있을까요?
    제 메일은 gustj0414@naver.com 입니다! 감사합니다!

    답글삭제