esp32 BLE, Blynk Button

Blynk를 처음 사용하는 경우#

Blynk 라이브러리 설치하기#

  1. docs.blynk.cc 접속 – Downloads – Blynk Library
  2. https://github.com/blynkkk/blynk-library/releases/tag/v0.6.1
    • Blynk_Release_v0.6.1.zip 다운로드
  3. 압축을 풀면 libraries, tools 폴더가 보임
  4. 이 두 폴더를 아두이노IDE의 기본 스케치북 위치로 복사하여 붙여넣기 함
    • 기존의 libraries 폴더와 합쳐짐
    • 기본 스케치북 위치 확인 방법
      • 아두이노IDE – 파일 – 환경설정 – 설정탭 – 스케치북 위치

스마트폰에 Blynk App 설치하기#

  • 아이폰 : 애플 앱스토어
  • 안드로이드 : 구글 플레이스토어


버튼 위젯을 이용한 LED On/Off 하기#

schematic#

/image/blynk-01.png

※ RGB LED 모듈을 사용하는 경우에는 저항을 연결하지 않는다.

esp32 ADC

ESP32 ADC#

  • ESP32는 18개의 12bit ADC 입력핀을 사용할 수 있다. (0~4095)
  • 아두이노의 경우 10bit를 사용한다. (0~1023)
  • 0V ~ 3.3V의 전압을 0~4095(0xFFF)까지의 디지털값으로 AD 변환한다.
  • Arduino IDE 환경에서는 ESP32의 ADC 관련 레지스터를 조작하지 않고 analogRead() 함수를 사용하여 ESP32의 ADC 입력핀의 전압값을 가져올 수 있다. 


Potentiometer 저항값 출력하기#

schematic#

/image/esp32-adc-01.png

sketch#

가변저항의 저항을 A0(ADC1_CH0, GPIO36)로 읽고 전압값으로 변환한 뒤 시리얼 모니터로 출력한다.

// ESP32 ADC test
#define analogPin A0

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

void loop() {
  // read the input on analog pin GPIO36 (ADC1_CH0):
  int sensorValue = analogRead(analogPin);

  // Convert the analog (12bit ADC :  0 - 4095) to a voltage (0 - 3.3V):
  float voltage = (sensorValue /4095.0) * 3.3;

  // print out the value you read:
  Serial.println(voltage);

  delay(200);
}


Potentiometer로 LED 밝기 조절하기#

schematic#

/image/esp32-adc-02.png

  • LED : R → GPIO19 / G → GPIO18 / B → GPIO17 / GND
  • 저항 : R → 150Ω / G → 100Ω / B → 100Ω
  • Potentiometer: Left 5V, Center AO(IO36), Right GND

sketch#

#define RED_LED 19       // GPIO 19
#define analogPin A0     // Sensor VP, GPIO 36

int freq = 5000;         // 주파수
int ledChannel = 0;      // 채널 (0 ~ 15 선택)
int resolution = 10;     // 해상도 (1 ~ 16bit resolution 선택)
int R = 0;

void setup() {
  Serial.begin(115200);
  ledcSetup(ledChannel, freq, resolution);    // 지정된 채널, 주파수 및 해상도 설정
  ledcAttachPin(RED_LED, ledChannel);         // LED 핀과 채널 연결
}

void loop() {
  float raw = analogRead(analogPin);
  R = map(raw, 0, 4095, 0, 1023);             // 12bit -> 10bit

  Serial.print(R); Serial.println(" ohm");
  ledcWrite(ledChannel, R);
  delay(7);
}

esp32 시작하기

ESP32 시작하기#

Driver 설치: 처음 설치하는 경우#

ESP32는 USB-to-Serial bridge로 Silicon Labs의 CP210x를 사용한다. 제조사 홈페이지에서 자신이 사용하는 OS에 알맞는 CP210x 드라이버를 다운받아 설치한다.

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

Arduino IDE 설치#

Arduino IDE Download

https://www.arduino.cc/en/software

Arduino IDE 설정#

  1. Arduino IDE에서 파일> 환경설정> 설정 (File> Preferences> Settings)
/image/esp32-ide-01.jpg

  • 추가적인 보드 매니저 URLs에 아래 내용을 추가한다.
https://dl.espressif.com/dl/package_esp32_index.json

  • ESP8266에 대한 URLs를 사용하고 있었다면, comma를 사용하여 구분하면 두가지를 모두 사용할 수 있다.
https://dl.espressif.com/dl/package_esp32_index.json, http://arduino.esp8266.com/stable/package_esp8266com_index.json

  1. > 보드> 보드 매니저Tools> Board> Board Manager
/image/esp32-ide-02.jpg

  1. 보드 매니저에서 “ESP32"를 검색하여 INSTALL (혹은 업데이트)
/image/esp32-ide-03.jpg

  1. ESP32를 컴퓨터에 연결한 뒤, > 보드 에서 ESP32 Dev Module 선택
/image/esp32-ide-04.jpg

  1. > 포트 에서 포트 선택 (단, ESP32용 포트가 선택이 되지 않으면  CP210x USB to UART Bridge VCP Drivers를 설치하여야 한다. Windows, Mac 등 사용하고 있는 OS에 적합한 드라이버를 클릭하여 설치한다.

Testing Installation#

#include <Arduino.h>

const int R_ledPin = 19;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  pinMode(R_ledPin, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(R_ledPin, HIGH);
  Serial.println("LED is on");
  delay(1000);
  digitalWrite(R_ledPin, LOW);
  Serial.println("LED is off");
  delay(1000);
}

ESP32 GPIO19GND
저항150Ω
LED(+)극(-)극

/image/esp32-example-01.png

Upload#

스케치 업로드는 아래 3가지 방법 중 하나로 진행할 수 있다.

esp32-WROOM-32D DevkitC V4

ESP32-WROOM-32D DevkitC V4#

/image/esp32-pinout.png

핀아웃 다운로드


  • 녹색핀: 사용에 적합한 핀
  • 노란색: 사용은 가능하나 부팅시 예기치 않은 동작이 발생할 수 있으므로 주의해야 하는 핀 (GPIO34~39는 Input only!)
  • 빨간색: 입력 또는 출력으로 사용할 수 없는 핀을 의미한다. (사용이 가능하더라도 사용하지 않음!)
  • 보라색: Wifi사용시 사용불가한 analog핀
  • GPIO에서 Output이 가능한 모든 핀은 PWM으로 사용 가능
  • ADC: 0-3.3V (0-4095) (0-0.15V구간과 3.1-3.3V의 값은 리니어하지 않으므로 구별이 거의 불가능함
  • I2C: 아두이노IDE에서 사용하는 디폴트 핀
  • RTC GPIO: Ultra Low Power(Deep Sleep)모드의 ESP32를 Wake up
  • Strapping Pins: Bootloader나 Flashing시에 사용되며, 코드 업로드시 문제될 수 있음
  • High at Boot, Low at Boot, BOOT, PWM at Boot: Boot시 신호가 나오며, Output으로 사용하면 reset이나 booting시에 문제가 될 수 있는 핀


Peripheral#

ADC와 DAC 기능은 특정 핀에 고정되어 있다. 하지만 UART, I2C, SPI, PWM등의 기능은 어느 핀에 사용할지 결정해서 코드에서 지정해 줘야 한다. 소프트웨어에서 핀의 속성을 정의해 줄 수 있지만, 각 핀들은 디폴트로 지정되어 있는 기능들이 있다. (Pinout 참고)