본문 바로가기 주메뉴 바로가기

1. 개요

ESP32는 블루투으와 WiFi 모두 가능한 보드로 아두이노 개발 환경에서 사용할 수 있어 최근 관심이 많은 보드입니다.

특히, WiFi와 연결하여 IoT 프로젝트를 진행하는데 최적의 보드인 듯 합니다.

가장 많이 사용하는 것은 ESP32-WROOM-32 칩(아래 사진의 은색 칩)을  쉽게 사용할 수 있도록 제작된 ESP32 DEVKIT 입니다.


2. 기본 사용법


아두이노를 먼저 설치합니다.


설치 방법 링크 : https://happycreative.co.kr/manual/detail.php?idx=29#333

2.1 개발환경 구축


1. 보드 라이브러리 설치


 -. 아두이노 IDE를  실행합니다.

 -. 파일 -> 기본설정을 클릭한 후, 아래 사진과 같이 URL을 추가 후 확인을 누릅니다.

    추가하는 내용 : https://dl.espressif.com/dl/package_esp32_index.json



 -. 보드 매니저를 열은 후 'ESP32'를 검색하여 설치합니다.



 -. 보드 및 포트를 각각 설정합니다. 



  => 아두이노 2.0.0 버전 이후부터는 보드 선택창으로 바로 보드와 포트 선택이 가능합니다.


  -. 기본 화면에서 업로드버튼을 눌러 업로드 완료되면 정상적으로 설치가 완료되었습니다.
 

2.2. 핀


아두이노 보드가 각 핀번호앞에 POWER, ANALOG, DIGITAL, PWM 등을 친절하게 적어놓은 것에 비해 ESP32 DEVKIT 은 보드에 번호만 적혀 있어서 정리를 해 두어야 합니다.


2.3. 쉴드보드


브레드보드에 사용해도 되지만, 최근은 다양하고 저렴한 센서보드가 나온 것이 많으니 더 편한 사용을 위해 쉴드보드를 사용할 수도 있습니다.

쉴드보드는 메이크잇나우의 Easy Connect 쉴드(왼쪽)나 ESP32 DEVKIT 아두이노 우노 타입 쉴드(오른쪽)를 사용해보겠습니다.


3. 센서 기본 사용 예제


센서는 크게 디지털 센서와 아날로그 센서가 있습니다. 디지털 센서는 각 특성에 맞게 설계되어 특정 변화가 일어났을 때 디지털 신호(0, 1)를 출력하고, 아날로그 센서는 어떠한 특성 변화에 따라 아날로그 신호를 출력합니다. ESP32는 0~4095까지의 값을 출력하여 정밀한 제어가 가능합니다.

3.1. 디지털 센서


디지털 센서의 대표적인 센서인 버튼센서입니다.

저는 마침 책상에 치즈스틱 스타터키트의 버튼센서가 보여서 연결해 사용해 보겠습니다.


1. 보드와 센서의 연결


   -. 버튼센서를 23번에 연결 



2. 프로그램


 -. 버튼의 디지털입력값을 시리얼모니터에 출력


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#define BUTTON 23    //23번핀 = BUTTON으로 선언
 
void setup() {
 
pinMode(BUTTON, INPUT);   //BUTTON핀을 INPUT으로 설정
 
Serial.begin(9600);   //보트레이트(데이터전송속도)를 9600bps로 설정
 
}
 
void loop() {
 
int buttonState = digitalRead(BUTTON);   // BUTTON핀의 디지털 입력값 = buttonState 
Serial.println(buttonState);   // 시리얼 모니터에 buttonState 값 표시
 
delay(100);
 
}
cs


3. 동작 확인


 -. 버튼을 누르면 0, 누르지 않으면 1이 출력되는 것을 확인할 수 있습니다.

 -. 누를 때 0이 출력되는 것은 버튼 센서가 풀업 회로로 구성되었기 때문입니다.

   -> 풀업 회로 구성 알아보기 -> https://happycreative.co.kr/manual/detail.php?idx=29#666

  -. 이제 다양한 제품을 제어해볼 수 있겠지요?^^  


3.2. 아날로그 센서


아날로그 센서의 대표적인 센서인 로터리 퍼텐쇼미터 입니다.

역시 이전에 치즈스틱을 가지고 놀아서, 연결하여 해보겠습니다.


1. 보드와 센서의 연결


  -. 퍼텐쇼미터를 34번에 연결합니다.

  -. 핀 설정을 보면 아날로그 센서를 연결할 수 있는 핀이 정해져 있습니다. 아두이노 보드처럼 보드에 적혀져 있으면 좋겠네요^^;;



2. 프로그램

  -. 퍼텐쇼미터의 입력값을 시리얼모니터에 출력
  -. 아날로그값을 읽을 때는 pinMode() 함수를 선언하지 않아도 됩니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#define POTENTIOMETER 34  // 34번 핀 = POTENTIOMETER
 
void setup() {
 
Serial.begin(9600);
 
}
 
void loop() {
 
int value = analogRead(POTENTIOMETER);   // POTENTIOMETER핀 값을 아날로그 읽기 = value
Serial.println(value);    // value 값을 시리얼 모니터에 표시
 
delay(100);
 
}
cs



3. 동작


  -. 로터리를 돌려보니, 아날로그 입력값이 0~4095까지 잘 확인이 됩니다.

  -. 이제 아날로그 입력값의 범위를 정해서 다양한 제품을 제어할 수 있습니다^^. 



3.3. 출력


3.4. 블루투스


ESP32 보드는 블루투스가 내장되어 있어서 별도의 블루투스 모듈이 필요없습니다.

1. 소프트웨어 다운로드


아두이노 예제에서 SerialToSerialBT 를 불러옵니다.



17번 줄에 내가 사용할 블루투스 이름을 적습니다. 저는 'ESP32sooin' 으로 적었습니다.

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
//This example code is in the Public Domain (or CC0 licensed, at your option.)
//By Evandro Copercini - 2018
//
//This example creates a bridge between Serial and Classical Bluetooth (SPP)
//and also demonstrate that SerialBT have the same functionalities of a normal Serial
 
#include "BluetoothSerial.h"
 
#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif
 
BluetoothSerial SerialBT;
 
void setup() {
  Serial.begin(115200);
  SerialBT.begin("ESP32sooin"); //Bluetooth device name
  Serial.println("The device started, now you can pair it with bluetooth!");
}
 
void loop() {
  if (Serial.available()) {
    SerialBT.write(Serial.read());
  }
  if (SerialBT.available()) {
    Serial.write(SerialBT.read());
  }
  delay(20);
}
cs


2. 스마트기기와 연결


 1) 아두이노 블루투스 콘트롤러 App을 스마트기기에 설치합니다. 저는 검색 맨 위에 있는 것을 설치하였습니다.

 2) App을 실행하여 'ESP32sooin' 을 블루투스로 찾아 연결합니다.

  -. 안보이면 스마트기기 기본 블루투스에서 먼저 검색하여 연결을 합니다.


3. 시리얼모니터로 동작확인


 아두이노 블루투스 콘트롤러로 보낸 신호를 시리얼모니터로 확인합니다.


1) Switch mode




 2) Terminal mode

 3) 스위치/ 콘트롤러 모드는 설정을 눌러 전송값을 내가 원하는 값으로 정할 수 있습니다.


4. 활용


 이제 이 전송값을 가지고 다른 출력물을 제어하면 됩니다. 간단히 LED을 제어해볼까요?

22번핀에 연결된 LED를 전송되는 블루투스 신호가 1일 때 켜지고, 0일 때 꺼지게 합니다.

  

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
//This example code is in the Public Domain (or CC0 licensed, at your option.)
//By Evandro Copercini - 2018
//
//This example creates a bridge between Serial and Classical Bluetooth (SPP)
//and also demonstrate that SerialBT have the same functionalities of a normal Serial
 
#include "BluetoothSerial.h"
 
#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif
 
#define LED 22    // 22번핀 LED핀으로 선언
 
BluetoothSerial SerialBT;
 
void setup() {
  Serial.begin(115200);
  SerialBT.begin("ESP32sooin"); //Bluetooth device name
  Serial.println("The device started, now you can pair it with bluetooth!");
 
  pinMode(LED, OUTPUT);  // LED핀 OUTPUT으로 설정
}
 
void loop() {
  char order;
  if (SerialBT.available()) {
    order = SerialBT.read();   //블루투스 신호를 order로 설정
    if (order == '1') {       // order가 1이면 켜지고 아니면 꺼짐
      digitalWrite(LED, HIGH);
    
    } else {
      digitalWrite(LED, LOW);
    }
  } 
 
}
cs


3.5. WiFi (Blynk)


ESP32에 내장된 WiFI로 쉽게 IoT를 구축할 수 있습니다.

여기서는 기초 설명으로 Blynk와 연동하여 IoT를 구성하는 방법을 설명하며, 4. Blynk 카테고리에서 별도로 다루겠습니다.

3.6. 초음파 센서


1. 원리


2. 사용 예제


3. 3핀으로 사용하기


 초음파를 발사하는 핀(Trig)와 받는 핀(Echo)를 한 핀으로 사용할 수 있습니다.

간단하게 Trig 신호를 보낸 후 핀모드를 입력 모드로 변경하여 Echo 신호를 수신하는 방법입니다.


Trig와 Echo를 병렬로 연결하면 되는데, 연결을 쉽게 하기 위해 젠더를 만들었습니다.
노이즈 감소를 위해 Trig에 4.7K의 저항을 달았습니다.
 


 

ESP32에 사용하는 예제입니다.
3.3V에서도 동작하는 HC-SR04P를 사용하셔야 합니다.

프로그램을 읽어보시면 쉽게 이해가 되실 겁니다^^

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
#define US_PIN 4 // 사용하고자 하는 GPIO 핀 번호
 
void setup() {
  Serial.begin(115200);
}
 
void loop() {
  // 트리거 신호 보내기
  gpio_set_direction((gpio_num_t)US_PIN, GPIO_MODE_OUTPUT);
  gpio_set_level((gpio_num_t)US_PIN, 0);
  delayMicroseconds(2);
  gpio_set_level((gpio_num_t)US_PIN, 1);
  delayMicroseconds(10);
  gpio_set_level((gpio_num_t)US_PIN, 0);
 
  // 에코 신호 수신 대기
  gpio_set_direction((gpio_num_t)US_PIN, GPIO_MODE_INPUT);
  long duration = pulseIn(US_PIN, HIGH);
 
  // 거리 계산 (cm)
  long distance = duration * 0.034 / 2;
 
  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println(" cm");
 
  delay(500); // 0.5초 대기
}
cs


 

4. Blynk (IoT, WiFi)


4.1. Blynk와 ESP32 연동


ESP32에 내장된 WiFI로 쉽게 IoT를 구축할 수 있습니다.

간단히 LED ON/OFF하는 것을 예제로 Blynk와 연동하여 IoT를 구성하는 방법을 설명합니다.


간단히, Blynk에서 접속 정보를 아두이노 IDE통해 ESP32 보드로 전달한다고 생각하면 쉽습니다.

정보를 받은(업로드 된) ESP32보드는 전원이 켜지면 알려준 WiFi에 접속하여 인터넷으로 Blynk와 연결이 되는 겁니다. 


먼저 Blnyk 웹에 접속하여 회원가입을 합니다. -> https://blynk.io/  



1. Blynk 웹에서 ESP32와 연동 - 퀵 스타트 사용

  

  -. 아래 사진처럼 튜브모양 클릭하여, 퀵 스타트를 클릭한 뒤, 순서대로 선택합니다.
   -> 보드 선택 -> ESP32
   -> 연결방식 -> Wifi
   -> 사용 개발환경 -> arduino

  -. 사용할 WiFi 이름과 번호를 넣은 후 code copy를 클릭하여 복사합니다.



2. 아두이노 라이브러리 설치 및 코드 업로드 


  -. 라이브러리 매니저를 실행하여 'Blynk'를 검색하여 설치합니다.




  -. Blynk에서 복사한 코드를 붙여넣고 업로드 합니다.



  -. 업로드가 완료되면 시리얼모니터를 실행합니다.

  -. Blynk에 연결되었다는 메세지가 나오면, 'Go To Device'를 클릭합니다.

   -> 연결 메세지가 안나오면
    => ESP32보드 왼쪽 아래의 'EN' 버튼 클릭

    => 'Serial.begin();' 주파수값과 시리얼 모니터의 보드레이트 값이 일치하는지 확인 



3. Blynk 설정


 1) 디바이스 및 템플릿 이름을 각각 변경

  -. 이름 옆에 'online' 표시로 연결되었음이 확인됩니다.


  -. 디바이스 및 템플릿 이름 변경은 각각 해주어야 합니다.

  -. 돋보기 -> ... -> Rename 을 클릭하여 디바이스 이름을 바꾸어줍니다.





  -. 템플릿 -> 이름 바꿀 템플릿 클릭 후 Edit를 클릭하여 이름을 바꾸어 줍니다.



 

4. 아두이노 예제 이용하기


 ​퀵 스타트에서는 쉽게 정보를 입력하고 한 번에 접속 정보가 담긴 코드를 아두이노 IDE에 복사/ 붙여넣기하여 ESP32 보드에 업로드하였습니다.

 ​퀵 스타트를 이용하지 않고 Blynk 웹에서 일반적인 방법으로 템플릿을 만들고 아두이노 IDE에서 제공하는 예제에서 일부 코드만 변경하는 것으로도 가능합니다.

 퀵 스타트가 편하신 분은 그냥 퀵 스타트로 하시면 됩니다^^


 1) Blynk 웹에서 템플릿 만들기


  -. '템플릿' -> '+ New Template' 를 클릭합니다.


  -. 이름을 넣고, ESP32/ WiFi 를 확인한 뒤 'Done' 를 클릭합니다. 저는 'Smart Farm' 이라고 만들었습니다.


  -. Smart Farm 템플릿이 잘 만들어 졌네요. 'Save'를 클릭합니다.


  -. '돋보기'를 클릭한 뒤, 'New Device' 를 클릭합니다.


  -. 탬블릿을 클릭한 뒤, 만들어 놓은 'Smart Farm' 을 선택하고 'Create' 를 클릭합니다. 정보를 확인 후 'Done'을 클릭합니다.



  -.  정보를 확인 후 'Save'를 클릭합니다.


  -. 'Smart Farm' 접속 정보가 만들어졌습니다. 이 정보를 클릭하여 복사합니다.

  -. 이 접속 정보는 'Device Info' 탭에서도 확인할 수 있습니다.


 2) 접속 코드 예제 열기


  -. 아두이노 IDE에서 예제 -> Blynk (사용자 정의 라이브러리의 예) -> Boards_WiFi -> ESP32_WiFI 를 선택하여 엽니다.



  -. 윗 부분 주석을 삭제합니다. 삭제하기 싫으면 안하셔도 됩니다^^


  -. Blynk 웹에서 복사한 코드를 아래 사진 위치에 복사합니다.


  -. 연결할 WiFi 정보를 입력합니다. (2G만 가능)


  -. 보드에 컴파일 -> 업로드 후 시리얼모니터에 아래 내용이 나오면 정상적으로 ESP32보드와 Blynk 웹이 연동이 되었습니다.

4.2. 데이타스트림/ 웹 대쉬보드


1. 데이타스트림 만들기


 데이타스트림은 ESP32와 Blynk 서버가 데이터를 전송하는데 사용하는 채널입니다. 쉽게 ESP32 보드에서 데이터를 보내는 곳이라고 생각하면 됩니다. 


  -. 템플릿을 클릭하여 'smart led' 를 선택합니다.


  -. 데이타스트림 탭을 선택하고 EDIT를 클릭합니다.




  -. 4번핀에 연결한 LED와 연결 설정하겠습니다.  New Datastream에서 디지탈을 클릭합니다.



  -. 이름, 별칭, 핀번호, 핀모드를 선택한 후 Create를 클릭합니다.


2. 웹 대쉬보드 설정 및 동작하기

   웹 대쉬보드는 데이타스트림 설정을 바탕으로 동기화된 센서나 소자를 위젯 형태로 가시화하여 제어할 수 있도록 하는 것입니다.
  
  -.. 데이타스트림 탭에 들어갔던 것 처럼, 템플릿 클릭 -> smart led 클릭 -> 웹 대시보드 탭을 선택한 후 EDIT를 클릭합니다.
  -. 위젯박스에서 스위치를 드래그앤드랍하여 대시보드안으로 넣고, 설정을 클릭합니다.



  -. 이름을 넣고, 만들어 놓은 데이타스트림(우리는 'LED'로 만들었지요^^)을 연결하고, ON을 '1', OFF를 '0'으로 설정하고 SAVE를 클릭합니다.

  -. 돋보기 클릭 -> 내디바이스를 클릭하면, 대시보드탭에 우리가 만들어 놓은 LED Switch 버튼이 있습니다. 눌러보면 LED가 ON/ OFF 되는 것을 확인할 수 있습니다.




4.3. Blynk App


이제 PC가 아닌 스마트폰으로 제어를 해볼까요?

 플레이스토어에서 Blynk App을 다운받아 설치 및 로그인합니다.

 로그인을 하면, 내 PC에서 만들어 놓은 디바이스가 보이지만,  PC와 스마트기기는 각각 위젯을 설정해 주어야 합니다.

 1) 위젯 지우기 및 불러오기
  -. 로그인해서 내 디바이스를 클릭합니다.
  -. 축하 메세지와 함께 몇 가지 기본 배치된 위젯이 보입니다. 위에 도구모양을 클릭하면 위젯 설정모드로 진입합니다.


  -. 먼저 있던 것을 깨끗하게 지웁니다. 위젯을 누르고 있으면 위쪽에 '리사이클'모양이 나오는데 여기에 드래그앤드롭하여 버리면 됩니다. 


  -.  오른쪽 위 '+' 눌러 위젯 박스를 열어서 'Button' 을 클릭하여 위젯을 추가하고, 추가된 위젯을 클릭합니다.

  -. Data 를 클릭하여 만들어 놓은 데이타스트림(LED)을 연결합니다. 

  -. 디자인을 클릭하여 이름과 색상, 폰트 크기 등을 설정합니다. 저는 이름을 'led switch' 라고 하였습니다^^

  -. 이제 버튼을 누르면 LED가 제어됩니다. 이제 집에서도 이 LED를 껏다 켰다 할 수 있습니다^^

5. 활용 교구


ESP32보드를 활용한 IoT 교육용 교구를 소개하고 사용법, 매뉴얼을 공유합니다.

5.1. 스마트팜(IoT)


스마트폰으로 제어가 가능한 스마트팜 제작 키트입니다.


구매 링크 클릭


5.2. 스마트빌딩


5.3. 스마트 환경타워


TOP