[Перевод] Проект Ньютон – полное решение для управления умным домом
Термин «умный дом» объединяет возможности, позволяющие пользователю контролировать домашние устройства со своего смартфона, планшета или ноутбука. Например, удаленно с телефона управлять обогревом помещения. Тем не менее, многие считают, что для широкого распространения умных домов есть два основных препятствия: нет единого унифицированного решения и они ещё недостаточно практичны. Проект Ньютон, один из последних новаторских проектов Intel, может помочь прекратить эти споры.
- «Нет единого, унифицированного решения». Пользователи хотят сами делать свой выбор. Они хотят покупать умные телевизоры, холодильники, кондиционеры от Apple, Samsung, Tencent, Xiaomi и многих других. Но у каждого производителя есть собственное решение для умного дома, например, у них различаются протоколы обмена. Это приводит к тому, что почти невозможно как-то стандартизировать экосистему умного дома.
- «Они всё ещё недостаточно практичны». Предыдущие решения для управления умным домом имели некоторые недостатки. Управление голосом может быть осложнено окружающим шумом. Управление с телефона неудобно, потому что требует извлечения телефона, запуск соответствующего приложения и выбор устройства, которым вы хотите управлять. Управление жестами через камеру зависит от окружающего освещения и вашего положения в комнате.
Проект Ньютон предназначен для полного улучшенного решения по управлению умным домом. Его задачи:
- Соединить любые устройства умного дома.
- Не зависеть от носимых устройств.
- Иметь низкую цену.
- Не зависеть от условий окружающей среды, уровня освещения, уровня шума или положения пользователя.
Мы разработали улучшенное IoT-решение для управления умным домом, которое назвали «проект Ньютон». Оно реализует подключение всех основных платформ (процессор Intel Core, Atom, Centrino и мобильную платформу ARM) и всех IoT-платформ (плата Intel Edison, Intel Galileo, Raspberry, Spark, Mbed, Freescale, Arduino Uno и так далее). Таким образом, проект Ньютон может соединить платформы, на которых исполняются все основные операционные системы (Windows, Linux, Android) и специализированные операционные системы без пользовательского интерфейса (Mbed, Contiki, RIOT, Spark, OpenWRT, Yocto, WindRiver, VxWorks, Raspbian и так далее).
Поставщики умных домов обычно определяют только протоколы для общения на уровне приложений, но эти протоколы относительно закрытые. В проекте Ньютон мы используем протокол CoAP (Constrained Application Protocol — ограниченный протокол, уровня приложения), который является программным протоколом, предназначенным для общения простых электронных устройств через интернет. Протокол CoAP основан на RESTful и позволяет легко строить умные шлюзы. Вот базовый дизайн прототипа протокола CoAP в проекте Ньютон.
Перечислим все поддерживаемые операционные системы. Плата Intel Galileo, Intel Edison, UNO и Spark используют стандарты программирования Arduino. Популярная IoT-плата LPC1768 поддерживает операционные системы Mbed и RIOT. Mbed — это платформа и операционная система для ARM-устройств, подключённых к интернету. Она удобна для управления аппаратными ресурсами при помощи вызова соответствующих объектов. RIOT — это операционная система с открытым исходным кодом, которая поддерживает многопоточность и несколько различных плат для разработчиков. Для работы с ней можно использовать язык C. Чипу LPC1768 потребуется внешний Wi-Fi модуль. Windows, Linux и Android также можно просто приспособить к протоколу CoAP. Ниже показана архитектура проекта Ньютон.
Реализация CoAP
Реализация CoAP с открытым исходным кодом для микроконтроллеров называется MicroCoAP. Это небольшая библиотека написана на стандартном языке C, поэтому может быть просто портирована на различные платформы. MicroCoAP содержит четыре файла (CoAP.h, CoAP.c, endpoints.c, and main.c).
В файлах CoAP.h и CoAP.c реализован протокол CoAP, который показан внизу, а файл endpoints.c включает функции ответа, связанные со специальными узлами.
Файл main.c создает CoAP сервер. В основном мы используем coap_packet_t, coap_parse, coap_handle_req и coap_build. coap_packet_t определяет структуру данных CoAP пакетов. Функция coap_parse разбирает шестнадцатеричные данные, полученные из сети или последовательного порта и переводит их в структуру coap_packet_t. Функция coap_handle_req анализирует полученный CoAP пакет и создает подходящие ответы. Функция coap_build переводит пакет с ответом в шестнадцатеричный формат. Ключевой исходный код для создания CoAP сервера показан ниже.
Arduino реализация
Arduino — это открытая платформа для прототипирования, которая определяет аппаратные и программные стандарты Arduino. Платы Intel Edison, Intel Galileo и Spark следуют этим стандартам. Программа для Arduino состоит из двух функций: setup и loop. Функция setup инициализирует аппаратную часть и вызывается всего лишь раз перед функцией loop. Функция loop это бесконечный цикл, который может быть использован для выполнения главной задачи.
Чтобы добавить поддержку CoAP к плате Arduino, достаточно добавить три файла (CoAP.h, CoAP.c, endpoints.c) в проект и изменить функции setup и loop в соответствии с main.c в microCoAP.
Реализация Mbed
Mbed — это объектно-ориентированная C++ библиотека, разработанная для процессора ARM Cortex-M. Мы можем управлять выводами общего назначения (GPIO) и другими аппаратными ресурсами, используя соответствующие классы. Тем не менее, не существует стандартного Wi-Fi модуля или библиотеки. Поэтому будем использовать модуль UART-to-WIFI, чтобы добавить возможность работы с Wi-Fi к Mbed. Класс WIFI основан на документации к модулю UART-WIFI, и каждая функция будет посылать соответствующую строку на модуль UART-WIFI.
Вам надо добавить к проекту три файла (CoAP.h, CoAP.c, endpoints.c) и изменить файл main.c в соответствии с файлом main.c в проекте microCoAP. Чтобы скомпилировать, просто выполните команду make — в Makefile всё уже правильно настроено.
Реализация RIOT
RIOT — это дружественная для разработчиков операционная система с открытым исходным кодом для IoT, которая поддерживает несколько плат, таких как Mbed LPC1768 и Spark Core development kit. Разработку можно вести на C и C++. Папка tests содержит множество примеров API для подключения аппаратного обеспечения. Так же как и для Mbed, сервер CoAP может быть реализован изменением класса Wi-Fi из Mbed в C-функцию и изменением API, относящегося к последовательному порту. Тем не менее, в наших экспериментах были частые падения, поэтому его пока можно использовать только для тестирования. Для компиляции используйте команду в корневой папке:
BOARD=Mbed_lpc1768 make clean all flash
Для слежения за последовательным портом и получения выводимой информации от Mbed используйте:
BOARD=Mbed_lpc1768 make term
Ниже на картинке приведена структура кода CoAP сервера для RIOT.
Реализация Contiki
Contiki — это компактная, многозадачная, переносимая операционная система с открытым кодом. Папка example содержит несколько примеров использования API для управления аппаратным обеспечением. Так же нет стандартного модуля Wi-FI. Для реализации сервера CoAP, используйте подобные функции из RIOT и перепишите пример с UART. Для компиляции используйте команду «TARGET=cc2530dk make» и загрузите двоичную программу, используя jlink.
Реализация OpenWRT
OpenWRT — это встроенная операционная система, основанная на Linux, используемая для роутеров. Она поддерживает стандартный API для Linux. Таким образом, можно непосредственно использовать код microCoAP. В папке package установите проект microCoAP и измените Makefile в соответствии с файлом Makefile вашего проекта. Затем запустите команду make в корневой директории. Скомпилированное приложение будет в папке bin. Приложение может быть загружено на плату по ftp или через usb stotage. В завершении, используйте команду, чтобы установить приложение CoAP в OpenWRT:
opkg command install CoAP*.ipk
Добавьте »/usr/bin/CoAP &» в файл /etc/rc.local. Структура кода CoAP-сервера для OpenWRT приведена ниже.
Чтобы IoT решение было удобным, необходима возможность управлять любым IoT устройство при помощи обычных жестов, без использования каких-либо носимых устройств и оно не должно зависеть от условий окружающей среды, таких как освещение, шум и т. д. Один способ подобного решения может быть реализован с использованием 9-ти осевого гироскопа для определения движения руки пользователя.
Пример 9-ти осевого гироскопа с Wi-Fi модулем:
Алгоритм распознавания анализирует данные в реальном времени и определяет положение пользователя, его направление и жесты. Вычисляя относительное положение и направление между пользователем и IoT устройством, система может определить, к какому IoT устройству направлен пользователь. В дальнейшем, вычисляя направление руки и жесты, будет выбрано IoT устройство и произведено управление им.
Это демонстрация в нашей лаборатории, где проект Ньютон использовался для управления различными устройствами с различными операционными системами.
Весь набор устройств, расположенный в нашей лаборатории:
Выбор (синий цвет) и управление (зелёный цвет) платой Intel Edison в проекте Ньютон:
Управление Android устройством (планшетом) в проекте Ньютон:
Управление рукой робота:
Управление машиной:
Проект Ньютон — это хорошее законченное решение для управления умным домом. Его просто использовать, оно позволяет подключать любые устройства и не зависит ни от каких внешних параметров, таких как освещение, уровень шума и так далее.
Впрочем, как и любые другие проекты с открытыми исходниками, проект Ньютон можно совершенствовать. Следующим шагом мы хотим улучшить распознавание жестов, увеличить производительность и подключить другие носимые устройства. Например, говорят, что очки Google Glass следующего поколения смогут похвастаться большей призмой для глаз и будут основаны на процессоре Intel Atom, а это может стать лучшим решением для управления в проекте Ньютон.
Geektimes прочитано 672017 раз