Zerynth App은 안드로이드와 iOS용 모바일 애플리케이션으로, IoT 프로젝트용 그래픽 인터페이스를 빠르게 프로토타이핑할 수 있게 해줍니다.
Zerynth App으로 어떤 모바일이든 스마트 오브젝트와 IoT 시스템의 컨트롤러이자 디스플레이로 바꿀 수 있습니다! 특히 Zerynth로 프로그래밍된 연결 기기들을 관리하고 제어하며, 이들과 모바일 간 양방향 통신 채널을 구현합니다.
이 튜토리얼에서는 Zerynth 기반 싱글보드 마이크로컨트롤러와 Zerynth App을 원격 디스플레이로 활용해 단순하면서 강력한 IoT 온도계를 개발하는 방법을 다룹니다.
필요한 재료
먼저 보드가 필요합니다. Zerynth가 지원하는 32비트 마이크로컨트롤러 기기 중 하나를 선택하세요. 우리는 인기 아두이노 플랫폼과 많은 속성을 공유하는 Mikroelektronika의 Flip&Click을 선택했습니다. 여기에는 마이크로칩의 32비트 AT91SAM3X8E가 탑재돼 있는데, 이는 아두이노 Due의 코어이기도 합니다.
온도 측정을 위해 Temp&Hum Click을 골랐습니다. HTS221 온도 및 상대습도 센서를 탑재했습니다.
보드를 인터넷에 연결하기 위해 WiFi PLUS Click을 선택했습니다. 마이크로칩의 MRF24WB0MA(2.4GHz, IEEE 802.11 준수) 모듈과 온보드 TCP/IP 스택 및 802.11 연결 관리자를 가진 MCW1001 동반 컨트롤러를 탑재했습니다.
마지막으로 필요한 것:
Zerynth Studio: 파이썬으로 임베디드 프로그래밍을 하고 IoT를 구현하는 강력한 IDE. 여기서 다운로드.
Flip&Click은 아두이노의 양면 버전입니다. 한 면은 아두이노지만, 반대 면에는 "클릭 보드"용 네 개의 열린 mikroBUS 소켓이 있습니다. 이들은 아두이노 실드와 비슷하지만 작아서 여러 개를 동시에 장착할 수 있습니다. Temp&Hum과 WiFi Plus 클릭을 각각 슬롯 A와 B에 꽂기만 하면 됩니다.
파이썬으로 IoT 온도계 프로그래밍하기
예제 클론하기
Zerynth Studio를 설치하고 Zerynth 사용자 계정을 만들면 "Zerynth App Oscilloscope" 예제를 클론할 수 있습니다. 예제 클론 방법은 여기를 참조하세요.
main.py 파일의 원본 코드를 살펴보세요. 이곳에서 파이썬 스크립트 로직을 개발합니다. 원본 코드에서 시작해 우리 프로젝트에 맞게 수정하겠습니다.
################################################################################
# IoT Thermometer
################################################################################
from wireless import wifi
# 이 예제는 Particle Photon 기반
# 다른 와이파이 드라이버 사용시 다음 줄 변경
from broadcom.bcm43362 import bcm43362 as wifi_driver
import streams
import adc
# Zerynth APP 라이브러리 임포트
from zerynthapp import zerynthapp
streams.serial()
sleep(1000)
print("STARTING...")
try:
# 디바이스 UID와 TOKEN은 ADM 패널에서 생성
zapp = zerynthapp.ZerynthApp("DEVICE UID", "DEVICE TOKEN", log=True)
# 와이파이 네트워크 연결 (SSID와 비밀번호 설정)
wifi_driver.auto_init()
for i in range(0,5):
try:
wifi.link("SSID", wifi.WIFI_WPA2, "PASSWORD")
break
except Exception as e:
print("Can't link", e)
else:
print("Impossible to link!")
while True:
sleep(1000)
# Zerynth 앱 인스턴스 시작!
# 방금 클론한 "template" 폴더의 파일로 템플릿 생성
# ADM에 업로드하고 연결된 디바이스와 연동
zapp.run()
# ADC 읽고 ADM으로 값 전송
while True:
sleep(1000)
x = (adc.read(A4)*100)//4096
zapp.event({"data":x})
if x > 95:
# 모바일 알림 전송
# (ADM 샌드박스에서는 디바이스당 분당 1회 알림 제한)
zapp.notify("ALARM!", "The value is greater than 95!")
except Exception as e:
print(e)
이 간단한 예제에서는 아날로그 센서(A4 핀)에서 데이터를 읽어 Zerynth App에 그래픽 오실로스코프로 시각화합니다.
올바른 와이파이 드라이버와 센서 라이브러리 임포트
주석에서 보듯 이 예제는 Particle Photon 보드와 그 와이파이 드라이버 기반입니다. 우리는 WiFi Plus Click을 쓰므로 다음 줄을 변경해야 합니다.
from broadcom.bcm43362 import bcm43362 as wifi_driver
를
from microchip.mcw1001a import mcw1001a as wifi_driver
로, 그리고
wifi_driver.auto_init()
를
wifi_driver.init(SERIAL2, D24) # 슬롯 B
로 변경합니다.
Temp&Hum Click의 온도 센서를 쓰려면 다음 줄을 추가해 라이브러리 임포트와 센서 설정을 합니다(문서 참조).
# HTS221 라이브러리 임포트
from stm.hts221 import hts221
temp_hum = hts221.HTS221(I2C0, D21) # 슬롯 A
이제 "연결된 디바이스"를 생성하고 "zerynthapp" 인스턴스를 연결해야 합니다. 아래 스크린샷에 필요한 단계가 나와 있습니다. 기술적 세부사항은 이 문서를 참조하세요.
디바이스 자격증명(UID과 TOKEN)은 Zerynth Studio(ADM 패널)에서 직접 복사해 붙여넣을 수 있습니다. "IP"는 Zerynth ADM의 IP 주소입니다. 네트워크 드라이버가 호스트명 해석을 지원하지 않을 때(이 경우) 사용됩니다.
템플릿 생성, 업로드, 설정
Zerynth App으로 HTML, CSS, JavaScript를 사용해 아름다운 반응형 GUI를 실행할 수 있습니다. 안드로이드나 iOS 코드 불필요!
각 디바이스의 그래픽 인터페이스는 Zerynth ADM 샌드박스에 호스팅되며 HTML5, JavaScript, CSS, 이미지 파일 세트로 구성돼 앱에서 로드 및 표시됩니다. 템플릿에 ADM JavaScript 라이브러리를 추가하면 앱이 연결된 디바이스와 양방향으로 메시지를 주고받으며 상호작용할 수 있습니다.
템플릿은 각각의 "플러스" 아이콘을 클릭해 추가합니다.
전용 폴더에서 템플릿을 업로드합니다. 템플릿이 정의된 파일은 index.html이라 불리며 원하는 대로 편집 가능합니다. 여기선 그대로 둡니다.
스크립트 업링크
몇 가지 수정 후 코드는 다음과 같아야 합니다.
################################################################################
# IoT Thermometer
################################################################################
from wireless import wifi
from microchip.mcw1001a import mcw1001a as wifi_driver
import streams
import adc
streams.serial()
# Zerynth APP 라이브러리 임포트
from zerynthapp import zerynthapp
# HTS221 라이브러리 임포트
from stm.hts221 import hts221
temp_hum = hts221.HTS221(I2C0, D21) # 슬롯 A
sleep(1000)
print("STARTING...")
try:
# 디바이스 UID와 TOKEN은 ADM 패널에서 생성
zapp = zerynthapp.ZerynthApp("DEVICE UID", "DEVICE TOKEN", ip="178.22.65.123", log=True)
# 와이파이 네트워크 연결 (SSID와 비밀번호 설정)
wifi_driver.init(SERIAL2, D24) # 슬롯 B
for i in range(0,5):
try:
wifi.link("SSID", wifi.WIFI_WPA2, "PASSWORD")
break
except Exception as e:
print("Can't link", e)
else:
print("Impossible to link!")
while True:
sleep(1000)
# Zerynth 앱 인스턴스 시작!
# "template" 폴더의 파일로 템플릿 생성해 ADM에 업로드하고 연결된 디바이스와 연동
zapp.run()
# 센서 읽고 ADM으로 값 전송
while True:
sleep(1000)
tmp, hum = temp_hum.get_temp_humidity() # tmp와 hum 읽기
print("Temp is:", tmp, "Humidity is:", hum)
try:
zapp.event({"data": tmp})
except Exception as e:
print(e)
if tmp > 30:
# 모바일 알림 전송
# (ADM 샌드박스에서는 디바이스당 분당 1회 알림 제한)
try:
zapp.notify("ALARM!", "High Temperature!")
except Exception as e:
print(e)
except Exception as e:
print(e)
"DEVICE UID", "DEVICE TOKEN", "SSID", "PASSWORD"는 본인의 파라미터에 맞게 수정해야 합니다.
이 시점에서 스크립트를 디바이스에 업링크할 수 있습니다.
Zerynth App에서 IoT 온도계 대시보드 보기
이 짧은 튜토리얼을 읽으면, Zerynth App을 열고 로그인한 뒤 특정 디바이스를 선택해 IoT 온도계 대시보드를 볼 수 있습니다. 마지막으로 Zerynth App은 연결된 디바이스에서 푸시 알림도 받을 수 있습니다. 이 경우 온도가 임계값을 초과하면 알림이 나타납니다!