본문 바로가기
프로젝트

IoT 콘센트 & 스위치

by 커피하는조이 2023. 3. 22.
728x90
반응형
SMALL

안녕하세요 땜블리 입니다.

라즈베리파이 피코 베이직 트레이닝 보드를 이용한 IoT 콘센트 & 스위치 실습을 진행 하겠습니다.

베이직 트레이닝 보드는 아래에서 확인이 가능합니다.

https://ttcw.tistory.com/4

 

라즈베리파이 피코 베이직 트레이닝보드 구성

라즈베리파이 피코 보드의 펌웨어실습을 위한 베이직 트레이닝보드를 소개 합니다. 현재 네이버 스마트스토어에서 판매가 진행되고 있습니다. 라즈베리파이 피코 베이직 트레이닝 보드 라즈베

ttcw.tistory.com

 

adafruit 사의  IO 클라우드 서비스를 이용하여 IoT 콘센트와 스위치를 만들어보겠습니다.

https://ttcw.tistory.com/48

 

adafruit 클라우드를 이용한 식물재배기 프로젝트 1차

안녕하세요 땜블리의 공작소에 땜블리 입니다. 라즈베리파이 피코 베이직 트레이닝 보드를 이용한 IoT 식물 재배기 실습을 1차, 2차에 걸쳐 진행 하겠습니다. 1차에서는 adafruit 사의 IO 클라우드

ttcw.tistory.com

 

 

스위치는 시중에 판매 되는 아래와 같은 스위치 입니다.

https://blog.naver.com/zmsgfc/221747342683

 

[리뷰] 30년 전 스위치라도 최신의 IOT 제품으로 업그레이드 스마트 홈을 위한 첫걸음 웨이커스 스

제품을 끄고 켜는 원초적인 것에서부터의 시작. 4차 산업의 핵심 중에 하나는 네트워크 기반의 IOT(사물...

blog.naver.com

반응형

IoT 콘센트는 원격으로 ON OFF 할 수 있는 콘센트입니다.

콘센트는 완제품이 아닌 다이용 콘센트를 이용하여  제작합니다.

 아래는 구성도가 되겠습니다.

 

DIY용 콘센트를 열어 선 하나를 빼 보드 릴레이에 연결하는 작업을 해보겠습니다. 

 

다음은 adafruit 사의  IO 클라우드에서 Feed 를 만들어보겠습니다. 그룹생성을 하여 콘센트스위치그룹에  powersocket, sw 를 만들어보겠습니다.

 

대시보드에도 토글블럭을 두개 넣어 만듭니다. 

 

그다음 소스 코드를 라즈베리파이 피코 w에 넣어 실행 시켜 봅니다.

SMALL

소스 코드

import time
import ssl
import wifi
import socketpool
import board
import digitalio
import analogio
import adafruit_requests
import adafruit_dht
from adafruit_io.adafruit_io import IO_HTTP, AdafruitIO_RequestError
from secrets import secrets
import neopixel
import pwmio
import adafruit_ssd1306
import busio
import microcontroller
# i2c설정
i2c = busio.I2C(board.GP15, board.GP14)
oled = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c, addr=0x3c)
uart = busio.UART(board.GP16, board.GP17, baudrate=115200)
# 초기화
oled.fill(1)
oled.show()
time.sleep(1)
oled.fill(0)
oled.show()
# 핀 할당
relay_pin = board.GP12
servo_pin = board.GP19
# PWM 제어용 디지털 핀 초기화
servo1_pwm = pwmio.PWMOut(servo_pin, frequency=50, duty_cycle=0)
in_min = 0
in_max = 65535
out_min = 1000
out_mid = 4500
out_max = 9000
servo1_pwm.duty_cycle = int(out_mid)
# 릴레이 제어용 디지털 핀 초기화
relay = digitalio.DigitalInOut(relay_pin)
relay.direction = digitalio.Direction.OUTPUT

# 제어할 장치들의 초기 상태 설정
relay.value = True

wifi.radio.connect(secrets["ssid"],secrets["password"])

aio_username = secrets['aio_username']
aio_key = secrets['aio_key']

pool = socketpool.SocketPool(wifi.radio)
requests = adafruit_requests.Session(pool, ssl.create_default_context())
# Initialize an Adafruit IO HTTP API object
io = IO_HTTP(aio_username, aio_key, requests)
print("connected to io")

def get_feed_value(feed_key):
    try:
        feed = io.get_feed(feed_key)
    except RequestError:
        raise Exception('Feed not found')
    data = io.receive_data(feed_key)
    return data['value']

while True:
    try:
        switch_feed_key = "konsenteuseuwici.sw"
        switch_value = get_feed_value(switch_feed_key)
        # 스위치 값에 따라 작업 수행
        if switch_value == 'ON':
         print("Switch is on!")
         servo1_pwm.duty_cycle = int(3500)
        
        elif switch_value == 'OFF':
         print("Switch is off.")
         servo1_pwm.duty_cycle = int(6500)
         
         
        powersocket_feed_key = "konsenteuseuwici.powersocket"
        powersocket_value = get_feed_value(powersocket_feed_key)
        # 스위치 값에 따라 작업 수행
        if powersocket_value == 'ON':
         print("powersocket is on!")
         relay.value = False
         
        elif powersocket_value == 'OFF':
         print("powersocket is off.")
         relay.value = True
        
       
       
        print('Switch value: {0}, powersocket: {1}'.format(switch_value, powersocket_value))
        oled.fill(0)  
        oled.text("Switch : ", 0, 0, 1)
        oled.text(str(switch_value), 80, 0,1)
        oled.text("powersocket : ", 0, 12,1)
        oled.text(str(powersocket_value), 80, 12,1)
        oled.show()
       
           
        
    # pylint: disable=broad-except
    #  any errors, reset Pico W
    except Exception as e:
        print("Error:\n", str(e))
        print("Resetting microcontroller in 10 seconds")
        #time.sleep(10)
       # microcontroller.reset()
    #  delay
    time.sleep(0.5)

 

결과 영상

 

728x90
반응형
LIST

댓글