본문 바로가기
프로젝트

IoT 모니터링 adafruit IO 클라우드 서비스 이용

by 땜블리 2023. 4. 18.
728x90
반응형
SMALL

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

라즈베리파이 피코 베이직 트레이닝 보드를 이용한 IoT 모니터링 실습을 진행 하겠습니다.

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

https://ttcw.tistory.com/4

 

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

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

ttcw.tistory.com

adafruit io 사용 방법은 다음을 확인해주세요

https://ttcw.tistory.com/48

 

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

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

ttcw.tistory.com

더 자세한 것을 알고 싶으면 아래 링크를 이용하세요.

https://learn.adafruit.com/welcome-to-adafruit-io

 

Welcome to Adafruit IO

This guide will get you up and running with Adafruit IO - the easiest way to get your project on the web. Learn what hardware is compatible with IO, how to interact with your data, troubleshooting your IO project, available client libraries, and about taki

learn.adafruit.com

adafruit Io 클라우드 서비스 사용방법은 앞에 링크 되어 있는 자료들 확인 하시고 바로 시작 하겠습니다.

먼저 Feed를 만들어 보겠습니다.

IoT_CDS, IoT_Temp, IoT_Humi, IoT_Vr 를 만듭니다.

그리고 KEY를 한번 확인합니다.

"피드 키"는 영문자(대문자 또는 소문자), 숫자, 대시("-") 및 마침표(".") 또는 슬래시("/")만 포함해야 합니다.

다른 문자는 피드 키에 포함되어서는 안 됩니다.

라는 문구가 밑에 정의되어있으며 언더바(_)는 대쉬로(-)변경되어 설정됩니다.

그다음 소스 코드를 라즈베리파이 피코 W보드에 넣어 줍니다. 라이브러리도 LIB폴더에 넣어 줍니다.

반응형

라이브러리 추가 방법은 아래의 사이트 참조 부탁드립니다.

https://ttcw.tistory.com/41

 

07. Circuit 파이썬 라즈베리파이 피코 W WS2812 제어하기

안녕하세요 땜블리 입니다. 라즈베리파이 피코 베이직 트레이닝 보드를 이용한 WS2812 제어를 진행 하겠습니다. 베이직 트레이닝 보드는 아래에서 확인이 가능합니다. https://ttcw.tistory.com/4 라즈베

ttcw.tistory.com

 

다음은 메인 구동 소스인 code.py 소스 입니다.

code.py

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 adafruit_ssd1306
import busio

# 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()
# 핀 할당
cds_pin = board.GP27
dht_pin = board.GP7
vr_pin= board.GP26

dhtOut = adafruit_dht.DHT11(dht_pin)

# CDS 광센서 제어용 아날로그 핀 초기화
cds = analogio.AnalogIn(cds_pin)
vr = analogio.AnalogIn(vr_pin)


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']

try:
# get feed
    picowTemp_feed = io.get_feed("iot-monitoring.iot-temp")
    picowHumid_feed = io.get_feed("iot-monitoring.iot-humi")
    picowCds_feed = io.get_feed("iot-monitoring.iot-cds")
    picowVr_feed = io.get_feed("iot-monitoring.iot-vr")
except AdafruitIO_RequestError:
# if no feed exists, create one
    picowTemp_feed = io.create_new_feed("iot-monitoring.iot-temp")
    picowHumid_feed = io.create_new_feed("iot-monitoring.iot-humi")
    picowCds_feed = io.create_new_feed("iot-monitoring.iot-cds")
    picowVr_feed = io.create_new_feed("iot-monitoring.iot-vr")
#  pack feed names into an array for the loop
feed_names = [picowTemp_feed, picowHumid_feed, picowCds_feed, picowVr_feed]
print("feeds created")

clock = 10

while True:
    try:
               
        temp_data = dhtOut.temperature
        humi_data = dhtOut.humidity
        cds_data = cds.value
        vr_data = vr.value
        VrDataV = (3.3/65535) * vr_data
        VrDataV = round(VrDataV, 2)
        CdSDataV = (3.3/65535) * cds_data
        CdSDataV = round(CdSDataV, 2)
        print('CDS value: {0} V, Vr value: {2} V, Temperature: {1} C, Humidity: {2} %'.
                  format(CdSDataV, VrDataV, temp_data, humi_data))
 
        oled.fill(0)  
        oled.text("Temp(C) : ", 0, 0, 1)
        oled.text(str(temp_data), 80, 0,1)
        oled.text("Humi(%) : ", 0, 12,1)
        oled.text(str(humi_data), 80, 12,1)
        oled.text("CdS(V)  : ", 0, 24,1)
        oled.text(str(CdSDataV), 80, 24,1)
        oled.text("Vr (V) : ", 0, 34,1)
        oled.text(str(VrDataV), 80, 34,1)
        oled.show()
        
        
        
        if clock >= 10:
            #  read sensor
            data = [temp_data, humi_data, CdSDataV, VrDataV]
            #  send sensor data to respective feeds
            for z in range(4):
                io.send_data(feed_names[z]["key"], data[z])
                time.sleep(1)
            print()
            #  reset clock
            clock = 0        
        else:
            clock += 1
    # 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(1)
    print(clock)

소스를 업로드 하여 구동되면

https://io.adafruit.com/

 

Adafruit IO

Adafruit IO is the easiest way to get your projects onto the Internet of Things!

io.adafruit.com

위 사이트 에서 피더를 확인하면 다음과 같이 데이터가 입력되는 걸 확인 할 수 있습니다.

데이터를 좀 더 보기 편하게 대시보드를 만들어 봅시다.

대시 보드에서 IoT 모니터링 만들어 추가 해줍니다.

그리고 라인 그래프 블록 추가 하여 IoT 모니터링에 있는 피더를 다 체크 해줍니다.

블록 이름은 모니터링으로 하겠습니다.

블록을 생성하면 대시보드에 다음과 같이 나옵니다.

와우 완료가 되었습니다.

위와 같이 조금씩 진해하시면 adafruit IO 서비스를 이용하여 IoT시스템을 구현 할 수 있습니다.

중간중간 설정들은 연결 사이트를 방문하시어 참조 하시면 됩니다.

무료로 사용을 하여 진행하다보니 많은양의 데이터는 확인이 불가능 합니다.

이점 참조 하세요.

728x90
반응형
LIST

댓글