'전체 글'에 해당되는 글 98건

쓸데없는 서론이깁니다. 그냥 이야기거리라고 생각하고 가볍게 읽어 주십시오.

 

저렴한 ESP8266 개발을 위한 저렴한 보드들이 많습니다. Wemos라는 회사에서 만든 Lolin D1 min는 송료 포함해서 $2 정도에 구입할 수도 있습니다.

 

Wemos에 대해서는 안 좋은 기억을 갖고 있습니다. Aliexpress에서 저렴하게 구입한 것이니 Wemos 정품은 아니었을 것입니다. 2018년 봄에 ESP8266에 관하여 처음 알게 되었습니다. 당시는 AVR을 넘어서 STM32에 입문하여 이것 저것 해 보던 중이었습니다.

 

그때나 지금이나 마찬가지로 STM32보다 AVR이 더 친숙한 상태입니다. AVR로 여러가지 만들어 봤지만 arduino에는 별 관심이 없었었습니다. 그러다가 문득 살펴보니, arduino shield가 엄청 다양해졌고 가격도 저렴해서 관심을 안 가질 수가 없었습니다. Arduino UNO와 MEGA를 구입하고, 몇 몇 shield들을 사서 이것저것 해보고 있었습니다.

 

뚜렷한 목표도 없이 그냥 호기심으로 장난감 가지고 놀고 있는 상태였습니다. 그러다가 ESP8266을 알게 되었습니다. 아주 간단히 USART 통신으로 인터넷에 접속할 수 있다는 것이 충격적이었습니다. 그래서 ESP8266 12F와 12S를 몇 개씩 구매했습니다.

 

그러던 중에 arduino mega와 esp8266을 결합한 Wemos Mega 2560을 발견하고 바로 구입했습니다. 당시 aliexpress에서 arduino mega 가격의 두 배를 주고 구입했습니다.

 

그런데, 이 짝퉁 Wemos mega 2560이 엉망진창이었습니다. Arduino Mega로서는 정상 동작하는데, ESP8266 관련 기능은 전혀 동작하지 않는 것입니다. 인터넷에서 회로도를 찾아서 테스터로 보드를 찍어보니 일부 배선이 단선된 상태였습니다.

 

며칠 간 끙끙대면서 단선된 배선들을 찾아서 연결시켰습니다. 겨우 동작시켜보니 바로 앞에 있는 공유기도 못 찾습니다. 당연히 판매자 평가는 별 하나. 별 하나도 주고 싶지 않았지만, 안 주는 방법은 없습니다. 지금도 그 보드를 가지고 있습니다. 그래서 Wemos하면 그 보드가 생각나서 기억이 안 좋습니다.

 

처음에 ESP8266을 마이크로 프로세서로 인터넷 연결하는 정도로만 인식 해서 여지껏 ESP8266을 AT 명령어 정도로 한정해 생각하고 있었습니다. 여기 티스토리에서 ESP8266을이용한 글이 있습니다. STM32F103으로 ESP8266을 이용한 소켓 프로그래밍 - 제1편에서부터 5편에 이르기까지 글을 썼습니다. STM32F103이 서버 역할을 하고, 이 서버와 통신하는 PC 프로그램과 스마트폰 앱을 만들어 보기도 했습니다.

 

ESP8266은 서버인 STM32F103과 클라이언트인 PC 및 스마트폰과 통신을 매개하는 역할만 하고 있습니다. ESP8266과 STM32F103은 AT 명령어로 통신하도록 프로그래밍했습니다.

 

최근들어 AT 명령어 없이도 ESP8266을 사용할 수있다는 사실을 인지했습니다. 그리고 그 대부분의 기능들이 arduino에서 구현되고 있음도 알았습니다. 그래서 arduino에서 ESP8266을 학습하기 위한 장비를 마련하기로 했습니다.

 

 

이제서야 본론으로 들어 갑니다.

 

처음에는 ESP8266 12S를 다음과 같이 연결해서 사용했습니다.

 

 

 

 

위 사진은 다음과 같이 연결한 것입니다.

CH340GESP8266 12S 
RXDTxD01kΩ 저항 사용
TXDRxD01kΩ 저항 사용
3.3VVcc 
GndGnd 
 GPIO0330Ω 저항 연결(저항값은 별 영향 없음)

 

CH340G는 5V로 동작하고 있고, ESP8266은 3.3V로 동작하고 있기 때문에 RXD와 TXT 신호를 직접 연결하면 안됩니다. 직접 연결하면 ESP8266이 파괴될 가능성이 높습니다. 전압 차이를 해결하려면 원칙적으로 level shifter라는 회로를 사용해야 하지만, 위와 같이 1kΩ 저항을 넣어서 간단히 해결할 수도 있습니다.

 

하여간 위와 같이 연결하면 arduino에서 펌웨어 업데이트할 때에 다음과 같은 작업을 수동으로 해 주어야 합니다.

1) Vcc를 차단한다.

2) GPIO0의 저항을 Gnd에 연결한다.

3) 2)의 상태를 유지한 채로 Vcc를 다시 연결한다.

 

arduino IDE에서 컴파일하는 동안에 위의 작업을 수동으로 해 주어야 합니다. 한 두 번은 참고 하겠지만, 반복되면 굉장히 번거롭습니다.

 

 

Wemos의 Lolin D1 mini의 회로도를 보니까 가지고 있는 재료들을 이용해서도 구현할 수 있을 것 같아 시도해 봤습니다.

다음은 Lolin D1 mini의 회로도입니다.

 

 

 

 

ESP8266의 GPIO0 핀을 low(0)으로 설정한 다음에 부트하면 부트로더가 실행되서 flash 메모리에 펌웨어를 기록할 수 있는 상태가 됩니다. 펌웨어를 업데이트한 후에 펌웨어 프로그램을 실행시키는 과정을 모두 자동으로 하려면, 다음의 순서로 신호를 제어하면서 진행해야 합니다.

 

1) GPIO0와 RESET low로 설정

2) RESET high로 설정

3) GPIO0 high로 설정

4) 펌웨어 프로그램 기록

5) RESET low로 설정

6) RESET high로 설정

7) 펌웨어 프로그램 실행

 

Lolin D1 mini의 경우 USB to USART 칩의 DTR 신호와 RTS 신호를 이용해서 ESP8266의 RESET과 GPIO0 핀을 제어합니다. 위 회로도에 빨간색으로 표시한 부분이 이런 작업을 하도록 설계된 것입니다. 위 빨간색 표시한 부분을 구성할 부품들이 모두 집에 있어서 만들어 봤습니다.

 

제가 사용한 부품들은 다음과 같습니다.

1) ESP8266 12S 1개

2) CH340G를 사용한 USB to USART 1개

3) level shifter 1개

4) 2SC1815 2개

5) 배선할 전선 약간

 

 

 

 

Level shifter를 쓰지 않고 앞에서와 같이 간단히 1kΩ 저항으로 해결해 보려고 했습니다. 결론적으로 여러가지 방법을 구사해 봤지만 원하는대로 동작하지 않았습니다. RESET 신호와 GPIO0 신호가 0v로 내려 가지 않았습니다.
할 수없이 가지고 있던 level shifter를 사용해서 해결했습니다. Level shifter를 생략할 수 있다면 회로가 훨씬 간결할텐데 아쉽습니다. 다른 방법은 USB to USART 회로를 변경하여  CH340G의 전원을 5V에서  3.3V로 바꾸어 주면 될 듯한데, 더 번거로울 것 같아 시도하지 않았습니다.

 

위의 Lolin D1 mini 회로도에 따른 연결도를 만들어 봤습니다.

 

 

 

 

 

아래는 브레드 보드에 위 연결도에 따라 배선하기 위해서 선을 붙인 USB to USART의 사진입니다. 붙인 선이 가급적 움직이지 않도록 종이테이프를 붙여 놓았습니다. 

 

 

 

 

 

ESP8266 12S의 사진입니다.

 

 

 

 

Txd0와 RxD0에 원래 붙여 놓았던 1kΩ 저항은 굳이 뗄 필요가없어서 그대로 두었습니다.

 

다음은 브레드 보드에 조립해 놓은 모습입니다.

 

 

 

 

 

 

브레드 보드에 조립하는 과정과 완성 후에 정상 동작을 확인하는 동영상입니다. 전체 길이가 약 8분이 좀 넘습니다. 요즈음은 동영상이 없으면 제대로 평가 받지 못하는 것 같아서, 서투르지만 동영상을 만들어 봤습니다.

 

 

 

 

이제 arduino UNO, mega 등 뿐만아니라, 자체 제작한 atmega128, atmega32, atmega8 등으로 이 개발 보드를 통해서 쉽게 인터넷에 접근할 수 있을 것 같습니다. 뿐만 아니라 stm32와 stm32duino에서도 더 다양하게 활용할 수 있을 듯합니다.

 

블로그 이미지

엠쿠스

Microprocessor(STM32, AVR)로 무엇인가를 만들어 보고자 학습 중입니다.

,