반응형

※ 주의! : 18650과 같은 리튬배터리는 직접적인 합선(쇼트)이나  회로내에서의 합선 등에 의해 불꽃과 소폭발의 가능성이 있는 제품이므로 다루실 때 충분한 주의와 사전지식이 필요하니 주의하시기 바랍니다.

 

 배터리 충전】 18650 BMS PCM 리튬배터리 + TP4056 충전모듈 1S2P 2S1P 개념에 대하여 정리

 최근 18650 배터리는 강력하고 충분한 전류용량과 착한 가격 등으로 인해 크고 작은 공작회로나, 무선으로 작동되는 기기의 전원으로 많이 각광받고 있는 배터리인데요.  하지만, 18650의 주요 성분은 리튬이온으로 구성되어 있고, 이는 과충전이나 과방전이 되면 화재, 폭발, 사용불능 등의 문제가 있기 때문에 관련 보호회로 등의 모듈을 장착하여 안전하게 사용할 수 있도록 하는 것이 중요합니다.  하지만 PCM, BMS, 1S 2P, 2S 2P, 직병렬 사용시의 조합이나 구성 등의 개념이 정리되어 있지 않으면 직접 DIY하기에는 어려운 부분이 있어 개념적인 정리를 도와드릴까 합니다. 

 예를 들어, 리튬이온전지의 한 종류로 가장 많이 사용하는 것 중이 18650이라는 것이 있습니다. 
- 18650 자체가 이름인데, 가로(직경) 18mm X 높이(길이) 650mm 여서 18650이라는 이름이 붙여졌습니다. (충전 보호회로 높이 없는 모듈 길이) 
 마찬가지로 최근에 출시되고 있는 모듈중에 하나로 길이가 3cm 짧은 18350이 있습니다.

18650과 18350 사이즈 비교

- 18650의 경우 보통 완충 전압이 4.2V에 3000mA 정도의 용량을 가지는데,  베터리를 직렬로 연결하면 전압(V-볼트)만 연결한 만큼 높아집니다.(전류 용량은 그대로)   이렇게 18650 두 개를 직렬로 연결한 것을 2S라 하고 S는 직렬(Serial)을 의미합니다. 4.2V+4.2V= 8.4V가 됩니다.  

- 18650 배터리를 병렬로 연결하면 전류(A-암페어)가 연결한 만큼 높아집니다.(전압은 그대로)  이렇게 18650 두 개를 병렬로 연결한 것을 2P로 표시하고 P는 병렬(Parallel)을 의미합니다. 용량이 3000mA(= 3A)배터리라면 3A+3A= 6A 암페어가 됩니다. 

- 예를 들어,  3S10P 라고 되어 있으면,  3개를 직렬(S)로 연결한 것을 10개 병렬로 연결해(전기적으로) 놓은 묶음을 말합니다.   이때의 배터리팩의 용량은 12.6V 전압(4.2x3)에,  전류 30A (3Ax10) 가 됩니다. 

( 일반적으로 사용되는 18650 3.6~3.7V 스펙 배터리를 기준으로 설명 드립니다.  실제 출력은 3.7V 이상 나올 수 있으며, 보통 완충을 위한 전압은 4.2V 정도를 사용합니다.)

[ 1. PCM ]  (Protection Circuit Module)로서  과충전(Over Charge)과  과방전(Over Dischage)을 방지하려는 주목적으로 사용되는 모듈입니다. 

 

 일반적으로 18650 충전을 위해서는 3.7V 보다 높은 4.2V(완충전압) 정도의 전압으로 충전하게 됩니다.   하지만 충전시 이 전압(4.2v) 이상을 넘어서는 전압이 유입 되지 않토록 과충전 보호기능이 필요하게 됩니다.   

 또한 리튬이온 배터리 특성상 2.5V 이하로 방전이 되면 배터리 기능이 현저히 저하되어 일반적인 성능을 기대할 수 없게 되는데요, 이를 위해 출력(방전) 전압이 2.5V 이하가 되면 출력을 차단하는 과방전 방지 기능이 필요하게 되죠. 

 이 두가지의 주요 기능이 들어 있는 회로를 PCM회로 라고 합니다.  

 아래 사진에 보이는 것 처럼, 위 사진속의 보호회로 있는 18650 배터리에 이런  PCM회로가 들어가 있습니다. 

그리고 위의 PCM 보호회로가 없는 18650을 DIY회로에 직접 연결해서 사용할 수 있는 PCM내장형 18650소켓도 이렇게 판매되고 있어요.   하나는 3.7V 입출력(충방전)이 되는 PCM 1S2P 2구 소켓 이고,  하나는 7.4V 입출력(충방전)이 되는 PCM 2S1P용 2구 소켓입니다.  (현재 옥션 등에도 판매중 http://itempage3.auction.co.kr/DetailView.aspx?ItemNo=A544086734&frm3=V2 )   1S2P , 2S1P 에서 S는 Serial(직렬 연결),  P는 Parallel(병렬)을 의미 합니다.

 

 그리고 아래와 같은 여러셀을 위한 DIY용 PCM(BMS)도 있습니다. 

일반적으로 판매하고 있는 제품 중에 저가형(PCM)의 경우 BMS도 같이 병기해서 판매하고 있지만, PCM기능이 주요 기능이며,  BMS기능이 제대로(충실히) 적용 되지 않을 수도 있습니다. 

 

[ 2. BMS ]  (Battery Management System) 의 약자로서 주요 기능은 아래와 같아요.

- 병렬로 연결된 배터리 들의 전압과 충전상태를 체크해서 배터리 셀당 충전이나 방전이 고르게 이루어 지도록 해주는 기능이 핵심 기능인데요. ( 충방전 밸런스 기능)

- 이와 함께 보통, 과충전 과방전 과전류 등의 보호 기능도 들어 있는데요,  과전류 또는 단락시(합선) 연결을 차단하는 등의 일반적인 기능을 말합니다.  

 

 BMS의 핵심기능인 밸런스 기능은 18650을 직렬로 연결했을 때 필요한 기능 이므로,  만약 18650  2셀(cell)을 병렬로(3.7V) 연결 사용해서 충방전 할 때는 크게 의미가 없는 기능입니다.   하지만, 모듈을 사용하면 안 되는 것은 아니며, 이럴때는 좀더 가격이 저렴한 PCM모듈 정도를 사용하면 됩니다. 

 

- BMS의 밸런싱 기능에 대해 좀더 설명 드리면, 이 기능이 무조건 필요하다기 보다는,  병렬로 연결된 여러셀을 충방전 하면서 사용하다 보면, 충전이 고르게 되지 않을 경우 셀 중 1~2개는 방전이나 충전이 빨리 되거나 하여 수명이 일찍 다 되어 교체를 해주어야 하는 경우가 생길 수 있기 때문에 ,  스폿 용접이나 패키징이 완전히 되어 있는 그래서 부분교체가 힘든 노트북 배터리 셀과 같은 배터리 팩에는 반드시 집어 넣게 됩니다.  

- BMS는 연결되는 배터리 수량과 충전 용량(전류)에 따라 다양한 모듈이 나와 있으니 스팩을 확인하여 구매후 사용해야 합니다. 

 

BMS 적용 배터리팩 제작 예시

 

 참고로 같은 보드회사에서도 PCM 보드와 밸런싱 기능이 있는 BMS 보드를 판매하고 있는데요, 아래 사진에서 볼 수 있듯, 밸런싱용 부품이 더 들어가 있습니다.  

연결은 똑같이 하면 됩니다.

 그리고 그냥 전압만 맞추어 주면 되는 것이 아니라, 입력되는 전류도  과전류가 유입되지 않도록 제한되어 충전해 줄 수 있는 전용 충전기가 필요해요.   예를 들면, 두개 직렬 충전 8.4V BMS를 사용할 경우 아래와 같은 8.4V 출력의 아답터나 전용 모듈을 이용해야 안전합니다. 

보통 3.7V 두개를 직렬 연결하면 7.4V 이지만, 개당 완충전압을 기준으로 해야 함으로 완충전압 4.2V 기준으로 두개 직렬 연결이면 8.4V이므로  리튬두개 2S 연결은 아래와 같은 8.4V의 전용 충전기가 필요합니다. 

완충 목표 전압을 고정시키고 충전 전류를 오버하지 않고 되도록 일정하게 넣어준다고 보시면 됩니다. 

 

아래 링크 달았어요

http://diypower.co.kr/product/84v-15a-%EB%A6%AC%ED%8A%AC%EC%9D%B4%EC%98%A8%ED%8F%B4%EB%A6%AC%EB%A8%B8-%EC%B6%A9%EC%A0%84%EA%B8%B0/555/category/30/display/1/

 

 

 

 

[ 3. TP4056 ]

18650 보호회로에 들어 있는 주요 기능과 같으며,  따라서 주로 비보호회로 18650 셀을 가지고 소규모 공작물을 만들 때 사용하게 됩니다.   즉, 주요 기능은 과충전, 과방전, 과전류 또는 단락시(합선) 연결을 차단하는 등의 기능이 있는 모듈입니다.   따라서, 여러개의 배터리에 충방전을 고르게 시켜주는 BMS와 같은 기능은 없습니다.   물론 보호회로가 있는 18650을 사용해도 무방하나 단가가 조금더 높아지겠지요. 

 

 또한 개당 용량(1A)이 크지 않아 18650셀 하나당 TP4056 하나만 연결해서 사용해야 문제가 생기지 않습니다. 

따라서, 여러개의 셀을 사용할 때는 아래 처럼 TP4056 모듈을 각각 추가해 주어야 합니다. 

 

또한 , 전자 키트나 공작물 DIY를 하다보면, 5V가 필요한 키트에  3.7V 18650 배터리 하나만 사용해서 작동도 되고 충전도 되게 하고 싶을 때가 생기는데요,  이럴 때는 아래처럼,  18650의 3.7V 출력을 5V 정격 출력으로 승압(전압 UP 업) 시켜주는 모듈을 사용해서 연결해 주면 됩니다. 

 18650 1개가 들어가는 소형 보조배터리를 뜯어 보면 딱, 이와 같은 구조로 되어 있어요. 

 TP4056 보호기능과 5V 전압 업 기능이 합쳐진 134N3P 이라는 이름의 아래와 같은 스텝업 모듈을 사용합니다.  

134N3P 스텝 업 모듈

 만약,  PCM이나 BMS 모듈을 여기에 덧붙여 사용하게 되면 충방전 보호 과전류 방지 기능이 당연히 포함 되어 있으므로 TP4056은 추가적으로 사용할 필요 없게 됩니다.   만약 추가 연결하여 사용하게 되면 추가적인 열, 에너지 손실 등 오히려 효율이나 성능이 떨어질 수 있습니다.  

 

태양전지 충전판을 이용해서 충전과 함께 5V 출력을 얻어 내는 회로는 아래와 같으니 참고해보세요.

아래 회로에서 tp4056은 과충전방지회로가 없는 타입을 사용했지만,  과충전방지회로가 있는 타입 또한 Out+, - 단자를 이용해서 같은 연결로 사용하면 됩니다.

5V 스텝업 모듈을 사용한 솔라셀 충전 전원 회로

  

반응형
반응형

【 아두이노모듈#29 OLED 처음 사용 설명서 #1 (SPI, I2C 주요 5종 사용법 안내)

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

 

 

 이번 시간에는 아두이노를 가지고 응용작품을 만들때 활용하기 좋은 OLED의 사용법을 다루어 볼게요.

OLED는 무턱대고 사용해보려 한다면, 화면 조차 켜기 어렵고, 회로 연결도 OLED 종류별로 다르기 때문에, 처음 사용자에게는 상당히 어렵게 느껴질 수 있습니다.  또한,  adafruit, U8g 등 주요 라이브러리의 기본 사용법을 안다면, 텍스트 뿐아니라, 도형, 이미지 출력도 쉽게 할 수 있어 이 번 가이드를 보신다면 많은 도움이 되실 것으로 생각합니다. 

 

OLED (Organic Light Emitting Diodes) 

OLED는 유기발광다이오드의 약자로, LCD처럼 백라이트가 필요치 않고 스스로 빛을 내는 패널로 만들어져 있습니다.

 두께도 얇고 휘어지도록 만들 수 있으며, 색 표현력이 우수하여 최근 각광받고 있는 디스플레이입니다.

TV 및 대형 디스플레이 뿐 아니라, 애플워치, 샤오미 밴드와 같은 소형 기기의 디스플레이로도 많이 사용되는데요,

 이번 시간에는 아두이노에 많이 활용되는 OLED 주요 5종에 대해 연결법과 사용법에 대해 다루어 보겠습니다.

물론, 1602(2줄) , 2004(4줄) 액정 디스플레이가 있지만, 해상도가 낮아 , 보통 단순 문자 위주의 표현에 그치는 단점이 있죠.

 이에 비해, OLED는 얇고 작은 크기에도 해상도가 높아, 미려한 이미지와 정보 표시가 가능합니다.

 구글에서 OLED를 검색해보면 아래와 같은 OLED가 검색되는데요, 크게 두 가지 타입으로 나눠져 있는 것을 알 수 있는데요,  통신방식에 따른 I2C Type과 SPI Type이 있습니다. 

 

 I2C 통신과 SPI 통신 방식에 따른 장단점 및 특징은 아래를 참고 하세요.

 

 OLED로서 SPI 타입과 I2C 타입의 주요 차이점으로는, 

SPI 타입은 연결 해야할 선이 I2C보다 많지만 데이터를 뿌려주는(화면구현) 속도가 빠릅니다.  다만, 차이가 그리 크지는 않습니다.     I2C 타입은 연결과 사용이 좀 더 간편한 장점이 있습니다. 
 또한, SPI타입의 경우, OLED 보드 뒷면의 납땜(0옴 저항으로 연결)을 옵션에 따라 제거 또는 연결해 주면 I2C 타입으로도 사용할 수 있습니다.

 

  이상, OLED에 대한 사전 지식과 개요에 대해 설명을 드렸는데요,

그럼, 본격적으로, 아두이노를 이용한 OLED실습을 아래와 같은 순서로 진행해 보겠습니다.

   6.   응용 실습 (로고 이미지 표현)

실습 마지막에는 추가적으로 로고(Logo) 이미지를 가지고 OLED에 표현하는 실습을 담았으니 참고해 보세요. 

 

 【 중요 1  : OLED는 입력된 데이터를 화면에 구현해주기 위한 Driver라는 IC(칩)를 사용하게 되는데요, OLED의 크기, 종류 등 제품에 따라 서로 다른 드라이버를 사용하게 됩니다. 
 이는 OLED를 아두이노에 연결할 때 연결 위치가 달라지게 되며, 드라이버에 따라 사용할 수 있는 라이브러리의 사용 방식도 조금씩 달라지게 됩니다.  따라서 사용하고자 하는 OLED에 대한 기본 스펙(제조사, 드라이버, 크기, 해상도 등)을 알고 시작해야 헤메지 않고 바로 시작할 수 있으니 참고하세요.   

 

대표적으로 많이 사용되는 해상도인 128 x 64 Display의 좌표정보를 참고해 보세요.

 OLED는 가로 128개 세로 64개의 작은 LED점(pixel)을 ON/OFF하여 글자나 이미지를 표현하게 되는데요,  다만, 기본 코딩으로는 텍스트와 같은 단순한 정보 위주로 밖에 표현할 수 없지만,  U8gLIB, Adafruit LIB와 같은 라이브러리를 활용하면, 도형이나, 이미지  표현 등 매우 쉽고 편하게 구현할 수 있게 됩니다. 

【 중요 2 : 구동 드라이버 뿐 아니라, 활용 하려는 라이브러리에 따라 회로 연결이 달라 질 수 있으니, 라이브러리를 잘 살펴봐야 합니다. 아래 1번의 실습에서 처럼, 같은 제조사의 동일한 OLED를 사용함에도 1-1과 1-2의 회로 연결이 달라지는 것을 알 수 있습니다.  이 문제가 중요한 이유는 연결선이 하나라도 맞지 않으면 화면을 제대로 뜨지 없게 됩니다.

# 아래 실습을 진행시 각 실습마다 제시된 라이브러리가 제대로 설치되어 있지 않은 경우 아두이노 컴파일 과정에서 에러가 날 수 있으니, 라이브러리 설치시 잘 살펴 보세요.

『 OLED 핵심 포인트 』

OLED를 처음 활용시 헷갈리고 사용법에 다소 어려움을 겪을 수 있습니다. 아래 핵심포인트를 숙지하시면, OLED 적응에 도움이 되실 거예요.

 

" 실습파일은 아래 링크에서 다운받아도 되며, 라이브러리 설치시 설치되는 예제파일을 열어도 됩니다. "

 

 지금부터의 실습과정에 사용되는 아두이노 파일(.ino)은 각 실습별로 다운로드 링크되어 있으며,  라이브러리를 설치하게 되면 자동으로 설치되는 예제파일을 찾아서 실행해도 무방합니다.  다만, 필요부분 주석제거 및 설정이 안 되어 있는 경우가 있어 직접 변경해주어야 하는데요,  아래 링크 파일은 실습가능한 상태로 변경되어 있으니 아두이노에 익숙지 않은 분들에게는 직접 링크해드리는 파일을 받으시는 걸 권해드립니다.

 

 

▶ [실습 1]  WaveShare 1.3인치 SPI type OLED 실습 (SH1106 Driver) :

 제조사는 WaveShare로서, 제품에 사용된 Driver는 SH1106 이며, 1.3인치크기에 128 x 64의 해상도를 가지고 있습니다. 

 【 #1-1 아두이노 OLED  회로 연결도SH1106_Demo.ino 

 

[ 필수 라이브러리 ]

SH1106_SPI.zip
0.01MB

 

[ 실습파일 다운로드 ] 

SH1106_Demo.zip
0.00MB

 라이브러리를 다운받아 설치하고 실습파일(SH1106_Demo.ino)을 실행하면 아래와 같은 데모화면을 볼 수 있습니다.

 

 

 【 #1-2 아두이노  OLED  회로 연결도  HelloWorld.ino & u8glib 사용 

[ 필수 라이브러리 ]

u8glib_arduino_v1.18.1.zip
1.09MB

[ 실습파일 다운로드 ]

HelloWorld.zip
0.00MB

 에러가 날 경우 라이브러리 설치 여부를 먼저 확인하고, 다음과 같은 아두이노 실습파일에 있는 옵션의 주석을 "//" 제거하였는지? 확인해 보세요.  →   U8GLIB_SH1106_128X64 u8g(13, 11, 10, 9);

 

 

▶ [실습 2]  WaveShare 0.96인치 SPI type OLED 실습 (SSD1306 Driver) :

 제조사는 WaveShare로서, 제품에 사용된 Driver는 SSD1306이며, 0.96인치크기에 128 x 64의 해상도를 가지고 있습니다.  특징으로는 OLED화면 위쪽 1/4 영역은 노란색으로 출력 되며, 나머지 3/4영역은 파란색으로 출력됩니다. 

다만, 출력 문자의 색을 마음대로 바꿀 수 있는 것은 아니며, 해당 부분의 색필름과 같은 필터가 있는 것으로 보여집니다.  해당실습에서는 실습상의 문제인지는 모르겠으나, 출력화면이 다소 어두워 시안성이 떨어지는데요, 특정한 용도가 아니라면 해당OLED 구매는 비추합니다.

 

 【 2 아두이노  OLED  회로 연결도  HelloWorld_2.ino 코드 

라이브러리는 위에서 다운받은 U8glib를 사용하고 있으며, 테스트 코드는 #1-2에 사용된 HelloWorld.ino 파일을 사용합니다.  다만, 아두이노 파일의 설정에서 SSD1306 OLED에 맞는 옵션의 주석을 제거하여 사용하거나, 아래 별도로 첨부해드리는 파일을 받아 실행해보세요. 

 에러가 날 경우 라이브러리 설치 여부를 먼저 확인하고, 다음과 같은 아두이노 실습파일에 있는 옵션의 주석을 "//" 제거하였는지? 확인해 보세요.  →  U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9);  

HelloWorld_2.zip
0.00MB

[ 출력 화면]

 

 

▶ [실습 3]  WaveShare 0.95인치 SPI type RGB OLED 실습 (SSD1331 Driver) :

제조사는 WaveShare로서, 제품에 사용된 Driver는 SSD1131이며, 0.95인치크기에 96 x 64의 해상도를 가지고 있습니다.  특징으로는 65k 수준의 컬러 출력이 지원되는 점입니다. 아래 데모 예제를 확인해보면 컬러 출력 함수에 대한 사용 방법을 알 수 있습니다.

 

아두이노  OLED  회로 연결도  oled.ino 코드 

[ 필수 라이브러리 ]

arduino.zip
0.01MB

 라이브러리를 추가하면 oled.ino 라는 예제파일이 포함되어 있으며, 이를 실행하면 아래와 같은 화면이 출력 됩니다. 

파일에 포함된 관련 함수들을 이용해서 출력연습을 해보세요. (색 지정, 역상 등의 함수 사용 가능)

[ 출력 화면]

 

 제조사 홈페이지를 통해 arduino 이 외의 다른 보드에 대한 라이브러리와 예제 파일을 다운받을 수도 있으니 참고하세요. ( 예, 라즈베리파이, STM32보드)  [ 링크 : https://www.waveshare.com/wiki/File:0.95inch-RGB-OLED-Code.zip ]

                                    [직접 받기]

0.95inch-RGB-OLED-Code.zip
1.95MB

 

▶ [실습 4]  0.96인치 SPI type (7 Pin) OLED 실습 (SSD1306 Driver) :

 SSD1306드라이버 칩은 0.96인치 128x64 픽셀의 OLED에서 가장 많이 사용되는 OLED입니다. 

따라서,  만약 OLED 제조사도 모르고 어떤 드라이버를 사용하는지? 모르는 OLED를 갖고 있다면,  SSD1306칩을 사용한 OLED라고 생각하고 아래의 회로 연결과 코드를 사용해서 테스트 해보세요.   그렇게 해서 화면이 뜬다면 빙고!

이 OLED는 NC(no connet)핀이 없는 7Pin SPI OLED 인데요, 파란색이 아닌 흰색의 깔끔한 출력을 보여주는 모노크롬(단색) OLED입니다.  핀의 배열순서와 핀 이름도 위의 모델들과는 다르게 표시되어 있는데요, 하지만 기능은 같은 핀입니다. 

  핀 배열은 : 액정면 좌측을 기준으로  GND , VCC , D0 , D1 , RES , DC , CS 순으로 되어 있습니다.

 핀 이름이 다르게 표시되어 있어 기존 OLED를 사용하다보면 많이 헷갈리게 되는데요,  정리를 해드리면, 

1.   CLK = SCK = D0  는 클럭핀으로 모두 같은 역할의 핀으로 이해하면 됩니다.  PC CPU의 클럭과 같은 역할 입니다.

2.   DIN = MOSI = D1 은 실제적인 데이터(입력)를 넣어 주는 핀 입니다. 

3.    D/C = DC = A0  는 모두 Data Command 핀으로 데이터(숫자,글자 등)를 보낼지? 아니면 명령(밝기, 글꼴 등)을 전달할지? 선택하는 명령신호 입력핀으로 이해하면 됩니다.

 

 아두이노  OLED  회로 연결도  www.ssd1306_128x64_spi.ino 코드 

[ 필수 라이브러리 ]

아두이노 스케치 IDE의 라이브러리 관리 창에서 "Adafruit 1306"을 검색하면 나오는 항목(아래 참고)을 선택하여 라이브러리를 설치하세요, 예제파일도 아래 첨부한 파일과 같습니다.  설치 진행시 나타나는 추가적인 GFX Livrary도 추후에 필요하니 모두 설치하면 됩니다. 

  참고로 인터넷으로 다운받을 수 없는 환경을 위해 아래에 라이브러리를 첨부합니다.  만약 zip 라이브러리 추가 형태로 라이브러리가 추가 되지 않을 경우, 아두이노가 설치된 라이브러리 폴더에 압축을 풀어서 복사해 넣으면 적용됩니다. (아두이노 재시작 필요)

Adafruit_SSD1306.zip
0.03MB
윈도우 라이브러리 폴더에 직접 복사하는 위치

[ 출력 화면 ]

 

▶ [실습 5]  0.96인치 I2C type (4 Pin) OLED 실습 (SSD1306 Driver) :

 4Pin으로 된 I2C 방식으로 SSD1306 드라이버 칩을 사용하는 0.96인치 128x64 픽셀의 OLED 입니다.  핀수가 작고 연결 및 다루기 쉬워 가장 많이 선호되는 OLED라고 생각됩니다.   

I2C 방식의 특성상 마스터(아두이노)에서 슬레이브(OLED 등)장치와의 통신을 위해서는 슬레이브 장치의 주소를 알아야 합니다.  특정 주소영역을 가지고 보통의 경우 고유의 주소를 가지고 있습니다. 

액정 1602 LCD의 경우 보통 0x3F 또는 0x27의 고유 주소가 설정된 상태로 제품이 출하되며, 

OLED의 경우 대부분은 0x3C로 되어 있고 혹은 0x3D로 설정되어 있습니다. 

 혹은 라이브러리 관리 메뉴에서 I2C Scanner를 검색후 설치하고, 설치후 추가되는 예제 파일에 있는 scanner를 실행하면 i2c를 이용하는 기기의 주소를 알아낼 수 있습니다.

 또한 경우에 따라 아래처럼 I2C OLED 뒷면에 납땜처리를 해주면 주소를 선택할 수 있습니다.

 이런 과정이 필요한 이유는 만약 같은 아두이노 회로에서 서로 다른 정보를 표시해야 하는 OLED를 두 개 연결해야 할 경우, 서로 다른 주소의 OLED가 각각 있어야 코드에서 각각 호출하여 적용할 수 있기 때문입니다. 

만약 두 OLED에 동일한 정보를 표시하는 경우이면 같은 주소에 병렬로 동일하게 연결하면 됩니다. 

만약, 두 개이상의 서로다른 주소를 가진 I2C OLED를 제어해야 한다면, 아래와 같은  "I2C 확장 멀티플렉서 모듈"을 이용하면 됩니다.  ( TCA9548A 1-to-8 I2C 8-Way IIC Multiplex Expansion Board Module )  : 5$~8$

동일한 주소의 I2C OLED를 최대 8개의 주소로 확장시켜 줍니다.

 

 

 

 아두이노  OLED  회로 연결도  GraphicsTest.ino 코드 

 화면 테스트는 두가지로 해보세요.

[ 실습 5-1 ]

바로 위 실습4에서 Adafruit 라이브러리를 설치하면 같이 설치되는 예제 중,  ssd1306_128x64_i2c.ino 예제를 실행해봅니다.  코드내에서 아래 i2c 주소부분을 확인한 후 실행시켜 보면 실습4에서와 같은 동작을 보실 수 있습니다.

 

(실습파일  5-1)

ssd1306_128x64_i2c.zip
0.00MB

[ 실습 5-2 ]

많이 활용되고 있는 U8glib 라이브러리를 설치하고 열리는 예제파일을 가지고 실습해보세요.

먼저 아래 깃허브 사이트에서 라이브러리를 다운 받습니다. (zip 파일 형태로 받으세요)

https://github.com/olikraus/u8glib

 

olikraus/u8glib

Arduino Monochrom Graphics Library for LCDs and OLEDs - olikraus/u8glib

github.com

(이미지를 클릭하면 확대 됩니다)

U8glib의 예제 중에  "GraphicsTest" 파일을 열어 테스트 해보세요. 

(실습파일)

GraphicsTest.zip
0.00MB

 

[ 실습 5-3 ]

그리고, U8glib 예제 중에 " u8g_structure.ino " 파일을 열어 아래처럼 코드를 확인하고 테스트 해보세요.

 [출력 화면]

 

그리고, 폰트를 사이트에서 참고하여 크기와 모양을 바꾸어 출력할 수도 있습니다.

 이로서 기본적인 5가지의 OLED 사용법을 익혀봤는데요, 

조금 더 응용해서 일반적인 이미지나 로고를 OLED에 띄워 보도록 할게요. 

 

 

▶ [보너스 실습]  0.96인치 I2C type (4 Pin) OLED 실습 (SSD1306 Driver) :

OLED와 라이브러리는  바로 조금전에 사용한 I2C OLED와 U8glib를 사용합니다. (연결도 동일)

 

로고 이미지  ↔ OLED 출력하기 

변환에 사용할 로고 이미지와 아두이노 파일(완성 코드) 다운로드

u8g_structure_logo.zip
0.14MB

1. 먼저 파일을 다운 받으면, 아래와 같은 로고파일을 윈도우 그림판에서 불러옵니다.

2. 그림판 메뉴 중 크기조정을 클릭하여 아래처럼 변경해주세요, 

   - 기준: '픽셀'

   - 가로 세로 비율 유지 :  '체크해제'

   - 가로: 128   

   - 세로: 64

 

3. 확인을 누르고 다른이름으로 저장을 클릭 한 후 '파일형식'을 "단색 비트맵(*.bmp,*dib)" 으로 변경후 저장하세요.

손실 저장.... 어쩌고 하는 팝업창이 두 번 뜨면 모두 "예"로 눌러주면 아래처럼 크기 128x64의 단색으로 변환된 이미지가 저장됩니다.

4. 다음으로 이런 흑백의 이미지를 OLED가 화면 한 점, 한 점을 켜고 끌 수(On/Off) 있는, 판단할 수 있는 데이터로 바꾸어 주어야 합니다.  예를 들어 On의 값은 0xff ,   Off의 값은 0x00  이런 형태입니다. 

하지만, 사람의 손으로 일일이 이미지를 보면서 변환 할 수 없기에 자동 변환 툴이나 변환 웹사이트를 이용하면 됩니다.

 아래에 소개되는 사이트로 연결합니다.  그리고 조금전 생성한 단색이미지를 파일 선택으로 선택해 주세요.

  주소 :  http://javl.github.io/image2cpp 

 옵션을 위와 같이 하면 되며, 3.Preview 에 예측 결과가 나오는데요,  

검은색 부분이 불이 그려지는 것이 아니라, 어두운, 즉, 불이 꺼진 부분이기 때문에, 실제 OLED 화면에서는 역상으로 나오게 되죠.

위 옵션 중에서 Invert image colors 부분을 체크하면 반대로 역상이 됩니다. 

 

다음, 출력 부분의 옵션을 아래와 같이 변경하고,  "Generate code" 버튼을 클릭하면, 그 아래에 변환된 코드가 나오게 됩니다.  이것을 아두이노 코드에 붙여 놓으면 됩니다.

즉, 정리하면 아래와 같이 됩니다. 

 

5. 아두이노 코드에서는 비트맵 이미지를 그려줄 함수를 사용하면 되는데요,  

u8g.drawBitmapP (x, y, 가로pixel/8, 세로pixel, mylogo); 

이때, x, y는 시작점의 위치이며, 현재 이미지의 사이즈는 128x64 사이즈로 OLED에 꽉차는 사이즈이기 때문에, 0,0으로 해 주어야 합니다.

그리고 중요한 것은, 가로 세로의 이미지 크기인 128 , 64 값을 입력하면서,  가로값은 128의 값을 8로 나눈 값인 16으로 입력해주어야 합니다.  이유는 u8g라이브러리의 구동 구조상의 이유인데요,   만약 OLED에 이미지가 깨져서 나온다면,  이부분을 처리하지 않았거나,  위의 이미지 변환웹의 사용을 잘못한 경우가 됩니다. 

 만약, 다른 u8g가 아닌 라이브러리 사용에서는 보통 128이라는 값 그대로 입력합니다.

(결과 출력)

 

6. 마지막으로 이미지를 역상시켜서 두 개의 이미지가 1초 간격으로 번갈아 깜빡이도록 해볼게요.

방법은 동일하고, 위 이미지 변환웹에서 " Invert image colors " 체크하여 역상된 데이터 값을 아두이노 코드에 추가해 주고,  draw1( ) , draw2( ) 호출 함수를 각각 만들어, 1초의 delay(1000); 를 주어 호출해 주면 됩니다.

 이런 방식을 이용하면, 움직이는 이미지도 구현이 가능합니다. 

이상으로 OLED 처음 사용설명서에 대한 설명을 마칩니다. 

OLED모듈은 이런 종류를 처음 다루어 보시는 분들에게는 생각보다 다루기 어렵고 화면이 잘 안뜨는 문제가 발생할 수 있어 많은 시간을 허비하거나 고생하게 됩니다.  그래서  최대한 상세하게 기술하였구요.   동영상 제작에 편집까지 시간이 많이 걸려 고생했지만, OLED를 처음 사용 하시는 분들에게 분명 도움되시리라 생각되네요.  ^^;

아래 영상은 전 과정을 동영상으로 보면서 파악 할 수 있도록 구성했으니, 게시글과 함께 같이 보시면 더욱 이해가 되리라 생각됩니다. 

  

아두이노↔OLED 처음 사용설명서 영상으로보기 

OLED 5종 사용설명서 전과정 영상 보기

[ 본 실습에 사용된 모든 실습도면 모음 받기 ]

 

(OLED 실습 연결도면 모음).zip
0.83MB

 

반응형
반응형

【 아두이노Nano#2 NANO 33 IoT 처음 사용 설명서 #1-2 (LSM6DS3 센서)

 

[ 센서 활용하기 ]

- LSM6DS3 :  내부에 12C로 연결,  가속도 최대 ±16g까지(중력가속도 16배까지) 측정 가능 ,   자이로 최대 ±2000dps까지 측정 가능(dps: degree per second 초당 각도의 감지 분해능)

>> LSM6DS3 상세 스펙 다운받기 (PDF)

lsm6ds3.pdf
1.42MB

- LSM6DS3를 이용하기 위해서는 라이브러리 다운로드하아야 함. 스케치 IDE의 라이브러리 관리 메뉴에서 검색 후 다운로드.

 

- 그리고, 아두이노 공식 사이트의 라이브러리를 확인하거나 ( https://www.arduino.cc/en/Reference/ArduinoLSM6DS3 )

- 또는 구글에서 LSM6D3S 검색 후 나오는 깃허브에서 다운로드(예제 파일 등 포함) 하세요.

구글 깃허브 사이트 링크

>> 깃허브에서 zip파일 형태로 다운로드하여 압축을 풀지 말고 zip 형태로 라이브러리를 추가해서 사용해 보세요. 

 다운로드한 라이브러리를 공유합니다. 

Arduino_LSM6DS3-master.zip
0.01MB

 

 

[ 가속도 센서 테스트 ]

- 라이브러리를 설치하게 되면, 아두이노 스케치 IDE에  LSM6DS3관련한 예제 파일이 자동 등록됩니다. 

 

- 예제 파일을 실행시키고 시리얼 모니터/플로터를 띄워 보면,  아래와 같은 가속도 센서로부터의
x, y, z의 센서 값이 나오게 됩니다.

[ 자이로 센서 테스트 ]

- 마찬가지로 함께 제공되는 'SimpleGyroscop' 예제를 열고 시리얼 모니터/플로터 창을 띄워 보면 아래와 같은 좌표값을 얻을 수 있어요.

 

우선, 여기까지만 포스팅하고요,   추후에 센서의 출력 값을 비주얼화 시켜서, 내용을 보강하도록 해볼게요.  

 

그럼, 오늘 하루도 안전하고 좋은 하루 보내세요~  ^^

반응형
반응형

【 아두이노Nano#1 NANO 33 IoT 처음사용 설명서

 

 아두이노에서 NANO 의 새로운 제품군이 최근 추가 되었습니다. 

먼저, 약간의 성능 향상을 한 Nano Every 와,  IoT 기능을 추가한 NANO 33 IoT 버전,  그리고 NANO 33 BLE, 

강력한 스펙의 NANO 33 BLE Sensor 보드까지 추가 되었습니다. 

 

NANO33 IoT 보드 뒷면 모습
NANO33 IoT 보드 윗면 모습

 먼저, 상세 스펙은 아래 비교 표를 참고하세요,  한 눈에 파악이 될 수 있도록 정리했습니다. ^^

(클릭, 확대해서 보세요~)

아두이노 NANO 33 제품군 상세 비교

- LSM6DS3 :  내부에 12C로 연결,  가속도 최대 ±16g까지(중력가속도 16배까지) 측정가능 ,   자이로 최대 ±2000dps까지 측정가능(dps: degree per second 초당 각도의 감지 분해능)  

- Nano 33 IoT, Nano 33 BLE,  Nano 33 BLE Sense 보드 모두 UART 통신이 가능한 시리얼이 하나더 있습니다. 

  (기존 아두이노 우노 보드의 경우 PC와 USB연결하여 데이터를 주고 받게 되면, 아두이노의 0번, 1번핀의 하드웨어 시리얼 통신은 동시에 이용이 불가능 했는데요,  Nano 33 시리즈는 이게 가능해졌다는 이야기 입니다.  그래서, 아두이노 코드에서 Serial.begin(9600);  은 기존 PC와 연결하는 USB 시리얼 통신으로 사용하고,  Serial1.begin(9600);은 Nano33의 0번핀(Tx)-1번핀(Rx) 하드웨어 시리얼핀을 통해, 다른 장치(아두이노 등의 시리얼 통신이 가능한 장치)를 연결하여 실시간 시리얼 통신이 가능해졌다는 이야기입니다.  ^^ )

 

[ 보드 특징 ]

 아두이노 나노와 사이즈 (18mm X 45 mm) 가 같으면서, IoT 및 블루투스, 각종 센서 기능이 강화된 보드입니다.

그동안 나노 보드의 불편했던 USB 커넥터가,  안드로이드 휴대폰과 같은 Micro-5Pin으로 바뀌었네요~ ^^

기존 나노보드 크기에 6축 또는 9축 가속도/자이로 센서가 탑재되었고, Sense 보드는 근접센서, RGB센서, 주변광센서, 제스처센서가 탑재되어 팔방미인으로 통할 수 있는 보드입니다.   다만, 아직 가격이 상당해서,  가성비는 좀 그렇고 호환보드가 출시 된다면 더없이 좋을 것 같네요. 

 주요 특징으로는 , 기존 NANO 보드와 NANO Every 보드까지는 5V 톨러런트(Tolerant : 회로기판 내의 3.3V 부품도 5V레귤레이터를 통해 내부적으로 문제없이 처리 또는 견딜 수 있는) 가 지원 되지만,  NANO 33 보드는 이름에서도 알 수 있듯, USB 전원을 제외하고 신호 레벨 전압을 3.3V로 주어야 손상되지 않습니다. 

 NANO 33 보드들은 모두 BLE 기능을 지원하는데요, 일반적으로 블루투스는 동작시 전력소모가 큰 단점이 있는데, 저전력으로 동작하도록 설계된 블루투스를 BLE 라고 합니다.  NANO 33 IoT는 BLE 4.2를 지원하고,  NANO 33 BLE 와 NANO 33 BLE SENSE 는 BLE 5.0을 지원합니다.  NANO 33 IoT의 경우 USB Host를 지원하며, 네오나르도와 같은 HID 장치로 사용이 가능한 것으로 나와 있네요. 

 

오늘 다룰 NANO 33 IoT의 상세 PIN 자료(PDF)

아두이노 나노33IOT 상세스펙.pdf
0.09MB

반응형

[ 보드 인식과 아두이노 스케치 IDE 사용하기 ]

 먼저 보드를 처음 연결하게 되면, 보드 드라이버가 자동으로 설치되며,  장치관리자를 열어보면, 시리얼 포트가 할당됩니다.  

- 다만, 스케치 IDE에서는 해당보드가 설치 되어 있지 않기 때문에, 메뉴에서,   툴 》  보드 》보드매니저를 열어 NANO 관련 추가 제품군을 등록해 주어야 합니다.

- 또는 보드 최초 연결시 보드 업그레이드 창이 아래 처럼 뜨네요. 

별 중요한건 아니지만 호환보드가 아닌, 정식 아두이노 보드의 특전인가? 봅니다.  ㅎ

 

- 보드 설치가 완료 되면, 아래처럼 "Arduino NANO 33 IoT" 보드를 선택하고,  포트에는 "COMxx (Arduino NANO 33 IoT)" 인식된 포트를 선택해 주세요.

 

- 그럼 이제, 기본 Blink 예제로 나노 보드의 온보드 LED를 켜보며 테스트해 볼게요.

다른 아두이노 보드와 마찬가지로, D13번 핀에 연결되어 있습니다.

- 그리고 다른 보드와 다르게 보드에 코드를 빌드업 후 정보를 상세하게 보여주네요.

 

- 그럼, 실제 LED를 달아서 테스트해보는 것으로 설명서 #1은 마치도록 할게요.  

다만, 아쉬운건 핀 번호 레이블이 보드 아래에만 적혀 있어서 장착 후에는 확인이 불편하다는 점인데요,  하지만, 다른 아두이노 기존 나노 보드와 핀 배열이 완전히 똑같기 때문에 크게 불편함 없이 사용할 수 있겠네요.

 동작이 잘 되고 있네요. 

 

 그럼, 다음에는 WiFi나 블루투스 기능을 활용해보도록 하겠습니다.

참, 보드에 안테나가 하나여서 WiFi나 블루투스를 동시에 리얼타임으로는 이용을 못해요.  이점 참고하세요. 

코드에서 조건문으로 상황에 따라 두 기능을 활용해봐야 할 것 같네요.

감사합니다. 

 

[ 아두이노 나노 33 IoT 보드 처음사용설명서 영상으로 보기 ]

 

 

 

반응형
반응형

【 아두이노모듈#28 ESP8266 esp-01 활용하기#4 : 스마트폰으로 LED 컨트롤 하기

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

 ESP8266은 wifi 네트워크를 이용한 통신이 가능한 모듈입니다.  작은 모듈속에, cpu, 메모리, 입출력 핀을 내장하고 있어서 아두이노 없이 단독으로도 활용가능한 멋진 모듈입니다.

 esp8266 모듈 시리즈는 esp-01 부터 esp-12 모듈까지 스팩별로 다양한 종류가 있으며, esp-12칩셋을 활용한 nodeMCU , ESP-32, WeMos D1-Mini 등등의 다양한 제품군이 있습니다. 

 우선 가장 작고 기본 기능에 충실한 esp-01 모듈을 학습하고 나면, 나머지 모듈에 대해서도 충분히 다루실 수 있으리라 생각합니다. 

 

 지난시간까지 esp-01 모듈회로를 꾸미고 LED 2개를 연결한 다음, LED 깜빡이 코드를 올려 작동시켜 보았는데요, 이번 시간에는 핵심기능인 WiFi 접속을 통해 스마트폰으로 LED2개를 켜고 끄는 컨트롤을 해보려고 합니다. 여기서 중요한 사실은, 비록 LED를 제어하는 단순한 동작이지만, LED가 제어 된다는 뜻은, 원하는 어떤 것이든 제어가 된다는 생각을 가지면 좋습니다.  모터를 제어한다면, 모터를 돌리기 위한 충분한 전원 모듈을 보강해주면 되며,  220V와 같은 큰 전원 제품이나 모듈을 컨트롤 하려고 한다면 릴레이와 같은 부품이나 모듈을 연결하면 구현 가능하기  때문이죠. 

 

  그럼, 이번 시간의 목표인 스마트폰을 이용해서 WiFi 접속을 통해 원격으로, 무선으로 LED 2개를 켜고 끄도록 해보는 실습을 진행할께요.

  물론, 스마트폰의 앱도 앱인벤터를 이용해 직접 만드는 과정도 설명드리는데요,  앱을 스토어에 올리지 않기 때문에 비용 발생도 없으며,  어려운 자바언어를 사용하지 않고 구글의 스크래치와 같은 블록코딩 방식을 이용하기 때문에 처음 사용자라도 10분이면 충분히 앱을 만들 수 있으니,  자신감을 가지고 지금 바로 실습해 보세요.  그리고, 앱인벤터 메뉴부터 기초 앱제작 과정의 콘텐츠 글도 여기 라즈이노IOT 게시판에 올려져 있으니 먼저 참고해도 좋을 듯 합니다.  

 

 ESP-01 모듈의 기본 스펙과 기초 사항은 아래 선수 학습을 통해 확인해보세요. 

 선수학습 :

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

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

  3.  ESP-01 LED 깜빡이기 회로 만들기 

 

▶ 1. ESP01모듈 사용을 위한 회로도와 코드 & App과 앱인벤터 파일 :

 여기서 아두이노는 USB to TTL 모듈처럼 동작하도록 회로를 연결하였어요.

(아두이노의 Reset→GND에 연결, 0번,1번 하드웨어 시리얼 핀 사용)

 

 

[ 중요 사항 ] 

 아래 회로들을 보시기전에 개념정리를 위해 지금 이 부분을 꼭 읽어보세요. 

아래 회로가 #1 ~ #4까지 있습니다. 

기본적으로 ESP-01모듈을 메인 보드로 사용하는 개념이며,  #1과 #2회로의 우노 보드는 프로그램을 업로드하여 실행 시키는 보드로 사용한게 아니고, ESP-01모듈에 프로그램을 업로드 시키기위한 하드웨어 시리얼 통신장치로 사용한 것 뿐입니다.    그래서 #3과 #4회로에서는 USB-to-TTL 전용모듈을 사용한 예시를 든 것입니다.  

 

 여기서 중요!!!   #1과 #2의 차이가 무엇인지?   #3과 #4의 차이가 무엇인지 설명 드릴께요.

ESP-01 모듈의 경우 플래시메모리에 프로그래밍을 올리기 위해서는 쓰기모드로 만들어 주어야 합니다. 

쓰기모드가 되기 위해서는 ESP-01모듈의 'GPIO 0'번 단자가 GND에 연결되어 있으면 쓰기모드가 됩니다. 

그리고 이렇게 코드를 올린 다음에는 올려진 코드로 프로그램을 돌리기 위해서는 'GPIO 0'번 단자는 다시 GND에서 분리 시켜야 합니다, 또는 LED를 연결해서 사용하면 되는 것이죠. 

 

만약 코드를 업로드 하는 과정에서 아래와 같은 에러가 난다면,  이는 GPIO0 번 단자를 GND에 연결하지 않고 업로드를 진행해서 나는 에러입니다. 

warning: espcomm_sync failed
error: espcomm_open failed
error: espcomm_upload_mem failed
error: espcomm_upload_mem failed

그래서, 우노를 이용할때 #1번 회로 연결로 코드를 업로드 시키고,   #2번 회로로 연결해서 LED를 GPIO 0번 단자까지 모두 연결 시켜 돌리기 위한 회로를 의미합니다.   

 

마찬가지로, USB-to-TTL 모듈을 이용할때 #3번 회로 연결로 코드를 업로드 시키고, #4번 회로로 LED를 GPIO 0번 단자까지 모두 연결시켜서 LED2 개 모두 돌리기 위한 회로 연결을 보여드린 것입니다. 

 

 

그리고, 코드 업로드 직전에 회로에 연결된 리셋 버튼(플래시 스위치)을 한 번 눌러 주고 ,  업로드 시키면 에러 없이 잘 진행 됩니다.  

 

이렇게 해도 에러가 난다면,  그건, 어딘가에 회로 연결이 잘못 되었거나, 접촉불량일 가능성이 있으니 연결과,  불량점퍼선이 있는지? 멀티테스터기로 체크해보시고,  또는 브레드보드도 자주 끼우고 빼다 보켠 접촉부위가 헐거워져 접촉이 불안정 할 수 있으니 브레드 보드도 체크해보세요. 

 

 

 【 #1 PC → 아두이노 ESP01  회로 연결도

(이전 LED 깜빡이 회로와 동일합니다  - 이미지를 클릭하면 확대 됩니다.)

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

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

 

【 #2  ESP01 ↔ LED 연결도 

(이전 LED 깜빡이 회로와 동일합니다)

 #1번 회로에서 GPIO 0번에 연결된 선에 추가 LED와 저항을 연결해주면 됩니다.

 

 【 #3 PC → USBtoTTL  ESP01  회로 연결도 

(이전 LED 깜빡이 회로와 동일합니다)

※ USB to TTL 모듈의 출력핀 혹은 점퍼 설정은 반드시 3.3V를 사용해야 ESP01 모듈이 손상되지 않습니다.

 USB to TTL 모듈을 이용하면, 아두이노 없이 esp01 모듈에 코드를 올릴 수 있어요.  다르게 이야기하면, ESP01 모듈도 아두이노처럼 사용할 수 있는 모듈이예요. 내부에 용량은 작지만 프로그램 저장 공간인 플래시롬도 있고, 프로그램이 동작할 수 있도록 메모리도 있으며, CPU도 갖춰져 있는 보드이기 때문이죠. 

 참고로 USB to TTL 모듈은 크게 FTDI 사에서 만든 모듈과,  호환칩셋 제조사인 cp2102 모듈 시리즈가 대표적인데요,  회로 연결 방법의 차이 때문 인지는 모르겠지만, 본 실습에서는 전송에러가 전혀 없었던, cp2102 모듈을 사용하는 것을 권해드려요.  다만, 호환칩셋이여서 최초 연결시 간단히 드라이버 업뎃을 해주기만 하면 되요. 

 

【 #4  ESP01(LEDx2) USBtoTTL 연결도  

※ USB to TTL 모듈의 출력핀 혹은 점퍼 설정은 반드시 3.3V를 사용해야 ESP01 모듈이 손상되지 않습니다.

바로 위 회로 연결과 거의 같으며, LED를 두 개 이용하기 위해 GPIO 0번 단자에 LED를 추가로 연결해준 연결 도면 입니다. 

 

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

 중요 포인트는 아두이노에 코드를 올리려는 것이 아니라, ESP01 모듈 보드에 코드릴 올리는 것임을 기억하세요~!  ^^

 따라서 아두이노 스케치 IDE에 ESP-01보드를 선택할 수 있어야 하는데요,  하지만, 아두이노 스케치 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에 연결해 주어야 아래처럼 정상 작동 합니다.  

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

 

 

 

 그럼, 이제 WiFi로 접속하여 LED를 제어하는 코드를 아두이노 스케치에서 열어,  코드를 업로드 해보겠습니다

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

[ ESP01 업로드 코드 ]  다운로드

WiFiWebServerLED2OK.zip
0.00MB

 

[ WiFi LED 제어 코드 ]

/*  ### 스마트폰 WiFi로 esp8266모듈회로의 LED 켜고·끄기 ### 
 *  1. LED를 연결한 esp8266 회로를 서버로 동작시킨다. 
 *  2. 앱인벤터를 이용하여 접속앱을 직접 제작 한다.
 *  3. 접속앱에서 esp8266 서버 주소를 입력하고 접속한다. 
 *    (접속 IP 주소는 코드 업로드가 완료되면 시리얼모니터(115200bps)를 통해 확인 가능함)
 *  4. 앱화면의 버튼을 눌러 LED를 On·Off 할 수 있다.(GPIO0(LED1), GPIO2(LED2))
 *  5. 아두이노 우노를 제거하고 미니 전원을 연결하여 소형화 된 무선 WiFi 모듈을 구성해본다.  
 *    http://server_ip/gpio0/0 이면 GPIO0(LED1) 를 LOW로 설정,
 *    http://server_ip/gpio0/1 이면 GPIO0(LED1) 를 HIGH로 설정,
 *    http://server_ip/gpio2/0 이면 GPIO2(LED2) 를 LOW로 설정,
 *    http://server_ip/gpio2/1 이면 GPIO2(LED2) 를 HIGH로 설정,  *    
 *  주의 : 반드시 동일한 내부 네트웍(하나의 공유기로 연결된)에서 동작 시켜야 접속이 이루어 집니다.
 */

#include <ESP8266WiFI.h>
#define GPIO0 0
#define GPIO2 2
const char* ssid = "xxxx";         // 공유기(AP) 접속 ID
const char* password = "*****";    // 공유기(AP) 접속 패스워드
// 서버 인스턴스를 생성합니다 (80번 포트 지정)
WiFiServer server(80);

void setup() {
  Serial.begin(115200);
  delay(10);
  // GPIO 포트들을 초기화 합니다
  pinMode(GPIO0, OUTPUT);
  digitalWrite(GPIO0, 0);
  pinMode(GPIO2, OUTPUT);
  digitalWrite(GPIO2, 0);
  // Serial 통신으로 WiFi 네트웍에 연결합니다.
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  
  WiFi.begin(ssid, password);  // 네트웍에 설정된 id와 패스워드로 접속을 합니다.
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  
  // 서버 시작
  server.begin();
  Serial.println("Server started");

  // 서버의(esp8266) IP 주소를 출력합니다 
  Serial.println(WiFi.localIP());
}

void loop() {
  // 클라이언트가 접속하는지 체크 합니다
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
  
  // 클라이언트가 데이터를 보낼 때까지 기다립니다.
  Serial.println("new client");
  while(!client.available()){
    delay(1);
  }
  
  // 요청 첫 출을 읽어 옵니다.
  String req = client.readStringUntil('\r');
  Serial.println(req);
  client.flush();
  
  // 요청 사항과 비교해봅니다.
  int GP0val=0;
  int GP2val=0;
  
  if (req.indexOf("/gpio0/0") != -1)
    GP0val = 0;
  else if (req.indexOf("/gpio0/1") != -1) 
    GP0val = 1;
  else if (req.indexOf("/gpio2/0") != -1)
    GP2val = 0;
  else if (req.indexOf("/gpio2/1") != -1)
    GP2val = 1;
  else {
    Serial.println("invalid request");
    client.stop();
    return;
  }
  // 요청에 따라 GPIO 들을 셋팅합니다(ON 또는 OFF)
  digitalWrite(GPIO0, GP0val);
  digitalWrite(GPIO2, GP2val);  
  client.flush();
  // 응답을 준비합니다.
  String s1 = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n \r\n\r\nGPIO 0 is now ";
  String s2 = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n \r\n\r\nGPIO 2 is now ";
  s1 += (GP0val)?"HIGH":"LOW";   //GP0val 값에 따라 HIGH 또는 LOW 응답합니다.
  s1 += "\n";
  s2 += (GP2val)?"HIGH":"LOW";   //GP2val 값에 따라 HIGH 또는 LOW 응답합니다.
  s2 += "\n";

  // 클라이언트로 응답을 보냅니다
  client.print(s1);
  delay(1);
  client.print(s2);
  delay(1);
  Serial.println("Client disonnected");  // 응답완료 후에는 클라이언트를 닫습니다.

 

 

[ 안드로이드 구동 앱 App 다운로드 (.Apk)]  다운로드

WebLED2.apk
3.36MB

 

[ 앱-인밴터 제작 프로젝트 파일(.aia) ]  다운로드

 

WebLED2.aia
0.01MB

앱 인벤터 메뉴중 아래 Import project (.aia) from my computer... 메뉴를 통해 다운받은 위의 첨부파일을

선택해주면, 본 글에서와 똑같은 완성된 화면디자인과 블록을 열 수 있어요. 

 

▶ 2. 전체 실습 과정 순서 & 설명

- 1. 위의 #1번 연결도면을 참고하여 회로를 연결해줍니다.  

 

- 2. 아두이노 스케치 IDE에  WiFi 보드를 추가해 줍니다 (위, 추가 내용 참조)

 

- 3. LED 제어 코드를 아두이노를 통해 ESP01 모듈에 업로드해 줍니다.

 

- 코드 업로드 후 회로연결을 아래처럼 LED를 추가 연결해 줍니다. 

- 시리얼 모니터창을 열고 리셋 버튼을 누르면 , 아래 화면처럼 esp01모듈이 WiFi 공유기로 부터 할당 받은 IP를 확인할 수 있어요.   이때 시리얼 모니터의 출력이 깨져 나온다면, 통신속도(보드레이트)가 맞아 않아 그러하니, 코드에 설정한 115,200bps 로 맞추어 주면 제대로 표시 됩니다.

 

 

- 앱제작전, 하드웨어를 테스트 하기 위해 위에서 제공하는 앱을 다운받아 설치 후 아래 과정을 테스트하거나,  이글 후반부에 소개되는 앱제작을 먼저 진행 후 다시 여기로 와서 실습을 진행하여도 됩니다. 

- 앱 설치와 실행 후 자신의 WiFi가 할당받은 주소를 앱의 주소입력창에 입력하고, On Off 버튼을 눌렀을 때 LED가 ON/OFF 잘 되는지? 확인 해보세요.

 

- 이번엔, 아두이노가 아닌 USB to TTL 모듈을 사용해서 동작코드를 esp01 WiFi 모듈에 전송 해 볼게요.

연결 회로도면은 이글 위쪽에 있는  #3번과 #4번 연결도를 참고하세요.  FTDI칩셋 모듈보다는, cp2102호환 칩셋을 사용한 커버터가 에러 없이 코드전송이 잘 되어 추천 드려요.  다만, 호환 칩셋이므로, 처음 PC에 연결 할 때 제어판의 장치관리자에서 cp2102 모듈의 드라이버를 설치해주어야 제대로 장치가 인식됩니다. 

 

- 코드 전송후 시리얼 모니터 창을 띄워 WiFi 모듈이 할당 받은 주소를 확인해보세요.

 

- 모듈이 할당 받은 주소를 앱에 입력하여 동작시켜 보면, 잘 동작하는 것을 볼수 있어요. 3

- 아래 이미지 처럼, AMS1117 3.3V 레귤레이터 모듈과 3.7V(80mA) 소형 리튬폴리머 배터리를 이용하면 휴대성이 업된 미니 WiFi 기기를 만들 수 있어요. 

 

- 앱 인벤터를 이용한 안드로이드 앱제작

 앱인벤터를 이용하면, 자바와 같은 다소 어려운 코딩지식이나, 안드로이드 스튜디오와 같은 복잡한 툴 사용을 하지 않더라도, 충분히 원하는 동작의 앱을 만들 수 있어요.  이 글에 있는 영상강좌를 따라 해보면, 10분이면 충분히 따라 할 수 있으니 지금 바로 해보세요. 

 혹시, 앱인벤터의 메뉴 설명부터 앱인벤터 실행을 위한 구글 계정 가입 등의 안내글이 필요하다면,  여기 라즈이노 사이트에 게시한 앱인벤터 기초 과정 글을 먼저 참고하셔도 좋습니다. 

 또는 유튜브에 올린 앱인벤터 기초강좌를 보셔도 좋아요. 

(링크 :  https://www.youtube.com/playlist?list=PLu4OqX22_eU29GPIGqHsH_rU28vCNaV63 )

 

- 앱인벤터 제작과정은 아래 유튜브 영상의 후반부를 참고하세요

- 앱인벤터의 완성된 디자인편집화면 모습

위 앱인밴터 제작에 사용된 텍스트 이미지 다운로드 : 

Text_Image.zip
0.01MB

 

- 앱인벤터의 완성된 블록화면 모습

- 앱인벤터 제작이 완료 되면, 앱인벤터 Build메뉴에서 앱을 빌드(제작)하세요. 

영상에서는 아래 두 가지 빌드 방법중 두 번째 방법으로 진행했어요.  앱을 우선 PC에 저장하고 스마트폰을 USB데이터 케이블로 PC와 연결한 후 만들어진 xxxxx.apk 앱설치파일을 복사해 넣는 방법으로 진행 했습니다. 

-  그럼, 스마트폰에서 파일탐색앱 같은 것을 실행시켜 스마트폰에 옮겨진 앱설치파일을 찾아 설치해주세요. ( 동의를 묻는 팝업창이 뜨면 모드 예로 해주셔야 설치가 진행됩니다)

 

- 앱이 설치 되었다면, esp모듈을 놓고 테스트해보세요. 

- 아두이노를 이용한 esp01 회로와, 휴대용으로 만든 미니 esp01 버전 두 가지를 놓고 IP번호를 선택해가며 테스트 해볼 수 있습니다. 

- 최종 실습에 성공했다면, 여려개의 WiFI 모듈을 구성해서 동시에 제어할 수 있는데요,  LED 이외의 모듈을 달아 본인이 원하는 동작회로를 구성해보고, 앱인벤터도 좀더 다양한 동작과 앱꾸미기를 더해서 응용 실습을 해볼 수 있습니다. 

 

▶ 3. 전체 실습 과정 영상으로 보기

https://youtu.be/_Ugw-8EPOa8

 

 

▶ 4. 코드 업그레이드
: LED를 개별로 On Off 제어가 되도록 코드 일부를 업데이트 했으니 꼭 참고해 보세요(아래 링크 클릭!)

【 아두이노 프로젝 업뎃#1】 ESP8266 esp-01 스마트폰으로 LED 컨트롤 하기 업뎃 자료


반응형
반응형

 

【 아두이노모듈#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를 켜고 끄는 내용을 다루어 보겠습니다.   

 

반응형
반응형

【 영상-아두이노모듈#26 ESP8266 ep-01 활용하기#2 : 펌웨어 업뎃 영상 강좌

 

 지난 시간 ESP8266중 기본 모델인 esp-01모듈의 소개와 펌웨어 업데이트에 대해 그리고 업뎃 실패에 따른 에러대처에 대해 다루었는데요, 펌웨어 업뎃이 생각만큼 쉽지 않고 연결 방법도 헷갈리는 경우가 많아서 esp모듈을 처음 접하는 분들이 많이 어려워하고 있기에, 영상버전으로 차근 차근 설명을 하고 보여드리고자 제작하게 되었습니다.  앞글을 참고하면서 영상을 보신다면 보다 쉽게 이해되시리라 생각됩니다. ^^;

 

 

▶ 선수학습 :

    1. [아두이노 모듈#25] 【 아두이노모듈#25】 ESP8266 esp-01 활용하기#1   ☜ (클릭)

(모듈 기본 정보-상세내용은 위 선수학습 참조)

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

ESP-01 모듈 활용의 장점


▶ 1. 아두이노 우노에 연결하여 업뎃 하기 : 

※ 영상에서 사용된 아두이노와 esp-01 모듈의 연결 회로도 :
(이미지를 클릭하면 확대 됩니다)

아두이노를 하드웨어 USB to TTL 모듈처럼 이용하는 방법이 가장 확실합니다.  따라서 아두이노의 Reset단자를 GND에 연결하여 MCU는 동작하지 않게 하고 하드웨어적으로 시리얼 통신 하도록 0번, 1번 핀을 이용해 통신하면 됩니다. 

 이때, 0번을  esp-01의 Rx 단자에 연결하고, 1번을  esp-01의 Tx 단자에 연결 하여야 합니다. 그리고 CH_PD 단자가 +3.3V에 함께 연결 되어 있어야 하고, GPIO0 단자는 GND로 연결해야 하며,  반드시 5V 전원을 사용하지 말고 아두이노의 3.3V 전원을 사용해야 esp-01모듈의 손상을 방지 할 수 있습니다.


※ 영상에서 사용된 USB to TTL 모듈을 이용한 펌웨어 업데이트 회로도 :
(이미지를 클릭하면 확대 됩니다)

ESP8266 USB to TTL 펌웨어 업뎃 연결도

 아래의 플래시 프로그램으로 download 하기 전에, Program 스위치를 눌러 주어야 업로드가 진행됩니다.

업로드 에러가 날 때는 스위치 누르는 타이밍을 바꾸어 가며 여러번 시도해 보세요. 

또는 회로 연결이 잘 못 되어 있을 경우 업로드 되지 않습니다. 

 

 

※ 플래시 업로드 프로그램 :  

- 아래 zip첨부파일을 다운로드 합니다. (한글 폴더 아래가 아닌 C:\ 루트 드라이버로 옮겨 놓고 압축을 풀어서 사용하세요)

ESP8266-flasher_AT-mode-Updater.zip
8.56MB

 

 - 압축을 풀면 아래와 같은 내용물(파일)이 보입니다.

  - 파일 중에서 esp8266_flasher.exe 파일을 실행시키면 아래와 같은 형태로 실행됩니다.

 ( 기타 자세한 내용은 이전글과 영상을 참고하세요 )

※ 플래시 업로드가 완료 되면, 아래의 회로를 구성하여 AT모드 통신을 통해 esp-01모듈의 설정을 진행할 수 있습니다. 
(이미지를 클릭하면 확대 됩니다)

AT 모드 통신을 위한 연결도면

- 아두이노 포트의 출력은 5V 레벨이므로 WiFi모듈 Rx 수신단자에 3.3V로 다운된 입력을 주기위해 저항 분배를 사용 하였습니다.

- 통신을 위해서는 esp-01 모듈의 Reset 핀을 GND로 리셋 시켜주거나 전원을 껏다 켜주어야 합니다.

통신모드와 보드레이트(9600)를 맞추어 주세요

- 주요 AT 모드 명령어

 - AT명령어 정리 파일 다운로드 :

AT 명령어 요약집.pdf
0.12MB

 

▶ 1. esp-01 업데이트 하기 영상 강좌 보기 : 

 

 

 

【 유튜브로 보기 】

 

반응형
반응형

【 아두이노모듈#25 ESP8266 ep-01 활용하기#1 : 펌웨어 업데이트 에러 해결 (내용보강-완료,영상추가)

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

모듈 종류는 세부 스팩별로 아래처럼 다양하게 구성되어 있습니다.

다양한 ESP8266 제품군

 그 밖에 ESP12 모듈을 탑재하여 아두이노 처럼 다양한 포트와 확장성을 가지게 하고 사물인터넷(IoT) 구축에 최적화된 보드로, nodeMCU 제품군도 출시되어 있습니다. 

NodeMCU 제품

 사물인터넷, IoT 쪽에 관심이 있다면 우선 ESP8266 esp-01 등과 같은 초기 버전 몇 가지 먼저 다루어 본 후,  NodeMCU 제품군 활용으로 넘어가는 학습이 좋을 듯 합니다.

 

 다른 한편으로 ESP8266 (esp-12e)모듈이 탑재된 아두이노도 있습니다.  기존 아두이노의 경우 비싼 wifi 쉴드를 따로 장착하는 번거러움 없이,  esp-12와 같은 wifi 모듈이 보드에 탑재된 아두이노 버전이라고 이해하시면 되며, 아두이노를 조금이라도 다루어 보셨다면 사용하기에도 크게 어렵지 않습니다.  그리고 최근에는  크기가 작아서 활용도가 높은 D1 mini 제품도 인기가 좋습니다.  Wemos 보드도 차후에 한 번 다루어 보도록 하겠습니다.

아두이노 Wemos D1(좌측) 과 D1 mini (우측)

  그럼, 그 첫 번째 시간으로 ESP8266의 가장 기본이라고 할 수 있는 esp-01 버전에 대해 다루어 볼 텐데요?   가장 기본이지만, 처음 사용하시는 분에게는 결코 만만치 않습니다. 

 그 이유는, esp-01 모듈의 펌웨어 업데이트 라는 관문이 있기 때문이죠.

오늘은 펌웨어 업데이트 필요성과 그 방법에 대해 먼저 다루어 보도록 하겠습니다.

 

ESP-01 WiFi 모듈

Module Espressif ESP8266
ESP8266 Version ESP-01
동작 명령 방식 UART AT Command
안테나 On-Board Ceramic Antenna
통신 방식 802.11 b/g/n 지원
통신 속도(Baud Rate) -115200(디폴트) : 생산된 모듈 펌웨어에 따라 9600(디폴트)도 있음
-소프트웨어-시리얼: ~ 57600bps이하, 이상은 지원X, 불안정
-하드웨어-시리얼 : 9600bps~2000000bps
Flash memory 512KB  ,   ESP-01S 모듈은 (1MB)
프로세서 스피드 80-160Mhz
크기(Size) 14.5 x 24.8 mm

 


 esp-01은 가장 좋은 가성비를 갖고 있어서 많이 활용되는 모듈인데요?   하지만, 큰 난관(?)이 기다리고 있습니다. 

 esp01을 아두이노에 연결하여 이용하고자 할 때, 서로간 시리얼 통신을 사용해야 하는데, 우리가 많이 사용하는 아두이노 '우노' 보드는 시리얼 통신핀을 1개만 가지고 있습니다(하드웨어 시리얼).  그런데 이 시리얼 통신핀은 PC와 통신하는데(코드 전송, 시리얼 모니터 사용 등) 사용되기 때문에 esp-01과 통신을 할 수 없게 됩니다.   그래서, 우노의 디지털 입출력핀을 이용해서 소프트웨어적으로 'SoftwareSerial' 통신 방법을 이용하게 됩니다. 

 'SoftwareSerial'은 통신 속도를 115,200bps까지 지원하지만, PC의 시리얼 데이터 전송 속도는 이상적인 조건에서 최대 57600bps까지만 가능한데요,   이에 비해, esp-01 모듈의 통신 속도는 115200bps로 기본 셋팅 되어 있기 때문에 서로간 통신이 어렵습니다.   

 그래서 나온 해결방법이 통신 속도를 변경할 수 있도록, esp-01의 플래시 메모리에 있는 펌웨어를 업그레이드 해주게 되면 'SoftwareSerial'이 통신가능한 속도로 변경가능해집니다.

 

  이때 안정적인 통신이 이루어지는 9600bps로 변경하여 사용하게 됩니다.   

(단,  esp-01 모듈의 제조 생산 시기별로 기본 업로드 된 펌웨어 버전이 여러가지여서, 펌웨어 업뎃 없이 통신속도 변경이 AT모드에서 가능할 수도 있으니 참고하세요) 

 

 그런데, 해결방법이 펌웨어 업그레이드라고 나왔지만, 이게 만만치 않습니다. 

아두이노나 이런쪽에 경험이 많지 않은 초기학습자의 경우 인터넷의 자료와 방법을 찾아 보면서 해봐도, 한 번에 해결되는 경우가 매우 드물기 때문에, 많은 사람들이 시도하며 끙끙 앓다가 중도에 포기하거나 한 동안 덮어 두는 사태가(?) 벌어지게 되죠. 

 이에 라즈이노IoT에서는 좀더 세심하게 공을 들여서 설명을 드리고자 하오니,  차근 차근 글을 읽으면서 진행해 보시면 좋은 결과가 있을 것 같습니다.  ^^&

 

더보기

 펌웨어 업데이트 하기 (ESP8266-esp01)

 

★ ☆ ★ 펌웨어 업뎃(교체)을 하는 이유  ★ ☆ ★

1. 펌웨어 업뎃(교체)을 하는 이유 ?
 - 펌웨어 업데이트를 해야하는 이유는 몇 가지가 있습니다. 
 생산되는 esp-01 모듈의 제조시기나 업체(카피 제품 등)에 따라 내장된 펌웨어가 다르고, 디폴트 보-레이트(Baud Rate)가 다를 수 있습니다. 
기본적으로는 esp8266은 AI-Thinker사의 AT-커맨드, 즉 명령어 기반의 AT 명령어를 수신하고 해당 명령어를 실행할 수 있는데, 이를 적절히 사용하기 위한 버전의 펌웨어로 업데이트(교체) 하고자 하거나, esp8266의 보-레이트(Baud Rate)를 변경하고자 할 때 진행하게 됩니다.  본 실습에서는 최신 버전 펌웨어로 업뎃을 하는 것은 아닙니다. 실습을 진행하는데 문제가 없는 안정된 버전으로 펌웨어 교체를 하는 것이며, 가지고 있는 다른 버전의 펌웨어로 교체해도 되지만, 보-레이트가 맞지 않거나 할 경우 등, 실습에 문제가 있을 수 있으므로, 여기서 제공하는 펌웨어로 실습을 진행해 보고 다른 버전으로도 테스트를 해보세요.

 그래서 ESP-01 모듈의 펌웨어 업뎃을 반드시 해야 하는 건 아닙니다. 
 모듈 구매 직후에는 보통은 ESP-01 모듈의 기본 펌웨어가 AT-커맨드(명령어)로 바로 통신이 되지 않는 펌웨어 인 경우가 많습니다.  이런 이유로 펌웨어를 바꾸게 되며, 똑 같은 AT-커맨드 펌웨어라 하더라더 버전에 따라 명령어 지원 가지수도 조금씩 다릅니다. 
따라서, 디폴트 펌웨어 버전에 따라 필요없을 수 있으며,  esp8266을 wifi 어뎁터가 아니라 플래시 메모리에 아두이노 처럼 코드를 올려 사용하고자 할 경우에는 펌웨어 업뎃 없이 바로 사용하면 됩니다. 

▶  esp-8266과 통신하는 방법은 크게 두 가지로 볼 수 있는데요, 
1. AT Command 명령어를 이용한 통신은 PC와 연결된 ESP-01과 PC사이에 시리얼통신을 이용한 통신이구요 이 상태에서 아두이노 IDE의 시리얼 통신창에서 AT 명령어를 입력해서 esp8266의 모드를 바꾸거나, 주변 WiFi에 접속 시킬 수 있습니다.  
2. esp8266의 두 번째 사용법은 시리얼 모니터 등으로 AT 명령어를 직접 사용하지 않고 아두이노 코드에서 WiFi통신이 가능한 코드를 넣고 사용하는 방법입니다. 

※ 먼저 펌웨어 업데이트 하는 방법에는 대표적으로 아래의 세 가지가 있습니다. 

1. 아두이노에 펌웨어 업데이트용 결선 형태로 ESP-01을 연결하고 업데이트 하는 방법.

2. 와이파이 USB to ESP8266 시리얼 전용 어댑터를 사용하는 방법.

시판중인 esp-01 전용 wifi 어뎁터 2가지

 

3. 아두이노 프로미니 처럼 PC와의 통신을 위해서는 별도의 USB to UART 통신 모듈이 필요한데, 이런 모듈을 이용하여 펌웨어를 업데이트 하는 방법이 있습니다.

FTDI칩셋의 통신모듈과(좌측)   cp2102호환 칩셋의 통신모듈(우측)

 

▶ 1. 아두이노 우노에 연결하여 업뎃 하기 : 

    [ 연결 회로 ]

※ 주의 : esp-01의 전원으로는 3.3V를 연결해야 합니다. 만약, 5V를 연결하여도 esp-01모듈이 고장나지 않고 버틸 수는 있지만 장시간 5V 전원을 가할 경우 고장이 날 수 있기 때문에 주의해야 합니다.

 또한, 일부 아두이노 호환보드의 경우 비용절감의 문제로 잘 사용되지 않는 3.3V 단자 쪽의 부품을 저출력의 부품을 사용한 결과 출력(전류)이 낮아 esp모듈의 업데이트나 동작이 불안정하기도 합니다.  이럴 때는 5V 단자를 사용하여 아래에서 소개되는 저항의 분배(1:2)를 이용해 3.3V의 출력을 뽑아서 사용하면 해결 될 수 있습니다. 

 

 1. 아두이노로 esp8266(esp-01) 모듈 펌웨어 업데이트 하기! 

 아두이노를 하드웨어 USB to TTL 모듈처럼 이용하는 방법이 가장 확실합니다.  따라서 아두이노의 Reset단자를 GND에 연결하여 MCU는 동작하지 않게 하고 하드웨어적으로 시리얼 통신 하도록 0번, 1번 핀을 이용해 통신하면 됩니다. 

 이때, 0번을  esp-01의 Rx 단자에 연결하고, 1번을  esp-01의 Tx 단자에 연결 하여야 합니다. 그리고 CH_PD 단자가 +3.3V에 함께 연결 되어 있어야 하고, GPIO0 단자는 GND로 연결해야 하며,  반드시 5V 전원을 사용하지 말고 아두이노의 3.3V 전원을 사용해야 esp-01모듈의 손상을 방지 할 수 있습니다.

 

 

 - 아래 zip첨부파일을 다운로드 합니다. (한글 폴더 아래가 아닌 C:\ 루트 드라이버로 옮겨 놓고 압축을 풀어서 사용하세요)

ESP8266-flasher_AT-mode-Updater.zip
8.56MB

 

 - 압축을 풀면 아래와 같은 내용물(파일)이 보입니다.

 

  - 파일 중에서 esp8266_flasher.exe 파일을 실행시키면 아래와 같은 형태로 실행됩니다.

 

그럼 아래 번호 순서대로 작업 진행을 합니다. 

펌웨어 업뎃이 진행되는 모습

 

 

- 1번 'Bin' 버튼을 클릭해서 업데이트용 펌웨어 파일을 불러 옵니다.

 : 바로 위에서 다운받은 파일 중,  v0.9.2.2 AT Firmware.bin 이라는 파일을 선택해 줍니다. 

(만약,  업데이트 후에, AT통신이 안 된다면, v0.9.2.2 AT Firmware.bin 파일로 업뎃했는지 다시 한 번 확인해주세요.  펌웨어의 esp8266 통신속도는 : 9600bps 입니다.  이 걸로 업뎃하게 되면, 갖고 계신 esp-01모듈의 기본 통신속도가 9600bps로 설정됩니다.)

- 2번 아두이노를 연결하면 연결된 시리얼포트 번호가 몇 번인지? 알아내어 그 포트 번호를 적습니다.

 : 포트 번호를 알아내는 방법은 크게 두 가지인데요? 가장 쉬운것은 아두이노 스케치 IDE에서 번호를 알아내는 방법입니다. (아두이노가 연결되면 추가된 포트 번호 옆에 (Arduino Uno) 표시가 뜹니다. 단, 아두이노 우노의 경우만 영어 이름이 표시되고,  나노 혹은 프로미니의 경우 포트 번호만 표시됨) 

 

 또는 키보드 윈도우키 + 'X' 키를 누르면 나타나는 메뉴중 장치관리자를 열어 '포트' 항목에 보이는 아두이노가 연결된 포트 번호를 확인 할 수 있습니다.

- 3번 Download 버튼을 클릭하고, 펌웨어가 아두이노를 통해 ESP-01모듈로 다운로드(업데이트) 되는 과정을 지켜봅니다. 

 : 다운로드 진행표시는 (99%) 까지 나타나고, Leaving...   이표시까지 뜨면 업데이트 성공(완료) 된 겁니다. 

끝에 표시된 ' Failed to leave Flash mode ' 글자는 펌웨어 업데이트와는 관계없으니 무시하셔도 됩니다.

 

※ 만약, 이 단계에서 진행이 잘 안 된다면...  

- 아두이노에 연결한 USB 커넥터 자체를 뽑아서 전원을 종료한 후 다시 아두이노 보드를 꽂아보세요. 
- esp-01 모듈과 아두이노 및 브레드 보드에 연결된 선의 접촉 불량이 있을 수 있습니다. 꼭꼭 잘 눌러 주거나, 
필요한 경우 선을 바꾸어 보세요. 
- 맨 아래 영상에서 처럼, 특별히 연결을 바꾼 것 없지만, 처음에 펌웨어 진행에 Fail.. 이 뜨다가도 선을 만져주거나, 리셋 버튼을 눌러주거나, 아두이노 USB 단자를 제거 후 다시 연결하고 Download 버튼을 눌렀을 때, 펌웨어 업뎃이 잘 진행 된 것을 볼 수 있습니다.  

- 다시 한 번 정리하자면,  아두이노를 빼고(10여초 기다린 후) 다시 연결해서 다운로드 시도를  몇 번 해보세요.  낮은 확률이지만, 10회 시도중 1~2회 정도 업데이트에 성공 합니다.  혹은 5V전원을 연결하거나 하여 esp-01모듈 손상 등 다른 원인으로 인하여 안 될 수 도 있으니, 연결이나 조건을 한 번더 확인해보시기 바라며,  손상이 아닌데도, 아무리 확인해도 문제 없는 것 같은데 안 될 경우에는 ,  아래에 소개되는 2번 esp-01 전용 어댑터를 이용하거나,   3번 USB to TTL 통신모듈을 이용하는 방법으로 진행해 보시기 바랍니다. 
 2번은 테스트를 못해 봤으나,  1번과 3번 방법중에,  3번 USB to TTL(특히, CP2102 모듈을 이용) 을 이용했을 때,  펌웨어 업뎃 성공률이 거의 90% 이상이었습니다.) 

esp-01을 아두이노에 연결한 모습

 

2.  와이파이 USB to ESP8266 시리얼 전용 어댑터를 사용하는 방법.

.  아래와 같은 전용 어댑터를 이용하면 펌웨어 업데이트가 쉽고 간편할 수 있습니다.  

시판중인 esp-01 전용 wifi 어뎁터 2가지

또한, esp-01 breakout(1500~2000원) 이라는 핀 아웃 커넥터를 이용하면 브레드 보드에 직접 꽂아서 연결할 수 있어서 연결이 깔끔해집니다.

 

3.  USB to UART 통신 모듈을 이용하여 펌웨어를 업데이트 하는 방법.  (CP2102 모듈 추천!!)

 : 개인적으로 성공확률이 높았던 것은,  위에 1번 아두이노 방법과, CP2102 모듈을 이용한 방법이 플래시 업데이트 성공확률이 높았습니다.  연결이 잘못되거나 다른 방법을 사용하여 잘 안 될 경우에는 시간소비와  스트레스가 엄청납니다.  ㅠㅠ

 프로미니 코드 업로드용으로 주로 사용했던, FTDI USB to Serial 모듈은 성공확률이 매우 낮았습니다. (진행되는 도중에 멈춰버리는 현상 자주 나타남) 

하지만 1번 아두이노 경우와 함께,  cp2102의 호환 칩셋을 사용한 USB to TTL(Serial)  모듈로 시도해본 결과 백발 백중 모두 성공하였습니다.  ^^;  하지만, 모듈 구매시,  FTDI USB 모듈의 경우 다음에 다룰 내용에서 펌웨어 업데이트 필요없이(115200으로통신) esp-01과 연결하여 작업하는 경우 3.3V 출력 선택이 가능하기 때문에 FTDI USB 모듈도 같이 구매하는 걸 추천 드립니다

FTDI칩셋의 통신모듈과(좌측)   cp2102호환 칩셋의 통신모듈(우측)

 

cp2102모듈의 경우, 처음 연결할 때 장치관리자에서 ch340 칩셋 드라이버를 업데이트(설치) 해주어야 제대로 사용이 가능합니다. 

 (cp2102 usb to ttl 모듈, 가격 : 2,000원 내외)

 

 

펌웨어 업그레이드 영상 : 
(cp2102 usb to ttl 모듈로 펌웨어 업그레이드 영상은 맨 아래 영상을 참고하세요)

CP2102 (USB to TTL) 모듈을 사용한 펌웨어 업데이트 연결도면

breakout 소켓이 없을 경우, 그냥 점퍼케이블로 바로 연결하세요

 

 

 

 에러 증상과 대처 :

1. 만약 아래와 같은 fail to connect 라는 문자가 떴다면, 

    1. 전원을 연결한 선을 뺐다가 다시 꽂아 본다.

        (브레드 보드에 선을 연결할 경우 선의 접촉이 잘 안 될 수 있으니 접촉이 잘 되도록 확인)

    2. TX와 RX 선이 제대로 연결되었는지 확인한다.

        (아두이노의 Tx 와 esp-01의 Rx와 연결하고,  아두이노의 Rx와 esp-01의 Tx와  교차로 연결하여야 통신이 됨)

    3. ESP8266에 빨간 불이 들어왔는지 확인한다.

       ( ESP-01모듈에 빨간불은 전원이 연결된 표시 이므로, 불이 들어오지 않는다면 ESP-01모듈의 전연연결 선을 체크)

    4. 아두이노 USB 포트를 다시 뺐다가 연결한다.

       (USB 포트 인식이 안 되거나,  잘 못된 USB 포트 번호를 넣어 진행할 경우 , USB를 다시 꽂아 보고, 정확한 포트번호 기입)

    5. 'CH_PD단자'와  'GPIO 0단자'를 확인한다. 

       (펌웨어 업로드시에는 esp-01모듈을 운용할 때와는 달리  CH_PD단자는 플러스(+3.3V)에 연결하고, GPIO 0단자는 GND(0V)에 연결하여야 펌웨어 업로드가 제대로 진행이 된다.) 

    6. 전원을 5.0V로 잠시 바꾸어 연결하거나,  저항의 1:2 분배 연결을 통해 연결해준다.

       ( 아두이노 호환 보드를 사용하거나 할 경우 3.3V의 출력이 낮아 제대로 진행이 안 될 경우가 있으니, 짧은 시간 동안 아두이노의 5V 전원을 이용해 보거나,  5V단자로 바꾼상태에서 1K옴저항과 2K옴 저항의 분배 방법을 이용하여 높은 전류의 3.3V 전원을 넣어 본다. )

 

 

2. 만약 아래와 같은 'Invalid head of packet' 이라는 에러 증상이 나타난다면,

아두이노 코드를 Blink 예제 코드와 같은 기본 코드 혹은 내용을 모두 지우고 업로드 한 아두이노로 펌웨어 업데이트를 진행해본다.   아두이노에 Serial 통신을 사용하거나 하는 등의 기존 코드가 들어 있을 경우 이런 에러가 나타나기도 한다. 

 

 

▶ 3. 펌웨어 완료 후 AT 통신 모드로 확인 및 셋팅 하기 : 

 

※ 위 이미지 처럼 펌웨어 업로드가 완료되면, 아래에 있는 AT-통신모드용 아두이노 연결을 통해 ,  아두이노의 시리얼 통신창을 통해 AT통신 모드로 진입이 된다.  이때 아래와 같은 AT통신을 위한 아두이노 코드를 아두이노에 새로 업로드 해주어야 한다. 

ESP-8266 AT-통신 모드를 위한 연결도면

- AT통신모드에서는 '하드웨어 시리얼'이 아닌 '소프트웨어 시리얼' 통신을  이용해야 하므로 아두이노의 0번, 1번 핀에 연결된 것을 2번, 3번 등의 다른 디지털핀으로 연결해야 합니다. 

- 펌웨어 업데이트 때 'GPIO 0'번 핀을 GND 단자에 연결 하였는데,  이 단자를 제거 해야 합니다. 

- esp-01모듈은 3.3v로 동작되는 것이 원칙이므로, Rx 수신 단자에 수신되는 신호도 3.3v 레벨로 수신되도록 저항을 이용해 연결해 주어야 하는데,   1 ㏀ 3개를 연결하고 1㏀ 두 개가  연결된 쪽에 Rx 수신단자를 연결하면 :  5v x (2/3) = 3.3333...v  전압 레벨의 신호를 입력해 줄 수 있습니다.  

- 만약 위 회로 연결대로 하였으나, AT통신이 안 될 경우 CH_PD 단자와 +전원(3.3v) 사이에 10㏀ 저항을 넣어서 실행해보기 바랍니다. 

위 회로대로 하여도 안 될 경우 10K의 저항을 추가해본다

 

- 아래와 같은 아두이노 코드를 아두이노에 넣어 줍니다.

아두이노의 2번 단자를 수신단자(Rx)로 지정했으면, 여기에 esp-01 모듈의 Tx 단자가 연결되고, 

아두이노의 3번 단자를 송신단자(Tx)로 지정했으면, 여기에 esp-01 모듈의 Rx 단자로, 교차하도록 연결이 되는 식입니다.  이렇게 해야 서로간 데이터를 주고받을 수 있는 통신이 이루어 집니다.

- 시리얼 모니터 통신속도는 9600으로 하세요. esp8266의 통신속도를 9600으로 했다면, 시리얼 통신 속도도 9600으로 해야, 본 게시글에서 안내드리는 AT명령어 대부분이 적용됩니다.
- 만약 esp8266의 통신속도를 115200으로 했을 때는, 시리얼 모니터 통신속도는 9600이나 115200으로 하여도 별 상관없이 시리얼 모니터창에 잘 입력(응답)됩니다. 
그리고 설정한 대로,  시리얼 모니터 통신창 하단의 속도를 동일하게 맞추어 주세요. 
- 그리고,  esp-01의 통신 속도는 9600에 맞추어 줍니다. (코드에서, ESP-wifi.begin(9600) 부분!)  본 게시글에 링크드린,  펌웨어(

 

- 위 코드를 첨부로 올립니다.(zip 압축)

wifi_test2.zip
0.00MB

- 이제 준비가 완료 되면, 아두이노의 시리얼모니터 창을 열고 명령 라인에 'AT'를 입력해 봅니다.

 - 그리고 아래처럼 'OK'라는 응답이 떨어지면, AT모드 진입과 통신 성공입니다.

단, 이때 시리얼모니터 창에 Both NL & CR 로 하시고,  코드와 동일하게 9600보드레이트 으로 설정 되어 있어야 해요.  

 

만약~!!!
다른 펌웨어로 업뎃할 경우, 통신속도가 9600이 아니라 115200일 수 있습니다.
따라서 아래와 같이 응답신호에 OK가 뜨지 않고, 물음표가 뜨는 경우나 아무 응답이 없을 때는, 아두이노의 esp8266 통신속도를 바꾸어 주어야 AT 통신에 문제가 없습니다.

esp-01 모듈의 통신속도를 115200으로 맞추어 주세요 (ESP_wifi.begin(115200) 으로 코드 수정후 업로드) 하세요.  
그러면, 아래 처럼, 제대로 응답신호 글자가 표시 됩니다. 
 

 위, 코드 (115200) 다운로드 받기

wifi_test2_115200.zip
0.00MB

 

 

【 AT(명령어) 통신 테스트 및 설정 】

 

 1) AT   :  기본적으로 'OK'라는 응답을 통해 통신을 확인하는 명령어 입니다.

 

 2) AT+GMR
           :  esp-01 wifi 모듈의 버전을 확인 하는 명령어 입니다.

 3) AT+CWMODE
           :  WiFi 모드 확인 및 설정 명령

  - AT+CWMODE?    (명령어 입력시 끝에 물음표를 붙여야 한다)

           : 현재의 WiFi 모드 확인

             1번은 (Station Mode, AP(WiFi 공유기)에 접속할 수 있는 기기로 설정)
             2번은 (AP Mode, Access Point(WiFi 공유기) 기능으로 설정)
             3번은 (AP + Station Mode,  접속기기 + AP , 복합 모드 설정)

명령라인에 : ' AT+CWMODE? ' 를 입력 후 엔터

 

아래는 복합모드로 설정한 모습이다.   명령라인에, ' AT+CWMODE=3 ' 을 입력 후 엔터키를 누른다. 

명령라인에 : ' AT+CWMODE=3 ' 을 입력 후 엔터

 

 4) AT+CWLAP        ( 여기는 ?물음표 붙이지 마세요~!)
           :  주변의 AP(WiFi공유기) 리스트를 시리얼 모니터 창에 출력 명령

 5) AT+CWJAP="SSID","비번"
           :  특정 AP에 연결  (주의: 명령어 사이 사이 공백이 없어야 함)

   - 만약, 비번없이 보안이 안 되어 있는 AP에 접속할 경우,

    - AT+CWJAP="SSID",""  으로 입력 하면 됩니다.

 

6) AT+CWSAP="SSID","비번","채널 id","보안방식"
           :  AP모드 사용시, SSID, 비번, 채널, 보안방식을 설정하는 명령어

           보안방식

              0 : OPEN
              2 : WPA_PSK
              3 : WPA2_PSK
              4 : WPA_WPA2_PSK

 

 

7) AT+CWJAP?

           :  연결된 AP 확인

 

8) AT+CWQAP

         : AP 접속 해제 명령

 

 

9) AT+CIFSR

           :  할당 받은 IP 주소 확인

 

10) AT+CIPSTATUS

           :  TCP/IP 연결 상태 확인   (만약, STATUS:2  이면, IP 주소을 획득한 상태)

 

11) AT+CIPSTART=종류,주소,포트

           :  TCP/UDP 연결  

 

12) AT+CIPSEND=크기  ,    > 표시후 '데이터' 입력 후 엔터

           :  특정 바이트 크기의 데이터를 보내기 위한 명령어

 

 

13) AT+CIPCLOSE

           :  TCP/UDP 연결 해제

 

 

14) AT+CIPMUX=모드

           :  다중 접속 설정 (서버코드를 돌리기 위해서는 다중 접속설정이 필요)

              예, esp-01 모듈에 연결된 led를 wifi공유기로 연결된 PC나 핫스팟으로 연결된 스마트폰으로 켜거나 끄려고 할 때, 다중접속모드를 멀티서버('1')로 설정 되어 있어야 함.

           -   AT+CIPMUX=0: Single 클라이언트
           -   AT+CIPMUX=1:Multiple 서버

 

15) AT+CIPSERVER=모드,포트

         :  TCP 서버 모드로 설정  ( AT+CIPMUX=1, '다중접속모드' 인 상태에서 실행)

         : 모드'0'은 서버를 의미하므로, 항상 1로 고정함. HTTP 접속인 경우 80포트 고정,      

 

16) AT+CWLIF

         :  모듈의 SoftAP에 접속된 station 리스트를 보여준다.

17). AT+CWDHCP : DHCP 활성/비활성 설정(AP mode)

18). AT+CIPSTAMAC : Station Mode의 MAC 주소 설정(Station Mode)

19). AT+CIPAPMAC :  AP Mode의 MAC 주소 설정(AP Mode)

20). AT+CIPSTA : Station Mode의 IP 주소를 설정(고정 IP)

21). AT+CIPAP : AP Mode의 IP 주소를 설정

 

22) AT+RST

         :  새로 리스타트(Restart) 시킨다. 

 

이상과 같이 AT 명령어 모드에서 사용가능한 주요 명령어를 정리 하였는데요,

각 AT 명령어 별로 좀더 상세한 설명(영문)을 참조하려면 아래 링크를 살펴보세요.

https://github.com/espressif/ESP8266_AT/wiki/AT

 

espressif/ESP8266_AT

This project is not maintained, please use https://github.com/espressif/esp-at. - espressif/ESP8266_AT

github.com

또한, 정리된 AT명령어 요약집 pdf 파일을 공유합니다.

AT 명령어 요약집.pdf
0.12MB

 

▶ LED등 회로 연결하여 운용을 할 때는 아래와 같은 형태로 연결하면 됩니다.

   ( 기본 AT-mode 연결과 유사하며, Reset 단자를 연결하거나, GPIO 0번, GPIO 1번 핀을 활용 할 수 있습니다,  플래시(업뎃) 모드 일 때 GND에 연결 되었던 GPIO 0번 단자는 반드시 GND에서 오픈 시켜주어야 함)

 - 리셋 단자에는 4.7K의 풀업 저항과 함께 GND로 연결 되는 스위치를 달아 리셋 할 수 있도록 활용하게 됩니다. 

 - 각 GPIO 핀으로 스위치와 같은 형태로 입력을 받거나,  LED와 같은 부품을 달아 출력으로 사용할 수 있습니다.

 

【 본 게시글의 펌웨어 업데이트 모습(에러해결 모습) 및 AT 모드 진입 영상 】

 

 

 

그럼, 시간에는 esp-01 모듈을 활용한 예제를 다루어 보도록 하겠습니다. 

 

 

아래 이어지는 응용 강좌를 클릭해보세요~

【 아두이노모듈#27】 ESP8266 esp-01 활용하기#3 : LED 깜빡이기 

【 아두이노모듈#28】 ESP8266 esp-01 활용하기#4 : 스마트폰으로 LED 컨트롤 하기

반응형
반응형

 릴리패드LilyPAD#3】 우리집 휴지통 스마트하게 바꿔보자! (Plus 영상설명!)

 

 요즘 대세, 샤오미 휴지통 부러워 하지 맙시다!

그냥 여기서 뚝딱 한 번 만들어 보죠~  ^^;;

 

 우선, 고려사항으로 센서는 초음파센서(HC-SR04)를 이용해 보겠습니다.  그리고 메인보드는 아두이노 우노, 미니, 프로미니, 모두다 사용할 수 있지만, 작으면서도 얇은 릴리패드 328을 한 번 사용해보겠습니다.  그리고, 안드로이드 스마트폰이나  각종 충전단자 규격으로 많이 사용되는 마이크로 5핀을 사용하여,  충전 가능한 휴지통으로 구성해보겠습니다.

 

첨엔, 18650충전지를 두개 사용하였으나,  장착모듈의 사이즈를 작게 하기 위해 18650 하나만(3.7V) 사용하게 되었고, 결과적으로 3.7V의 낮은 전압에서도 동작되는 릴리패드 선택과 딱 맞아 떨어졌네요. ^^

아두이노 릴리패드를 이용한 스마트휴지통!

 

▶ 선수학습 :

    1. 릴리패드종류와 특징 소개  ☜  클릭!

    2. 릴리패드 처음사용 설명서(영상포함)  ☜  클릭!

    3. 18650 충전지와 TP-4056 충전모듈 안내  ☜  클릭!

 

▶ 영상으로 보고 따라하기 :

(아래 영상 클릭하셔서 1080p 고화질로 보세요~)

 

▶ 제작준비 :

1. 아두이노 코드 전송을 위해 아래와 같은 PC와의 UART통신용 'FT232RL' 과 같은 모듈을 준비한다.
(릴리패드USB 버전은 모듈 필요없이 직접 연결가능함)

FT232RL 모듈
릴리패드 FTDI Basic

    -  위 FTDI 모듈의 드라이버 다운로드와 설치에 대한 상세안내는 선수학습 2번 참조할 것

 

▶ 부품 목록 :

1. 아두이노 릴리패드328 (릴리패드USB, 아두이노 우노, 미니, 프로미니 등등도 가능함)

2. 초음파 센서 (HC-SR04)

3. 서보모터(SG-90 혹은 다른 서보모터 모두 가능)

4. 18650 충전지  (1구 홀더 포함)

5. TP-4056 충전 모듈  ( 위 , 선수학습 참조)

6. 스위치 (3P 슬라이드 스위치, 토글 스위치, 등등 가능)

7. 점퍼케이블(암↔수 케이블) & 연결용 전선

8. 뚜껑 오픈용 막대 (문구점 등에서 판매하는 아이스바 스틱등을 이용하면 됨)

9. 휴지통 (휴지통의 모양에 따라 작업구조가 달라지니 신중하게 선택 할 것)

 

▶ 회로 연결도 :

 

▶ 아두이노 코드(Arduino code) :

 

/*  스마트 휴지통 with LilyPAD                 */
/*  by RasINO IOT  rasino.tistory.com/285    */ 
#include <Servo.h>   // 서보 라이브러리를 포함
#define servoPin 5     // 서보 모터핀연결 포트 지정
Servo servo;      // 'servo' 라는 이름으로 선언
int angle=0;      // 서보 각도(위치)변수 선언과 초기화
int distance;     // 거리값 저장을 위한 변수 선언
int triggerPin = 6;
int echoPin = 7;

void setup() {
  Serial.begin(9600); 
  servo.attach(servoPin);       // 서보모터 연결된 아두이노 포트 지정  
  pinMode(triggerPin, OUTPUT);  // 트리거 핀을 출력으로 설정
  pinMode(echoPin, INPUT);       // 에코 핀을 입력으로 설정
}

void loop() {
// ----------- 초음파 거리 측정용 신호 발생부분 -----------------------  
  digitalWrite(triggerPin, LOW);  // 트리거 핀 초기화
  digitalWrite(echoPin, LOW);     //  에코 핀 초기화
  delayMicroseconds(2);      
  digitalWrite(triggerPin, HIGH); // 트리거 핀으로 10 us의 펄스를 발생
  delayMicroseconds(10);
  digitalWrite(triggerPin, LOW); 
// ----------- 초음파 거리 계산부분 ----------------------------------
  distance = pulseIn(echoPin, HIGH)/58; //에코핀값을 거리값(cm)으로 계산후 저장
  Serial.println("Distance(cm) = " + String(distance)); //시리얼모니터로 확인
  delay(200);
// ----------------------------------------------------------------  
  if (distance < 20) {       // 물체(사람)가 20cm 이하로 감지되면,
    digitalWrite(13, HIGH);  // LED 켜기 (아두이노의 빌트인 LED)
    servo.write(178); // 서보모터 스팩에 따라 최대 각도로 변경(뚜껑 열기)
    delay(3000);      // 뚜껑이 열리고 3초 대기                
  }
  else {              // 20cm 이하가 아닌 모든 경우는 뚜껑 닫기
    digitalWrite(13, LOW);  
    servo.write(1);   // 서보모터의 각도를 변경한다 (뚜껑 닫기)
    delay(500);       // 뚜껑이 닫히는 최소한의 시간을 준다
  }
}

 

▶ 아두이노 코드 & 라리브러리 다운로드

 서보라이브러리는 아두이노 스케치 IDE의 라이브러리 검색에서 검색 후 설치 하여도 되고, 만약 라이브러리 에러가 난다면, 기존 설치된 servo.h 라이브러리를 모두 삭제 후, 아래 서보라이브러리를 zip파일 그대로 추가하면 됨.

UltraTrashCan.zip
0.00MB
Servo.zip
0.03MB

 

▶ 유의사항 

 

1.  휴지통 선택이 중요합니다.
 :  휴지통 모양에 따라서 부품을 장착하기 불편 할 수도 있으며, 서보모터를 스틱 바를 이용해서 뚜껑을 열지? 아니면, 직접 서보모터와 고정시켜서 열어야 할지? 가 달라지기 때문입니다. 

 

2. 릴리패드가 아닌 다른 아두이노 보드를 선택할 경우, 최하 5V 이상을 넣어줘야 하기 때문에,  18650리튬 배터리를 사용할경우 두 개를  직렬로 연결(7.4V)하여 5V 이상을 만들어 주어야 아두이노가 동작하게 됩니다.  (단, 프로미니는 3.3V 동작과 5V 동작하는 버전이 있음) ,  이렇게 되면, 18650이 제대로 충전이 되게 하려면 TP-4056모듈을 각각(2개) 연결 해줘야 합니다.

 

3. 센서 위치

 : 초음파 센서의 위치나 방향에 따라 쓰레기를 버리는데 편할 수도 있고 불편할 수 있으니 충분히 고민해보세요.   이 때 센서를 달아줄 구멍은 인두기를 사용하면 좀더 쉽게 뚫립니다.

 

4. 지금 제작한 스마트 휴지통은 쓰레기를 담는 몸체에는 아무것도 설치를 하지 않는 방식으로 제작되어서 비닐봉지를 넣고 쓰레기 처리를 하는 등등의 작업이 실생활에서 편하도록 디자인 되었습니다.  
따라서 이런점도 고려해서 제작해보세요~  ^^;;

 

▶ 스마트 휴지통 버전 2.0 에서는 스마트한 기능들을 더 집어 넣어 제작해 볼 예정입니다. 

감사합니다~

 

※ 주의! : 18650과 같은 리튭배터리는 직접적인 합선(쇼트)이나  회로내에서의 합선 등에 의해 불꽃과 소폭발의 가능성이 있는 제품이므로 다루실 때 충분한 주의와 사전지식이 필요하니 주의하시기 바랍니다.

반응형
반응형

※ 주의! : 18650과 같은 리튭배터리는 직접적인 합선(쇼트)이나  회로내에서의 합선 등에 의해 불꽃과 소폭발의 가능성이 있는 제품이므로 다루실 때 충분한 주의와 사전지식이 필요하니 주의하시기 바랍니다.

 

배터리 충전】 18650 리튬배터리 + TP4056 충전모듈

 

 아두이노를 가지고 응용회로를 만들거나 프로젝트를 하다보면 전원공급을 어떻게 할 것인가에 직면하게 됩니다.  최종 완성품에 완성도를 높이려면 전원(전력)공급에 문제 없고, 비교적 장시간 사용가능하며, 교환비용이 저렴하거나 재충전이 가능한 방식을 고려하게 됩니다. 

 이런 요구 사항을 대부분 충족해줄 수 있는 것이바로 리튬이온 18650 충전지 입니다.

모양은 AA베터리와 유사한 모양이며, 사이즈는 AA 베터리 보다 조금 크지만, 전압과 전류 용량이 훨씬 큽니다.  (아연 탄소 AA: 1.5V , 400~900mAh)  (18650충전지 : 3.6~3.7V ,  1800mAh~3600mAh)

물론 염화칼륨 소재의 알카리 AA건전지는 1.5V전압에, 용량이 1700~3000mAh까지 나오는 것이 있습니다. 하지만, 가격이 비싸고 1회용으로 사용하고 버려야 하는 비용적인 큰 단점이 있습니다. 

 

 그러므로 아두이노 관련 포터블 응용회로나 RC카 등의 키트를 만들때는 재충전이 가능하면서 전압과 용량이 큰18650을 사용하는 것이 활용성 측면에서 큰 장점이 있습니다. 

그리고 여기에 TP-4056과 같은 충전모듈을 사용하면, 조금 고가(?)의 전용 충전기 비용을 아낄 수 있습니다. 

 

 따라서 오늘은 18650베터리와 충전모듈(TP4056), 그리고 충전보호회로에 대해 설명 드릴까 합니다. 

 

 먼저 한 눈에 비교가 되도록 아래 이미지를 만들었는데요, 

 보이시는 바와 같이 18650이 AA 베터리보다 조금더 크며, 높이는 7Cm가 조금 안 됩니다.

그리고 18650의 종류가 충전보호회로가 없는 것과 내부에 포함 된 것 두 가지로 나오는데요?

 충전보호회로가 없는 모델은 사용하는데는 문제없고, 재충전시, 충전보호회로가 있는 전용 충전기를 이용해야 과충전으로 인한 과열 및 발화로부터 안전합니다.

 반면, 보호회로가 내장된 18650 모델은 가격이 조금더 비싸지만 과충전에 대한 자체 보호가 됩니다. 그리고 사이즈(높이)도 약간 더 깁니다.   따라서 18650용 소켓을 구매하실 때, 구분해서 구매해야 합니다.

만약, '비충전보호회로용 18650' 소켓을 구매 했는데 '충전보호회로가 포함된 18650'을 끼워 보면, 들어가지가 않는 낭패(?)를 경험 하시게 됩니다. 

 보통 소켓은 사이즈 차이 때문에 길이차이가 나는, 1. 충전보호회로비내장18650용 소켓 ,   2. 충전보호회로내장18650용 소켓 ,   3. 둘다 장착가능한 18650용소켓 이렇게 세종류로 나뉩니다.  만약 1번 소켓에 충전보호회로가 내장된 18650을 끼우려 한다면, 너무 빡빡해서 들어가지 않습니다. 

 그리고 둘다 끼울수 있는 3번 소켓은 특수제작된 것은 아니고, 둘 다 사용할 수 있도록 사이즈를 중간 정도로 맞춘 건데요, 따라서 보호회로가 내장된 것을 끼울때는 조금 뻑뻑하고, 내장 안 된 것을 끼울 때는 살짝 헐겁습니다. 

따라서, 상황에 맞추어서 선택하되, 어떤 18650을 사용할지 확실히 정한 후, 거기에 맞추어 딱맞는 소켓을 선택하는 것이 좋습니다.  

 그리고 기본적으로 18650 소켓 종류 는  건전지 1개가 들어가는 1구 소켓,  2개가 들어가는 2구 소켓, 3구소켓, 4구 소켓.  이렇게 판매되고 있습니다.  

 

 2구 이상 소켓 마다 직렬 연결된 소켓과 병렬연결된 소켓  이렇게 두 가지로 구분되어 판매됩니다. 

직렬 병렬의 의미는 이렇습니다.  18650 베터리 각 3.7V를 직렬로 연결하면 : 3.7V + 3.7V = 7.4V로 비교적 5V이상의 전압이 필요한 곳에 사용하기 좋습니다.   반대로, 3.7V//3.7V 두개를 병렬로 연결하면, 전압은 3.7V이지만, 용량이 두 배로 늘어나게 되어 사용시간을 늘릴 수 있습니다.   따라서  상황에 맞게 적절한 소켓을 선택하시면 됩니다.  다만, 대부분의 기기가 특히 아두이노는 5V이상을 요구하기에 직렬소켓은 다양한 곳에서 많은 종류가 판매되지만, 병렬소켓은 판매하는 곳이 적습니다. 

참고하시면 좋을 것 같네요. 

 

 그리고 충전 보호 회로에 대해 설명 드리겠습니다.

18650은 충전이 가능한데, 3.7V보다 조금 더 높은 약 4.2~4.5V 정도의 전압으로 충전 시키게 되는데요, 처음엔 많은 전류를 흘려 충전시키다가 목표 전압에 다다르면 전류량을 서서히 줄여가면서 안정적으로 충전이 되도록 해야 하는데,  이런 역할을 담당해주는 충전모듈이 필요하게 됩니다. 

그 모듈이 바로 아래 TP4056 충전모듈입니다. 

 그리고 완충이 된 후에도 계속 충전을 시키게 되면 과충전이 되고 위험성이 생기게 됩니다. 

그래서 완충 후에는 과충전이 되는 걸 방지하기 위해 과충전보호(방지)회로가 딸려 있는 18650전지를 사용해야 합니다.  위 18650비교 사진에서도 보이듯이 과충전보호회로가 없는 18650보다 보호회로가 들어 있는 18650이 길이가 조금더 길죠.  물론 가격도 조금더 비쌉니다.     

 물론 그러면, 보호회로가 없는 18650은 효용성이 떨어질 수 있으나,  아래와 같은 과충전보호(방지)회로가 내장된 TP4056 모듈을 사용하면 이런 문제는 해결 됩니다. 

 따라서 과충전 보호(방지)회로가 둘 다 없는 18650+TP4056 조합만 아니라면 문제없이 사용하실 수 있습니다. 그리고 18650 하나당 TP-4056 모듈 하나씩 사용하시는게 좋습니다. 

 

 그리고 위 사진처럼 고용량의 배터리팩을 만드는 경우에는 과충전보호회로가 없는 저렴한18650배터리를 여러개 묶고, 과충전 방지회로기능과 여러개의 배터리 셀에 골고루 충전이 이루어 질 수 있도록 충전밸런스 기능이 있는 BMS라는 모듈을 추가해서 만들게 됩니다. 

BMS 모듈은 용량과 구성에 따라 여러가지가 있음

 

 그럼, TP-4056 모듈을 사용법을 아래 이미지와 함께 설명드리겠습니다.

왼쪽이 입력측이며,  보통 MicroUSB로 전압을 입력하게 되며, 5V+, - 단자를 통해서 직접 납땜해서 입력할 수도 있습니다.  입력은 4.5V~8V, 1A까지 가능합니다.    그리고 우측은 출력단으로, B+, B- 단자에 베터리를 물리게 되며(극성주의),  위아래 OUT+, - 단자를 통해 배터리의 출력을 연결하여 사용하게 됩니다. 

즉, 출력 OUT+, - 단자에 배터리 전원을 공급해야 할 곳에 연결해주면 됩니다.  그러면, 충전하지 않을 때는 배터리의 출력을 그대로 사용하게 되고, Micro 5핀 전원을 넣어 충전 할 때는 배터리에 충전도 되고 출력으로도 전원이 나와서 사용할 수 있습니다. 

 

만약, 배터리와 외부기기 사이 전원연결을 끊고 연결 하도록 전원 스위치를 달려면, 

보통 출력단자 + 단자 한 쪽에 연결하게 됩니다.   "전원 스위치 연결은 아래쪽에 있는 이미지를 참고 하세요"

 

그리고 충전중 일때는 붉은색 LED가 켜지며, 완충이 되면, 파란색 LED로 바뀝니다.    

<전원 스위치 연결법 참조 >

전원 스위치 연결법 (점선박스 참조)

 

 여기까지 건전지와 18650의 비교,  그리고 배터리 충전을 위한 TP-4056에 대해 다루었습니다.

감사합니다.

 

반응형