物联网环境光:Zerynth 灯
组件和用品
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
应用和在线服务
| ||||
|
关于这个项目
低功耗无线标准与低成本、超微型 LED、传感器和通信设备相结合,使智能照明成为物联网和家庭自动化的催化剂。
在本教程中,我们将看到如何使用 Zerytnh 应用程序通过移动设备控制 NeoPixel LED 灯条,该应用程序显示了一个颜色选择器和一个用于选择各种预配置动画的菜单。
第 1 步:所需材料 图> 图> 图> 图>
该项目需要的元素很少:
- Zerynth 工作室 :具有云同步和板管理功能的多平台和基于浏览器的 Python 开发环境。无论您使用哪种操作系统,Zerynth 都能运行!只需下载 Zerynth 并安装它 (http://www.zerynth.com/zerynth-studio/)。
- Zerynth 应用: 用于智能对象和物联网系统的 Zerynth 移动界面。任何手机都将成为对象的显示和遥控器。下载: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 或 翻转和剪辑 通过 Mikroelektronika .无论您使用哪种板,Zerynth 都是多板兼容的!您可以在此处找到所有支持的板的详细信息:http://www.zerynth.com/zerynth-studio/
- 如果您不使用 Particle Photon(板载 wifi 模块),则需要一个将电路板连接到网络的元素,例如 wi-fi 屏蔽 Adafruit .但是,您可以使用安装 wifi 芯片的任何其他适配器 CC3000 Texas Instruments (http://www.ti.com/product/cc3000)。
- 一条(或一圈)NeoPixel Adafruit 的 LED (可在此处获取 https://www.adafruit.com/products/1426)
- 一个玻璃或 3D 打印灯 .选择权在您。
第 2 步:组装
- 只需将 wifi Shield 和 Zerynth Shield 搭载到您的 Arduino(或 ST Nucleo 或 UDOO)上。如果您使用 Particle Photon,只需将其搭载到 Zerynth Shield 上的专用连接器即可。
- 将 NeoPixel LED 连接到 Zerynth Shield 上的相关端口。
- 将所有电路板和 LED 放入灯中。
第 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 灯”,您就可以与它进行交互了!在本例中,Zerynth 应用程序显示了一个颜色选择器和一个用于选择各种预配置动画的菜单。
代码很简单,有很多注释。如有任何问题或建议,请随时在 Zerynth 社区论坛上发帖:http://community.zerynth.com/
第 4 步:让物联网更光明!
你喜欢它吗?来硬核吧!
Zerynth Shield 提供了一组传感器和执行器,包括用于触摸检测的传感器、红外 LED、麦克风、光传感器和温度传感器。您可以从这个非常简单的示例代码开始开发您喜欢的行为。使用 Zerynth Shield 扩展灯的功能!
Luigi F. Cerfeda (@L_F_Cerfeda) - Zerynth 团队
代码
- main.py
- template.html
- 动画.py
main.pyPython
############################################ ############################### Zerynth 灯## 由 Zerynth 团队 2015 CC# 创建作者:G. Baldi , D. Mazzei########################################## ################################ 导入需要的模块import Streamsfrom bcm43362 import bcm43362 as wifi_driverfrom wireless import wifiimport animationfrom toishield import toishield# 并从 zerynthapp 导入 zerynthapp 模块 import zerynthappstreams.serial()# 连接到 wifi 网络try:wifi_driver.auto_init() print("Establishing Link...") wifi.link("SSID",wifi.WIFI_WPA2,"password ") print("Ok!") 除了 Exception as e:print(e)# 用 new_resourcenew_resource("template.html")#### ZerynthApp Setup# ::Javascript to Python 将 template.html 保存在板子闪存中: :# 按下按钮时会调用以下函数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", "Try me!", "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.htmlHTML
Zerynth Lamp
由 Zerynth (www.zerynth.com) 提供支持
animation.pyPython
############################################ ############################### Zerynth 灯## 由 Zerynth 团队 2015 CC# 创建作者:G. Baldi , D. Mazzei########################################## #################################Lamp 动画函数来自 neopixel 导入 ledstrips as neoimport threadinglock =threading.Lock() # Zerynth 颜色 :)color =[0x54,0x9a,0x97]anim =0anim_speed =50leds =Nonelayer0 =Nonelayer1 =Nonelayer2 =Nonenpins =0stopped=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的,0x00,0x00),( 0xff,0x7f,0x00), (0xff,0xff,0x00), (0x00,0xff,0x00), (0x00,0x00,0xff), (0x4b,0x00,0x82), (0x8f,0x00,0xanim(设置)]def 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:for x in range(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 for x in range(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 or anim==0) 并且没有停止:lock.acquire() layer2.setal l(int(color[0]*animation_coefficients[step]/2),int(color[1]*animation_coefficients[step]/2),int(color[2]*animation_coefficients[step]/2)) lock.release () step +=1 if 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) # 启动后台动画线程 thread(animate_background,500) # 启动前台动画线程 thread(animate_foreground,50) while True:# clear leds leds.clear() # 现在,获取锁 lock.acquire() # 合并第一层和第二层 leds.merge(layer0) leds.m erge(layer1) # 仅在 LED 透明的地方合并背景层 (0,0,0) leds.merge(layer2,neo.first_color) # 释放锁 lock.release() # 并点亮它! leds.on() sleep(50)def stop(r,g,b):全局停止全局停止颜色停止颜色[0]=r停止颜色[1]=g停止颜色[2]=b停止=True def resume():全局停止 停止 =假 setup_anim(anim)
示意图
制造工艺