Blynk 활용 2 – Blynk에서 라즈베리파이/ESP32에 연결된 LED를 원격으로 PC/스마트폰에서 제어하기

Blynk 활용 2 – Blynk에서 라즈베리파이/ESP32에 연결된  LED를 원격으로 PC/스마트폰에서 제어하기

Blynk

앞선 글에서, IOT 플랫폼으로 유명한 Blynk에 대해 간략히 소개하고, 마이크로 파이썬으로 코딩이 가능한 라즈베리파이 피코 W 보드(이하 라즈베리파이 피코 또는 피코로 약칭)를 Blynk에 연결하는 방법과, 이를 이용하여 PICO 보드에 연결된 센서의 측정값들을 멀리 떨어진 PC나 스마트폰에서 측정값을 실시간으로 확인하는 방법을 소개한 바 있었다.

그런데, Blynk에서는 이처럼 라즈베리파이에서 보내오는 신호를 단순히 모니터링하는 것에 더하여, 반대로 라즈베리파이로 신호를 보내 라즈베리파이에 연결된 장치들을 켜거나, 끄는 제어 동작도 가능하기에,

본 글에서는 Blynk에서 라즈베리에 신호를 보내 전원을 켜거나 끄는 제어 동작을 하는 방법을 소개한다.

선행지식

본 글은 Blynk 사용에 대한 기초지식을 전제로 하므로, 해당 내용이 생소한 경우 다음 글을 먼저 읽기 바란다.

https://blog.naver.com/mythee1/223442964919

Blynk로 제어를 하려면….

본 글에서는 다음과 같이 라즈베리파이 피코에 연결된 2개의 LED를 Blynk에서 켜고, 끄는 제어 동작을 하는 방법을 예로 들어 소개한다.

위와 같이 라즈베리파이에 연결된 LED를 Blynk에서 켜거나 끄려면, 다음 2가지가 필요하다.

1) Blynk 대시보드에서, On/OFF 스위치를 만들고, 버튼 상태를 신호 입출력 채널 번호를 지정한다.

2) 해당 버튼이 눌려졌을 때 라즈베리파이 동작에 대한 코드를 만든다. IRQ_Handler 기법을 사용한다.

이러한 사항을 단계별로 자세히 설명하면,

Step 1. Blynk 대시보드에서 스위치 버튼을 만들어주고, Virtual Pin을 할당한다.

다음과 같이 Blynk의 대시보드에 들어간 후, 위젯 박스에서 Switch를 선택하여 대시보드 편집화면 부분으로 드래그해준다.

그리고, 드래그 된 Switch 버튼의 설정 버튼을 눌러주고,

다음 화면이 되면, 해당 스위치의 이름을 지정해 준다.

그리고 여기에 연결되는 데이터 입출력 채널을 지정하는데, 기존에 이미 만들어진 것이라면 해당 핀을 선택하면 되지만, 만일 새로 생성하는 것이라면, 다음과 같이 “Virtual Pin”을 선택하고, Save를 선택한다.

그러면 세부 사항을 지정할 수 있는 화면이 나오는데, 이 값들을 확인 또는 변경한 후, “Create”를 눌러준다.

그러면 위의 복잡했던 사항들이 다음과 같이 단순화된 스위치 설정으로 변경되며, 다시 한번 확인을 요청하는데, 내용을 확인 후, “Save”버튼을 눌러준다.

그러면 다음과 같이 대시보드에 해당 스위치가 생성 및 설정이 완료되며,

동일한 동작을 필요한 스위치의 수만큼 반복해 준다. 물론 해당 스위치의 이름과, 입출력 채널 번호는 매 스위치마다 적절히 변경해 주어야 한다. 이처럼 대시보드에서의 작업이 완료되면, 우측 상단의 “Save And Apply”를 눌러 대시보드 편집 작업을 저장해 준다.

그러면 다음과 같이 해당 장치의 대시보드에 Switch1과 Switch2의 이름으로 스위치가 2개 생성되어, 사용 가능하게 된 것을 확인할 수 있다.

Step 2. 마이크로 파이썬 코드에 다음과 같은 코드를 추가해 준다.

이들은 각기 Switch1에 할당된 v0핀과, Switch2에 할당된 v1 핀의 신호에 따라, 각기 GP14와 GP15에 연결된 LED를 켜거나 끄도록 구성된다.

참고로, 전체 예제 코드는 다음과 같은데, 기존의 글에서 소개한 AHT10을 이용하여 온도와 습도를 측정하고 Blynk에 전달하던 마이크로 파이썬 코드에 위의 코드를 추가하여 완성하였다.

from machine import Pin, I2C
import utime
import sys
from aht10 import *
import network
from blynklib import Blynk

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(각자의 SSID, 각자의 PASSWORD)
while not wlan.isconnected() and wlan.status() >= 0:
print("Waiting to connect:")
    utime.sleep(1)
if wlan.status() != 3:
    raise RuntimeError('network connection failed')
else:
print("Wifi is connected == ", wlan.isconnected())
BLYNK_TEMPLATE_ID= "TMPL6e-jVFU0N"
BLYNK_TEMPLATE_NAME= "Quickstart Template"
BLYNK_AUTH_TOKEN= "_hK63KEb4cI_A6nOifmWlnwippRdVLM6"
blynk = Blynk(BLYNK_AUTH_TOKEN)

led1=machine.Pin(14, machine.Pin.OUT)
led2=machine.Pin(15, machine.Pin.OUT)

@blynk.on("V0")
def v0_write_handler(value):
if int(value[0]) != 0:
        led1.value(1)
else:
        led1.value(0)

@blynk.on("V1")
def v1_write_handler(value):
if int(value[0]) != 0:
        led2.value(1)
else:
        led2.value(0)       
    
i2c = machine.I2C(0, scl=machine.Pin(1), sda=machine.Pin(0), freq=400000)
while True:
detect_sensor(i2c)
    reading=convert(i2c)
    Temp=reading[0]
    Humidity=reading[1]
print("Temperature       (AHT10) :  ",Temp, " °C")
print("Relative Humidity (AHT10) :  ", Humidity, "  %")
    blynk.virtual_write(7, Temp)
    blynk.virtual_write(8, Humidity)
    blynk.run()
    utime.sleep(0.5)

(참고: 라즈베리파이 피코 보드 대신 ESP32를 사용하는 경우라면, 위의 코드에서 Wifi 접속확인을 위한 값을 “!=3″에서 “!= 1010″으로 변경해서 지정해 주어야 한다.)

이 코드를 이용하여, Blynk 대시보드에서 LED를 제어하는 모습은 다음과 같다.

스마트폰에서 제어를 하려면….

이전 글에서 소개한 방법대로, 스마트폰의 Blynk 대시보드에 들어간 후,

화면 하단의 “+” 버튼으로 위젯 박스에 들어간다.

위젯 박스에서는 다음과 같이 “Button”을 선택해 준다.

그러면 다음과 같이 버튼이 추가되는데, 이를 선택하면

다음과 같은 설정화면에 들어가게 된다.

여기서 Data 입출력 번호를 선택(기생성된 경우) 하거나, 새로 만들어주면 된다.

그리고 다음과 같이 Settings를 “Switch”로 지정해 준다.

만일 필요하면, Design 탭으로 옮겨, 글자의 색상과 크기 등을 변경해 준다.

필요한 스위치의 수만큼 작업을 반복해 주고(핀번호, 이름 등은 당연히 적절히 다르게 지정),

편집을 마친 후, 대시보드로 나오면 다음과 같은 형태가 된다.

이렇게 구성된 스마트폰의 Blynk 대시보드에서, 라즈베리파이 피코에 연결된 LED를 켜고 끄는 동작 모습은 다음과 같다.