반응형

ESP32 에는 기본적으로 온도센서를 내장하고 있다. 이를 사용하는 방법을 알아보려고 한다. 



위 ESP32 블록 다이어그램을 보면 온도센서가 있음을 알 수 있다. 소스는 구글링을 통해서 가지고 왔다. 


■ 스케치

소스출처 : https://gist.github.com/xxlukas42/7e7e18604f61529b8398f7fcc5785251


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#ifdef __cplusplus
extern "C" {
#endif
uint8_t temprature_sens_read();
#ifdef __cplusplus
}
#endif
uint8_t temprature_sens_read();
 
void setup() {
  Serial.begin(115200);
}
 
void loop() {
  Serial.print("Temperature: ");
  
  // Convert raw temperature in F to Celsius degrees
  Serial.print((temprature_sens_read() - 32/ 1.8);
  Serial.println(" C");
  delay(5000);
}
cs



그런데 위와 같이 작성하고 실행을 해 보니 이상하다.


위와 같이 시리얼 모니터에 똑같은 온도만 계속 표시가 된다. 그리고 너무 높다. 방 안의 온도가 현재 20도 정도인데 53도 라니...


왜 그런지 모르겠다. 칩 자체의 온도가 높은건가? 소숫점 2째자리 까지 표시가 되는데 하나도 변화가 없는 것이 제대로 측정되지 않는 것 같다. 


혹시 왜 그런지 아는 분들의 댓글 바란다.

반응형
반응형

ESP32는 와이파이를 통해서 인터넷에 연결이 가능하므로 와이파이 연결이 된다면 NTP(Network Time Protocol) 서버를 통해 매우 정확한 현재 시간을 구할 수 있다. 나중에 시간이 된다면 ESP32와 온습도 센서, LCD 등을 가지고 벽걸이 시계를 하나 만들어 볼까? 생각 중인데... 정확한 시간은 물론 정보제공 서버와의 통신을 통해서 날씨, 뉴스 등의 정보도 표시해 주고 센서를 통해서는 현재 기온 및 습도 등을 표시해 주는 유용한 장치를 만들 수 있을 것이다.




ESP32에 대한 일반적인 사항과 아두이노 개발환경을 설치하는 방법은 아래의 과거 포스팅을 참고한다.


■ 스케치

소스를 보면 연결할 와이파이 SSID 와 패스워드를 넣을 수 있게 되어 있고 gmtOffset_sec 변수에 32400 을 대입해 주었다. 이것은 NTP 서버에서 제공해 주는 시간 값이 영국 그리니치 표준시 기준이기 때문에 우리나라에 맞게 수정해 주어야 한다. 우리나라는 GMT+9 (그리니치 표준시 보다 9시간 빠름) 지역이기 때문에 9시간을 더해 주면 된다. 그러므로 9시간을 초(Sec)로 변환한 값인 32400을 변수에 대입해 주었다. daylightOffset_sec 변수는 섬머타임 여부를 나타낸다. 섬머타임 적용지역의 경우 하절기에 시간이 1시간 앞당겨진다. 우리나라는 해당사항이 없으므로 0을 대입해 주었다. NTP 서버의 경우 자신이 알고 있는 다른 서버를 이용해도 된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <WiFi.h>
#include "time.h"
 
const char* ssid       = "ssid"//와이파이 SSID
const char* password   = "password";  //와이파이 패스워드
 
const char* ntpServer = "kr.pool.ntp.org";
 
//3200초는 1시간, 우리나라는 GMT+9 이므로 3600초x9 = 32400 해 줌
const long  gmtOffset_sec = 32400
 
//섬머타임 적용 시 3600 (시간을 1시간 빠르게 함)
//우리나라는 시행 안하므로 0
const int   daylightOffset_sec = 0
 
void printLocalTime()
{
  struct tm timeinfo;
  if(!getLocalTime(&timeinfo)){
    Serial.println("Failed to obtain time");
    return;
  }
  Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");
}
 
void setup()
{
  Serial.begin(115200);
  
  //connect to WiFi
  Serial.printf("Connecting to %s ", ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
      delay(500);
      Serial.print(".");
  }
  Serial.println(" CONNECTED");
  
  //init and get the time
  configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
  printLocalTime();
 
  //disconnect WiFi as it's no longer needed
  WiFi.disconnect(true);
  WiFi.mode(WIFI_OFF);
}
 
void loop()
{
  delay(1000);
  printLocalTime();
}
cs



실행한 결과이다. 컴퓨터의 시간과 비교해보니 거의 정확히 일치한다. 


시간 구하기는 앞으로 ESP32를 이용한 DIY 에 활용할 일이 많을 것이다.

반응형
반응형

 

 

ESP32는 자체적으로 터치를 감지할 수 있는 센서를 가지고 있다.  총 10개의 GPIO에서 터치를 감지할 수 있다. 이번에는 손가락 터치를 감지해서 ESP32 개발보드에 내장된 LED를 켜거나 끄는 것을 해 보려고 한다. 

 

 

 

 

■ ESP32 Touch GPIO Pin

 

 

위의 배치도를 보면 분홍색으로 표시된 핀들이 터치를 지원하는 핀 들이다. 아래 핀번호를 보면 GPIO0 도 있는데 내가 가지고 있는 개발보드엔 이 핀이 없다. 고로 9개의 핀이 터치를 지원한다. 개발 시 자신이 가지고 있는 보드의 규격에 따라 고려하여 코딩하면 되겠다.

 

T0 = GPIO4

T1 = GPIO0

T2 = GPIO2

T3 = GPIO15

T4 = GPIO13

T5 = GPIO12

T6 = GPIO14

T7 = GPIO27

T8 = GPIO33

 

T9 = GPIO32

 

ESP32에 대한 일반적인 사항과 아두이노 개발환경을 설치하는 방법은 아래의 과거 포스팅을 참고한다.

 

[사물인터넷(IoT)] - [ESP32] ESPRESSIF ESP32 오버뷰 (ESP32 Overview)

[사물인터넷(IoT)] - [ESP32] 아두이노 IDE 에서 개발환경 만들기

 

■ 스케치

먼저 시리얼 모니터로 터치입력값을 받아서 시리얼 모니터에 표시해 본다. 이 예제는 ESP32 개발환경이 제대로 설치되었다면 아두이노 IDE의 파일->예제->ESP32->Touch->TouchRead 에서도 볼 수 있다.

 

터치감지를 위해서 암-수 점퍼 케이블을 GPIO4 (T0)에 꼽아 주었다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// ESP32 Touch Test
// Just test touch pin - Touch0 is T0 which is on GPIO 4.
 
void setup()
{
  Serial.begin(115200);
  delay(1000); // give me time to bring up serial monitor
  Serial.println("ESP32 Touch Test");
}
 
void loop()
{
  Serial.println(touchRead(T0));  // get value using T0
  delay(1000);
}
cs

 

 

시리얼 모니터 값을 보면 터치 하지 않았을 경우 91~92의 값을 보인다. 손가락을 터치했을 경우 90 이하의 값으로 내려간다. 고로 90 이하의 값이 감지되면 LED를 켜고 아니면 꺼주면 되겠다. (케이블 단자를 손가락으로 꽉 잡을 경우 값은 더욱 낮아진다. 각자의 목적에 맞게 터치값의 기준을 조정해야 한다)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int LED_BUILTIN=2;
 
void setup()
{
  pinMode(LED_BUILTIN, OUTPUT);
  Serial.begin(115200);
  delay(1000); // give me time to bring up serial monitor
}
 
void loop()
{
  int tRead = 0;
  tRead = touchRead(T0);
  Serial.println(tRead); 
  if (tRead <= 90) {
    digitalWrite(LED_BUILTIN, HIGH); 
  } else {
    digitalWrite(LED_BUILTIN, LOW); 
  }
  delay(100);
}
cs

의도대로 수정한 소스이다.

 

 

 

https://youtu.be/Vx7TLdafE-4

손가락을 케이블에 대면 빌트인 LED가 켜지고 떼면 꺼진다. 이를 응용하면 누군가 집의 문고리를 잡을 경우 ESP32의 와이파이 연결 기능을 통해 스마트폰 등으로 알려주는 나름의 방범기능(?)도 만들 수 있을 것이다.

반응형
반응형

ESP32 에는 자기장을 감지하는 홀센서(Hall Sensor) 가 내장되어 있다. 홀센서는 미국의 물리학자인 홀이 발견한 홀효과(Hall Effect)를 이용한 센서이다. 홀효과는 도체가 자기장 속에 놓여 있을 때 그 자기장에 직각방향으로 전류를 흘려주면 자기장과 전류 모두에 수직인 방향으로 전위차가 발생하는 현상이다. 홀효과에 대한 자세한 사항은 여기를 참고한다.

 

ESP32 아두이노 개발환경을 설치하는 방법은 지난 번 포스팅을 참고한다.

 

[사물인터넷(IoT)] - [ESP32] 아두이노 IDE 에서 개발환경 만들기

 

 

■ 스케치

소스는 간단하다. 자기장이 감지되면 ESP32 개발보드에 내장된 LED를 켜고 나이면 끈다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int LED_BUILTIN=2;
 
void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  Serial.begin(115200);
}
 
void loop() {
    int measurement = 0;
    measurement = hallRead();
    Serial.print("Hall sensor measurement: ");
    Serial.println(measurement);
    if (measurement >= 20) {
      digitalWrite(LED_BUILTIN, HIGH); 
    } else {
      digitalWrite(LED_BUILTIN, LOW); 
    }
    delay(500);
}
cs

 

 

시리얼모니터 상에서 평상시에는 20을 넘지 않아 자기장 감지의 기준을 20으로 정했다. 감도는 정해진 것이 아니므로 감지할 자기장의 세기에 따라 감도값을 조절하면 될 것이다.

 

 

https://youtu.be/d2g8SeIP_-Y

막대자석을 ESP32칩 부분에 가까이 가져가면 자기장을 감지해서 LED가 켜지고 아니면 꺼지는 것을 볼 수 있다.

 

이걸 어떤 곳에 이용할 수 있을까? 일반적으로 홀센서는 모터의 회전속도를 감지하는데 많이 쓰인다고 하는데 ESP32의 경우 블루투스나 인터넷 통신이 가능하므로 자기장 감지 시 스마트폰 같은 장치로 알려주는 기능도 만들 수 있을 것이다.  아무튼 이번에는 ESP32에 내장된 센서를 테스트 해 봤다는 데에 의의를 두어본다.

반응형
반응형

오늘부터 시간이 나는대로 한참 전에 구입해 놓고 사용하지 못하고 있던 ESP32 개발보드에 대해서 알아볼 생각이다. 예전에 ESP32 칩에 대해서 간단하게 알아보았던 포스팅이 있어서 ESP32 칩에 대한 개괄적인 내용은 아래 링크의 글을 참조하면 된다.

 

 

ESPRESSIF ESP32 오버뷰 (ESP32 Overview)

 

내가 구입한 ESP32 개발 모듈 보드이다. CP2102 UART 칩을 사용하고 있다. 알리에서 5달러 정도 주고 구입.

 

개발보드의 핀 구조는 위와 같다. PC와의 연결은 마이크로 5핀 USB 케이블을 이용한다.

 

 

처음 아무것도 없는 PC에 연결하면 아마도 인식이 되지 않을 것이다.  CP2102 드라이버가 설치가 되어 있지 않아서 그렇다. 따로 드라이버를 다운로드 받아서 설치해 주어야 PC와 통신이 된다.

 

■ CP2102 드라이버 다운로드

https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers

cp2102drivers.zip
다운로드

위의 링크에서 자신의 OS에 맞는 드라이버를 다운로드 받아서 설치하면 된다.

 

그러면 위와 같이 제대로 COM 포트를 잡아서 PC와 통신할 준비가 완료된다. 혹시 CP2102 가 아닌 다른 UART 칩을 사용하는 보드라면 각 제조사 사이트에서 드라이버를 다운로드 받으면 될 것이다.

 

그리고 당연한 말이지만 아두이노 IDE가 설치되어 있어야 한다. 될 수 있으면 최신버전을 사용하도록 한다. 다운로드 주소는 https://www.arduino.cc/en/Main/Software

 

아두이노 IDE 설치만으로 바로는 사용할 수 없고 github 의 Espressif 사의 페이지에 들어가면 아두이노 IDE 에서의 개발환경을 위한 소프트웨어가 개발되어 있다. 이걸 설치하면 된다.

 

■ Espressif Github ESP32

 

https://github.com/espressif/arduino-esp32/releases

 

 

링크에 들어가면 위와 같이 나오는데 package_esp32_dev_index.json 이라는 부분의 링크를 복사해 준다. 현재 링크는 https://github.com/espressif/arduino-esp32/releases/download/1.0.0/package_esp32_dev_index.json 이다.

 

링크를 복사 했으면 아두이노IDE를 실행하고 파일->환경설정으로 이동한다.

 

환경설정 창에서 추가적인 보드 매니저 URLs 의 버튼을 클릭한다. (화살표)

 

URL 입력창이 뜨면 복사한 링크를 붙여넣기 하고 확인 버튼을 클릭하고 환경설정 창의 확인 버튼도 클릭한다.

 

아두이노IDE 메뉴, 툴->보드->보드매니저 창을 띄우면 맨 아래 부분에 위와 같이 ESP32 설치를 위한 '설치' 버튼이 있는 것을 볼 수 있다. 설치를 눌러 설치한다. 현재 버전은 1.0.0 이다.

 

26메가 정도의 설치파일이 다운로드 되고 설치가 진행 된다. 해외서버라 그런지 속도가 매우 느린데 참고 기다리면 설치가 된다. 

 

설치가 완료된 후 툴->보드 메뉴에 들어가면 여러가지 ESP32 보드들이 나타나고 이 중에 자신에게 해당되는 것을 고르면 된다. 나는 ESP32 Dev Module 이라는 것을 선택해 보았다.

 

위와 같이 아두이노 IDE가 ESP32 개발보드를 인식해서 연결이 된다. 툴 메뉴를 들어가보면 여러가지 개발보드의 옵션들을 선택할 수 있도록 되어 있다. 자신에게 맞는 것을 선택해 주면 된다. 그리고 아두이노 개발과 마찬가지로 툴->포트 메뉴에서 PC와 연결된 COM 포트 번호를 선택해 준다.

 

이제 개발할 준비가 모두 끝났다. Blink 예제를 업로드해서 스케치가 잘 업로드가 되는지 테스트를 해 본다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int LED_BUILTIN=2;
 
// 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
}
cs

 

원래 소스는 int LED_BUILTIN=2; 부분이 없어도 아두이노에서는 작동하지만 ESP32 개발보드 에서는 꼭 넣어 주어야 한다. 

 

https://youtu.be/ifOH1P4OIDM

위와 같이 보드에 Built in 되어 있는 LED가 깜빡이면서 Blink 예제가 잘 실행되는 것을 볼 수 있다.

 

앞으로 시간이 될 때마다 ESP32에 대해서 더 깊이 알아볼 생각이다.

반응형
반응형

블로그의 사물인터넷(IoT) 카테고리에 관심을 끊은지 꽤 오래 되었다. 이젠 열정이 사라진 탓일까? 호기심이 무뎌진 탓일까?  방금 전 인터넷을 돌아다니다가 우연히 예전에 가끔 들리던 ESP8266 칩으로 유명한 ESPRESSIF 의 홈페이지를 들어가 보았다. 그런데 새로운 칩이 나왔다. 아니 나온지 꽤 되었다. 네이버에 검색해보니 이미 열정적인 블로거들의 ESP32에 관한 글들이 꽤 있다. ESP8266 보다 성능이 많이 향상이 되었다. 다시 호기심을 자극한다. 알리익스프레스에서 개발보드를 주문 했다. 도착하기전에 ESP32에 대해서 한 번 훑어 보려고 한다.


ESPRESSIF ESP32 칩 - 출처: http://espressif.com


ESP32 특장점


- 2.4 GHz Wi-Fi and Bluetooth combo chip : 가장 큰 특징이다. 와이파이와 블루투스 연결을 동시에 지원한다. 즉, IoT 이용 시 블루투스 모듈과 와이파이 모듈을 따로 연동할 필요가 없다.


- TSMC low power 40nm technology : 40nm 공정으로 만들어졌다.


- Best power performance and RF performance : 매우 적은 전력소비


- Robustness, versatility and reliability : 내구도, 신뢰도가 높다. -40°C to +125°C 에서도 구동이 된다.



ESP32 상세스펙


주요 사항을 정리해 보면 듀얼코어 마이크로컨트롤러, 와이파이/블루투스 동시 지원, 16MB의 프로그래밍 공간(플래시 메모리 공간, 물론 펌웨어 공간은 제외), 넓은 작동온도 -40~125도, 오디오 앰프 내장, SD카드 지원, 홀 센서(자기센서), 터치센서, 온도센서 내장, 34개의 다양한 GPIO, 다양한 통신 보안 프로토콜 지원, Deep Sleep 시 5마이크로 암페어 수준의 극히 적은 소비전력 등이 있다. ESP8266과는 비교도 안되는 많은 기능을 가지고 있다.  살펴보니 뭐니 뭐니해도 와이파이와 블루투스를 동시지원하는 것과 넓은 프로그래밍 공간, 낮은 전력소비가 제일 큰 장점 같다. 게다가 작동온도 범위도 매우 넓으므로 극한의 환경에서도 사용이 가능하다.


 Key Features

240 MHz dual core Tensilica LX6 microcontroller with 600 DMIPS


Integrated 520 KB SRAM


Integrated 802.11 b/g/n HT40 Wi-Fi transceiver, baseband, stack and LwIP


Integrated dual mode Bluetooth (classic and BLE)


16 MB flash, memory-mapped to the CPU code space


2.3V to 3.6V operating voltage


-40°C to +125°C operating temperature


On-board PCB antenna / IPEX connector for external antenna

 Sensors

Ultra-low noise analog amplifier


Hall sensor


10x capacitive touch interfaces


32 kHz crystal oscillator

 34 x GPIO

3 x UARTs, including hardware flow control


3 x SPI


2 x I2S


18 x ADC input channels


2 x DAC


2 x I2C


PWM/timer input/output available on every GPIO pin


OpenOCD debug interface with 32 kB TRAX buffer


SDIO master/slave 50 MHz


Supports external SPI flash up to 16 MB


SD-card interface support

 Security Related

WEP, WPA/WPA2 PSK/Enterprise


Hardware accelerated encryption: AES/SHA2/Elliptical Curve Cryptography/RSA-4096

 Performance

Supports sniffer, Station, SoftAP and Wi-Fi direct mode


Max data rate of 150 Mbps@11n HT40, 72 Mbps@11n HT20, 54 Mbps@11g, and 11 Mbps@11b


Maximum transmit power of 19.5 dBm@11b, 16.5 dBm@11g, 15.5 dBm@11n


Minimum receiver sensitivity of -97 dBm


135 Mbps UDP sustained throughput


5 μA power consumption in Deep-sleep




ESP32 관련 자료들

 

ESP32 Function Block Diagram

 

ESP32 Pin Layout (for QFN 6*6)

 

ESP32 Pin Layout (for QFN 5*5)



1. SDK 와 Demo : 

https://github.com/espressif/esp-idf/releases/


2. ESP32 데이터시트 : 

esp32_datasheet_en.pdf


3. ESP32 하드웨어 설계 가이드 : 

esp32_hardware_design_guidelines_en.pdf


4. ESP32 테크니컬 레퍼런스 매뉴얼 : 

esp32_technical_reference_manual_en.pdf


5. Getting Started 자료 (AT 커맨드) : 

esp32_at_instruction_set_and_examples_en.pdf

 

6. Getting Started 자료 (ESP-IDF) : IDF 는 IoT Development Framework 의 약자임

http://esp-idf.readthedocs.io/en/latest/get-started/index.html


7. 프로그래밍 소스 암호화 가이드 (플래시 내부 암호화)

http://esp-idf.readthedocs.io/en/latest/security/flash-encryption.html


8. JTAG 디버깅 가이드

http://esp-idf.readthedocs.io/en/latest/api-guides/jtag-debugging/index.html


9. Simple-Pair 가이드

simple-pair_user_guide_en.pdf


10. 블루투스 네트워킹 가이드

esp32_bluetooth_networking_user_guide_en.pdf


11. 플래시 다운로드 툴 (ESP8266 에서도 사용가능) : 

flash_download_tools_v3.6.1.0.zip


12. ESP32 Certification and Test

esp32_certification_and_test_en_20170705.zip


13. ESP32-WROVER AT Bin V0.10 & ESP-WROOM-32 AT Bin V0.10

esp32_at_bin_v0.10.zip

esp-wrover32_at_v0.10.zip


14. ESP32 Forum

https://www.esp32.com/


15. Third-Party Platforms

http://www.espressif.com/en/support/download/sdk



알리익스프레스를 들어가보니 이미 많은 제품들이 판매 중이다. 더 많은 종류가 있지만 쓸만해 보이는 것들을 추려 보았다.


칩에 안테나가 포함된 제품이다. 단자는 직접 납땜해서 사용한다. 4달러 정도이다. 이런건 편하게 연습할 수 있는 개발보드로 좀 학습한 다음에 사용하면 좋다. 


위와 같은 보드는 아래와 같은 보드에 다시 납땜하면 핀 보드로 만들 수 있다. 가격은 2.6달러


개발보드이다. USB 단자가 있어서 PC와 연결해서 편하게 프로그래밍 작업을 할 수 있다. 7.5달러


이건 소형 OLED 가 탑재된 개발보드 이다. 간단한 디스플레이가 필요하다면 이것도 좋을 듯. 물론 USB 단자도 바닥면에 있다. 8.5달러


이 보드는 개발을 위한 USB 단자도 있고 리튬이온 전지(3.7V)를 외부전원으로 사용할 수 있는 전원입력 단자가 달린 제품이다. 외부전원 연결 시 유용할 듯. 6.3달러


ESP32 를 아두이노 처럼 사용할 수 있도록 만든 보드이다. 설명으로는 아두이노와 호환이 된다고 한다. 아두이노 IDE 를 그대로 사용할 수 있을듯? 8.8달러



ESP32를 간략하게 살펴보니 ESP8266 처럼 저렴하게 IoT 등의 프로젝트에 충분히 활용이 가능할 것 같다. 이제 주문한 제품이 도착하면 시간이 날 때 마다 리뷰 연재를 해 볼 생각이다.

반응형

+ Recent posts