'ESP8266'에 해당되는 글 20건

  1. 2020.03.23 Hardware | ESP32 스펙 확인해 보기
  2. 2020.03.21 Hardware | ESP32 간단 사용기
  3. 2020.03.15 Software | ThingSpeak 등록하여 IoT 데이터 펼처보기
  4. 2019.08.14 Hardware | ESP-01 or ESP8266 사용기 - 5 2
  5. 2019.08.02 Hardware | 납땜 주변 용품
  6. 2019.07.02 Hardware | ESP-01 or ESP8266 사용기 - 4
  7. 2019.07.01 Hardware | ESP-01 or ESP8266 사용기 - 3
  8. 2018.12.31 Hardware | ESP-01 or ESP8266 사용기 - 2 2
  9. 2018.10.04 Hardware | ESP-01 or ESP8266 사용기 - 1 4
  10. 2017.09.05 Hardware | FTDI Serial Adapter 를 사용해 보자

Hardware | ESP32 스펙 확인해 보기

|

1. ESP32 specification


ESP32 는 ATmega328 베이스의 arduino 보다는 훨씬 많은 성능을 가지고 있습니다.



거기에 더하여 ESP32 자체도 버전이 조금씩 달라, 구입 후 실적용 전에 spec. 을 확인해 보는 것이 중요하다고 합니다.




2. 참조 사이트


내부 스펙에 대해 확인할 수 있는 글을 발견하여 소개된 소스를 실행해 봤습니다.


* mgo-tec電子工作
    - https://www.mgo-tec.com/blog-entry-chip-info-esp-wroom-32-esp32.html


* ESP32-WROOM-32
    - https://ht-deko.com/arduino/esp-wroom-32.html


위에서 참조한 사이트의 소스를 그냥 실행하니, 동작은 하지만 compile 시 warning 이 뜨더군요.



이유는, 글쓴이의 ESP-IDF (ESP8266 의 SDK 와 같은 기능) 가 예전 버전을 사용해서 확인했기 때문이었습니다. (2017년 버전)
EFUSE 정보에 접근하는 방법도 바뀌었으며, 특히 Heap Memory 확인 방법이 바뀌었습니다.


...
 //Internal RAM
uint32_t getHeapSize(); //total heap size
uint32_t getFreeHeap(); //available heap
uint32_t getMinFreeHeap(); //lowest level of free heap since boot
uint32_t getMaxAllocHeap(); //largest block of heap that can be allocated at once

the esp.h file: https://github.com/espressif/arduino-esp32/blob/80c110ece70b179ddfe686e8ee45b6c808779454/cores/esp32/Esp.h
...


다행히 업데이트 된 core library 에서 변경된 API 명령어를 찾을 수 있었습니다.



Warning 부분을 모두 확인 했으니, 하나씩 정리해 봅니다.



3. API


ESP32 는, library / API 를 통해 간단하게 컨트롤 할 수 있게 만들어져 있습니다.

자세한 사양을 확인하는 방법도 API 를 통해 확인할 수 있게 되어 있으므로, API 문서만 참고하면 됩니다.


* Miscellaneous System APIs
    - https://docs.espressif.com/projects/esp-idf/en/v3.2.3/api-reference/system/system.html



API 사이트가 잘 만들어져 있습니다.

화면의 왼쪽 밑부분의 버전을 클릭하면, 원하는 version 의 API 문서로 옮겨갈 수 있게 되어 있습니다.



제가 사용하고 있는 ESP-IDF 버전이 v3.2.3-14 이므로, API 문서에서 v3.2.3 을 선택해서 확인 했습니다.




4. API - 사용한 명령어


위에서 설명한 Heap Memory 부분을 제외한 내용 입니다.

ESP32 의 CPU 를 확인할 수 있는 명령어 입니다.



CPU 의 모델과 revision, 그리고 CPU core 갯수 까지 확인 할 수 있습니다.



사용하고 있는 ESP-IDF 버전 확인 명령어 입니다.



위에서 잠깐 언급한 EFUSE 확인용 커멘드 입니다.

확인해 보면, 기기의 기본 MAC 주서는 WiFi Station MAC 주소와 동일하다는 것을 알 수 있습니다. WiFi Station MAC 정보는 세상에서 유일하니, 기기의 유일성을 WiFi Station MAC 로 정의해도 문제는 없겠네요.



WiFi / WiFi Software AP / Bluetooth / Ethernet 의 MAC 주소는 다음과 같은 API 로 정보를 확인 할 수 있습니다.



최종 사용된 API 들 입니다.


	ESP.getEfuseMac()
	ESP.getChipRevision()
	esp_chip_info_t
	esp_chip_info
	ESP.getCpuFreqMHz()
	ESP.getFlashChipSize()
	ESP.getFlashChipSpeed()
	esp_get_idf_version()
	ESP.getHeapSize()
	ESP.getFreeHeap()
	ESP.getMinFreeHeap()
	ESP.getMaxAllocHeap()
	esp_efuse_mac_get_default()
	esp_read_mac(array, ESP_MAC_WIFI_STA)
	esp_read_mac(array, ESP_MAC_WIFI_SOFTAP)
	esp_read_mac(array, ESP_MAC_BT)
	esp_read_mac(array, ESP_MAC_ETH)




5. sketch


참조한 사이트와 ESP-IDF v3.2.3 용으로 조금 바꾼 소스 입니다.


void setup(void) {
	Serial.begin(115200);
	
	uint64_t chipid;
	chipid=ESP.getEfuseMac(); // The chip ID is essentially its MAC address(length: 6 bytes)
	Serial.printf("ESP32 Chip ID = %04X", (uint16_t)(chipid>>32)); // print High 2 bytes
	Serial.printf("%08X\n", (uint32_t)chipid); // print Low 4bytes
	Serial.println("---------------------------------");
	
	Serial.printf("Chip Revision %d\n", ESP.getChipRevision());
	esp_chip_info_t chip_info;
	esp_chip_info(&chip_info);
	Serial.printf("Number of Core: %d\n", chip_info.cores);
	Serial.printf("CPU Frequency: %d MHz\n", ESP.getCpuFreqMHz());  
	Serial.println();
	
	Serial.printf("Flash Chip Size = %d byte\n", ESP.getFlashChipSize());
	Serial.printf("Flash Frequency = %d Hz\n", ESP.getFlashChipSpeed());
	Serial.println();
	
	Serial.printf("ESP-IDF version = %s\n", esp_get_idf_version());
	Serial.println();
	
	Serial.printf("Total Heap Size = %d\n", ESP.getHeapSize());
	Serial.printf("Free Heap Size = %d\n", ESP.getFreeHeap());
	Serial.printf("Lowest Free Heap Size = %d\n", ESP.getMinFreeHeap());
	Serial.printf("Largest Heap Block = %d\n", ESP.getMaxAllocHeap());
	Serial.println();
	
	uint8_t mac0[6];
	esp_efuse_mac_get_default(mac0);
	Serial.printf("Default Mac Address = %02X:%02X:%02X:%02X:%02X:%02X\r\n", mac0[0], mac0[1], mac0[2], mac0[3], mac0[4], mac0[5]);
	
	uint8_t mac3[6];
	esp_read_mac(mac3, ESP_MAC_WIFI_STA);
	Serial.printf("[Wi-Fi Station] Mac Address = %02X:%02X:%02X:%02X:%02X:%02X\r\n", mac3[0], mac3[1], mac3[2], mac3[3], mac3[4], mac3[5]);
	
	uint8_t mac4[7];
	esp_read_mac(mac4, ESP_MAC_WIFI_SOFTAP);
	Serial.printf("[Wi-Fi SoftAP] Mac Address = %02X:%02X:%02X:%02X:%02X:%02X\r\n", mac4[0], mac4[1], mac4[2], mac4[3], mac4[4], mac4[5]);
	
	uint8_t mac5[6];
	esp_read_mac(mac5, ESP_MAC_BT);
	Serial.printf("[Bluetooth] Mac Address = %02X:%02X:%02X:%02X:%02X:%02X\r\n", mac5[0], mac5[1], mac5[2], mac5[3], mac5[4], mac5[5]);
	
	uint8_t mac6[6];
	esp_read_mac(mac6, ESP_MAC_ETH);
	Serial.printf("[Ethernet] Mac Address = %02X:%02X:%02X:%02X:%02X:%02X\r\n", mac6[0], mac6[1], mac6[2], mac6[3], mac6[4], mac6[5]);
}
 
void loop() {
	
}


결과 입니다.



이정도면, 사용되는 ESP32 가 어떤 상황인지 알 수 있을 것 같습니다.




6. RESET


소스를 ESP32 에 처음 업로드 하면, Serial Monitor 에 정보가 표시되지 않습니다.

이럴 때에는 "RESET" 버튼을 누르면 reboot 되면서 진행이 됩니다.



RESET 버튼을 누르고 reboot 이 되면, 부팅 시퀀스를 볼 수 있습니다.



MCU 가 arduino nano 와 완전 다른 차원이다 보니, 기본 스펙 파악도 중요하네요.



And

Hardware | ESP32 간단 사용기

|

일전에 ESP-01 (ESP8266) 을 가지고 IoT 환경을 꾸며 봤습니다.


* Hardware | CO2 센서인 MH-Z14A 를 활용해 보자
    - https://chocoball.tistory.com/entry/Hardware-CO2-sensor-MH-Z14A


ESP-01 은, WiFi 모듈로는 초기형이고, 그 이후에 업그레이드 된 모듈들이 많이 출시 되었습니다.

그 다음으로 많이 사용하는 WiFi 모듈은 "ESP32" 인 듯 합니다.




1. ESP32


구매합니다.


* ESP32 ESP-32 ESP32S ESP-32S CP2102 Wireless WiFi Bluetooth Development Board Micro USB Dual Core Power Amplifier Filter Module
    - https://www.aliexpress.com/item/32928267626.html


잘 도착 했습니다.





2. 외형


Arduino nano 의 경우, MCU 가 ATmega328 였지만, ESP32 는 MCU + WiFi + Bluetooth + ... 가 chip 하나에 모두 들어간 형태 입니다.



ESP-WROOM-32 라고 적힌 철판 밑에 MCU 가 자리잡고 있을 듯 합니다.



USB interface 는 Silicon Labs 사의 CP2102 이군요. WiFi 접근에 따로 FTDI 같은 어뎁터를 경유할 필요가 없습니다.



뒷면에는 ESP32 DEVKIT V1 이라고 적혀 있네요.




3. MCU


* ESP32

- https://en.wikipedia.org/wiki/ESP32



MCU 의 정식 명칭은 "ESP32-DOWDQ6" 라고 확인이 되었습니다. (Arduino IDE 에서 컴파일 할 때 확인 가능)


MCU 의 logic diagram 입니다. 몇 가지 재미있는 부분들이 보이네요. 센서 내장이라던지... (센서에 환장한 人)



이 chip 의 naming 을 통해서도 spec. 을 알 수 있습니다.



데이터 쉬트 입니다.

esp32_datasheet_en.pdf


간단히 ESP8266 (ESP-01) 과 비교 테이블을 만들어 봤습니다.


|------------------------------------------------------------------------------------|
|                       | ESP8266                     | ESP32                        |
|------------------------------------------------------------------------------------|
| release Year          | 2014                        | 2016                         |
| Processor             | Tensilica L106 32-bit       | Xtensa Dual-core 32-bit LX6  |
|                       | single core micro controller| microprocessor with 600 DMIPS|
| Typical Frequency     | 80 MHz                      | 160 MHz                      |
| Co-processor          | no                          | ULP                          |
| ROM                   | no                          | 448 kB                       |
| SRAM                  | 160kB                       | 520 kB                       |
| RTC RAM               | 768 Bytes                   | 8kB slow + 8kB fast          |
| QSPI flash/SRAM       | up to 1 x 16 MB             | up to 4 x 16 MB              |
| GPIOs                 | 17                          | 36                           |
| Wi-Fi                 | HT20                        | HT40                         |
| Bluetooth             | no                          | Bluetooth 4.2 and BLE        |
| Ethernet              | no                          | 10/100 Mbps                  |
| ADC                   | 10 bit                      | 12 bit                       |
| DAC                   | no                          | 2 x 8 bit                    |
| Touch sensor          | no                          | 10                           |
| Temperature Sensor    | no                          | yes                          |
| Security              | no                          | Secure boot Flash encryption |
|                       |                             | 1024-bit OTP                 |
| Crypto                | no                          | AES, SHA-2, RSA, ECC, RNG    |
| SPI                   | 2                           | 4                            |
| I2C                   | 1 (soft)                    | 2                            |
| I2S                   | 2                           | 2                            |
| UART                  | 2 (1 1/2 actually)          | 3                            |
| ADC                   | 1 (10-bit)                  | 18 (12-bit)                  |
| DAC                   | no                          | 2 (8-bit)                    |
| PWM Pins              | 8 Software                  | 1 Hardware / 16 software     |
| SDMMC                 | no                          | yes                          |
| RMT (remote control)  | no                          | yes                          |
| Temperature sensor    | no                          | yes                          |
| Hall sensor           | no                          | yes                          |
| Low Power Consumption | 20uA                        | 10uA deep sleep              |
| Power supply          | 2.5V to 3.6V                | 2.3V to 3.6V                 |
|------------------------------------------------------------------------------------|


생산 업체가 이야기하는 가장 큰 특장점은 아래 5 가지로 정리할 수 있겠습니다.


- Dual-core 32-bit microprocessor

- 2.4 GHz Wi-Fi and Bluetooth combo chip
- TSMC low power 40nm lithography technology
- Best power performance and RF performance
- Robustness, versatility and reliability


Pin out 정보 입니다. 기존 arduino nano 나 ESP-01 과는 차원이 다른 구성입니다.



이거 하나면 왠만한거 다 할 수 있겠네요.




4. Arduino IDE - 드라이버 설치


코딩을 하고 동작을 시키려면 Arduino IDE 등을 이용해서 프로그램을 업로드 할 수 있습니다. 기존 arduino 와 완전히 동일하죠.

다만, Arduino IDE 의 기본 기기나 라이브러리에 등록되어 있지 않으므로, 새로이 등록시켜주는 작업이 필요합니다.


위에서 잠깐 언급한 대로, USB interface 는 Silicon Labs 의 CP2102 이므로, 해당 드라이버를 설치해 줘야 합니다.

Windows 10 에서는 USB 를 연결하자 마자 알아서 설치해 줍니다.


예전에 Serial Adapter 처음 사용할 때, 이 등록절차를 소개한 적이 있습니다. 아래 글을 참고해 주세요.


* Hardware | FTDI Serial Adapter 를 사용해 보자
    - https://chocoball.tistory.com/entry/Hardware-FTDI-FT232RL-using


드라이버가 정상적으로 설치되면, 아래와 같이 포트가 인식됩니다.





5. Arduino IDE - Board Manager


Arduino IDE 에서 보드를 등록하고, 관련 라이브러리를 설치해야 합니다.
우선 File > Preferences 로 갑니다.


Additional Board Manager URLs 에 ESP32 에 관련한 URL 을 등록 합니다.


https://dl.espressif.com/dl/package_esp32_index.json



그러면, Tools > Board > Boards Manager 에서 관련된 라이브러리를 설치할 수 있게 됩니다.



검색 줄에 esp32 라고 검색하면 esp32 by Espressif Systems 가 뜹니다. 인스톨 해 줍니다.



그러면, Board 선택에서 ESP32 보드가 보이고, 선택할 수 있게 됩니다.



Upload Speed 나 Flash Frequency 등은 나중에 차차 수정하기로 하고, 아까 CP2102 가 할당된 포트를 지정합니다.



이제 준비는 끝났습니다.




6. Blink


Arduino 의 "Hello World" 라고 할 수 있는 Blink 를 실행해 봅니다.


File > Examples > 01.Basics > Blink 소스를 업로드 해 줍니다.


/*
  Blink

  Turns an LED on for one second, then off for one second, repeatedly.

  Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO
  it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to
  the correct LED pin independent of which board is used.
  If you want to know what pin the on-board LED is connected to on your Arduino
  model, check the Technical Specs of your board at:
  https://www.arduino.cc/en/Main/Products

  modified 8 May 2014
  by Scott Fitzgerald
  modified 2 Sep 2016
  by Arturo Guadalupi
  modified 8 Sep 2016
  by Colby Newman

  This example code is in the public domain.

  http://www.arduino.cc/en/Tutorial/Blink
*/

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}


Arduino 기기가 아님에도 불구하고, "LED_BUILTIN" 으로 지정하면, breakout board 상의 LED 를 점등시켜 줍니다.



간단하게 성공해버려 조금 허탈한 감이 있습니다.




7. WiFiScan


MCU 자체적으로 WiFi 까지 커버하는 SoC 인지라, WiFi 도 동작 하는지 확인해 봅시다.
지금까지의 작업으로 라이브러리 및 Examples 소스도 인스톨 되어 있으니, WiFiScan 이라는 소스를 올려 봤습니다.

File > Examples > WiFi > WiFiScan



ESP-01 을 사용할 때에는, AT command 를 사용해서 직접 컨트롤 했지만, ESP32 는 라이브러리 함수만으로 모든게 컨트롤 가능해 보입니다.



소스가 엄청 짧습니다.

컴파일 끝나고 ESP32 에 업로드 할 때, ESP32 기기와 관련된 정보를 뿌려줘서 캡춰해 봤습니다.


동작 주파수가 240MHz 도 가능하고, 외장 Flash 크기가 4MB 군요!


esptool.py v2.6
Serial port COM8
Connecting.....
Chip is ESP32D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
MAC: 24:6f:28:a1:af:8c
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 921600
Changed.
Configuring flash size...
Auto-detected Flash size: 4MB
Compressed 8192 bytes to 47...

Writing at 0x0000e000... (100 %)
Wrote 8192 bytes (47 compressed) at 0x0000e000 in 0.0 seconds (effective 5461.3 kbit/s)...
Hash of data verified.
Compressed 15856 bytes to 10276...

Writing at 0x00001000... (100 %)
Wrote 15856 bytes (10276 compressed) at 0x00001000 in 0.1 seconds (effective 953.7 kbit/s)...
Hash of data verified.
Compressed 623776 bytes to 372912...

Writing at 0x00010000... (4 %)
Writing at 0x00014000... (8 %)
Writing at 0x00018000... (13 %)
Writing at 0x0001c000... (17 %)
Writing at 0x00020000... (21 %)
Writing at 0x00024000... (26 %)
Writing at 0x00028000... (30 %)
Writing at 0x0002c000... (34 %)
Writing at 0x00030000... (39 %)
Writing at 0x00034000... (43 %)
Writing at 0x00038000... (47 %)
Writing at 0x0003c000... (52 %)
Writing at 0x00040000... (56 %)
Writing at 0x00044000... (60 %)
Writing at 0x00048000... (65 %)
Writing at 0x0004c000... (69 %)
Writing at 0x00050000... (73 %)
Writing at 0x00054000... (78 %)
Writing at 0x00058000... (82 %)
Writing at 0x0005c000... (86 %)
Writing at 0x00060000... (91 %)
Writing at 0x00064000... (95 %)
Writing at 0x00068000... (100 %)
Wrote 623776 bytes (372912 compressed) at 0x00010000 in 5.3 seconds (effective 933.3 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 128...

Writing at 0x00008000... (100 %)
Wrote 3072 bytes (128 compressed) at 0x00008000 in 0.0 seconds (effective 2234.2 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...


Serial Monitor 로 확인해 보니, 아래와 같이 주변 access point 들을 보여 줍니다. 음... 넘 쉬운데?!!!





8. 자, 다음...


Dual-core 에 여러 센서까지 복잡하게 갖춘 ESP32 지만, 강력한 라이브러리로 인하여, 쉽게 이용할 수 있다는 것에 놀랐습니다.

또한, WiFi / Bluetooth 가 MCU 에서 지원하니, 따로 모듈을 연결할 필요가 없어, IoT 구현 시, 회로가 간단해 지겠네요.


추가 기능들을 가지고 있으니, 다음 편들에서는 아래 내용들에 대해 확인해 보도록 하겠습니다.


 - Dual-core

 - Sleep Modes
 - OTA Updates
 - OTA Web Updater
 - NTP Server
 - Temp Sensor
 - Touch Sensor
 - Hall Sensor


And

Software | ThingSpeak 등록하여 IoT 데이터 펼처보기

|

Arduino 를 통해 센서값을 확인 할 때, Arduino IDE 의 Serial Monitor 를 사용하게 되면 PC 를 계속 켜놔야 합니다.

PC 를 리부팅 하거나 다른 용도로 사용하게 되면, 측정을 중단해야 하므로 적절한 활용 방법이 아닙니다.




1. ThingSpeak


이런 불편을 없애려면 cloud 시스템에 internet 을 통해 올리면 됩니다.

그렇지만, 이걸 혼자서 하려면 다음과 같은 작업들이 필요합니다.


- 서버 설치

- OS 설치

- Apache 등 HTTP 서버 어플 설치

- DB 설치 및 설정

- API 설정

- 인터넷 설정

- 보안 설정

- 등등


유지 보수까지 생각하면 끝이 없는 작업입니다.

IoT 하나 하려다가 힘 다 빠지겠습니다. 그래서 나온 cloud 형 서비스가 몇 가지 있습니다.


* ThingSpeak for IoT Projects

https://thingspeak.com/





2. ThingSpeak 등록


사이트 가서 등록 고고.



개인 email 이면 됩니다.



비번도 등록하고.



대학 email account 를 가지고 있으면, 대학에서 보유한 Matlab 계정을 자동 연동하여 사용할 수 있습니다.

그렇게 되면, 대학교에서 구매한 Matlab 을 사용하게 되므로, 대학교 구매부서와 확인해 봐야 합니다. (무단 사용이 될 수 있슴)



아직 대학교 email account 도 가지고 있지만, 개인 account 를 사용했습니다.



계정 등록이 끝나면, 최종 verify 메일이 옵니다.



계정 인증 후, 비번 완료하면 끝납니다.





3. MathWorks


ThingSpeak 는 Matlab 을 개발한 MathWorks 에서 제공하는 서비스 입니다.

그래서인지, MathWorks 에서 제공하는 툴이나 Knowledge 를 사용할 수 있습니다.



제가 요츰 필요한 지식은 Arduino > ESP8266 > ThingSpeak 연동 방법도 나와 있습니다.

만, 최신 ESP 모듈을 기준으로 설명되어 있어서, 별 도움은 못 되었네요. 다른 글에서 이 부분은 집중적으로 다뤄 보도록 하겠습니다.



무료 사용자는, 하루 8,219 개를 사용할 수 있습니다.

하루 24시간 동안, 1초마다 값을 보내게 되면, "86,400" 개 이므로, 이의 1/10 보다 조금 더 적게 값을 보내야 합니다.

대략 15초에 1번 정도로 값을 보내면, 한 개의 sensor 값 읽어 들이는 것에 활용할 수 있겠네요.





4. API Key


HTTP GET/POST 를 이용하여 값을 보내는 RESTful API 를 사용할 때, API Key 가 할당 됩니다.



API Key 사용법은, 위의 스샷 오른쪽 밑에 보이듯이, "api_key=" 로 시작하는 GET URL 의 string 으로 넣어 사용할 수 있습니다.



실제로 값을 API 를 통해 cloud 에 올릴 경우는 아래와 같이 API 키를 넣어주면 됩니다.



전체 HTTP URL 로 만들면 다음과 같이 됩니다.


Write a Channel Feed
https://api.thingspeak.com/update?api_key=[Write_Key]&field1=[value]




5. Channels


계정과 API Key 가 있다 하더라도, 나만의 장소를 만들어야 합니다. 이게 Channels 이 됩니다.



이번에 CO2 취집 센서인 MH-Z14A 를 가지고 CO2 값을 취합하고 싶으니, 아래와 같은 채널을 만들었습니다.

Field1 은 CO2 값이 넣어지도록 하였습니다.



저의 Home Environment 채널이 만들어 졌습니다.

나중에 CO2 뿐만 아니라, 다른 기체 값들도 추가로 입력 받을 수도 있겠네요.





6. HTTP headers


Arduino / ESP-01 을 통해서 값을 입력받은게 아니지만, 브라우저를 사용하여 직접 REST API 를 통해서 값을 전송해 봤습니다.


리턴값으로 "1" 이 표시됩니다. 값들이 쌓여 가면, 이 숫자 카운트가 올라갑니다.

먹고사는 직업이 이쪽인지라, 직업병 발휘해 봅니다.


HTTP Request / Response 는 다음과 같습니다.



아래는 HTTP Request 만 뽑아 봤습니다.

브라우저가 아니고 command line 으로 ESP-01 을 컨트롤 할 때, 필요할 듯 하여 여기에 기록해 봅니다.


Host: api.thingspeak.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Cookie: s_fid=18DA4B3665F95BB2-21E82C5CDD94C74E; _ga=GA1.2.1025526633.1578383783; s_cc=true
Upgrade-Insecure-Requests: 1


아래는 HTTP Response 입니다.


HTTP/2 200 OK
date: Mon, 20 Jan 2020 05:03:40 GMT
content-type: text/plain; charset=utf-8
content-length: 1
status: 200 OK
x-frame-options: SAMEORIGIN
access-control-allow-origin: *
access-control-allow-methods: GET, POST, PUT, OPTIONS, DELETE, PATCH
access-control-allow-headers: origin, content-type, X-Requested-With
access-control-max-age: 1800
etag: W/"4e07408562bedb8b60ce05c1decfe3ad"
cache-control: max-age=0, private, must-revalidate
x-request-id: e0fa0bd9-fc3a-4e9a-a09e-efb6326dcd6c
x-runtime: 0.022047
x-powered-by: Phusion Passenger 4.0.57
server: nginx/1.9.3 + Phusion Passenger 4.0.57
X-Firefox-Spdy: h2




7. Read a Channel Feed


API Key 를 통하여 Channel 값을 읽을 경우는 다음과 같이 API 를 날리면 됩니다. 아래는 JSON 방식의 값 추출 입니다.


Read a Channel Feed
https://api.thingspeak.com/channels/[Channel_ID]/feeds.json?api_key=[Read_Key]&results=2
{"channel":{"id":Channel_ID,"name":"Home Environment","description":"gathering values from IoT sensors","latitude":"0.0","longitude":"0.0","field1":"CO2","created_at":"2020-01-10T09:36:21Z","updated_at":"2020-01-10T09:37:06Z","last_entry_id":3},"feeds":[{"created_at":"2020-01-20T04:53:28Z","entry_id":2,"field1":"40"},{"created_at":"2020-01-20T05:03:40Z","entry_id":3,"field1":"39"}]}


인터넷 브라우저를 사용하면 아래처럼 정렬된 값을 확인할 수 있습니다.



값이 쌓여 가면서 그래프를 그려 줍니다.


참고로, 이번에 MH-Z14A 를 이용해서 측정했던 결과 입니다.

PC 없이도 값들을 바로바로 올릴 수 있고, 그래프 조정도 할 수 있어, 왜 이제 했나 싶을 정도 입니다.


* Hardware | CO2 센서인 MH-Z14A 를 활용해 보자
    - https://chocoball.tistory.com/entry/Hardware-CO2-sensor-MH-Z14A





8. 그 외


잘못된 값들이 전체 그래프의 통일성을 외곡시키므로 조금 다듬을 경우는 Timescale 값을 조정하면 됩니다.
10 으로 하면, 10개 값을 하나로 보여주어, 이빨 빠지는 구간 - 잘못된 값 - 들을 날려버릴 수 있습니다.


과거 값들이 불편할 경우는, Channels > Channel Settings > Clear Channel 을 이용하여 지울 수 있습니다.





9. FIN


이젠 PC 를 항상 켜놔야 하는 것으로 부터 해방입니다!




10. Update - 20200328


ThingSpeak 에서 그래프가 보이는 화면에서 data 를 export 하면, 거의 하루치 밖에 받을 수 없습니다.




측정된 값 전체를 받기 위해서는, My Channels > Data Import / Export > Export Download 에서 CVS 로 받을 수 있습니다.




EXCEL 로 그린 위의 그래프들은 이 메뉴에서 다운로드 받은 CVS 를 가지고 만들었습니다.




And

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 | 납땜 주변 용품

|

납땜 취미를 가지다 보면, 인두기부터 시작하여 납땜을 잘 되게 해주는 flux, 인두팁 관리용 제품 등, 다양한 용품이 필요합니다.

향후 작은 SMD 소자를 잘 납땜하기 위해서도 꼭 필요한 물건들이 되겠습니다.


관련된 제품 중에는 일본산이 많습니다. 마침 출장간 김에 부품을 준비해 봅니다.


참고로, 본 일본 제품 구매는, 지금의 무역분쟁이 발생하기 전, 올 5월달에 구매했던 내용입니다.





1. 소포왔다~!


필요한 물품들을 AliExpress 에서 구매해도 되나, SMD를 잘 납땜하기 위해서는 좋은 품질의 용품이 필요하니,

마침 일본 출장 때, Amazon Japan 에서 구매하여 호텔로 배달시켰습니다.



출장 중, 호텔 프론트에서 받는 소포란... 뭔가 업무에 중요한 물건이라도 된 듯 표정으로 받아 들고 옵니다.



박스 하나와 서류 봉투같은 것, 두 개 왔습니다.

업무를 마치고 홀가분한 마음으로, 에어컨 빵빵한 호텔방에서 홀라당 빤쓰 차림으로 기분 좋게 하나씩 뜯어 봅니다.



아... 이게 얼마만에 주문하여 받아보는 물품이던가.

작년 말에 필요했었지만, 저번 출장 때는 생각을 못해 구매를 놓쳐버려, 이번 출장 오자마자 바로 주문하고 받았습니다.



물건 부피는 다 합쳐도 크지 않지만, 배송 상 쉽게 배송할 수 있도록 적어도 이 사이즈의 박스로 배송한다고 어디선가 들었습니다.

중국 AliExpress 는 거의 편지봉투 수준인데...






2. Tip Refresher


정확한 명칭이 이건지 모르겠지만, 인투팁 피막에 엉겨붙은 불순물들을 날려주는 용품입니다.


* goot チップリフレッサー BS-2

https://www.amazon.co.jp/gp/product/B0016VDHIE/



이놈은 낱개 주문이 안되고, 한꺼번에 7개를 주문해야 배송해준다고 해서, 평생 쓸꺼 한꺼번에 샀습니다.



Before / After 모습을 그림으로 보여주고 있구요, 인두팁을 300~360도로 가열한 다음 사용하라고 되어 있습니다.



하나 까서 열어 봅니다.

손끝으로 만져보면, 무슨 금속 가루와 화학약품을 풀로 이겨서 굳혀 놓은것 같은 느낌입니다.



산화되어서 도저히 납땜이 되지 않는 저의 인투팁 등장.



달군 다음 살짝 fresher 에 뭍혀 봤습니다.



지지직~ 흠... 뭔가 변화가 별로 없네요?



아차차, 온도를 450 도로 맞춰 놨었네요.

310 도 정도로 낮춘 다음 다시 fresher 에 지져 봅니다.



오오오옷!

팁의 윤기가 돌아 왔어요~! 신기.


까슬까슬한 페이스트같은 게 녹으면서, 피막을 벗겨 내고 (사진상 페이스트에 뭍어있는 검붉은 색 부분)

혼합된 금속 가루들이 코팅되는 느낌입니다.


처음 구매했을 때의 때깔까지는 복원해 주지는 못하지만, 그럭저럭 사용할 만 하게 되었습니다.

효과 있네요.





4. Tip Recovery


이 제품도 인두 tip 을 재활시켜주는 물건입니다.


* goot チップリカバリー ST-45

https://www.amazon.co.jp/gp/product/B01LWO95KZ/



Tip Refresher 와 비교하여 뭐가 좋은지 몰라서 두개 모두 구매해 본 것입니다.



이놈은 Tip Refresher 와는 반대로, tip 을 완전히 식힌 다음, 이 고무같은 것에 문지르라고 합니다.



고무긴 고무인데, 금속과 혼합되어 있어서, 팁을 문지르면 팁 표면이 갈리는 느낌이 납니다.



살살살 문지르면, 지우개 똥 만들어 지듯, 문지른 주위로 똥이 만들어지고 우수수 떨어집니다.



느낌 상 이게 더 효과가 좋아 보입니다. 깔끔하게 갈렸어요.



별로 많이 문지르지도 않았는데, 저렇게 시커멓게 되는군요.



갈린 부분을 코팅하고자 Tip Refresher 도 해줬습니다.

이 두 물품은 같이 쓰는게 맞는 듯 하네요. 갈아서 벗겨주고, 코팅해주고.





5. Flux


이 제품은 납땜을 이쁘게 해주는 flux 입니다.

SMD 납땜에는 필수라고 할 수 있겠습니다.


이걸 납땜할 자리에 도포하고 납과 함께 지지면, 신기하게도 부품 다리와 PCB 패턴에 납이 잘 모입니다.


* goot プリント基板フラックス BS-75B

https://www.amazon.co.jp/gp/product/B004ANR7KY/



이놈만 병으로 되어 있어서, 뽁뽁이 봉투로 배달된 놈 입니다.



솔직히 이 가격에 이 용량은 좀 아닌것 같아요.



PCB 에 알아서 적정량 잘 발라주고, 잘 납땜하라고 설명하고 있습니다.



금싸라기 같은 용액이라, 일단 약통에 1/3 만 부어서 사용해 보도록 합니다.



주사기 같이, 끝이 아주 미세하게 뚤려 있서, 방울로 액체를 떨어트릴 수 있는 용기가 있으면 좋겠으나,

그런건 없으므로, 버릴 약통을 우선 사용했습니다.



가장 하고 싶었던, 가드다란 다리가 많은 chip 을 PCB에 납땜해 보기로 합니다.



이번에 해보려는 arduino nano DIY 기판 입니다.

이 액체 flux 가 도착하기 전까지 시작하지 못했던 arudino DIY 입니다.


* Hardware | Arduino 를 DIY 해보자 - 1

https://chocoball.tistory.com/entry/Hardware-Arduino-DIY-itself-1


살짝 도포한다는게, 약병 구명이 너무 커서 한 5방울치 떨어진 것 같아요.



오호호~!!! 기대 이상으로 잘 되었습니다.

신기하게 납들이 금속으로 가서 붙네요. 저런 가느다란 다리임에도 불구하고 전혀 힘들지 않았습니다.


또한, 이 액체는 송진이 원료중에 하나라서, 솔방울 냄새가 나요.


그치만 이 용액만으로는 양이 부족할 듯 하여 알아보던 중,

미국 Amazon 에서는 1리터 짜리가 17 USD 하는 액체 flux 가 좋다고 너tube 에서 봐서 구매했습니다.


사실은 미국에서 출장오시는 분에게 부탁해서... 이걸 가지고 먼저 일정에 있던 중국 들렸다가 서울 오셨슴...

(중국 세관에서 해명하느라 혼났다 함)


* MG Chemicals 836LFNC Lead Free NO Clean Flux, 1 Litre, Bottle

https://www.amazon.com/gp/product/B01MYEE84K/



역시 통큰 나라답게 1리터다! (20ml 가 말이 되냐!)



크고 아름답습니다.



Product of U.S.A. 임... 이라고 당당하게 써 있네요. 따봉.

가격차가 3배 이지만, 용량 차이는 50배나 차이나는 goot (20ml) 놈과 비교해 보면...

효과는 별 차이가 없습니다.





6. Solder Wick


이 제품은 납을 빨아주는 솔더윅 입니다.

이미 알리에서 중국 제품을 구매했지만, 완전 효과 없슴.

원래 내가 기술이 없어서 안되는 것인지 제품이 이상한 것인지 확인하고 싶었습니다.


* goot はんだ吸取り線 CP-3015

https://www.amazon.co.jp/gp/product/B001PR1KPQ/



내가 기술이 없어서 납이 제대로 빨리지 않은 것이면, 많이 사두면 쓰레기만 늘어가는 것이니, 한 개만 구매해 봅니다.



납 위에서 인두로 지지라고 합니다.

중국제로도 그렇게 했는데 말이지...



길이는 1.5m... 미국의 기상을 본받자.



쥐똥만한 길이로 감겨져 있습니다.



ESP8266 의 Flash ROM chip 을 대용량으로 교체할 때, 사용해 봤습니다.

액체 flux 뿌리고 지져 댔습니다.



야이C... 잘됩니다.

깔끔하게 납이 흡수되어 기판에 붙어 있던 Flash ROM chip 이 분리 되네요.


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

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


이로써 알리발 중국 제품은 전혀 효과 없음이 증명되었습니다.





7. Iospropyl Alchohol


기판 세척제로는 위험한 TCE, 친환경 세척제 등이 있다고 합니다만,

소독약으로 쓰이는 이소프로폴 알콜 99% 도 기판 세정에 딱이라고 하더군요. 인체에 해도 거의 없고.


그치만 99% Isopropyl Alchohol 을 구하긴 힘듭니다.

그래서 대체제로 소독용 에탄올을 구입했습니다. 1000원.


농도를 보니 83% 네요.

깔끔하게 세척해주지는 못하지만, 그나마 기판에서 불순물을 벗겨내서 날려 줍니다.



Flux 를 사용하면 아무래도 찌꺼기가 남습니다.

마무리는 에탄올 들이 붙고, 칫솔로 쓱싹쓱싹 하면 나름 깨끗해 집니다.







FIN


납땜 스테이션도 교체하고 싶고, 열풍기도 필요하고, Bench Power Supply 도 필요하고...

일단, 최소한 SMD 부품을 납땜 할 수 있는 용품은 준비가 되었네요.


이제 arduino nano DIY 를 시작해 보려 합니다.


And

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

|

이 포스트와 관련된 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


ESP8266 은 지속적으로 개선된 버전을 firmware 업데이트를 통하여 적용하고 있습니다.

그러나, 요즘 나오는 새로운 firmware 는 16Mbit = 2MByte 이상 되는 용량이 있어야 update 가 가능합니다.

그 만큼 다양한 명령어와 프로그램이 추가되는 것이겠죠.





1. Flash Size


기존에 가지고 있는 ESP8266 의 메인칩 옆을 확인해 보면, 메인칩과 비슷한 크기의 Flash chip 이 붙어 있습니다.



제품 코드를 보니 Berg Miro 제품의 Flash memory 네요.


* BergMicro

https://www.elnec.com/en/device/Berg+Micro/BG25Q80A+(ISP)/



25Q80SCP datasheet 는 못 찾았지만, 타 제조사 들과 비슷한 제품 코드를 사용하고 있으며,

그 사양서에 따르면 8M-bit/1M-byte 라고 되어 있네요. 즉, 위 부품도 1MiB 실장으로 보입니다.





2. Upgrade Chip


우선 업그레이드 할 Flash Chip 용량의 크기를 정해 봅시다.

32Mbit = 4MByte 정도면 충분할 것 같네요.


AliExpress 를 검색하던 중, 32M-bit/4M-byte 버전이 아래와 같이 두가지가 있습니다.

그 차이를 정확히 알지 못하니 일단 두개 모두 구입해 봅니다.


* 5PCS W25Q32BVSSIG SOP-8 W25Q32 SOP 25Q32BVSIG SMD W25Q32BVSIG 25Q32

https://www.aliexpress.com/item/10PCS-W25Q32BVSSIG-SOP-8-W25Q32-SOP-25Q32BVSIG-SMD-W25Q32BVSIG-25Q32-free-shipping/32727772232.html



* 5PCS W25Q32FVSSIG SOP8 25Q32 SOP 25Q32FVSIG SOP-8 W25Q32FVSIG SMD W25Q32 new and original IC

https://www.aliexpress.com/item/5PCS-W25Q32FVSSIG-SOP8-25Q32-SOP-25Q32FVSIG-SMD-new-and-original-IC-free-shipping/32541803919.html






3. W25Q32


두 가지 chip 의 차이를 확인해 봅시다. 일단 datasheet 를 첨부해요.


* W25Q32BV

w25q32bv_revi_100413.pdf


* W25Q32FV

w25q32fv_revi_10202015.pdf


사양서를 다 읽어보지는 못했지만, FEATURE 섹션만 비교해 보면,

SPI clockdata transfer rate 에서 F 버전이 더 성능이 좋습니다.

그래서 조금 더 비쌌던것 같습니다.


* W25Q32BV



* W25Q32FV



잘 도착해서 실물을 하나씩 꺼내 사진을 찍어 봤습니다.






4. Flash Chip 교환


기판에서 flash chip 만을 이쁘게 제거해야 합니다.

열풍기가 있으면 좋겠지만, 아직 가지고 있지 않으므로, 다른 방법으로 제거해 봅니다.



솔더윅 이구요. 기판에서 납을 빨아들여 제거해 주는 역할을 합니다.



액체 플럭스 이구요. 납을 쉽게 녹여주는 역할을 합니다.

SMD 칩의 쪼만한 다리들을 그냥 납땜하는건 힘든데, 이걸 발라 놓으면 납들이 쉽고 이쁘게, 알아서 붙어줍니다.



액체 플럭스와 솔더윅으로 지지고 있으니, 톡 하고 분리되네요.

음후후, 이걸 하기 위해 기다렸어!



플럭스의 찌꺼기를 깨끗하게 씻어내기 위해, 일반 약국에서 파는 에탄올을 바르고 칫솔로 쓱싹쓱싹.

95% 이상의 에탄올을 구입하고 싶은데, 쉽지 않네요. 일단 83% 라도 만족. 참고로 1000원에 구입.



훗, 깨끗해 졌군요.

새로운 칩을 자리 잘 잡아서 얹힌 다음, 액체 플럭스 바르고, 납땜하면 끝.



역시 마무리는 에탄올로 쓱싹쓱싹.



제거된 친구들. 잘가~.



ESP8266 은 총 3개를 가지고 있지만, 그 중 2개만 교환해 봤습니다.

RobotDyn 제품은 FV 버전으로.



Ai-Thinker 제품은 BV 버전으로 교환했습니다.





5. Flash 용량 확인


ESP FLASH DOWNLOAD TOOL 을 띄웁니다.



기존 Flash chip 교환 전 정보는, Vendor : GD, QUAD : 8Mbit 으로 표시됩니니다.



교체된 Flash chip 정보는, Vendor : WBQUAD : 32Mbit 으로 표시됩니니다.

Ai-Thinker 버전은 납땜 하다가, 쪼만한 SMD 저항 하나가 날라가 버려, 그걸 찾아서 다시 붙이는데 애를 먹였으나, 잘 동작 하는군요.





6. Espressif 버전 firmware upgrade


Espressif 에서 제공되는 최신 firmware 로 업그래이드 해봅니다.


그런데 계속 제대로 동작하지 않더군요. 뭐가 문제일까...

그러다가 아래 링크를 찾게 됩니다.


* Flashing AT 1.7.0 binary firmware in 32m-c1 mode not working

https://github.com/espressif/ESP8266_NONOS_SDK/issues/179


요지는, 32Mbit-C1 버전을 사용할 수 있어야 하지만 뭔가의 문제로 정상 동작하지 않고,

chip selection 에서 16Mbit-C1 을 선택해야 한다는 군요. 이렇게 되면, 32Mbit 의 넓은 영역을 다 활용하지 못할 터인데...

bug 가 고쳐지지 않는 이상 16Mbit-C1 으로 구워야 할 것 같습니다.



또한, 최신 Espressif 의 1.7 binary 버전은 only '1024+1024 flash map' 만에 대응한다 합니다.

어차피 '512+512 flash map' 은 찾을 수 없었습니다.


다운로드는 아래 두 군대에서 받을 수 있습니다.

하나는 AT command 버전은 1.7 이고, 다른 하나는 Non-OS SDK 가 3.0 입니다.


ESP8266 AT Bin V1.7.0

https://www.espressif.com/en/support/download/at?keys=&field_type_tid%5B%5D=14

ESP8266_AT_Bin_V1.7.zip


ESP8266 NONOS SDK V3.0.0

https://www.espressif.com/en/support/download/sdks-demos?keys=&field_type_tid%5B%5D=14

ESP8266_NONOS_SDK-3.0.zip


위의 두 파일 중 어떤것을 사용해도 상관 없습니다. 동일합니다.


위에서 이야기 했다 싶이, 기껏 32Mbit-C1 이지만, 설정에서는 16Mbit-C1 으로 해야 합니다.

또한 address 도 16Mbit-C1 에 맞춰서 해줘야 정상으로 동작합니다. (아래는 READ.me 파일 일부)


# BOOT MODE

## download

### Flash size 16Mbit-C1: 1024KB+1024KB

    boot_v1.2+.bin              0x00000

    user1.2048.new.5.bin        0x01000

    esp_init_data_default.bin   0x1fc000

    blank.bin                   0xfe000 & 0x1fe000


결과적으로 아래 파일들을 다음과 같이 address 에 맞춰 설정하면 됩니다.


- boot_v1.7.bin : 0x00000

- user1.2048.new.5.bin : 0x01000

- esp_init_data_default_v08.bin : 0x1fc000

- blank.bin : 0xfe000

- blank.bin : 0x1fe000



특별히 문제 없이 flashing 되었습니다.



putty 를 이용해 serial 접속 후, 기본적인 AT 명령어를 날려 봅니다. 문제 없군요.

최신 버전인 AT version:1.7.0.0 과 SDK:3.0.0 이 표시됩니다.



아쉽지만, 16Mbit(1024KB+1024KB) 로 설정됨을 확인할 수 있습니다.





7. Ai-Thinker 버전 firmware upgrade


Ai-Thinker 버전은 단순히 최신 버전을 다운로드 하여 flash memory 에 입히면 됩니다.


* ESP8266 latest SDK release

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

ai-thinker_esp8266_dout_32mbit-c1_v0.0.0.7s_20170804.rar


또한 address 는 0x00000 한개로 끝납니다.


- AiThinker_ESP8266_DOUT_32M-C1_0.0.0.7s_20170804.bin : 0x00000



32Mbit-C1 을 선택해도 특별히 문제 없습니다. (이게 정상)

Flashing 후에, putty 를 이용하여 Serial 로 연결해 봤습니다.



후훗. 32Mbit(1024KB+1024KB) 으로 잘 표시 되네요.



최신버전임을 보여 줍니다.

Ai-Thinker 는 특별히 Web Server 가 ESP8266 에서 돌아갑니다.


WiFi 에 접속 후, 할당받은 IP 로 접근해 보면, 아래와 같은 설정 UI 화면을 볼 수 있습니다.



한번 WiFi 를 통해 IP 를 받아 놓으면 Serial 통신을 하지 않더라도, web browser 를 통해서 간단한 설정을 할 수 있다는게 매력적입니다.


다만, internet 상에서 접근할 수 있으면, 그 만한 보안 대책도 마련되어야 하는데,

조그마한 firmware 에 보안 대책용 code 까지 집어 넣었을 수 없을 터이니, 사용하지 않는 편이 나은것 같습니다.





6. 주의점


ESP8266 은, reboot 이나, firmware update 후에는 꼭! serial 접속을 완전히 끊어서 재접속 하거나,

USB connection 마저도 끊었다가 다시 연결해야 합니다.


그렇지 않으면, 원활하게 동작 확인이 불가능할 때가 많습니다.


Reset 버튼 누르고 전원을 새롭게 인가했다 한들, serial connection 자체도 reset 하지 않으면,

AT command 가 먹히지 않아 제대로 동작하지 못한다고 생각할 수 있습니다.

이런 경우, 정상 동작 하지 않는다고 생각하여 다른 version 으로 flashing 해보는 등, 삽질이 길어질 수 있습니다.


Reset 할 때 마다, 매번 Serial connection 자체도 재연결 해야 하나 (엄청 귀찮음),

최대한 삽질을 적게 하고싶으면 Serial connection 도 같이 reset 하세요.


ESP8266 은 전원을 따로 확보해야 하고, Reset 할 때마다 connection 도 동시에 reset 해야 하는 등,

참 까다로운 디바이스인것 같습니다.





FIN


가지고 있는 ESP8266 의 Flash memory chip 까지 upgrade 해 봤으니,

이 다음으로는, 이 드넓은 메모리 영역을 활용해 보겠습니다.


아! 마지막으로, FV 버전이 flashing 할 때, 약 4배정도 더 빠릅니다.

부품은 비싼걸 구입하는 것이 정답이네요.




Update - 20200224


CO2 측정 결과 값을 ThingSpeak 에 올리기 위해, 다시금 가지고 있는 ESP-01 을 꺼냈습니다.

혹시나 해서 최신 firmware 를 확인해 봤더니, 새로운 버전 1.7.2 가 올라와 있네요.


ESP8266_NonOS_AT_Bin_V1.7.2_0.zip


위의 zip 파일에는 SDK 도 최신인 3.0.2 도 포함되어 있었습니다.





Update - 20200812


포름 알데히드 센서를 ESP-01 을 가지고 GPIO 를 확장하여 테스트 해보려다가 하나를 망가트렸습니다.


* Hardware | ZE08-CH2O Formaldehyde 센서 사용해보기

https://chocoball.tistory.com/entry/Hardware-ZE08-CH2O-Formaldehyde-sensor-using


예비를 위해 하나 추가 구매.


* ESP8266 ESP-01 ESP-01S ESP-07 ESP-12E ESP-12F remote serial Port WIFI wireless module intelligent housing system Adapter 2.4G

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



Flash 메모리는 8Mbit = 1MiB 용량입니다.



32Mbit = 4MiB 로 확장해 줍니다.



붙어있는 flash memory 를 분리해 내기 위해, 이번에는 납물을 많이 뭍히는 방법으로 제거 했습니다.

납물을 많이 뭍히면, 열을 조금 오랜동안 머금고 있으므로, 다른 한쪽에 인두를 가져다 댈 때까지 유지해주니 chip 이 쉽게 떨어집니다.



교체 완료.



32Mbit 으로 잘 인식합니다.



다만, 다른 캐패시터를 건드렸는지, 어디에선가 쇼트가 나는 듯 합니다. 전원에 연결하면, 전원쪽 regulator 가 엄청 뜨거워지네요.

SMD 납땜은 인두기로 작업하다 보면 옆의 부품을 건드리게 되니, SMD 납땜은 열풍기가 답인 듯 합니다.


And

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

|


이 글은 ESP8266 또는 ESP-1 을 가지고 노는 포스팅 이며, 이 글 전에 포스팅이 2개 있습니다.


* 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


오늘은 ESP8266 / ESP-1 을 Serial 로 연결할 때, 사용되는 가장 간단한 AT command 에 대해 알아봅니다.

우선 정식 설명서를 첨부합니다.


4a-esp8266_at_instruction_set_en.pdf


참고로 putty 에서 명령어를 실행시키려면, Ctrl + J, M 을 타이핑 해야 ESP826 으로 command 를 날릴 수 있습니다.





1. AT


가장 간단한 command 이며, ready / 정상 상태인지를 알아보는 명령어 입니다.



OK 가 뜨면 OK 인겁니다.





2. AT+GMR


ESP8266 에 인스톨 되어 있는 firmware version 을 보여줍니다.



보통 Serial 접속하면, 가장 먼저 하게 되는 두 command 들입니다.






3. AT+CWMODE


ESP8266 을 어떤 모드로 사용할 것인지를 정할 수 있습니다.



보통 CWMODE:2 로 되어 있습니다.

이는 Access Point 로 활용하는 모드 입니다.


- 1: Network Device (client)

- 2: Access Point (AP)

- 3: Both


ESP8266 을 집에 있는 WiFi 에 접속시켜 인터넷에 연결하고 싶으면, MODE=1 이나 3 로 하면 됩니다.





4. AT+CWLAP


근처에 접속 가능한 WiFi access point 들을 보여 줍니다.






5. AT+JAP


접속하고 싶은 AP 의 정보 - 이름과 비번 을 입력하여 접속합니다.



정상적으로 WiFi에 접속 후, IP 를 받았다고 뜨네요.





6. AT+CIFSR


AP 접속 후, 어떤 IP 를 받았는지 확인하는 command 입니다.






7. AT+CIPSTATUS


최종적으로 AP 로 접속 후, 어떤 상태인지 확인해 봅니다.



- 2: The ESP8266 Station is connected to an AP and its IP is obtained.

- 3: The ESP8266 Station has created a TCP or UDP transmission.

- 4: The TCP or UDP transmission of ESP8266 Station is disconnected.

- 5: The ESP8266 Station does NOT connect to an AP.





8. AT+CIUPDATE


인터넷을 통해 firmware 를 업데이트 하는 명령어 입니다.

참고로 flash ram 크기가 16Mbit = 2MByte 이상 되어야 사용 가능합니다.



- 1: find the server.

- 2: connect to server.

- 3: get the software version.

- 4: start updating.


정상적으로 update 가 되면, 자동으로 reboot 을 하게 됩니다.



자동 reboot 하면서, 다른 command 로는 확인할 수 없는 "SPI Flash Size & Map" 정보를 확인할 수 있습니다.

위의 결과는 16Mbit (1024KB+1024KB) 버전으로 firmware update 한 것이고,

아래 결과는 32Mbit (1024KB+1024KB) 버전으로 firmware update 한 결과 입니다.






9. AT+RST


문자 그대로 reset command 입니다.

ESP8266 을 reboot 시킵니다.


Ai-Thinker 사의 32Mbit (512KB+5212KB) 버전으로 firmware update 후, reset 한 결과는 다음과 같습니다.






FIN


ESP8266 을 가지고 Serial 접속 후, 가장 많이 쓰이고 간단한 명령어들을 소개해 봤습니다.


사실 PDF 의 메뉴얼에 보면 더 많은 command 들이 준비되어 있지만,

pre-condition 이 맞아야 하거나 환경적으로 매칭이 되지 않아 ERROR 를 내는 command 들이 대다수 입니다.


위의 내용 감안하셔서 참고하시면 좋겠습니다.


And

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

|

이 글은 전편이 있습니다.


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

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


이번에는 전편에서 풀지 못했던, ESP8266 chip 을 생산하는 ESPRESSIF SYSTEMS 사의 정식 firmware 를 입혀보는 포스트 입니다.

AI-Thinker 사는 firmware 를 한뭉텅이로 만들어 줘서 쉽게 firmware 를 입혔지만,

ESPRESSIF SYSTEMS 사는 address 라던지 파일 순서와 선택이 중요합니다.




1. ESP8266 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



두개 구입했고 1달정도 걸렸던것 같습니다.

기다리는 것이 익숙해 지긴 했지만, 빨리 확인해보고 싶은 경우는 조금 고통스럽네요.



양 다리는 스스로 납땜해야 합니다.

DIY 임을 명확하게 인지시켜주는 제품입니다.



DIY MORE 라는 회사가 눈에 자주 띄네요.



ESP8266 모듈을 끼우면 이렇게 됩니다.

가로를 세로로 변경해주는 방법입니다.






2. Flash Download Tool


그 사이 3.6.5 로 버전업을 했습니다.


* ESPRESSIF > Support > Download > Tools

https://www.espressif.com/en/support/download/other-tools



아무래도 새로운 버전을 사용하는게 좋겠죠?

그리고 baud rate 도 처음엔 9600 만 사용해야 하는줄 알았는데, 이제는 115200 이 일반화 된것 같습니다.

그래서 요즘 버전들이 지원하는 115200 이상은 큰 문제가 없는듯 합니다.





3. NON-BOOT mode


이제 ESPRESSIF SYSTEMS 에서 내놓은 firmware 를 올려볼 차례 입니다.

여러 버전들이 존재하지만, 단순히 ready 상태를 띄워놓고 프로그래밍 하는 방법과, AT command 를 활용하는 두가지 방법이 있습니다.


우선 NON-BOOT mode 의 firmware 를 올려보겠습니다.


8Mbit = 1MiB 를 지원하는 NON-BOOT 버전은 2.0.0 이 마지막 버전인 듯 합니다.

(다른 버전에는 noboot 라는 디렉토리와 관련된 파일이 아예 없슴)


* ESP8266 NONOS SDK V2.0.0 20160810

https://www.espressif.com/en/support/download/sdks-demos

esp8266_nonos_sdk_v2.0.0_16_08_10.zip



위의 압축파일을 풀어보면, "README.md" 파일에 address 정보가 나와 있습니다.


esp8266_nonos_sdk_v2.0.0_16_08_10\ESP8266_NONOS_SDK\bin\at\README.md



# NON-BOOT MODE
## download
    eagle.flash.bin              0x00000
    eagle.irom0text.bin          0x10000
    blank.bin
        Flash size 8Mbit:        0x7e000 & 0xfe000
        Flash size 16Mbit:       0x7e000 & 0x1fe000
        Flash size 16Mbit-C1:    0xfe000 & 0x1fe000
        Flash size 32Mbit:       0x7e000 & 0x3fe000
        Flash size 32Mbit-C1:    0xfe000 & 0x3fe000
    esp_init_data_default.bin (optional)    
        Flash size 8Mbit:        0xfc000
        Flash size 16Mbit:       0x1fc000
        Flash size 16Mbit-C1:    0x1fc000
        Flash size 32Mbit:       0x3fc000
        Flash size 32Mbit-C1:    0x3fc000


플러쉬 tool 에서 메모리 사이즈에 맞는 파일과 address 를 지정해 주면 됩니다.

저는 8Mbit = 1MiB 플레쉬 메모리 이므로 해당하는 값을 챙깁니다.



위의 설정에서 참고로, "CrystalFreq" 부분을 26M 로 하는 것은, 실제로 ESP8266 에서 26MHz 오실레이터를 사용하기 때문입니다.



플레쉬 회로 구성은 1편에서 자세히 다뤘습니다.

주의할 점은, flashing 할 때에는 아래처럼 "추가 전원" 이 꼭 필요하다는 점 잊지 마시구요.



Flash Download Tools 의 콘솔 화면입니다.



문제 없이 완료되면 위의 그림처럼 보입니다.

putty 로 접속하고, 만들어지 회로에서 RST 버튼을 누르면 아래처럼 ready 상태를 확인할 수 있습니다.






4. BOOT mode


BOOT mode 로 사용하게 되면 AT command 를 통해서 직접 ESP8266 을 컨트롤 할 수 있습니다.

1MiB 짜리 ESP8266 에 대응하는 BOOT mode 의 최신버전은 현재 기준 V2.2.1 인것 같습니다.

V3.0.0 이상으로 올라가면, flash memory 가 1MiB 초과하는 버전만 대응한다고 문서에 나와 있어요.


* ESP8266 NONOS SDK V2.2.1

https://www.espressif.com/en/support/download/sdks-demos

ESP8266_NONOS_SDK-2.2.1.zip



아래 AT Instruction Set 문서의 1.2.4 섹션을 보면 8Mbit Flash address 에 대해 나와있습니다.


* ESP8266 AT Instruction Set

https://www.espressif.com/en/support/download/documents?keys=&field_type_tid%5B%5D=14

4a-esp8266_at_instruction_set_en.pdf



위의 정보에서 boot.bin 부분을 boot_v1.6.bin 으로 바꿔서 flashing 하면 됩니다.

물론 동일한 디렉토리에 존재하는 boot_v1.7.bin 도 해봤습니다. 그치만 booting 되면 1.6 으로 뜨더군요.

아마 내부 로직으로 인하여 v1.7 은 overwrite 가 되지 않는것 같습니다.



Flash 잘 되었구요.

동영상도 올려 봅니다.



확인해 보니, 완전 최신으로 업데잇 되었습니다 (얏호~).



그치만 Ai-Thinker 는 web server 가 기본 장착되어 있지만, ESPRESSIF SYSTEMS 의 firmware 에는 없나 봅니다.

IP 를 얻고 접속해 봐도 web page 가 뜨지 않습니다.





FIN


이제 ESP8266 에 대한 firmware 방법은 마스터 한것 같습니다.

다음에는 AT command 활용과 sketch 올리는 법, 그리고 메모리 업그래이드 하는 방법을 시도해 보겠습니다.


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

Hardware | FTDI Serial Adapter 를 사용해 보자

|

1. Flash Programming


무선 WIFI 모듈인 ESP8266 을 사용하여 wireless speaker 를 제작하려고 준비하고 있습니다.




그러기 위해서는 ESP8266 의 펌웨어를 프로그래밍 해줘야 하는데,

이를 위해서는 Serial Converter / Adapter 가 필요합니다.


이 Serial Adapter 는, 펌웨어 관련된 모든것에 사용되는 것 같습니다.

미리 알았더라면, 예전에 Flashrom writer 시에 사용했을 터인데...


http://chocoball.tistory.com/entry/Hardware-flashROM-fix


이런 다방면의 활용성을 가지고 있으므로, 한두개 구비해 놓은게 좋을것 같다고 생각되어

한꺼번에 2개를 구입합니다.


동일한 제품을 구매하면 재미가 없으므로, 각각 다른 chip 을 사용한 adapter 를 구매합니다.




2. Silicon Labs CP2102


FT232 대용으로 나온 chip 입니다.

동작은 완벽히 호환되었습니다.


Spec. Sheet 는 다음과 같습니다.


CP2102-9.pdf


기존의 FT232RL breakout board 와 비교하여 pinout 들이 간략화 되어 있어

보드 자체의 크기도 작고, chip 도 소형화 되어 있습니다.


구매는 아래 link 에서 진행했어요.


https://ko.aliexpress.com/item/CJMCU-CP2102-MICRO-USB-to-UART-TTL-Module-6Pin-Serial-Converter-UART-STC-Replace-FT232-NEW/32801557756.html


가격은 1.02 USD 로 부담이 없고 무료 배송입니다.



아래는 사이트에서 보여준 사진 입니다.

Chip 에 SILABS CP2102 라고 적혀 있는 것을 확인할 수 있습니다.



도착샷 들입니다.



보통은 USB 인터페이스 지만, 이 부품은 microUSB 입니다.



뒷면입니다.



Windows 에 USB를 통하여 연결하면, 알아서 드라이버를 잡아 줍니다.



장치 관리자에서 COM port 를 꼭 확인하여, 나중에 어플에서 잡아줄 때 참고하면 되겠습니다.






3. FTDI FT232RL


그 이름 그대로의 제품 입니다.

Chip 은 FT232RL 이네요.



가격은 1.65 USD 로 역시 저렴합니다.


Spec. Sheet 는 다음과 같습니다.


FT232RL.pdf


참고로 fake FT232RL chip 이 존재한다 합니다. Fake 제품이라고 해서 문제는 발생되지 않는다고 합니다.

다만, 원래 생산자의 시장을 잠식하면서, 막대한 손해를 끼치겠죠.


가장 단순한 판변법은, chip 상면에 세겨진 각인이 laser 로 쓰였는지, 프린팅 되었는지의 구분이라고 하네요.


https://zeptobars.com/en/read/FTDI-FT232RL-real-vs-fake-supereal


Chip 을 줌업 해봤습니다.

잘 모르겠지만 laser 로 쓰여진 듯 합니다. 그 사이에 fake chip 생산자의 기술이 올라갔을지 모르겠습니다.



구입은 아래 link 에서 진행했습니다.


https://ko.aliexpress.com/item/1pcs-FT232RL-FTDI-USB-3-3V-5-5V-to-TTL-Serial-Adapter-Module-forArduino-Mini-Port/32650148276.html


아래는 도착샷 입니다.


일반적인 포장으로 잘 왔습니다.

정전기 방지 포장도 되어 있습니다.



FTDI 용으로는 가장 많이 쓰이는 보드가 아닐까 합니다.



재미있는걸 하나 발견했습니다.
뒷면에 제품명이 프린팅 되어 있는데, 도착한 제품에는 "YP-05" 라고 되어 있고,
제품 소개 사이트에는 "FTD1232" 이라고 표기되어 있습니다.

일단 다른것도 그렇지만, FTDI 의 "I" 부분을 숫자 "1" 로 고쳐쓴 센스가 엿보입니다. 라이센스 문제를 피해가기 위함이겠죠?



아래는 제품 소개 사이트 뒷면 :-D



Windows driver 는 자동으로 잡힙니다.



처음에는 "FT232R USB UART" 로 인식한 후, driver 가 인스톨 완료 되면 아래와 같이, "USB Serial Converter / Port" 로 변경됩니다.



장치 관리자에서는 "USB Serial Port" 라고 표시됩니다.






4. 구동


NEO-6M GPS 와 연결해본 사진 입니다.

사진에는 FT232RL 만 보이지만, CP2102 로도 완벽히 동일하게 작동하였습니다.



NEO-6M 과의 자세한 동작 영상들은 아래 link 에서 확인해 보세요.


http://chocoball.tistory.com/entry/Software-ublox-GPS-application





FIN

정신을 차려 보니, 점점 많은 부품들이 제 주위에 쌓여가고 있습니다.

And
prev | 1 | 2 | next