Pico W 기초부터 클라우드 연동까지!
콘테스트 프로젝트진행중

Pico_eschoi

Pico W 기초부터 클라우드 연동까지!
곰돌이아빠 프로필 보기
2022.07.29에 시작
1
좋아요
1.5K
조회
0
댓글
Pico_eschoi

사용 기술

Raspberry PiSoftware
Pico W 기초부터 클라우드 연동까지!완료
콘테스트 프로젝트 진행 상황

각 Quest를 단계적으로 완성하는 프로젝트입니다.

Quest 1
Quest 2
Quest 3
3 / 4 완료
Quest 1: 홈 온도 조절기 설계
2022.08.11
완료

□ 아이디어 소개 및 개요 (개발 계획 및 과정 포함)

피코 와이파이을 이용하여 홈 온도 조절기를 개발한다.

와이파이를 이용하여 인터넷에 접속하고 

온도계용 ADC 입력을 가지며

에어컨 제어용 PWM 출력과 온열기 제어용 PWM 출력을 가진다.

□ 전체 구조를 표현하는 블록 다이어그램

□ 하드웨어 구성 다이어그램

□ 소프트웨어 구성 다이어그램

Quest 2: 툴 설치 및 클라우드 환경 설정
2022.08.26
완료

PicoW의 개발환경은 일반적으로 C나 micropython을 이용한다. 지금까지 python은 리눅스나 탑재된 라즈베리파이등에만 이용이 가능했지만 micropython이 나오면서 저성능 MCU에서도 이용이 가능하다.  python을 이용하면 복잡한 프로그램을 쉽게 작성할수 있고 컴파일할 필요가 없다는 장점이 있다. 단점은 C보다는 속도가 느려진다.

 

□ 툴 설치1 : uf2 file 설치

아래의 마이크로 파이썬 다운로드 사이트로 접속한다.

https://micropython.org/download/

Pico W의 최신 버전의 uf2 파일을 다운받아 설치한다.

설치 방법은 다음과 같다.

 

1.BOOTSEL 버튼을 누른 상태에서 USB에 연결하면 드라이로 인식한다.
2.이전에 다운받은 uf2 파일을 복사한다.
3.복사 완료후 serial 장치로 인식한다.
4.속도 115200으로 터미널을 open한다. 엔터키를 입력하고 >>> 가 출력되면 다음 입력

5. 기본적인 LED 제어는 다음과 같다.

□ 툴설치2 : thony 설치

다음에서 설치 파일을 다운받아 설치힌다.

https://thonny.org/

실행후 아래와 같이 입력

Run – Configure Interpreter 클릭

보드와 포트 선택

녹색 버튼 클릭하면  LED가 점멸한다.

작성 완료후 저장하거나 불러올수도 있다.

다음은 wifi 연결을 확인하는 코드이다. 

□ Azure 클라우드 환경 설정

계정 생성후 리소스 만들기 클릭

 

다음 화면에서 탐색창에 IoT Hub 입력

 

만들기 클릭

 

다음: 네트워킹 클릭

 

다음: 관리 클릭

스케일링 계층 및 단위에서 F1:무료 계층 선택후 검토+만들기 클릭

만들기 클릭

 

배포 완료후 리소스로 이동 클릭

 

장치 클릭

이하의 설정은 세미나 개발환경 준비 자료를 참조한다.

Quest 3: Pico W - 클라우드 연결 및 데이터 업로드
2022.08.31
완료

지난 시간에이어  장치 추가부터 시작한다.

□ 디바이스 관리 - 장치

장치에서 디바이스 추가를 클릭한다.

디바이스 ID를 입력하고 디바이스를 만든다.

Azure IoT Explorer를 다운 받아서 설치한다. 

https://github.com/Azure/azure-iot-explorer/releases

실행후 Add Connection을 클릭후  키 입력을 위해 대기한다.

다시 Azure로 돌아가서 보안 설정 - 공유 액세스 정책 클릭.

공유 액세스 정책에서 iothubowner를 클릭

기본 연결 문자열을 복사한다.

Azure IoT Exploler에서 붙혀넣기후 저장.

아래와 같은 화면이 나타나면 pocow를 클릭한다.

VIew device in this hub 클릭

아래에서 key는 Primary key, Expiration은 60으로 하고 Generate를 클릭후 SAS token이 생성되면 복사 클릭

thonny로 돌아와서 자료를 참조하여 umqtt.simple를 설치한다. 

 

>>> import network
>>> ssid = "Your Wifi Name"
>>> pw = "Your Password"
>>> wlan = network.WLAN(network.STA_IF)
>>> wlan.active(True)
>>> wlan.connect(ssid,pw)
>>> wlan.isconnected()?
???????True
>>> import upip
>>> upip.install("umqtt.simple")
? ? ? Installing to: /lib/
? ? ? Installing umqtt.simple 1.3.4 from ?https://micropython.org/pi/umqtt.simple/umqtt.simple-1.3.4.tar.gz

 

 

다음의코드를 입력후 iothub1.py로 저장. 자료를 참고하여 hostname, user_name,passW를 변경한다.

import network
import time
import machine

from umqtt.simple import MQTTClient
from machine import Pin

ssid = 'Your Wifi Name'
password = 'Your Password'

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)

# Wait for connect or fail
max_wait = 10
while max_wait > 0:
    if wlan.status() < 0 or wlan.status() >= 3:
        break
    max_wait -= 1
    print('waiting for connection...')
    time.sleep(1)

# Handle connection error
if wlan.status() != 3:
    raise RuntimeError('network connection failed')
else:
    print('connected')
    status = wlan.ifconfig()
    print( 'ip = ' + status[0] )

led = Pin(15, Pin.OUT)
button = Pin(14, Pin.IN, Pin.PULL_DOWN)
hostname = 'your_iot_name.azure-devices.net'
clientid = 'picow'
user_name = 'your_iot_name.azure-devices.net/picow/?api-version=2021-04-12'
passw = 'SharedAccessSignature sr=your_iot_name.azure-devices.net%2Fdevices%2Fpicow&sig=u521661910189'
topic_pub = b'devices/picow/messages/events/'
topic_msg = b'{"buttonpressed":"1"}'
port_no = 8883
subscribe_topic = "devices/picow/messages/devicebound/#"

def mqtt_connect():
    certificate_path = "baltimore.cer"
    print('Loading Blatimore Certificate')
    with open(certificate_path, 'r') as f:
        cert = f.read()
    print('Obtained Baltimore Certificate')
    sslparams = {'cert':cert}

    client = MQTTClient(client_id=clientid, server=hostname, port=port_no, user=user_name, password=passw,
keepalive=3600, ssl=True, ssl_params=sslparams)
    client.connect()
    print('Connected to IoT Hub MQTT Broker')
    return client

def reconnect():
    print('Failed to connect to the MQTT Broker. Reconnecting...')
    time.sleep(5)
    machine.reset()
def callback_handler(topic, message_receive):
    print("Received message")
    print(message_receive)
    if message_receive.strip() == b'led_on':
        led.value(1)
    else:
        led.value(0)

try:
    client = mqtt_connect()
    client.set_callback(callback_handler)
    client.subscribe(topic=subscribe_topic)
except OSError as e:
    reconnect()

while True:
    client.check_msg()
    if button.value():
        client.publish(topic_pub, topic_msg)
        time.sleep(0.5)
    else:
        pass
    time.sleep(1)

다음의코드 Baltimore ssl ceti도 저장하고 위의 스크립트를 실행하면 다음과 같이 연결된다.

□ IoT Hub와 Data 교환

다음처럼 결선을 한다.

zure IoT Explorer의 Telemetry 탭의 Start를 클릭하고 버튼을 누르면 아래와 같이 출력된다.

Cloud-to-device message 탭으로 이동후 Message body에 led_on이라고 입력한다.

Thonny의 터미널에 다음과 같이 출력되며 LED가 점등 소등된다.

이상으로 IoT 허브와의 data 교환을 마친다.

프로젝트 자료실

프로젝트를 재현하거나 학습하는데 필요한 모든 자료를 제공합니다.

등록된 자료가 없습니다.

프로젝트 소개

사용 기술
Raspberry PiSoftware

코드 & 회로도

등록된 코드/회로 자료가 없습니다.

댓글 0

아직 댓글이 없습니다. 첫 댓글을 남겨보세요!