반응형

 

【 아두이노모듈#27 ESP8266 esp-01 활용하기#3 : LED 깜빡이기 (Plus 휴대용 무선기기 만들기)

(본문의 모든이미지는 클릭하면 확대하여 볼 수 있습니다)

 

 ESP8266은 wifi 통신을 이용하고 인터넷(네트웍)이나 직접 연결(무선)로 제어가 가능한 모듈이며, cpu, 메모리, 입출력 핀을 내장하고 있어서 아두이노 없이 단독으로도 활용가능한 모듈입니다.

모듈 종류는 세부 스팩별로 다양하게 있지만, esp8266모듈중에 가장 기본인 esp-01모듈에 대해 다룹니다. 가격이 저렴하고 2개의 입출력 포트를 쉽게 활용할 수 있고, 크기가 작아 소형 무선기기로 만들 수 있는 장점이 있습니다. 더욱이 WiFi에 접속할 수 있는 Station 기능과 WiFi AP로 동작시킬 수 있는 아주 매력적인 모듈입니다. 

  그럼 이번시간에는 esp8266 보드에 LED2개를 연결하고 깜빡이게 하는 코드를 올려 볼텐데요, 첫 째 아두이노를 활용하는 방법과, USB to TTL 모듈을 활용하는 방법에 대해 각각 설명합니다.  그리고 esp-01 핀 소켓(breakout)을 이용해서 미니 회로로 꾸며 보도록 하겠습니다.

 아울러 다음 시간에는 웹서버로서 동작할 수 있도록 강의할 예정이니 많은 관심 부탁드릴께요~

esp8266기본 모델인 esp-01

Module Espressif ESP8266
ESP8266 Version ESP-01
동작 명령 방식 UART AT Command
안테나 On-Board Ceramic Antenna
통신 방식 802.11 b/g/n 지원
통신 속도(Baud Rate) - 115200(디폴트)   
- 소프트웨어-시리얼: 57600bps~2000000bps 
- 하드웨어-시리얼 : 9600bps~2000000bps
Flash memory 16M Byte
프로세서 스피드 80-160Mhz
크기(Size) 14.5 x 24.8 mm
   

 선수학습 :

  1.  ESP-01 펌웨어 기초 & 업데이트 하기(에러 대처) 

  2.  ESP-01 펌웨어 기초 & 업데이트 하기 (영상강좌)

 

▶ 1. 아두이노를 이용해 코드를 업로드 하기 :

 여기서 아두이노는 USB to TTL 모듈처럼 동작하게 되는 하드웨어 시리얼 통신을 이용해 볼텐데요, 장점은 소프트웨어 통신에 필요한 통신속도인 9600bps로 통신하기 위한 까다로운 펌웨어 업데이트 작업이 필요 없게 됩니다.

아래 회로를 참고하여 아두이노를 구성해주세요,  단, 아두이노에 시리얼 통신관련 방해가 되지 않도록 비어 있는 코드를 넣어 초기화 해주거나, 아두이노를 막 뜯었을 때 들어있는 Blink예제와 같은 단순, 기본 예제 코드만 업로드 되어 있으면 상관없습니다. (에러 방지) 

아두이노를 USB to TTL 모듈처럼 이용한 WiFi모듈 연결 회로

 위 회로에서 아두이노의 Reset 단자가 GND에 연결 되면, 아두이노의 플래시롬에 코드를 업로드 하지 않게 되고 USB to TTL 모듈과 같은 하드웨어 시리얼 통신기기와 같은 역할을 하게 됩니다. 

따라서 만약 아두이노에 코드를 업로드 하려고 한다면, Reset단자와 GND단자의 연결을 해제하면 됩니다. 

만약 아두이노에 시리얼 통신을 사용하는 코드가 있으면 통신에 방해를 줄 수 있으니 비어있는 코드를 아두이노에 업로드 해주거나, Blink와 같은 단순한 예제 코드가 들어 있으면 문제 없습니다.

 

 아두이노에서 3.3V 출력만 사용하세요. (일부 아두이노 호환보드에서는 잘 사용되지 않는 3.3V쪽에 저가의 부품을 사용하다보니 출력이 약할 수 있습니다, 이때 WiFi모듈 동작에 문제가 될 수 있음.) 

 

 또한, WiFi 모듈의 경우 3.3V레벨의 전압만 인가해야 합니다. 만약 5V와 같은 높은 전압이 일정시간 이상 인가 되면 WiFi 모듈이 손상될 수 있는데요,  WiFi 모듈의 VCC단자 뿐아니라, 신호를 수신하는 RX단자에도 3.3V레벨을 넣어 주어야 합니다.  이 때문에 1K옴 저항 세 개를 이용한 전압분배 회로를 넣어 준 것인데요, 5V의 2/3 지점이 3.3V가 되는 원리입니다.  따라서 1K옴과 2K옴 저항 두 개를 사용해서 연결해도 됩니다.  아두이노의 TX 출력단자의 출력도 5V레벨 이기에 WiFi의 Rx단자에 직접 연결하면 손상을 입힐 수 있기 때문입니다. 

 회로의 플래시 스위치는 영상에서 처럼 굳이 달지 않고 직접 GND로 연결해주는 것이 더 편할 수 있어요.

 아두이노 보드를 자세히 보면, 0번 단자에 'RxD ◀' 라고 표시되어 있는데요, 0번 단자가 Rx 단자가 아니라 , 외부Rx단자를 여기에 연결하라는 뜻이므로 아두이노의 0번은 Tx단자 입니다.  마찬가지로,  TxD 라고 표시 되어 있는 1번 단자는 외부 Tx단자로 연결하라는 뜻으로 Rx단자입니다. 

 

아두이노 스케치 IDE에 WiFi 보드 추가하기 :

  LED를 깜빡이게 하는 코드는 아두이노에 올리려는 것이 아니라, 아두이노를 통해 WiFi에 코드를 올리려고 하는 것이예요.  그러면 아두이노 스케치 IDE에서 WiFi보드를 선택할 수 있어야 WiFi 보드에 코드를 올리겠죠?   하지만, 아두이노 스케치 IDE에는 아두이노 보드 종류들만 있어서 WiFi보드 선택이 안 됩니다. 

이럴 때 아래와 같은 간단한 작업으로 WiFi 보드를 추가해 주면 메뉴에서 WiFi 보드가 나타나게 됩니다.

 

 우선 아두이노 IDE를 열고 메뉴,  ' 파일 환경설정 '을 클릭 하세요. 

 위 그림에서 점선 부분 비어 있는 곳에 아래 주소를 붙여넣기 해주세요.

환경 설정 주소 :  http://arduino.esp8266.com/stable/package_esp8266com_index.json   

[ 위 주소부분 새창 열기(링크복사) ]

 

 

확인을 누르고 

 아래 이미지 처럼 아두이노IDE에서   툴  보드 보드메니저 항목을 클릭 합니다.

 보드메니저 창이 열리면 아래 그림처럼 검색항목에 esp8266을 입력하고 엔터 하세요.

그리고 반드시 버전을 2.3.0 버전으로 설치하세요!!! 

만약 최신 버전을 설치하게 되면, 현재 올리는 코드에서 사용된 함수 등이 달라 제대로 동작 되지 않을 수 있고, 아두이노 관련 IDE의 보드 관련 메뉴옵션 항목이 달라서 헷갈릴 수 있어요. 

 아래 그림처럼 2.3.0 버전으로 설치되면 됩니다. 

 

 아두이노IDE에서   툴  보드메니저 항목으로 들어가 보면,  아래처럼 WiFi 보드 메뉴가 추가 된 것을 볼 수 있습니다.

그럼 wifi 보드 중에서 화살표시 처럼 Generic ESP8266 Module 보드를 선택합니다.

그리고 다시 툴메뉴로 들어가 보면 WiFi 관련된 옵션메뉴가 나와있는데,  아래 이미지 처럼 옵션을 선택해 주세요. 

아울러 아두이노가 연결된 포트를 선택하세요.

 

----------------  [추가 사항]  ------------------

보드메니저의 보드 추가 화면에서, 8266보드 버전을 최신 버전으로 설치하였고, 아래와 같은 설정으로 했을 때 문제 없이 작동 되었기에 추가 사항 보충합니다. 

 

코드 전송후 시리얼 모니터창을 열고, 속도를 115200bps로, Both NL & CR 로 설정한 다음 ESP-01회로에 있는 리셋 버튼을 눌러 주면, 아래 처럼 IP를 할당 받은 것을 볼 수 있습니다. 

단, 주의 할 것은, 코드 전송하기 위해 GND에 연결해 놓았던, GPIO 0번 단자를 GND에서 빼고서 LED에 연결해 주어야 아래처럼 정상 작동 합니다.  

----------------------------- [ 추가 사항 끝 부분 ] ----------------------------

 

 

그럼, 이제 LED를 깜빡이게 하는 코드를 열고 업로드 해보겠습니다

코드는 아래와 같으며, zip으로 폴더째로 압축해 올리니 다운받아 압축을 풀어서 사용하세요.

Two_LED_OnOff.zip
0.00MB

- LED x 2 깜빡이 코드 

const int GPIO0 = 0;
const int GPIO2 = 2;
void setup() {
  Serial.begin(115200);
  pinMode(GPIO0, OUTPUT);   
  pinMode(GPIO2, OUTPUT);   

void loop() {
  Serial.println("GPIO0, GPIO2 are LOW");
  digitalWrite(GPIO0, LOW);   
  digitalWrite(GPIO2, LOW);                                 
  delay(1000);                
  Serial.println("GPIO0, GPIO2 are HIGH");
  digitalWrite(GPIO0, HIGH);  
  digitalWrite(GPIO2, HIGH);
  delay(2000);                
}

 

- 이제 아래 그림처럼, 업로드 버튼을 눌러 코드를 WiFi모듈에 업로드해 주세요.  

업로드 전 WiFi 에 연결된 리셋(Reset)스위치를 꼭 누르고 있어야 합니다. 혹은 

위 그림처럼, 100% 완료 되어야 합니다. 

만약, 아래 그림처럼 도중에 에러가 나면,  업로드가 되지 않은 것이니 문제를 해결하고 다시 시도해 주세요.

위와 같은 에러가 난다면, WiFi 모듈의 RST 단자에 연결된 리셋 스위치를 다시 한 번 눌러주거나 GND단자에 직접 연결해주고서 업로드 버튼을 누르면 해결됩니다.  또한 GPIO 0번단자를 GND에 반드시 연결해야 합니다. 

 

- WiFi에 코드 업로드가 제대로 되었다면, 아래처럼 GND에 연결해 놓았던 GPIO 0번 단자를 330옴 저항과 LED를 추가로 연결해 줍니다.  

- 그럼 두 개의 저항이 아래 이미지 처럼 두 개의 LED가 1초 간격으로 깜빡일 거예요.

 

- 그럼, 이제 코드 연습겸 아래 이미지 처럼, 점선 부분의 코드로 바꾸어 봅니다.

 (두 개의 LED가 번갈아 가며, 0.5초 간격으로 깜빡임)

- 바뀐 코드를 다시 업로드 하기 위해 위에서 했던 과정을 다시 해줍니다. 

 1) GPIO 0번 단자를 GND로 연결하기

 2) 리셋 버튼을 누르고 아두이노에서 업로드 버튼 클릭하기 (100%까지 기다림)

 3) 업로드 완료 되면, GPIO 0번 단자를 추가된 LED에 연결하고 리셋 버튼을 한 번 눌러줌

그럼 아래 그림처럼 LED가 0.5초 간격으로 번갈아 깜빡이는 걸 볼 수 있습니다.

  

▶ 2. USB to TTL 을 이용해 WiFi에 코드를 업로드 하기 :

아래 이미지 처럼 아두이노 없이 USB to TTL(또는 USB to Serial이라고 부름) 모듈을 이용해서 코드를 업로드 해볼께요.   사실, 위에서 아두이노가 아두이노의 역할을 한 것이 아니라 지금 여기의 USB to TTL 모듈의 역할을 한 것이라 이해하면 됩니다. 

USB to TTL 모듈에는 몇가지 종류가 있는데요,  위 이미지의 두 가지를 사용해 본 결과 둘 다 업로드 완성된 회로에서의 작동은 문제 없었으나, WiFi의 롬에 코드를 업로드 할 때 FTDI 칩셋의 USB to TTL 모듈의 경우 업로드 때 에러가 계속 났었기 때문에,  cp2102 호환 칩셋을 사용한 USB to TTL 모듈을 사용 해보시길 권장해드려요. 

 추가적으로 CP2102 칩셋을 처음 PC에 연결하면, 장치 인식을 위해 제어판 장치관리자에서 드라이버를 설치해 주어야 합니다. 

Windows10 사용자라면,  윈도우키 + 'X'를 눌러 장치관리자를 클릭해 들어가세요.   그리고 드라이버 설치가 안 된 알수없는 장치를 찾아 속성 화면을 찾아 들어간 후,  또는 드라이버 미설치 장치를 선택, 마우스 우클릭 후 드라이버 업데이트 진행하면 아래 그림처럼 CP2102 USB to TTL 장치가 제대로 안착된 화면을 볼 수 있어요. 

 제가 연결한 CP2102 장치는 Com23포트가 할당 되었네요. 

 

그럼 아두이노 IDE의    포트 메뉴 에서 23번 포트로 장치 선택을 해주면 업로드 준비가 됩니다. 

회로 연결은 아래 연결도를 참고하세요

 

아두이노 연결 때와 같은 방법으로 코드 업로드가 완료 되면, 아래 그림처럼 LED를 하나더 추가 연결해 주면 됩니다. 

 

 실제 영상에서는 WiFI모듈을 브레드보드에 깔끔하게 연결 하기 위해  esp-01 breakout 소켓을 사용하였는데요, 영상에서는 기판을 잘라 직접 납땜해서 만들었지만,  웬만하면 그냥 인터넷에서 하나 사서 사용하시는 걸 권해드려요. ㅎㅎ ㅋ 

자작해본 esp-01 breakout 소켓

 

 업로드 다 되고 LED를 2개 모두 연결하면 아래 이미지 처럼 동작이 잘 되네요. 

- 자 이제 USB to TTL 모듈을 제거해 볼까요?  USB to TTL 모듈은 아두이노IDE를 통해 코드를 전송하는 기능과 WiFi 모듈에 전원을 공급하기 위한 역할을 했는데요,  코드는 전송되었고, 외부전원만 연결해주면, USB to TTL이 없어도 동작하게 됩니다. 

 

 외부 전원용으로는 회로를 작게 유지하기 위해 작은 부품들을 사용했습니다. 

배터리는 3.7V 80mAh짜리 리튬폴리머 사용했고,  3.3V 정격 전원용으로 AMS1117(3.3V) 정전압 모듈을 사용했습니다. 

연결한 결과 아주 잘 작동 하고 있네요.

 

끝으로, WiFi 모듈마다 서로 다른 코드를 업로드 해 놓고 바꿔 끼워가며 활용할 수 있겠네요.

그럼 전체 이 글의 내용전체를 영상으로 쉽게 설명해 놓았으니 아래 영상을 꼭 한번 보세요.

다음 글에서는 앱인벤터로 앱을 직접 만들고 앱에서 버튼을 누르면 WiFi로 LED를 켜고 끄는 내용을 다루어 보겠습니다.   

 

반응형