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有一个细节设计,上面这个蓝条,蓝色代表设备在线,灰色就是离线了,后来观察到的,还挺有意思的.
