'cp2102'에 해당되는 글 13건

  1. 2019.08.14 Hardware | ESP-01 or ESP8266 사용기 - 5 2
  2. 2019.07.07 Hardware | bluetooth 모듈 HC-06 / HC-05 사용해 보기 - 1
  3. 2018.10.04 Hardware | ESP-01 or ESP8266 사용기 - 1 4

Hardware | ESP-01 or ESP8266 사용기 - 5

|

이번 글을 읽기에 앞서, ESP8266 에 관하여 몇 차례에 걸쳐 다뤄 왔습니다.

ESP8266 을 활용하기 위해서는 여러 지식과 경험이 바탕이 되어야 추가적인 내용을 충분히 이해할 수 있습니다.

시간이 허락되신다면, 먼저 아래 포스팅 들을 참고해 주세요.


* Hardware | ESP-01 or ESP8266 사용기 - 1

https://chocoball.tistory.com/entry/Hardware-ESP01-or-ESP8266-using-1


* Hardware | ESP-01 or ESP8266 사용기 - 2

https://chocoball.tistory.com/entry/Hardware-ESP01-or-ESP8266-using-2


* Hardware | ESP-01 or ESP8266 사용기 - 3

https://chocoball.tistory.com/entry/Hardware-ESP01-or-ESP8266-using-3


* Hardware | ESP-01 or ESP8266 사용기 - 4

https://chocoball.tistory.com/entry/Hardware-ESP01-or-ESP8266-using-4



또한, 이 포스트에서 가장 많이 참고한 사이트는 여기 입니다.


* Using ESP8266 SPIFFS

https://www.instructables.com/id/Using-ESP8266-SPIFFS/





1. SPIFFS


SPI Flash File System 의 약자로서,

ESP8266 등에 장착된 Flash memory chip 의 여유공간에 파일을 쓰기/읽기/삭제 등을 할 수 있게 해주는 기능입니다.


* ESP8266 Arduino Core

https://arduino-esp8266.readthedocs.io/en/latest/filesystem.html


|--------------|-------|---------------|--|--|--|--|--|
^              ^       ^               ^     ^
Sketch    OTA update   File system   EEPROM  WiFi config (SDK)


단, 일판 file system 처럼 directory 구조처럼 하위 폴더 개념이 없고, 1차원적으로 모든 파일을 한곳에 넣어서 사용해야 합니다.



궁극적인 목적으로는,

- ESP8266 등에 장착된 controller 가, 시간과 로드가 많이 걸리는 외부 저장장치에 접근하지 않고, 내부적으로 처리하기 위한 방법

- 파일이 자주 변하지 않으며, 주로 읽혀지는 파일

- 여타 파일 시스템 처럼 bad block 등의 검사나, 마킹을 할 수 없음

- HTML, CSS, JS 파일들을 올려놓고 ESP8266 에서 web server 를 돌릴 수 있슴





2. Arduino IDE 에서 환경 설정


파일을 올리는 툴은 Arduino IDE 에서 하게 되므로, SPIFFS 를 사용할 수 있도록 Arduino IDE 를 설정해야 합니다.

우선 Arduino IDE 에서 SPIFFS 메뉴를 활성화 시키기 위해 아래 순서대로 진행합니다.



A. Plug-In 인스톨

아래 사이트에서 최신 파일을 받습니다.


* esp8266/arduino-esp8266fs-plugin

https://github.com/esp8266/arduino-esp8266fs-plugin/


* Latest version of ESP8266 Arduino

https://github.com/esp8266/arduino-esp8266fs-plugin/releases/tag/0.4.0

ESP8266FS-0.4.0.zip


혹시 모르니, 필요한 파일을 받아서 올렸습니다.



B. 파일을 설치

Arduino IDE 에서 설정된 sketch 폴더에 tools 라는 directory 를 만들어 서 그 안에 위의 파일을 해동하여 넣습니다.



sketch 폴더는 환경마다 다르므로, 현재 쓰고 있는 환경에서 sketch 폴더가 어디인지는 Preference 에서 확인 가능합니다.




C. 설치 완료 확인

설치 후, Arduino IDE 를 재시작 하여 Tools 메뉴에 가 보면,

아래 Before/After 처럼, 새롭게 "ESP8266 Sketch Data Upload" 매뉴가 활성화 된 것을 확인 할 수 있습니다.


Before



After






3. ESP8266 의 용량 확인


파일을 업로드 하기 전, ESP8266 에 달려 있는 Flash memory 의 용량을 확인해 봅니다.

사실 대략 알고 있다면 이 부분은 건너 뛰어도 됩니다.


우선 ESP8266 보드를 Arduino IDE 에서 직접 access 할 수 있도록, 보드를 등록해 봅니다.

보드 등록을 위한 관련 파일을 다운로드 받아 설치하려면, 아래 설정처럼 Preference 에 해당 정보가 등록되어 있어야 합니다.


File > Preference


https://arduino.esp8266.com/stable/package_esp8266com_index.json


아래처럼 등록하면 됩니다.

예전에 Digispark 를 DIY 한 흔적이 있네요. 다른 URL이 이미 있다면, 다음 줄에 등록하면 됩니다.



그럼, 아래 메뉴에서 ESP8266 보드 관련 파일을 설치할 수 있게 됩니다.


Tools > Board > Boards Manager



Boards Manager 에서 esp8266 으로 검색하여, 설치되어 있지 않으면 설치해 줍니다.



여기까지 왔다면, Board 메뉴에서 Generic ESP8266 Module 을 선택할 수 있게 됩니다.



특별히 할 설정은 없슴니다만, SPIFFS 를 2M 사용한다고 설정 했습니다.

다른 설정은 잘 모르겠네요.



이제 Flash memory 확인용 sketch 를 선택합니다.


File > Examples > ESP8266 > CheckFlashConfig



실제 소스는 다음과 같습니다.


/*
  ESP8266 CheckFlashConfig by Markus Sattler
  This sketch tests if the EEPROM settings of the IDE match to the Hardware
*/

void setup(void) {
  Serial.begin(115200);
}

void loop() {

  uint32_t realSize = ESP.getFlashChipRealSize();
  uint32_t ideSize = ESP.getFlashChipSize();
  FlashMode_t ideMode = ESP.getFlashChipMode();

  Serial.printf("Flash real id:   %08X\n", ESP.getFlashChipId());
  Serial.printf("Flash real size: %u bytes\n\n", realSize);

  Serial.printf("Flash ide  size: %u bytes\n", ideSize);
  Serial.printf("Flash ide speed: %u Hz\n", ESP.getFlashChipSpeed());
  Serial.printf("Flash ide mode:  %s\n", (ideMode == FM_QIO ? "QIO" : ideMode == FM_QOUT ? "QOUT" : ideMode == FM_DIO ? "DIO" : ideMode == FM_DOUT ? "DOUT" : "UNKNOWN"));

  if (ideSize != realSize) {
    Serial.println("Flash Chip configuration wrong!\n");
  } else {
    Serial.println("Flash Chip configuration ok.\n");
  }

  delay(5000);
}


!!주의!!

ESP8266 의 Flash memory 에 writing 하기 위해서는 아래 순서에 맞게 해야 합니다.


1. RST 의 스위치를 누른다.

2. FLASH 의 스위치를 누른다.

3. RST 의 스위치에서 손을 뗀다.

4. FLASH 의 스위치에서 손을 뗀다.

5. Flash program 에서 "시작" 을 누른다.



위의 구성처럼, 꼭 외부 전원으로 ESP8266 을 구동시키는 것과,

PC 와 Serial 연결 위한 FTDI 나 CP2102 의 GND 를, 외부전원의 GND 와 서로 연결해 주는 것을 빼먹으면 안됩니다. (동기)


FTDI 는 Serial 통신만을 위한 것이지, ESP8266 의 전원까지 공급하게 하면, 매우 높은 확률로 실패합니다.



컴파일된 sketch 가 잘 밀어들어가고 있고요.



문제 없이 끝났습니다.

Hard resetting via RTS pin... 이라고 나오고, 그 뒤 반응에 대한 내용은 나오지 않습니다.



Serial Monitor 로 확인해 보면, 올라간 sketch 가 잘 구동되는 것을 확인할 수 있습니다.

원래 1MB 였던 Flash memory 가 4MB 로 변경된 것이 확인 됩니다.





4. SPIFFS upload


이제 아까 Plug-in 을 이용해 구현했던 "ESP8266 Sketch Data Upload" 기능을 이용하여 실재로 data upload 를 해 봅니다.

sketch 폴더에 "data" 폴더를 만들고, 거기에 파일을 놔두면, 그 파일이 자동으로 upload 된다고 합니다.



으잉? 빈 깡통이라고 그러네요?

이미 위에서 알고 있는 sketch folder 와 또 다른 곳을 이야기 하는 듯 합니다.

IDE 메뉴의 "Show Sketch Folder" 를 이용하여 어디를 이야기 하는지 확인해 봅니다.


Sketch > Show Sketch Folder



Sketch 폴더가 여기였어? 이 SPIFFS 업로드용 sketch 폴더는 Temp 폴더로 잡혀있나 보네요.

data 폴더를 만들어 주고 업로드 하고 싶은 파일을 심어 놓습니다.



드디어 이 메뉴를 눌러 봅니다.



"SPIFFS Uploading Image..." 라고 뜨면서 막 뭐를 밀어 넣는 것 같습니다.



"SPIFFS Image Uploaded" 라고 뜨면서, "Hash of data verification" 까지 실행하고 끝납니다.

텍스트 파일이라서 그런지 data 압축도 자동으로 되는 것 같습니다.



Data upload 영역과 기존 firmware 영역이 잘 분리되어 있는지, 전원을 리셋하여 command 를 날려 봅니다.

기존 Wi-Fi firmware 영역은 완벽히 구분되어 잘 보존되어 있네요.



아래 그림에서 보이듯, SPIFFS 가 사용하는 File System 영역과 Program 영역이 분리되어 있는지 확인해 본 것입니다.





5. Upload 된 파일 확인


그럼 upload 되어 있는 파일이 진짜 내가 올린 파일인지 확인해 볼까요?

이 글, 맨 처음에 참조한 사이트에서 text 파일 확인용 소스가 있습니다. 그대로 활용해 봅니다. (Steve 고마워요~)


/* Steve Quinn 06/03/17
Copyright 2017 Steve Quinn

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program.  If not, see .

Written to accompany the following Instructable;

'Using ESP8266 SPIFFS'

Compiled using Arduino 1.6.9 
*/

#include "string.h"
#include "FS.h"

bool    spiffsActive = false;
#define TESTFILE "/esp8266_SPIFFS.txt"

void setup() {
	Serial.begin(115200);
	delay(1000);
	
	// Start filing subsystem
	if (SPIFFS.begin()) {
		Serial.println("SPIFFS Active");
		Serial.println();
		spiffsActive = true;
	} else {
		Serial.println("Unable to activate SPIFFS");
	}
	
	delay(2000);
}

void loop() {
	if (spiffsActive) {
		if (SPIFFS.exists(TESTFILE)) {
			
			File f = SPIFFS.open(TESTFILE, "r");
			if (!f) {
				Serial.print("Unable To Open '");
				Serial.print(TESTFILE);
				Serial.println("' for Reading");
				Serial.println();
			} else {
				String s;
				Serial.print("Contents of file '");
				Serial.print(TESTFILE);
				Serial.println("'");
				Serial.println();
				
				while (f.position() < f.size()) {
					s=f.readStringUntil('\n');
					s.trim();
					Serial.println(s);
				}
				f.close();
			}
			Serial.println();
			
			f = SPIFFS.open(TESTFILE, "a");
			if (!f) {
				Serial.print("Unable To Open '");
				Serial.print(TESTFILE);
				Serial.println("' for Appending");
				Serial.println();
			} else {
				Serial.print("Appending line to file '");
				Serial.print(TESTFILE);
				Serial.println("'");
				Serial.println();
				f.println("This line has been appended");
				f.close();
			}
			
			f = SPIFFS.open(TESTFILE, "r");
			if (!f) {
				Serial.print("Unable To Open '");
				Serial.print(TESTFILE);
				Serial.println("' for Reading");
				Serial.println();
			} else {
				String s;
				Serial.print("Contents of file '");
				Serial.print(TESTFILE);
				Serial.println("' after append");
				Serial.println();
				
				while (f.position() < f.size()) {
					s=f.readStringUntil('\n');
					s.trim();
					Serial.println(s);
				}
				f.close();
			}
		} else {
			Serial.print("Unable To Find ");
			Serial.println(TESTFILE);
			Serial.println();
		}
	}
	
	while (true) {
		yield();
	}
}


프로그램 영역에 올려야 구동되므로, IDE 에서 일반 sketch upload 로 밀어 넣습니다.

프로그램이 올라가면 Serial Monitor 를 통해 확인해 봅니다.



제가 작성했던 text 파일이 잘 읽혀지네요. 신기~!



한글 및 ASCII 코드도 잘 읽혀서 변환되었습니다. (OS 가 한글이기도 하고, 파일 인코딩을 UTF-8 로 지정함)



이 소스는 Flash memory 에서 SPIFFS 를 사용하여,

일반 file system 의 IO 처럼, 추가 쓰기가 가능하다는 것을 보여주기 위해 append 기능이 부여되어 있습니다.



이 과정을 통해 기존 firmware 위에 확인용 sketch 가 overwrite 되었으므로,

다시 Wi-Fi firmware 를 입혀주고, 그렇게 해도 여전히 data 영역이 그래도 보존되는지 확인해 봅니다.



그 다음, 다시 위의 소스 sketch 를 입히고 실행시켜 보니, 아래와 같이 한줄 더 추가 되었습니다.



즉, data 영역은 프로그램 용 sketch 나, Wi-Fi firmware 와는 완전 분리된 상태로 관리 되고 있다는 것을 알 수 있습니다.





FIN


ESP8266 에 대해서 5회에 걸쳐 살펴봤습니다.

대략적인 사용법 - 개념, 환경 구성, Flash memory 사용법 - 은 훑어 본것 같습니다.


ESP8266 의 진정한 활용은 무선으로 연결하여 IoT data 나, 실시간 연결을 통한 제어가 주 목적이 되겠습니다.

다음부터는 센서를 가지고 놀면서, IoT 적인 활용법을 익혀 보겠습니다.


And

Hardware | bluetooth 모듈 HC-06 / HC-05 사용해 보기 - 1

|

1. Bluetooth 통신


룰루~ arduino 로 놀 수 있는 센서나 모듈이 뭐가 있을까~ 하고 AliExpress 를 둘러 보던 중,

HC-05, HC-06, SPP-C 가 bluetooth 연결에 사용할 수 있는 모듈이라는 것을 알았습니다.


아직 쌓여있는 센서가 많지만, 일단 구매해 봅니다.


* SPP-C Bluetooth serial pass-through module wireless serial communication from machine Wireless SPPC Replace HC-05 HC-06

https://www.aliexpress.com/item/32755550889.html




* HC-05 HC 05 hc-06 HC 06 RF Wireless Bluetooth Transceiver Slave Module RS232 / TTL to UART converter and adapter

https://www.aliexpress.com/item/32523867394.html








2. 도착


한 업자에게서 구매 해서 동시에 배달되었습니다.



HC-05 이구요.



HC-06 이구요.



응? HC-05 랑 보드는 같고, 다른점은 오른쪽 밑에 스위치와 pin 갯수가 다른 것 뿐이네요.



뒷면에 세겨진 pin out 배열도 동일합니다.



SPP-C 만 다른 보드를 사용합니다.






3. HC-06


일단 오늘은, Slave 만으로 사용할 수 있는 가장 간단한 HC-06 구동을 시험해 보기로 합니다.

HC-05 는 Master / Slave 양쪽으로 사용할 수 있고, HC-06 은 Slave 만 가능하다 하네요.


보드가 동일한 것을 미리 알았더라면, HC-05 만 두개 살껄 그랬습니다.

SPP-C 는 완전 다른 모양이라 HC-05 / HC-06 을 가지고 놀아 보고 그 다음애 해보려 합니다.


구동 전원 Vcc 는 3.6v~5V 라서 arduino nano 의 3.3v 로는 조금 부족하고 5v 로 확실하게 구동됩니다.


HC-06 의 RXD, TXD 는 3.3v 를 이용한 입출력이므로. level shift 회로가 필요합니다만, 출력 (TXD) 은 그대로 하고,

입력 (RXD) 에 저항을 연결하여 회로를 보호해 줍니다.

사실 그대로 연결해도 됩니다만, 저항을 연결해 주는게 느낌상 좋습니다.


실제로 전용회로를 꾸미게 되면, 입출력 전압을 측정하여 거기에 맞는 저항을 달아 주는 것이 좋겠죠?

사양은 다음과 같습니다.


- Bluetooth protocol: Bluetooth V2.0 protocol standard

- Power Level: Class2(+6dBm)

- Band: 2.40GHz—2.48GHz, ISM Band   

- Receiver sensitivity: -85dBm

- USB protocol: USB v1.1/2.0

- Modulation mode: Gauss frequency Shift Keying

- Safety feature: Authentication and encryption

- Operating voltage range:+3.3V to +6V

- Operating temperature range: -20ºC to +55ºC

- Operating Current: 40mA


* Specification : hc06.pdf





4. pin out


여러 연결 방법이 있을 수 있으나,

우선 가장 간단한 arduino nano 를 통해서 PC 와 통신을 시도해 봅니다.

Pin out 정보 입니다.


 HC-06 | Arduino Nano
-----------------------
  RXD  |      D2
  TXD  |      D3
  GND  |      GND
  VCC  |      3.3V
-----------------------



아두이노에서 받는 3.3v 전원은 조금 약한 감이 있고, 5v 를 받자니 arduino nano 가 버거울 것 같아,

외부 전원을 사용하면 안정적으로 3.3v 인가 가능할 것 같습니다.


실제로 arduino nano 의 3.3v 에 연결하면, 되었다 안되었다 불안한 동작을 보여 줍니다.





5. layout


연결 diagram 입니다.



실제로 아래와 같이 연결했습니다.



삽질한 부분은 arduino nano 와 추가 전원의 ground 는 서로 연결해줘야 하는 것이였습니다.

그렇지 않으면, 정상적으로 통신이 되지 않습니다.

Ground 는 꼭 서로 맟춰 줘야 합니다.





6. sketch


아래는 arduino nano 를 PC 와 연결 할 경우에 사용한 소스 입니다.


#include "SoftwareSerial.h"
 
#define HC06_RXD 2
#define HC06_TXD 3
SoftwareSerial bluetooth(HC06_RXD, HC06_TXD);
 
void setup(){
  Serial.begin(9600);
  bluetooth.begin(9600);
}
 
void loop(){
  if (bluetooth.available()) {
    Serial.write(bluetooth.read());
  }
  if (Serial.available()) {
    bluetooth.write(Serial.read());
  }
}





7. AT commands


HC-06 과 연결되면 AT 명령어를 통해서 상태 확인이 가능합니다. 



Arduino IDE > Tools > Serial Monitor 를 띄우고 위의 AT 명령어들을 쳐 봅니다.



통신 속도 = baud rate 는 9600 으로 해야 합니다.

HC-06 은 공장 출하 설정이 9600 bps 로 되어 있습니다.


Bluetooth 이름은 "HC-06" 이구요, ROLE 은 0, 즉 SLAVE 로 되어 있습니다.


* AT+ROLE: See role of bt module(1=master/0=slave)



Password 는 기본 "1234" 로 되어 있습니다.


통신 속도 UART 는 9600 으로 되어 있네요.

바꾸고 싶을 경우는 아래와 같이 설정하면 됩니다.


* 1 set to 1200bps

* 2 set to 2400bps 

* 3 set to 4800bps 

* 4 set to 9600bps (Default) 

* 5 set to 19200bps 

* 6 set to 38400bps 

* 7 set to 57600bps 

* 8 set to 115200bps

  ex) AT+BAUD4 will set the baud rate to 9600



다른 명령어도 다 쳐 봤습니다.





8. Windows 10 과 연결해 보기


Windows 10 에서 블루투스 장치로 연결해 봅니다.



HC-06 을 연결하면 비번을 물어봅니다.



블루투스다 보니 잘 연결됩니다.



장치관리자에서 연결된 HC-06 의 주소를 확인해 보면, 가지고 있는 HC-06 의 address 인 것을 알 수 있습니다.

동일한 장치임을 확인 할 수 있는 부분이죠.



COM 포트를 확인해 보면, 송신 port 가 COM8 임을 알 수 있네요.



시리얼 포트 리스트에도 떠 있습니다.



putty 를 이용하여 COM8 에 연결합니다.



오호라. putty 에서 타이핑 한 것은 보이지 않지만, 글씨를 타이핑 후,

"Ctrl + M, J" 를 치면 arduino IDE 의 Serial Monitor 에서 송신된 단어를 확인할 수 있습니다.



반대로, Serial Monitor 에서 글씨를 치고 Send 를 누르면, putty 화면에 나타나는 것을 확인 할 수 있어요.






9. USB UART CP2102


Serial 연결은, USB Serial 장치인 CP2102 를 통해서도 연결해 봅니다.



RXD 는 저항을 달아서 보호해 주면서, 그림과 같이 연결해 줍니다.


 HC-06 | CP2102
----------------
  RXD  |  TXD
  TXD  |  RXD
  GND  |  GND
----------------

실제 연결은 다음과 같습니다.



역시 putty 를 이용해서 확인해 봅니다.



모든 AT commands 가 잘 먹힙니다. 정상적으로 통신이 가능하네요.





FIN


HC-06 / HC-05 은 해볼 것이 여러가지 있는것 같습니다.

일단 오늘은 HC-06 의 여러가지 연결법과 AT commands 를 사용해 봤습니다.


다음은 HC-05  HC-06 을 사용하여 Master / Slave 연결 등을 활용해 볼께요.




Update - 20210124


사진 정리를 하다, 예전 경주에 놀러갔을 때, 3D 놀이공간 건물 한켠에 전자 공방에서 찍은 사진을 발견.

HC-06 / HC-05 는 bluetooth 에 있어서 널리 사용되는 모듈임을 새삼 다시 알게 되었네요.



And

Hardware | ESP-01 or ESP8266 사용기 - 1

|

1. 시작


아두이노에 연결해서 사용할 수 있는 저가의 Wi-Fi 모듈로는,

유명한 Espressif Systems 사의 ESP8266 와, Ai-Thinker 사의 ESP-01 모듈이 있습니다.


다른 여타 sensor 나 module 처럼 금방 사용할 수 있겠지 하고 덤볐다가, 지옥이 열렸습니다.


* ESP8266

https://en.wikipedia.org/wiki/ESP8266



저가이면서 Wi-Fi 구성이 된다니, 신기할 따름입니다.

바로 구매하여 확인해 봅니다.





2. 구매


AliExpress 에서 쉽게 검색이 됩니다.

외형이 살짝 다른 두 종류가 있어서 두가지 모두 구입해 봅니다.


한개는 8Mb flash memory 라고 하는군요.


* ESP-01, ESP8266,WIFI module 8Mb flash memory

https://www.aliexpress.com/item/WIFI-module-ESP-01-ESP8266-8Mb-flash-memory/32733744011.html





* Upgraded version ESP-01 ESP8266 serial WIFI wireless module wireless transceiver ESP01 ESP8266-01

- https://www.aliexpress.com/item/Free-shipping-ESP8266-serial-WIFI-wireless-module-wireless-transceiver/32341788594.html







3. 외형


모양은 이렇게 생겼습니다.



제조사는 다르지만 기본 chip 및 구성은 거의 동일합니다.



위의 그림에서 8Mbit Flash 라는 제품이 밑에 보이는 것인데,

memory chip 두께가 살짝 더 두꺼워 보입니다.



평범한 뒷모습.





4. Pin 배열


Pin out 이 2열로 되어 있어서, 빵판에서 그냥 꼽으면 short 가 발생합니다.

점퍼선으로 연결해도 되지만 깔끔하지 못할 뿐더러 연결시 자꾸 헷갈리기도 합니다.


Wi-Fi 모듈 보드 한쪽이 안테나를 형성하고 있어서,

이렇게 한쪽으로 모두 pin 을 모아야 하는 것은 이해가 갑니다만 빵판에서는 최악입니다.

꽤나 불편합니다.



AliExpress 에서 우연하게 breadboard 에서 편하게 사용할 수 있도록 해주는 adapter 를 발견하였습니다.


* 2PCS For ESP-01 Esp8266 ESP-01S Model Of The ESP8266 Serial Breadboard Adapter To WiFi Transceiver Module Breakout UART Module

https://www.aliexpress.com/item/Breadboard-Adapter-for-ESP8266-ESP-01-ESP-01S-Wifi-Transceiver-Module-Breakout/32775467213.html



아래는 실재 사용한 사진입니다.

수직을 수평으로 피면서 양쪽으로 pin 들을 분리해주는 



이 adapter 를 사용하면, 이쁘게 양쪽으로 pin 들을 구분해 줍니다.

여러분들도 꼭 구입해 보아요.





5. 먼저 알고 있어야 할 것들 - BAUD RATE


ESP8266 은 쉽게 접근할 수 있는 모듈이 아닙니다.

값싸고 성능이 괜찮은 대신, 문제 없이 구동시키려면 몇 가지 조건이 충족되어야 합니다.


이런 배경지식 없이 덥볐다가 시행착오에 꽤 많은 시간을 쏟아 부어야 했습니다.


거의 모든 ESP8266 모듈들은 공장 출하시 UART serial IO 속도가 115200 으로 정해져 있습니다.

Arduino Mega 와 같이 HW Serial 이 두개면 문제가 없습니다.


단, Arduino Uno/Nano 의 경우, 하나밖에 없는 HW Serial 을 USB 연결용으로 사용해 버리므로 문제가 됩니다.

결국, Arduino Uno/Nano 는 ESP8266 와 SoftwareSerial 로 연결되어야 하나,

SoftwareSerial 은 115200 처럼 높은 baud rate 를 지원하지 않습니다.


그래서 연결하려는 arduino 가 Uno/Nano 라면, BAUD RATE 를 변경해 줄 필요가 있습니다.

다음은 AT 명령어를 이용하여 통신 속도를 변경하는 방법 입니다.


AT+UART_DEF= baudrate , databits , stopbits , parity , flow control



보통 9600 으로 설정시 다음과 같은 명령어를 사용합니다.


AT+UART_DEF=9600,8,1,0,0


여기서 주의할 점은, ESP8266 에 구워진 AT 명령어 firmware 버전에 따라 사용하면 안되는 명령어들이 있습니다.

"AT+CIOBAUD=9600" 나 "AT+IPR=9600" 는 일시적으로만 동작되거나 ESP8266 을 벽돌로 만들어 버릴 수도 있습니다.


그러므로, 항상 최신버전의 AT firmware 를 먼저 굽고 사용해야 합니다.

firmware upgrade 에 대해서는 아래에서 자세하게 다룹니다.





6. 먼저 알고 있어야 할 것들 - 충분한 전류


ESP8266 모듈은 전력을 많이 소비합니다. 250mA 정도는 사용한다고 하네요.


ESP8266 구동에 필요한 3.3V 를 지원하기는 하지만,

200mA 이상 나오지 않는 Nano 의 3.3V 포트에 연결하면 정상적으로 동작하지 않습니다.


전류가 부족해서 나타나는 증상은, LED indicator 가 정상적으로 점멸하지 않다거나,

(아래 사진은 추가 전원을 이용하여 정상적으로 동작하는 모습)



AT 명령어에 대한 response 가 중구난방입니다.



전력을 충분히 공급하는 회로로는 3가지가 있습니다.



하나. arduino + level shifter



Uno 5V 포트는 3.3V 포트에 비해 더 많은 전류를 지원해 주지만,

거의 300mA 에 육박하는 전류를 커버하기 위해서는 외부 전원장치가 필요하므로, 이 방법은 시도해 보지 않았습니다.



. 외부 전력 공급장치


아래 보이는 것처럼 외부 전력 공급장치를 사용하는 것입니다.

예전 빵판 구입시 딸려 온 것을 사용해 봤습니다.


* Hardware | MB102 Breadboard Power Supply Module 를 사용해 보자

http://chocoball.tistory.com/entry/Hardware-MB102-Breadboard-Power-Supply-Module




셋. FTDI USB 모듈이나 그 호환 모듈


FTDI 나 CP2102 를 사용하면, 중간에 arduino 와 연결할 필요 없이 PC 와 직접 연결이 가능하며,

모듈 자체적으로 3.3V 및 충분한 전류가 공급됩니다.



저 개인적으로는 FTDI 모듈보다 CP2102 가 더 안정적인 동작을 보이는것 같습니다.


참고로 FTDI 일 경우, 장치 관리자에서 단순히 "USB Serial Port" 로 보여서 port 번호를 알 수 없습니다.

(Arduino IDE 를 띄우면 port 정보가 나오기는 함)



이는 Driver install 시에 보면, Driver 2개가 서로 연동 하면서 변경되는 port 정보를 알 필요 없이 만들어주기 위한 방법으로 보입니다만,

저에겐 오히려 귀찮은 방식입니다.



반면 CP2102 일 경우, 포트번호가 표시되므로, putty 를 이용하여 serial 접속시 포트번호를 지정할 수 있습니다.



앞으로 ESP8266 에 관련된 확인은 CP2102 를 가지고 진행하겠습니다.





7. 먼저 알고 있어야 할 것들 - 최신 firmware


AliExpress 를 통해서 구매한 firmware 들은 2015년 이전 버전을 그대로 적용해서 출하하고 있습니다.



Firmware 버전이 너무 낮으면, 대응되는 명령어도 적을 뿐더러 뭔가 많이 불안한 반응을 보입니다.

가능하면 최신 버전으로 flash 해줘야 마음이 편합니다.



Ai-Thinker 사에서 최신 firmware 라고 올라와 있는 것을 간단하게 flash 해서 update 한 결과 입니다.

여기까지 오는데 8개월 걸렸네요.


그렇습니다.

결국 이 ESP8266 을 잘 쓰려면, firmware flash 를 잘 해놓는게 가장 기본이 됩니다.

그러기 위해서는 충분한 전류를 공급하는 전원도 구비해야 하는 것 이구요.





8. 먼저 알고 있어야 할 것들 - flash 파일


Flash 파일은 몇가지 종류와 버전이 존재합니다.

Espressif Systems 사에서 공개한 일반적인 버전의 flash file 과, Ai-Thinker 사가 공개한 flash file 이 있습니다.


오늘 flashing 하려는 것은 Ai-Thinker 사의 Wi-Fi 모듈이므로, 해당 모듈용 최신 파일을 준비합니다.


* ESP8266 最新SDK发布

http://wiki.ai-thinker.com/esp8266/sdk

ai-thinker_esp8266_dout_aicloud_v0.0.0.6_20170517.7z


압축을 풀면 몇가지 버전이 나오는데, 저는 8Mbit 인것 같아서, 작은 사이즈의 8Mbit 을 사용합니다.



또한 flashing 할 때, flash file 별로 메모리상의 주소를 지정해 줘야 합니다.

다행히 Ai-Thinker 사는 한 뭉탱이로 flash file 을 만들어 놔서, 주소가 메모리 첫번째 부터 쓰게끔 "0x00000" 을 지정하면 됩니다.



다른 버전과 좀더 복잡한 내용은 다음 post 에서 다루도록 하겠습니다.

(내용이 너무 넘처남...)





9. 먼저 알고 있어야 할 것들 - flash tool


Firmware upgrade 를 위한 flash tool 로는 몇가지가 있지만,

저는 "Espressif Systems" 사에서 공개하고 있는 "FLASH_DOWNLOAD_TOOLS" 가 사용하기 편했습니다.


* ESP8266EX Resources


* FLASH_DOWNLOAD_TOOLS V3.6.4

flash_download_tools_v3.6.4_0.rar


* FLASH_DOWNLOAD_TOOLS V2.4

FLASH_DOWNLOAD_TOOLS_v2.4_150924.7z


V3.6.4 에서는 baud rate 가 기본 115200 이상만 지원합니다.

만일 arduino 와 연결을 위해 9600 으로 낮추게 설정 했을 경우에는 firmware 를 upgrage 하기 위해 AT+UART_DEF 를 사용해야 하나,

혹시 그 firmware version 이 낮아서 이 command 를 못 알아먹을 경우에는 방법이 없습니다.


그럴 때에는 version 이 낮아서 조금 찜찜하기는 하나, 9600 을 지원하는 V2.4 를 사용하면 됩니다.


이제 "어떻게" 잘 firmware flash 를 하는지를 알아봐야겠습니다.






10. Firmware flashing 회로


Flashing 을 위한 회로는 몇가지가 있지만, 저는 아래 글을 참고하였습니다.


* Update the Firmware in Your ESP8266 Wi-Fi Module

https://www.allaboutcircuits.com/projects/update-the-firmware-in-your-esp8266-wi-fi-module/



CH_PD 핀에 전원 인가 시 필히 저항을 달았으며,

RST 에 reset switch 와 GPIO0 에 flash 용 swtich 를 달았습니다.



똑딱이 스위치를 이 회로를 구성하기 위해서 구입했더랬습니다!!!


* Hardware | 스위치 부품 구매하기

http://chocoball.tistory.com/entry/Hardware-buying-switch-components


스위치의 사용법은 다음과 같습니다.


1. RST 의 스위치를 누른다.

2. FLASH 의 스위치를 누른다.

3. RST 의 스위치에서 손을 뗀다.

4. FLASH 의 스위치에서 손을 뗀다.

5. Flash program 에서 "시작" 을 누른다.


안정적으로 전원이 공급되므로 LED 가 정상으로 점등, 점멸 합니다.





11. Firmware flashing


굳이 V2.4 을 이용하여 flash 하였습니다.



위에서 열거한 방법을 반복해 보자면, 아래처럼 진행하면 됩니다.


1. RST 의 스위치를 누른다.
2. FLASH 의 스위치를 누른다.
3. RST 의 스위치에서 손을 뗀다.
4. FLASH 의 스위치에서 손을 뗀다.
5. Flash program 에서 "시작" 을 누른다.


여기까지 오는데 8개월이 걸렸습니다.

눈물좀 훔치겠습니다... ㅠ.ㅠ



정상적으로 진행되는 과정의 스샷 입니다. 5% 진행되었을 때 캡춰했네요.


아래는 flash start 누른 후의 화면들을 캡춰 했습니다.

여러가지 확인하는 과정들이 있네요.



동영상으로 떠 봤습니다.

지금 다시 봐도 감격스럽네요.







12. ESP8266 에 console 로 접속하기


PC 에서 console 접속하려면 terminal 어플이 필요합니다.

여기서는 open source 이면서 사용하기 편한 putty 를 이용했습니다.


* Download PuTTY: latest release (0.70)

https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html


이제 문제없이 접속이 되니, putty 를 통해서 serial port 로 연결합니다.



AT 를 치고, Ctrl + M, J 하면 타이핑한 내용이 ESP8266 에 전송되고 그 결과를 보여줍니다.



접속 mode 라던지, 현재 상태, 그리고 집에서 쓰는 Wi-Fi AP 에서 할당받은 IP 를 확인해 봤습니다.

(따로 AT+CWJAP 이라는 command 를 통해서 접속하는 과정이 필요)


위에서 마지막에 나오는 "192.168.123.135" 이 ESP8266 이 할당받은 IP 입니다.

ESP8266 은 내부에 web server 를 탑재하고 있어서 browser 를 통해서도 접속이 가능합니다.


이 외에 여러가지 AT command 들이 있습니다만,

글이 너무너무 길어지기에 오늘은 간단한 결과 들만 올려 봅니다.

(누차 이야기 하지만, 여기까지 오는데 8....)





13. ESP8266 에 web 으로 접속하기


브라우저에서 접속해본 스샷입니다.



몇가지 설정을 web 을 통해서도 수정할 수 있게 되어 있네요.


아래는 web 에서 제공하는 "REBOOT" 버튼을 클릭하고 얻은 결과 입니다.

정상적으로 잘 동작 합니다.



Wi-Fi 연결 정보가 "AT+CWJAP" 이라는 command 로 저장되어 있기 때문에,
REBOOT 후에도 기존 Wi-Fi AP 에 접속 하는군요.





FIN


오랜 시행착오의 시간이 지나갔습니다. (사실 주말 가끔밖에 시간이 안나서...)


ESP8266 은 기능이 다양하고 강력한 대신, 길들여서(?) 사용하기가 여간 까다롭지 않습니다.

배경 지식도 많이 필요하구요.


다른 블로그 글들을 보면, 다들 쉽게 하던데 왜 나는 이렇게 어렵게 하는지 모르겠습니다.

이왕 여기까지 온거, 완벽하지는 않지만 납득이 가는 선까지 정리해 보고자 합니다.


다음 포스트에서는 나머지 이야기들을 정리해 보겠습니다.


And
prev | 1 | 2 | next