Blog of OH! MY ENGINEER

오마이엔지니어 블로그

ESP32 우노 D1 R32 (BLE + WiFi) 보드를 사용해서 BLE 서버를 만들어 보고 스마트폰 앱으로 서버 확인해 보기

댓글 0

Arduino(아두이노) IoT 키트 강좌

2019. 6. 26.

ESP32 우노 D1 R32 (BLE + WiFi) 보드로 BLE 서버를 만들어보고 스마트폰 앱으로
서버 및 특성을 확인해 보고 스캔해 보는 프로젝트 입니다

먼저 ESP32 우노 D1 R32 (BLE + WiFi) 보드의 초기 세팅법과 사용방법에 대해서 간단하게 알아보고
Blink 테스트를 해보겠습니다

아두이노 우노 플랫폼의 WiFi 와 BLE 기능을 동시에 지원하는 ESP32 기반 IoT 개발보드 입니다

CH340 드라이버를 사용하며 한개의 프로세서가 통신을 할때 다른 한개의 프로세서가 I/O 제어를 담당하는
듀얼프로세스 마이크로프로세서를 장착하여 ESP8266의 치명적인 단점을 개선하였습니다
DOIT ESP 32 개발보드 와는 다르게 스케치 업로드시 BOOT 버튼을 별도로 눌러줄 필요가 없습니다
하지만 DOIT ESP 32 개발보드에 비해 회로도나 핀맵등 정확한 사양자료가 없어서 아쉬운 부분이 많습니다
(ESP32 포럼이나 Wemos 홈페이지등에 추후에 업데이트 되는부분을 확인해 봐야겠습니다)
아두이노 통합 개발환경 Arduino IDE 를 지원하며, 아두이노를 이용하여 IoT 프로젝트를 진행하기에 적합합니다
ESP32 라이브러리는 계속해서 업데이트 되고 있기 때문에 ESP32 포럼은 주기적으로 확인하는 것이 좋습니다

Espressif
ESP 32 Forum WebPage


<ESP32 우노 D1 R32 (BLE + WiFi) 보드 이미지>





<ESP32 D1 R32 상세 사양>

사용된 부품

ESP32 우노 D1 R32 개발보드
미니 브래드 보드 - 1개
점퍼케이블
막대저항 220 Ohm

5mm LED 블루

초기세팅 방법
ESP32 우노 D1 R32 (BLE + WiFi) 보드는 CH340 SERIAL DRIVER 를 사용하기 때문에
일단 장치인식을 위해서 드라이버를 설치해 줍니다
자신의 OS에 맞는 드라이버를 다운로드 받아서 설치해 줍니다

(윈도우용을 첨부하였습니다 CH340 설치를 했는데 장치관리자에 인식이 안된다면 CH341 드라이버를 설치해 보세요)

CH340 USB_Serial Driver.zip

CH341SER.ZIP

드라이버 설치가 끝나고 보드를 마이크로 USB케이블로 연결하면 PC의 장치관리자에 CH340 로 COM포트가 확인됩니다


기본적으로 아두이노 통합 개발환경 아두이노 IDE 를 설치해야 합니다 (Arduino.cc 의 IDE 를 설치합니다
Arduino.org 의 IDE 와는 호환 되지 않습니다)
https://www.arduino.cc/en/Main/Software

github 에서 esp32 라이브러리와 툴을 다운 받습니다 
https://github.com/espressif/arduino-esp32

arduino-esp32-master.zip 파일을 압축 해제한 다음 폴더명을 편의상 esp32 로 변경해 줍니다
C:\Program Files (x86)\Arduino\hardware 이 경로에 hardware 폴더안에 espressif 폴더를 새로 만들어 줍니다
C:\Program Files (x86)\Arduino\hardware\espressif 이렇게 경로가 되고 espressif 폴더안에 esp32 폴더를 넣어주면 됩니다

그리고 마지막으로 C:\Program Files (x86)\Arduino\hardware\espressif\esp32\tools 경로의

tools 폴더안에 get.exe 를 관리자 권한으로 실행시켜 주면 됩니다


위와 같은 창이 뜨는데 모든 설치가 정상적으로 끝나면 창이 자동으로 닫히니 정상적으로 설치가 종료 될 때까지 기다립니다


윈도우 10은 경로가 틀릴수 있는데 윈도우10 은 C:\Users\Administrator\Documents\Arduino\hardware 경로로 설치하면 됩니다

Arduino IDE 를 실행한 다음 툴 메뉴를 확인해 보면 아래처럼 ESP32 패밀리가 추가된 것을 확인할 수 있습니다

ESP32 Dev Module 로 보드를 선택하고 포트를 잡아준 후 업로드 스피드를 115200 으로 변경해 줍니다

ESP32 라이브러리의 대부분의 통신속도가 115200으로 세팅되어 있기 때문에 115200으로 변경해 주는게 좋습니다

ESP32 툴과 라이브러리가 정상적으로 설치가 되었습니다
다만 github 에서 다운로드 한 arduino-esp32-master.zip 압축파일을 풀어보면 알수 있겠지만

libraries 폴더안의 AzureIoT 와 BLE 폴더가 비어있습니다
때문에 IDE에서 잘못된 라이브러리가 있다는 메세지가 계속 나옵니다 (이 두 폴더를 삭제해 주면 해결됩니다)


ESP32 우노 D1 R32 (BLE + WiFi) 보드의 동작 유무도 확인해 볼 겸 Blink 테스트를 해보겠습니다

아래 배선도를 참조해서 배선합니다


구성배선도



사용된 예제파일

ESP32 Blink_D1 R32 LED.txt

ESP32 Blink_LED.txt


위 첨부된 "ESP32 Blink_D1 R32 LED" 예제는 ESP32 우노 D1 R32 보드의 LED를 깜박이게 하는 예제입니다

예제파일을 확인해 보면 알 수 있듯이

int LED_BUILTIN = 2;

2번핀에 LED를 연결해야 하는것을 알수 있습니다

위 첨부된 "ESP32 Blink_LED" 예제는 브래드 보드에 배선 된 LED를 깜박이게 하는 예제입니다

예제파일을 확인해 보면 알 수 있듯이

int LED_BUILTIN = 25;

25번핀에 LED를 연결해야 하는것을 알수 있습니다

스케치를 복사해서 컴파일 및 업로드를 해줍니다


프로젝트 동영상


ESP32 우노 D1 R32 (BLE + WiFi) 보드의 이상유무도 확인했고 이어서

BLE 서버를 만들어 보고 스마트폰 앱으로 서버를 확인해 보고 스캔해 보는 프로젝트를 진행해 보겠습니다



블루투스 BLE(Bluetooth Low Energy)란?

BLE 는 저전력 절전형 블루투스를 일컫으며 소량의 데이터를 단거리에 전송하는데 적합합니다
BLE는 특성으로 인해 코인 셀에서 주기적으로 소량의 데이터를 교환해야하는 응용 프로그램에 적합한데
예를 들어, BLE는 건강 관리, 피트니스, 추적, 표지, 보안 및 가정 자동화 산업에서 매우 유용합니다


BLE(Bluetooth Low Energy)에는 서버클라이언트 두 가지 유형의 장치가 있습니다
ESP32는 서버 또는 클라이언트로 작동 할 수 있습니다


서버는 자신의 존재를 알리며 데이터를 클라이언트에 전송합니다
클라이언트는 주변의 장치를 검색하고 서버를 찾으면 연결을 설정하고 데이터를 수신합니다

BLE의 서비스, 특성 및 설명자에는 고유한 128 비트 번호 고유번호 UUID (Universally Unique Identifier) 가 포함됩니다

사용된 부품

ESP32 우노 D1 R32 개발보드


사용된 라이브러리

ESP32_BLE_Arduino-master.zip


라이브러리 추가 방법은 Arduino IDE 설치하기 포스팅을 참조해 주세요


사용된 예제코드

위 첨부된 ESP32_BLE_Arduino-master 라이브러리 설치후 아두이노 IDE 에서 파일-->예제-->ESP32_BLE_Arduino-master-->examples-->BLE_server 순으로 클릭해서 예제를 업로드해 줍니다


주의사항

ESP32 기본 라이브러리 외에 ESP32_BLE 라이브러리가 필요합니다
위 첨부파일을 다운로드 해서 압축해제 후 설치해도 되고 아래 링크에서 다운로드 해서 설치해도 됩니다
https://github.com/nkolban/ESP32_BLE_Arduino

BLE SERVER 예제코드를 확인해 보면
#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEServer.h>

위와 같은 라이브러리를 사용합니다

#define SERVICE_UUID        "4fafc201-1fb5-459e-8fcc-c5c9c331914b"
#define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8"

서비스 및 특성자에 대한 UUID를 설정해야 합니다
위 기본 UUID 를 사용해도 되고 https://www.uuidgenerator.net 링크의 UUID 생성 웹사이트를 이용해 새로 생성해도 됩니다

void setup() {
  Serial.begin(115200);
  Serial.println("Starting BLE work!");

시리얼 통신 속도는 역시 115200 입니다
BLE 동작시 시리얼 모니터로 'Starting BLE work!' 를 출력해 줍니다

BLEDevice::init("Long name works now");
BLE 디바이스를 생성하며 "Long name works now" 이 부분 원하는대로 변경 가능합니다

BLEService *pService = pServer->createService(SERVICE_UUID);
해당 서비스 특성을 설정합니다

pCharacteristic->setValue("Hello World says Neil");
setValue () 메소드를 사용하여 특성을 설정할 수 있습니다
"Hello World says Neil" 이부분은 원하는대로 변경 가능합니다


정상적으로 스케치 컴파일 업로드가 완료되면 아두이노 IDE의 시리얼 모니터를 실행 후 RST 리셋버튼을 눌러 줍니다 

BLE가 정상적으로 동작한다는 메세지와 특성자를 찾았고 폰으로 읽을수 있다는 메세지가 출력 됩니다
물론 이때 시리얼 모니터 설정은 Both NL & CR 과 보드레이트 115200 으로 되어 있어야 겠습니다

스마트 폰으로 ESP32 BLE 서버를 스캔하고 서비스 및 특성을 확인할 수 있습니다

Nordic의 nRF Connect for Mobile 이라는 Android (Google Play 스토어)  및  iOS (App Store)에서 사용 가능한 앱을 설치 합니다

구글 플레이 스토어에서 nRF Connect for Mobile 앱을 다운로드 해서 설치해 줍니다
https://play.google.com/store/apps/details?id=no.nordicsemi.android.mcp

사용방법은 너무 간단해서 따로 설명하지 않겠습니다

하지만 물론 앱 설치전에 스마트폰 설정에서 블루투스 관리자에서 블루투스를 켜고 BLE를 검색해서 연결해 주어야 합니다
BLE 네임은 변경을 안해서 Long name works now 인것을 확인 할 수 있습니다

앱을 설치하고 실행 후 스캐너 메뉴에서 연결(CONNECT) 해 주고 클랙해서 ESP32 서버를 확인해 보면 됩니다


UUID가 4fafc201-1fb5-459e-8fcc-c5c9c331914b 인것을 확인 할 수 있습니다
로컬 네임 역시 Long name works now 인것을 확인 할 수 있습니다

프로젝트 동영상-BLE 서버를 만들어 보고 스마트폰 앱으로 서버 확인해 보기


만약 ESP32 보드가 2대가 있거나 여러대가 있다면 1대를 서버로 하고 나머지 1대를 스캐너로 설정해서 사용할 수 있습니다


사용된 예제코드

1대는 위 첨부된 ESP32_BLE_Arduino-master 라이브러리 설치후 아두이노 IDE 에서 파일-->예제-->ESP32_BLE_Arduino-master-->examples-->

BLE_server 순으로 클릭해서 예제를 업로드해 줍니다

1대는 위 첨부된 ESP32_BLE_Arduino-master 라이브러리 설치후 아두이노 IDE 에서 파일-->예제-->ESP32_BLE_Arduino-master-->examples-->BLE_scan 순으로 클릭해서 예제를 업로드해 줍니다

2대의 ESP32 보드에 각각 서버와 스캔 예제 업로드 후 BLE_scan 예제가 업로드 된 ESP32 보드의 포트를 확인 후 
아두이노 IDE 시리얼 모니터를 실행합니다

디바이스를 1개 찾았다는 메시지와 서비스 UUID가 4fafc201-1fb5-459e-8fcc-c5c9c331914b 인것을 확인 할 수 있습니다

프로젝트 동영상-1개는 BLE 서버로 구축해 보고 1개는 BLE 스캐너로 사용해 보기