아두이노 MKR OTA 프로그래밍 – 음성 제어 및 부가 기능
부품 및 소모품
Arduino MKR1000
1개
모든 OTA 프로젝트에 필수. 아래 부품은 사용 사례/샘플(실내 온도조절기)용.
DHT11 온습도 센서 (4핀)
1개
릴레이 (범용)
1개
브레드보드 (범용)
1개
앱 및 온라인 서비스
Arduino IDE
Microsoft Azure (Azure IoT Hub)
Microsoft Visual Studio 2015 (UWP - Universal Windows Platform 사용)
Microsoft Project Oxford (Speech Recognition API)
프로젝트 개요
이 기여는 두 부분으로 구성됩니다.
1부: 재사용 가능한 컴포넌트 모음. 유용한 기능을 활용하는 다양한 IoT 프로젝트 구축을 위한 프레임워크 역할을 합니다:
OTA(Over-the-Air) 프로그래밍 – 아두이노 MKR1000에 컴파일된 바이너리 코드 업로드. 여러 방법 지원: LAN 내부에서 또는 인터넷을 통해, 안전하게, Microsoft Azure IoT Hub 경유.
Universal Windows Platform (UWP) 클라이언트 앱 , 깔끔한 사용자 인터페이스. Azure IoT Hub를 통해 보드와 안전하게 통신.
음성 인식 (클라이언트 앱에서), Microsoft Project Oxford의 Speech Recognition API 활용. 음성 명령으로 Azure IoT Hub 경유해 보드 제어.
2부: 위 컴포넌트로 만든 사용 사례/샘플 – 폰(UWP 앱)으로 제어하는 실내 온도조절기. 컴포넌트 활용 예시로 제작했으며, 실제 우리 사무실에 설치해 현재 이 프로젝트로 사무실 난방 시스템을 제어 중입니다.
1부: OTA용 재사용 컴포넌트
OTA 작동 원리
다음 컴포넌트들을 개발했습니다:
아두이노 IDE용:
런타임 라이브러리 . 펌웨어 업로드 및 복사 메커니즘 처리.
커스텀 "보드" 패키지 . 라이브러리에 필요한 링커 관련 설정 포함.
아두이노 IDE 플러그인 . 다운로드 신호와 컴파일된 바이너리 스케치(펌웨어) 전송. 보드, Azure IoT Hub, IoT 디스패처 서버 앱(아래)과 통신.
서드파티 서버(예: Microsoft Azure Web Site)에 설치:
IoT 디스패처 , 펌웨어 저장 및 제공하는 PHP + MySQL 애플리케이션.
UWP 앱 작동 원리
개발한 내용:
C#으로 작성된 UWP 클라이언트 앱. Azure IoT Hub를 통해 보드와 통신, Microsoft Project Oxford로 음성 명령 인식. 다양한 프로젝트 시작점으로 활용 가능.
OTA 데모
2부: 사용 사례/샘플 – 실내 온도조절기
앞서 언급했듯 컴포넌트 조합으로 실제 프로젝트 구축 시연용으로 개발. 우리 경우 실제 운영 환경에 투입 – 사무실 난방을 이 프로젝트로 제어 중.
로직은 단순:
온도가 설정 온도 아래로 떨어지면 → 릴레이(난방) ON
온도가 설정 온도 이상이면 → 릴레이/난방 OFF
사용자 인터페이스/UWP 클라이언트: 상태 표시, 설정 온도 변경(텍스트 박스 또는 음성)
1. 프로젝트 제작 (하드웨어)
Fritzing 다이어그램 미제공 – 베타 MKR1000 사용으로 핀 레이아웃이 향후 변경될 수 있음.
2. OTA 및 Azure IoT Hub용 개발 환경 설정
Arduino IDE 설치, 최소 버전 1.6.7
Arduino SAMD Boards 설치. IDE에서: Tools > Board: ... > Boards Manager ... > "Arduino SAMD Boards" 선택
다음 라이브러리 다운로드 후 압축 해제: SKETCHBOOK_DIR (예: Documents/Arduino)/libraries : WiFi101, AzureIoT, RTCZero.
우리의 컴포넌트:
OTA 런타임 라이브러리 다운로드 후 압축 해제: SKETCHBOOK_DIR/libraries
커스텀 "보드" 패키지 다운로드. 디렉토리 생성: SKETCHBOOK_DIR/hardware/flower-platform . 여기에 압축 해제.
아두이노 IDE 플러그인 다운로드. 디렉토리 생성: SKETCHBOOK_DIR/tools. 여기에 압축 해제.
보안 OTA(인터넷/HTTPS)용:
IoT 디스패처 다운로드 후 PHP + MySQL 서버에 설치. 예: Microsoft Azure Cloud 배포 지침 제공.
3. OTA 테스트 드라이브
OTA 업로드 3가지 방법.
1) LAN 경유 OTA 시도: File > Examples > Arduino-FlowerOTA > WiFiOTA . "// CHANGE ME" 주석 달린 줄들 수정해 IP 주소, WiFi 파라미터, plain/ssl, 서버 서명 구성. 그런 다음 Flower Platform > Upload OTA ...
다음을 사용해야 함:
WiFiClient client;
그리고 (팝업 창의 "서버 서명" 참조):
ota.begin(&udp, &client, "1hvtdliHzKLjMykvfW1MfPwsFthUU/YfjN8fOZJ3Qhc=");
참고: 3가지 방법 모두 최초 1회는 USB로 업로드 필요. 그 후 원하는 방법으로 OTA 계속 사용 가능.
2) 보안 디스패처 경유 OTA 시도 , 같은 파일 사용:
다음을 사용:
WiFiSSLClient client;
ota.begin(&udp, &client, "my-iot-dispatcher-upload-key"); // IoT 디스패처(PHP) 내 설정 참조
3) 보안 디스패처 + Azure IoT Hub 경유 OTA 시도. File > Examples > Arduino-FlowerOTA > WiFiOTA-AzureIoTHub. 역시 "// CHANGE ME" 주석 줄들 수정 필수.
4) 사용 사례/샘플: 실내 온도조절기 시도. 여기에서 이용 가능.
4. 사용자 인터페이스 테스트 드라이브 (UWP 앱 + Azure IoT Hub + 음성 인식)
UWP 프로젝트는 여기에서 이용 가능. Visual Studio 2015와 Windows 10 필요.
Azure 계정에 맞게 연결 파라미터 변경 필수:
SendCloudToDevice.cs
class SendCloudToDevice {
// CHANGE ME: 아래 상수들을 Azure Portal 실제 값으로 교체
private const string HOST = "???.azure-devices.net";
private const string DEVICE_ID = "???";
private const string DEVICE_KEY = "???";
static string sharedAccessKeyName = "???";
static string sharedAccessKey = "???";
}
ReadDeviceToCloud.cs
class ReadDeviceToCloud {
private static string ConnectionString = "???";
private static string eventHubEntity = "???";
}
이 코드는 다양한 프로젝트용 클라이언트 앱 시작점으로 활용 가능. 사용자 인터페이스만 본인 프로젝트에 맞게 조정하면 됨.
향후 계획
아두이노 MKR1000처럼 적절한 처리 능력과 SSL 통신 기능을 갖춘 보드는 메이커 커뮤니티에 큰 진전입니다.
이 프로젝트에서 시작한 작업을 계속해 Flower Platform IoT라는 온라인 서비스 개발 중 – IoT 프로젝트를 획기적으로 가속화할 것:
개발: OOP 컴포넌트와 그래픽 프로그래밍 언어 사용(손코드와 혼용 가능)
배포: OTA 활용
Flower Platform을 활용해 어린 아이들이 IoT 프로젝트를 만들고 프로그래밍하는 데 초점을 맞춘 재단 설립 계획.
코드
펌웨어 업로드 및 복사 메커니즘 처리 런타임 라이브러리 (C++)
https://github.com/flower-platform/Arduino-FlowerOTA
라이브러리에 필요한 링커 관련 설정 가진 커스텀 "보드" 패키지 (링커 스크립트)
https://github.com/flower-platform/ArduinoCore-samd-OTA
아두이노 IDE 플러그인. 보드, 디스패처, IoT Hub와 통신 (Java)
https://github.com/flower-platform/flower-platform-arduino-ide-plugin
IoT 디스패처. OTA 중 필요한 펌웨어 저장 및 제공 (PHP + MySQL)
https://github.com/flower-platform/flower-platform-iot-dispatcher
실내 온도조절기 사용 사례/샘플 (C++)
https://github.com/flower-platform/ThermostatIoT
실내 온도조절기용 UWP 클라이언트 (C#, HTML, JavaScript)
https://github.com/flower-platform/thermostat-uwp-ui
회로도
Fritzing 다이어그램 미제공 – 베타 MKR1000 사용으로 핀 레이아웃이 향후 변경될 수 있음.