IOT 클라우드에서 지정한 횟수만큼 원격 LED를 반복해서 점멸시키는 방법

IOT 클라우드에서  지정한 횟수만큼 원격 LED를 반복해서 점멸시키는 방법

IOT 클라우드에서 원격 조작 기초

앞선 글에서, IOT 클라우드를 이용하여 멀리 떨어진 곳의 LED를(또는 전원 스위치를) 켜거나 끄는 방법을 소개한 바 있었다. 이러한 동작은 널리 사용되는 아두이노 클라우드와, Blynk 클라우드에서 모두 가능하며, IOT 클라우드를 사용하는 자세한 방법에 대해서는 다음 글을 참조하기 바란다.

아두이노 클라우드 이용 : https://kongyine.com/223453592371

Blynk 클라우드 사용 : https://kongyine.com/223443619959

참고로, 이러한 조작 방법은 스위치 기능을 하는 변수(아두이노 클라우드)나 입출력핀(Blynk)를 이용하여 On/Off 동작에 해당되는 Boolen 값을 주고받는 방법에 의해 이루어지게 된다.

IOT 클라우드에서 지정 횟수만큼 LED를 반복 점멸시키기

그런데, 원격지 스위치를 조작하다 보면 LED나 조명 같은 장치들을 단순하게 수동으로 켜거나 끄는 것 외에, 미관상의 이유나, 신호 또는 특정 반복 동작의 목적으로 인해 켜고 끄는 조작을 짧은 시간 내에 수차례 반복해서 해야 하는 경우가 있을 수도 있다. 더구나, 매번 그 점멸 횟수를 다르게 지정해야 하는 경우도 있다.

이러한 동작은 위의 글들에서 소개한 Boolen 변수에 해당하는 스위치 위젯으로는 구현이 어렵지만,

값을 변화시킬 수 있는 슬라이드 바나, 값을 선택하는 선택 버튼 형 위젯을 이용하면 쉽게 구현할 수가 있다.

다음은 이처럼 슬라이드바 또는 미리 값이 할당된 선택 버튼을 이용해서 매번 선택하는 숫자만큼 LED를 반복해서 점멸시키는 예이다.

구현하는 방법을 아두이노 클라우드를 기준으로 소개하면 다음과 같다.

먼저 해당 반복 횟수의 값을 주고받을 변수를 설정하되, 단순히 On/OFF가 아닌 반복 횟수에 대한 값을 전달해야 하므로 integer로 설정해 준다.

기타 속성들은 다음과 같이 설정해 주면 된다.

그리고 대시보드에서 slider 또는 Value selector 위젯을 선택하면 되는데,

Slider는 미리 최소값과 최대값을 지정하고, 그 범위 내에서 슬라이드 바를 움직여 값을 선택하는 방식인데,

대시보드 창에서 다음과 같이 위젯을 선택한 후,

나타나는 세부 설정 창에서 다음 항목들을 지정해 주면 되는데,

연결되는 변수는 “link Variable”을 선택한 후, 다음과 같이 미리 선언해 둔 변수를 연결해 주면 된다.

한편 또 다른 방식인 Value Selector 위젯은, 미리 원하는 만큼 선택 버튼을 만들고 각각의 버튼마다 값을 미리 지정해 둔 다음 해당 버튼을 선택하는 방식의 위젯이다.

만드는 방법은 대시보드에서 다음과 같이 Value Selector를 선택하면,

다음의 기본 화면이 나타나게 된다. 여기서 + 버튼을 누르면 원하는 수만큼의 선택 버튼을 추가할 수가 있다.

그리고, 만들어진 선택 버튼마다, 구분에 사용할 적절한 이름과, 지정해둘 값을 설정해 주면 된다.

만일 선택 창이 필요 없어 지우려 하면, 해당 창의 우측으로 마우스를 옮길 때 나타나게 되는 “-” 버튼을 이용하면 된다.

마이크로 파이썬 코드

위와 같이 준비된 상태에서, 라즈베리파이 또는 ESP32에서 IOT 클라우드(아두이노 클라우드 기준)에 접속하는 코드의 예는 다음과 같다.

본 예에서는 sw3 이란 변수로 선택한 값을 주고받으며, 이 값이 변경될 때마다, 다음과 같이 설정해 둔 handler 함수를 이용하여 LED를 반복해서 점멸시키게 된다.

본 글에 사용한 전체 코드는 다음과 같다.

SSID, MyPassword, Device_ID 및 Cloud_password는 각각의 상태에 맞게 변경돼야 한다.

from machine import Pin
from time import sleep
import network
import logging
import sys
from arduino_iot_cloud import ArduinoCloudClient

WIFI_SSID="MySSID"
WIFI_PASSWORD = "MyPASSWORD"
DEVICE_ID="097XXXXXXXXXX-42b7-XXXX-XXXXX0019cb7"
CLOUD_PASSWORD="pZ#11XXXXXXXXXXL?LAnyL1H3"

sw3 = Pin(15,Pin.OUT)

def wifi_connect():
if not WIFI_SSID or not WIFI_PASSWORD:
raise (Exception("Network is not configured."))
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    wlan.connect(WIFI_SSID, WIFI_PASSWORD)
while not wlan.isconnected():
        logging.info("Trying to connect. Note this may take a while...")
sleep(0.5)
    logging.info(f"WiFi Connected {wlan.ifconfig()}")     

def onSW3Change(client,value):
if value:
print('SW3 ON!')
for k in range(value):
            sw3.value(1)
            utime.sleep(0.1)
            sw3.value(0)
            utime.sleep(0.1)
else:
        sw3.value(0)
print('SW3 OFF!')
if __name__ == "__main__":
    logging.basicConfig(datefmt="%H:%M:%S",format="%(asctime)s.%(msecs)03d %(message)s",level=logging.INFO,)
wifi_connect()
    client = ArduinoCloudClient(device_id=DEVICE_ID, username=DEVICE_ID, password=CLOUD_PASSWORD)
    client.register('sw3', value=None, on_write=onSW3Change, interval=0.25)
    client.start()