Окружающий свет Интернета вещей:лампа Zerynth
Компоненты и расходные материалы
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Приложения и онлайн-сервисы
| ||||
|
Об этом проекте
Стандарты беспроводной связи с низким энергопотреблением в сочетании с дешевыми сверхминиатюрными светодиодами, датчиками и устройствами связи сделали интеллектуальное освещение катализатором Интернета вещей и домашней автоматизации.
В этом уроке мы увидим, как управлять светодиодной лентой NeoPixel через мобильное устройство с помощью приложения Zerytnh, которое показывает палитру цветов и меню для выбора различных предварительно настроенных анимаций.
Шаг 1. Необходимые материалы
Для проекта требуется несколько элементов:
- Zerynth Studio :многоплатформенная среда разработки Python на основе браузера с функциями облачной синхронизации и управления досками. Независимо от того, какую ОС вы используете, Zerynth работает! Просто скачайте Zerynth и установите его (http://www.zerynth.com/zerynth-studio/).
- Приложение Zerynth: мобильный интерфейс Zerynth для смарт-объектов и систем IoT. Любой мобильный телефон станет дисплеем объектов и пультом дистанционного управления. Загрузить:http://www.zerynth.com/zerynth-app/
- Зеринтский щит (доступно здесь:https://store.open-electronics.org/index.php?_route_=Shield_ZERYNTH&search=toi). Готовая к использованию мультисенсорная плата, которая добавляет интеллектуальные функции вашим объектам повседневной жизни.
- Arduino DUE или ST Nucleo F401RE или ParticlePhoton . или UDOO или Перевернуть и вырезать от Микроэлектроника . Независимо от того, какую плату вы используете, Zerynth совместим с несколькими платами! Вы можете найти все сведения о поддерживаемых платах здесь:http://www.zerynth.com/zerynth-studio/
- Если вы не используете Particle Photon (у которого есть встроенный модуль Wi-Fi), вам понадобится элемент, который соединяет плату с Интернетом, например щит Wi-Fi . из Adafruit . Однако вы можете использовать любой другой адаптер, в который устанавливается чип Wi-Fi CC3000 Texas Instruments . (http://www.ti.com/product/cc3000).
- полоска (или кольцо) NeoPixel Светодиоды от Adafruit (доступно здесь https://www.adafruit.com/products/1426)
- стеклянная или напечатанная на 3D-принтере лампа . Выбор за вами.
Шаг 2. Сборка
- Просто установите Wi-Fi Shield и Zerynth Shield на свой Arduino (или ST Nucleo, или UDOO). Если вы используете Particle Photon, просто подключите его к специальным разъемам на Zerynth Shield.
- Подключите светодиоды NeoPixel к соответствующему порту на Zerynth Shield.
- Вставьте все платы и светодиоды в лампу.
Шаг 3. Программирование
Использовать Zerynth очень просто!
- подключите и «виртуализируйте» вашу доску (уже объяснено здесь http://bit.ly/Hackster-VIPER-Theremin)
- создать новый проект в Zerynth (уже объяснено здесь http://bit.ly/Hackster-IoT-Notes-Printer). Внимание:вам необходимо создать 3 (+1) файла:main.py, animation.py, template.html (и project.md)
- скопируйте опубликованный код
- загрузите код на свою доску, и все готово!
После включения лампы он автоматически подключится к предустановленной сети.
Затем просто откройте приложение Zerynth, которое будет искать объекты Zerynth, подключенные к сети, выберите интересующий объект, в данном случае «Zerytnh Lamp», и вы сможете взаимодействовать с ним! В этом случае приложение Zerynth показывает палитру цветов и меню для выбора различных предварительно настроенных анимаций.
Код очень простой и имеет много комментариев. Если у вас возникнут какие-либо вопросы или предложения, не стесняйтесь публиковать сообщения на форумах сообщества Zerynth:http://community.zerynth.com/
Шаг 4. Сделайте Интернет вещей ярче!
Тебе понравилось это? Приступим к хардкору!
Zerynth Shield представляет собой набор датчиков и исполнительных механизмов, включая датчики для обнаружения касания, инфракрасный светодиод, микрофон, датчик освещенности и датчик температуры. Вы можете начать с этого очень простого примера кода, чтобы разработать поведение, которое вам больше нравится. Используйте Zerynth Shield, чтобы расширить функциональные возможности лампы!
Луиджи Ф. Серфеда (@L_F_Cerfeda) - команда Zerynth
Код
- main.py
- template.html
- animation.py
main.py Python
########################################################################################## ################################# Лампа Zerynth ## Создано Zerynth Team 2015 CC # Авторы:Г. Балди , Д. Маццеи ############################################################################### ################################# импортировать необходимые модули импортировать потоки из bcm43362 импортировать bcm43362 как wifi_driver из беспроводного импорта wifiимпорт анимации из toishield import toishield # и импортировать модуль zerynthapp из zerynthapp import zerynthappstreams.serial () # подключиться к сети Wi-Fi ") print (" Ok! ") за исключением Exception as e:print (e) # сохраните template.html во флэш-памяти доски с помощью new_resourcenew_resource (" template.html ") #### ZerynthApp Setup # ::Javascript для Python::# следующие функции будут вызываться при нажатии кнопокdef change_color (r, g, b):animation.setup_color (r, g, b) def change_animation (n):animation.setup_anim (n) def change_speed (n):animation .setup_a nim_speed (n) # настроить приложение Zerynth с именем, описанием и шаблоном urlvp =zerynthapp.ZerynthApp ("Zerynth Lamp", "Попробуйте меня!", "resource://template.html") # каждый раз, когда Javascript генерирует события вызываются соответствующие функции vp.on ("change_color", change_color) vp.on ("change_animation", change_animation) vp.on ("change_speed", change_speed) # запускаем ZerynthApp! vp.run () # с момента запуска vp.run новый поток, вы можете делать здесь все, что захотите! # давайте управлять ledsanimation.start (D6, 24)
template.html HTML
Лампа Zerynth
На платформе Zerynth (www.zerynth.com)
animation.py Python
########################################################################################## ################################# Лампа Zerynth ## Создано Zerynth Team 2015 CC # Авторы:Г. Балди , Д. Маццеи ############################################################################### ################################# Функции анимации лампы из neopixel import ledstrips как neoimport threadinglock =threading.Lock () # цвет Zerynth :) color =[0x54,0x9a, 0x97] anim =0anim_speed =50leds =Nonelayer0 =Nonelayer1 =Nonelayer2 =Nonenpins =0 Stop =Falsestopcolor =[0xff, 0xff, 0xff] # создадим все необходимые слои # давайте определим некоторые коэффициенты для плавной анимации (половина синусоиды) animation_coefficients =[0, 0,2588190451, 0,5, 0,7071067812, 0,8660254038, 0,9659258263, 1, 0,9659258263, 0,8660254038, 0,7071067812, 0,5, 0,2588190451] радуга =[ 0xff, 0x7f, 0x00), (0xff, 0xff, 0x00), (0x00,0xff, 0x00), (0x00,0x00,0xff), (0x4b, 0x00,0x82), (0x8f, 0x00,0xff)] def setup_anim ( n):global layer0, layer1, layer2, anim # заливка слоев их начальными значениями l ock.acquire () leds.clear () layer2.clear () layer0.clear () layer1.clear () n =n% 4 if n ==0:layer0 [0] =(100,0,0) layer0 [ 1] =(100,0,0) layer0 [2] =(100,0,0) layer1 [0] =(0,100,0) layer1 [1] =(0,100,0) layer1 [2] =(0,100, 0) elif n ==1:для x в диапазоне (npins // 2):layer0 [x] =(100 // (2 * x + 1), 0,0) layer1 [npins-x-1] =( 0,100 // (2 * x + 1), 0) layer2.clear () elif n ==2:layer1.clear () pstep =0 для x в диапазоне (npins):step =x * len (rainbow) / npins rx =(rainbow [int (step)] [0] + rainbow [int (pstep)] [0]) // 4 gx =(rainbow [int (step)] [1] + rainbow [int (pstep)] [ 1]) // 4 bx =(rainbow [int (step)] [2] + rainbow [int (pstep)] [2]) // 4 layer0 [x] =(rx, gx, bx) pstep =step elif n ==3:layer0.clear () layer1.clear () anim =n lock.release () def setup_anim_speed (n):global anim_speed anim_speed =n def setup_color (r, g, b):global color #print (" Color:", r, g, b) color [0] =r color [1] =g color [2] =b # Создать функцию для обработки фоновой анимацииdef animate_background (delay):global color step =0 while True:if ( anim ==3 или anim ==0) и не останавливаться:lock.acquire () layer2.setal l (int (цвет [0] * animation_coefficients [шаг] / 2), int (color [1] * animation_coefficients [шаг] / 2), int (color [2] * animation_coefficients [шаг] / 2)] lock.release () step + =1, если step> =len (animation_coefficients):step =0 else:lock.acquire () layer2.clear (); layer2.setall (stopcolor [0], stopcolor [1], stopcolor [2]) lock.release () sleep (delay + 500-5 * anim_speed) def animate_foreground (delay):while True:если не остановлен:lock.acquire () if anim ==0:layer0.lshift () layer1.rshift () elif anim ==1:layer0.rshift () layer1.rshift () elif anim ==2:layer0.rshift () layer1.rshift () elif anim ==3:layer0.lshift () layer1.lshift () lock.release () else:lock.acquire () layer0.clear () layer1.clear () lock.release () sleep (delay + 100-anim_speed ) def start (pin, numpins):global leds, layer0, layer1, layer2, npins npins =numpins leds =neo.LedStrip (pin, numpins) layer0 =neo.LedStrip (pin, numpins) layer1 =neo.LedStrip (pin, numpins) layer2 =neo.LedStrip (pin, numpins) setup_anim (0) setup_anim_speed (50) # запустить поток потока фоновой анимации (animate_background, 500) # запустить поток потока анимации переднего плана (animate_foreground, 50) while True:# очистить светодиоды leds.clear () # теперь получаем блокировку lock.acquire () # объединяем первый и второй слои leds.merge (layer0) leds.m erge (layer1) # объединяем фоновый слой только там, где светодиоды прозрачны (0,0,0) leds.merge (layer2, neo.first_color) # снимаем блокировку lock.release () # и зажигаем! leds.on () sleep (50) def stop (r, g, b):глобальная остановка global stopcolor stopcolor [0] =r stopcolor [1] =g stopcolor [2] =b stop =True def resume ():global Остановлен остановлен =Ложь setup_anim (anim)
Схема
Производственный процесс