esp32 OpenWeatherMap에서 실시간 날씨 정보 받기

OpenWeatherMap.org#

OpenWeatherMap은 세계 각 지역의 현재 날씨, 예보, 과거 날씨 데이터를 제공하는 사이트입니다. (몇가지 제약이 있긴 하지만) 회원가입을 통해서 API Key를 생성하고 이를 통해 무료로 실시간 날씨 정보를 얻을 수 있습니다.


Free Current weather and forecasts collection#


Current weather collections API Key 생성#

  1. Sign Up을 클릭하여 회원가입을 하고,

esp32 BLE, Blynk Gauge

ESP32에서 Blynk로 센서값 보내기#

Blynk App의 GAUGE 위젯을 사용하여 ESP32에 연결된 Potentiometer의 저항값을 읽어 Blynk App에 전압(V), 저항(㏀) 값을 표시해본다. (ESP32 → Blynk App)

  • ESP32의 Potentiometer 값을 읽기 위해 BLYNK_READ(Vpin)을 사용한다.
  • 새로운 프로젝트를 만드는 경우, 새로운 auth token을 받아서 사용해야 한다.

schematic#

/image/blynk-adc-01.png

sketch#

#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[] = "WUAeS6P57T3XNaIGyLK1-OUv........";

// Potentiometer Pin
#define PIN_POTENTIOMETER A0                       // Potentiometer GPIO 36

// Resist, Voltage
int value_Potentiometer; 
int value_R;
float value_V;

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

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

void loop()
{
  value_Potentiometer = analogRead(PIN_POTENTIOMETER);  // 12bit ADC (0~4095)
  value_V = map(value_Potentiometer, 0, 4095, 3300, 0); // 0~3300mV
  value_R = map(value_V, 0, 3300, 10000, 0);            // 0~10kΩ
  
  Blynk.run();
  
  Serial.print("Resist : "); Serial.print(value_R); Serial.println("Ω");
  Serial.print("Voltage: "); Serial.print(value_V); Serial.println("mV");
  
  delay(1000);
}

BLYNK_READ(V1)           // ESP32 -> widget virtual pin1
{
  Blynk.virtualWrite(V1, value_R);
}

BLYNK_READ(V2)           // ESP32 -> widget virtual pin1
{
  Blynk.virtualWrite(V2, value_V);
}
  • Blynk에서 2개의 Gauge를 사용하기 위해 BLYNK)READ(Vpin)을 2번 사용한다.
  • Blynk.virtualWrite(Vpin, value)를 통해 Blynk App의 Gauge 위젯에서 지정한 virtual pin에 value값을 표시한다.


Blynk 설정#

  1. 새로운 프로젝트를 생성한다.
    • NAME : ESP32_Potentiometer
    • CHOOSE DEVICE : ESP32 Dev Board
    • CONNECTION TYPE : BLE
/image/blynk-adc-02.png

  1. 이메일로 발송된 토큰을 복사한다.
/image/blynk-adc-03.png

  1. +버튼을 눌러 위젯을 추가할 수 있는 화면으로 진입한다.
/image/blynk-adc-04.png

  1. 먼저 BLE 위젯을 선택하여 ESP32와 Blynk간의 통신 방법을 지정한다.
/image/blynk-adc-05.png

  1. 블루투스 모양의 위젯 버튼을 눌러 Blynk와의 통신을 준비한다.
/image/blynk-adc-06.png

  1. Connect BLE device
/image/blynk-adc-07.png

  1. 연결하고자 하는 BLE 장비를 선택하면,
/image/blynk-adc-08.png

  1. 연결 확인!
/image/blynk-adc-09.png

  1. +버튼을 눌러 출력 위젯 2개를 추가한다. (Gauge, Labeled value)
/image/blynk-adc-10.png

  1. 먼저 Gauge 위젯을 선택한다.
/image/blynk-adc-11.png

  1. Gauge 위젯이 추가되면 육각형 모양의 아이콘을 눌러 GAUGE Setting 화면으로 진입한다.
/image/blynk-adc-12.png

/image/blynk-adc-13.png

  1. 설정화면에서 다음 4가지를 설정한다.
    • NAME : 저항
    • INPUT : V1, 0~1000
    • LABEL : (단위를 표시하기 위해) x10 Ohm 을 적는다.
    • READING RATE : 1sec (PUSH 위젯은 실행되지 않음)
/image/blynk-adc-14.png

  1. Labeled Value 위젯을 추가하고, 다음과 같이 설정한다.
    • NAME : 저항
    • INPUT : V2, 0~3300
    • LABEL : (단위를 표시하기 위해) mV 를 적는다.
    • READING RATE : 1sec (PUSH 위젯은 실행되지 않음)
/image/blynk-adc-15.png

  1. 상단의 뒤로가기 화살표를 눌러 프로젝트 바탕화면으로 돌아간다.
/image/blynk-adc-16.png

  1. 여기서 플레이버튼을 누르면,
/image/blynk-adc-17.png

저항과 전압의 측정이 시작된다. (시리얼 모니터에서도 관찰 가능)

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#

/image/blynk-pwm-01.png

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


sketch#

#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에 다음의 라인을 추가하여야 한다.

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 모듈을 사용하는 경우에는 저항을 연결하지 않는다.

Arduino, Bluetooth, Blynk

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 하기#

Blynk 계정생성 및 Auth Token 받기#

  1. Blynk App 실행
  2. Create New Account : 주로 사용하는 e-mail을 사용하여 계정 생성
  3. Blynk에서 New Project 생성
    • 아이폰용 MLT-BT05의 경우
      • Project Name 설정: BLE Test
      • CHOOSE DEVICE: Arduino UNO
      • CONNECTION TYPE: BLE
      • 설정 후 Create 버튼
    • 안드로이드용 HC-06의 경우
      • Project Name 설정: HC-06 Test
      • CHOOSE DEVICE: Arduino UNO
      • CONNECTION TYPE: Bluetooth
      • 설정 후 Create 버튼
  4. Auth Token 확인
    • 가입시 지정한 이메일로 로그인하여 토큰 확인
    • (매우 복잡한 형태의) 토큰을 복사하여 코딩시 사용할 것이므로, 컴퓨터로 확인!
    • 스마트폰으로 확인하는 것은 무의미함

Blynk 위젯 설정#

  1. 아이폰용 MLT-BT05를 사용할 경우
    • 생성된 프로젝트(BLE Test) 바탕화면으로 진입하면 Blynk App 상단의 초록색 메뉴바의 이름이 BLE Test로 바뀜
    • 여기서 ⊕버튼 터치한 후 Button위젯과 BLE위젯 추가
    • 추가된 BUTTON 위젯 선택 후 설정
      • OUTPUT: Select pin: Digital D13 / MODE: SWITCH
  2. 안드로이드용 HC-06를 사용할 경우
    • 생성된 프로젝트(HC-06 Test) 바탕화면으로 진입하면 Blynk App 상단의 초록색 메뉴바의 이름이 HC-06 Test로 바뀜
    • 여기서 ⊕버튼 터치한 후 Button위젯과 Bluetooth위젯 추가
    • 추가된 BUTTON 위젯 선택 후 설정
      • OUTPUT: Select pin: Digital D13 / MODE: SWITCH

Blynk 연결하기#

  1. 아두이노 스케치 예제 불러오기
    • 파일 – 예제 – Blynk – Boards_USB_Serial – Arduino_SoftwareSerial 선택
    • 예제의 char auth[] = “YourAuthToken”; 부분을 찾아서 쌍따옴표 사이의 YourAuthToken을 지운 뒤, 이메일에서 복사한 AuthToken 붙여넣기
  2. 아두이노 UNO에 스케치 업로드
  3. 스마트폰의 블루투스 기능을 키고,
    • 아이폰용 MLT-BT05의 경우
      • Bluetooth 모듈 설정에서 설정한 모듈ID 디바이스를 연결(예를 들어 MLT-BT05-T) (디폴트 연결PIN 123456)
      • Blynk App에서 BLE버튼(블루투스 아이콘 모양) 터치 후 Connect BLE device 버튼을 누른 뒤,
      • 연결할 디바이스 MLT-BT05-T를 찾은 후 OK버튼 누름
      • MLT-BT05-T connected 메시지가 나오면 연결 완료된 것임
    • 안드로이드용 HC-06의 경우
      • Bluetooth 모듈 설정에서 설정한 모듈ID 디바이스를 연결(예를 들어 HC-06-T 디바이스를 연결 (디폴트 연결PIN 1234)
      • Blynk App에서 Bluetooth버튼(블루투스 아이콘 모양) 터치 후 Connect Bluetooth device 버튼을 누른 뒤,
      • 연결할 디바이스 HC-06-T를 찾은 후 OK버튼 누름
      • HC-06-T connected 메시지가 나오면 연결 완료된 것임
  4. Blynk App 상단의 뒤로 돌아가기 버튼을 누른 뒤, App 오른쪽 상단의 ▷(플레이버튼)버튼을 누름
    • App상단에 빨간색 숫자1이 보이면 아직 연결이 되지 않았다는 것을 의미함
    • 잠시 기다리면 빨간색 숫자1이 사라지고, 이 상태가 작동 준비가 완료된 것을 의미함
  5. BUTTON 아이콘을 눌러 ON/OFF → 아두이노 Built-in LED ON/OFF
  6. Blynk App 오른쪽 상단의 □(정지버튼)을 누른 뒤, ⊕버튼 터치한 후 Text Input 위젯 추가


슬라이더 위젯을 이용한 LED 밝기 제어#

Built-in LED가 사용하는 13번핀은 PWM이 지원되지 않으므로, 11번핀을 사용한다.

Blynk에 센서값 출력하기

원문: http://help.blynk.cc/en/articles/512056-how-to-display-any-sensor-data-in-blynk-app


센서값을 Blynk로 출력하기 위해서는 Blynk가 연결되지 않은 상태에서 시리얼모니터에 센서값들을 출력할 수 있어야 한다. ​센서값을 출력하는 코드가 완성되면, 그 다음으로 Blynk에 센서값을 보내는 작업을 시작하는 것이 좋다.

Blynk앱에 센서값을 표시하는 방법에는 크게 두가지 방법이 있으며, 진행중인 프로젝트에 따라 적절한 방법을 선택하면 된다.


PULL#

  • 이 경우에 블링크는 앱이 열려있는 동안에만 Blynk에서 값을 받는다.
  • 앱에서 센서값을 표시하는 가장 간단한 방법이며, Blynk 앱의 Virtual Pins이 구동중일때 센서값을 가져온다. (Blynk를 닫거나 백그라운드에서 실행될때 데이타는 요청되지 않는다.) 타이머를 사용할 필요가 없으므로 코딩이 단순한 편이지만, 데이터가 서버에 저장되지 않으므로 히스토리 그래프를 볼 수 없다는 단점이 있다.

Blynk 앱 설정#

  1. 새 프로젝트를 만든다. (새로운 Auth Token값이 당신의 이메일에 전송된다)
  2. Value Display 위젯을 추가한다.
  3. 위젯 세팅으로 가서 PIN 항목을 Virtual Pin V5로 설정한다.
  4. Reading Rate를 3초로 설정한다.

sketch#

  1. Analog Pin에서 값을 (간단하게) 읽어들이는 경우에는 코드를 쓸 필요가 없다. 단지 예제파일을 오픈하여 하드웨어와 커넥션만 변경한다.
  2. e-mail을 체크하여 Auth Token을 확인하고, 스케치에 Auth Token을 수정입력한다.
  3. 하드웨어에 코드를 업로드한다.
  4. Blynk에서 플레이버튼을 누른다.
  5. 값이 표시되는 것을 볼 수 있다.
BLYNK_READ(V5) { //Blynk app has something on V5
  sensorData = analogRead(A0); //reading the sensor on A0
  Blynk.virtualWrite(V5, sensorData); //sending to Blynk
}

이 코드는 매시간마다 Blynk가 _READ 요청을 Virtual Pin V5에 보내도록 한다. A0핀에서 센서값을 읽은 후, Blynk에서 Virtual Pin V5에 되돌려 준다.

Bluetooth Serial Controller 앱

Bluetooth 시리얼 통신#

Bluetooth Serial Controller 앱을 통하여 아두이노와 스마트폰 간의 간단한 시리얼 통신을 해보겠습니다. 이를 위해서는 먼저 Bluetooth 페어링 문서를 참고하여 블루투스 모듈과 스마트폰을 페어링 해두어야 합니다. 페어링이 완료된 후 시리얼 통신을 진행합니다.


schematic#

/image/BT-03.jpg

sketch#

#include <SoftwareSerial.h>
SoftwareSerial BTSerial(2, 3); //Connect HC-06 TX,RX 

void setup()  
 {
   Serial.begin(9600);
   Serial.println("Hello!");

  // set the data rate for the BT port
   BTSerial.begin(9600);
 }

void loop()
 {
   if (BTSerial.available())
     Serial.write(BTSerial.read());
   if (Serial.available())
     BTSerial.write(Serial.read());
 }


스마트폰에 Bluetooth Serial Controller 앱 설치하기#

  1. 이제 Google Playstore를 통해서 스마트폰에 Bluetooth Serial Controller 앱을 설치합니다. (iOS는 유사한 프로그램으로 설치)
/image/BTserialapp-01.png

​ 비슷한 역할을 하는 수많은 앱들이 있는데, 여러 앱을 설치하고 사용해본 결과, 이 앱이 사용하기에 유연함을 갖고 있는 것 같더군요.