esp32 BLE, Blynk Slider (PWM)

ESP32와 Blynk에서의 PWM 사용

Blynk app에서 Slider 위젯을 사용하여 App → ESP32로 PWM 신호를 보내 LED의 밝기를 조절해본다.

  • Blynk에서 Slider는 Virtual pin을 사용해야한다. (Digital핀을 선택하는 것이 불가능)
  • Virtual pin을 사용하기 위해 BLYNK_WRITE(Vpin)을 사용한다.
  • ESP32에서 PWM을 사용하기 위한 절차에 따라 코딩을 진행한다.

schematic

※ LED모듈을 사용하는 경우 저항이 필요없다.


sketch

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
#define BLYNK_PRINT Serial

#define BLYNK_USE_DIRECT_CONNECT

#include <BlynkSimpleEsp32_BLE.h>
#include <BLEDevice.h>
#include <BLEServer.h>

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "rc77E7UrbQHhoLE-LV1Ajxz20k8eLBrk";

// setting PWM properties
#define LEDC_FREQ 5000 // Hz
#define LEDC_CHANNEL_0 0
#define LEDC_RESOLUTION 12 // 10bit (0~1023) 12bit(0~4095) 16bit(0~65535)

// led Pin
const int pin_ledR = 19;

BLYNK_WRITE(V5) // widget virtual pin5 -> ESP32
{
int value_V5 = param.asInt();
ledcWrite(LEDC_CHANNEL_0, value_V5);
Serial.print("V5 value: "); Serial.println(value_V5);
}

void setup()
{
// Debug console
Serial.begin(115200);
Serial.println("Waiting for connections...");

// configure LED PWM functionalitites
ledcSetup(LEDC_CHANNEL_0, LEDC_FREQ, LEDC_RESOLUTION);

// attach the same channel to the GPIO to be controlled
ledcAttachPin(pin_ledR, LEDC_CHANNEL_0);

// for Blynk
Blynk.setDeviceName("Blynk-t");
Blynk.begin(auth);
}

void loop()
{
Blynk.run();
}

sketch 분석

Button 위젯 사용을 위해 사용하였던 예제 sketch에 다음의 라인을 추가하여야 한다.


  1. LED가 연결되어 있는 ESP32 핀
1
const int pin_ledR = 19;

  1. Blynk App에서 ESP32로 신호를 보내는 Virtual 핀
1
2
3
4
5
BLYNK_WRITE(V5) {                          // widget virtual pin(V5) -> ESP32
int value_V5 = param.asInt(); // V5로 지정된 위젯의 값을 읽고
ledcWrite(LEDC_CHANNEL_0, value_V5); // PWM 채널0으로 보냄
Serial.print("V5 value: "); Serial.println(value_V5); // 시리얼모니터에 출력
}

  1. LED에 PWM 신호 출력 (밝기 조절)
1
2
3
4
5
// configure LED PWM functionalitites
ledcSetup(LEDC_CHANNEL_0, LEDC_FREQ, LEDC_RESOLUTION);

// attach the same channel to the GPIO to be controlled
ledcAttachPin(pin_ledR, LEDC_CHANNEL_0);

Blynk App 설정

  1. Button 위젯을 삭제한다. (그냥 두어도 관계없음)



  1. 프로젝트 바탕화면에서 ⊕버튼을 누른 후, Slider 위젯을 추가한다.

  1. 프로젝트 바탕화면의 Slider 위젯을 누른다.

  1. Slider 설정화면이 나오면,

PIN을 누르고 사용할 Virual 핀을 선택한 뒤 OK버튼을 누른다. (여기서는 V5선택)



  1. 다음 3가지를 추가로 설정한다.
    • OUTPUT 범위 : 0 ~ 4095 (12bit 사용시)
    • SEND ON RELEASE : OFF (OFF 선택시 Slide를 조절하는 즉시 실시간으로 출력값 반영되며, ON 선택시 Slide에서 손가락을 떼면 출력값이 반영된다.)
    • WRITE INTERVAL : SEND ON RELEASE를 OFF로 선택시 나타나며, 100ms가 가장 작은 값이다.


설정을 모두 마치면 상단의 뒤로가기 화살표를 눌러 프로젝트 바탕화면으로 돌아간다.


  1. Slider 위젯을 1초이상 누르고 있으면 위젯의 위치와 크기를 조절할 수 있다. 위젯의 위치를 아래로 내리고 가로폭의 크기를 늘려본다.


  1. 이제 플레이(▷) 버튼을 누르고 Slide를 조절해본다.

Slide값에 따라 LED의 밝기가 조절된다.



  1. Slider를 조절하는 동안 Arduino IDE의 시리얼 모니터값을 확인해볼 수 있다.

Author

chemidot

Posted on

2019-10-22

Updated on

2021-11-17

Licensed under

댓글