Adafruit IO类似于一个IOT平台,这个IOT平台解决了一些已知的麻烦,就先说说传统的IOT的平台面临的问题.
- 概念复杂,什么影子副本孪生策略各种,用起来需要掌握的知识实在是太多了.
- 链接麻烦,什么TLS还要搞公钥私钥乱,都要自己一步一步来做,确实比较麻烦.
- 可视化程度低,基本还要靠自己再开发一套软件,API操作非常多.
虽然Adafruit IO解决了上述问题,但是就是太贵了...(不过免费账号也是一样用的)
我这里搞到了一个Plus账号来玩玩.(大家凭本事忽悠去吧)
整个Adafruit IO是三大核心模块组成.
- Feeds : 数据源
- Dashboards : 控制面板
- Triggers : 触发器
Feeds就是我们需要提交的数据源,比如DockerPi获取的温度数据,Dashboard就是仪表板,用来展示数据,Trigger就是触发器,用来当条件发生进行操作的.
先创建一个叫temperature的Feeds.
然后在树莓派直接用Python就可以.(记得替换ADAFRUIT_IO_KEY和ADAFRUIT_IO_USERNAME,这两个参数在右上角AIO Key处获取,如果你是IO Plus用户,延迟可以改成1秒.)
from Adafruit_IO import Client, RequestError, Feed import time import smbus ADAFRUIT_IO_KEY = 'aio_xxxxxxxxxxxxxxxxxxxxxx' ADAFRUIT_IO_USERNAME = 'fcboyd' DEVICE_BUS = 1 DEVICE_ADDR = 0x17 TEMP_REG = 0x01 # 创建SensorHub板子的对象 bus = smbus.SMBus(DEVICE_BUS) # 创建执行实体并关联Feeds aio = Client(ADAFRUIT_IO_USERNAME, ADAFRUIT_IO_KEY) aio_temperature = aio.feeds('temperature') while True: aio.send_data(aio_temperature.key, bus.read_byte_data(DEVICE_ADDR, TEMP_REG)) time.sleep(2)
接着看图表就有数据了.(我对着传感器呼气,抖动还是挺大的.)
新建一个Dashboard就能看到个空白面板.
点右上角的加号发现很多方块可以选.
还可以进行一些微调.
防止好了的效果.
再同样方法新建一个Feeds,就叫做light吧.
新建一个Light的开关.然后调整下Layout,让整体看起来舒服点.
这个时候这个Feed就受到开关控制了.
程序改成这样,就可以多个继电器控制了~
from Adafruit_IO import Client, RequestError, Feed import smbus import time ADAFRUIT_IO_KEY = 'aio_xxxxxxxxxxxxxxxxxxxxxx' ADAFRUIT_IO_USERNAME = 'fcboyd' DEVICE_BUS = 1 DEVICE_ADDR_SENSORHUB = 0x17 DEVICE_ADDR_RELAY = 0x10 TEMP_REG = 0x01 # 创建SensorHub板子的对象 bus = smbus.SMBus(DEVICE_BUS) # 创建执行实体并关联Feeds aio = Client(ADAFRUIT_IO_USERNAME, ADAFRUIT_IO_KEY) aio_temperature = aio.feeds('temperature') aio_light = aio.feeds('light') while True: aio.send_data(aio_temperature.key, bus.read_byte_data(DEVICE_ADDR_SENSORHUB, TEMP_REG)) if aio.receive(aio_light.key).value == 'OFF': bus.write_byte_data(DEVICE_ADDR_RELAY, 1, 0x00) else: bus.write_byte_data(DEVICE_ADDR_RELAY, 1, 0xFF) time.sleep(2)
另外Dashboard是可以有公开属性的,这样所有人都可以看到你的Dashboard了,分享给朋友不错的.
最后一个功能是触发功能,比如我设置,当温度大于30度时候给我发个邮件...
然后我拿热风枪吹了一下,立马就很高了.
也可以设置定时触发,每30分钟,告诉我一下温度.
如果是WebHook触发,就需要自己写Web程序解包JSON数据了~
Dashboard有一个细节设计,上面这个蓝条,蓝色代表设备在线,灰色就是离线了,后来观察到的,还挺有意思的.