本帖最后由 gjianw217 于 2016-1-17 22:34 编辑
前些天试用了Atom,了解了其基本原理,工作流程及应用开发等,但感觉云平台有些不稳定,故暂断了一段时间,没想到,现在是好了许多,但还是不有些不稳定。之所以暂断,原因是不管是绑定设备(要想控制,必须要先绑定),还是程序的编写、烧录,都需要云平台的支持。
当初申请的时候,就曾提到,要借助Atom,来搭建自己的智能家居应用,其中包含:有如下几条:
通过手机app,来控制继电器的开关,进而控制电源、通过温湿度优越感器来检测家庭的温湿度,从而去控制空调或加热器、通过光电传感器检测家庭灯光,然后去控制家庭主灯的亮度等。
接下来,就通过控制灯的状态和采集温湿度的值开始,进行前期的预演。主要包括:
智能灯设备创建及程序控制;温湿度设备的创建和程序控制以及智能家居系统设备(包括以上两个设备,或者叫控制更合适)的创建和程序实现。以下内容假设已经登录IntoRobot开发系统,http://www.intorobot.com/。并且每个设备的实现,基本上分为6步:
创建设备、创建工程、编写程序、绑定设备、烧录程序、控制演示等,具体如下面所述。
-----------------------------------------------------------------------------------------------
一、智能灯设备
1 创建设备,在设备展示下的我的设备,点击添加,输出设备名称,并选择可控
2 创建工程,在在线编程下的我的工程,点击添加,输出工程名称,并选择刚创建的设备
3 编写程序,代码的实现,参考SmartLight示例,具体可在示例下输入SmartLight查询
- //智能灯控件topic定义
- #define SMARTLIGHT_CMD_SWITCH "channel/smartLight_0/cmd/switch" //开关命令
- #define SMARTLIGHT_DATA_STATUS "channel/smartLight_0/data/status" //开关状态
- #define LEDPIN D0 //定义灯泡控制引脚
- void smartLightSwitchCb(uint8_t *payload, uint32_t len)
- {
- if(payload[0] == '1')
- {
- digitalWrite(LEDPIN, HIGH); // 打开灯泡
- IntoRobot.publish(SMARTLIGHT_DATA_STATUS,"1");
- }
- else
- {
- digitalWrite(LEDPIN, LOW); //关闭灯泡
- IntoRobot.publish(SMARTLIGHT_DATA_STATUS,"0");
- }
- }
- void setup()
- {
- //初始化
- pinMode(LEDPIN, OUTPUT);
- //接收灯开关命令
- IntoRobot.subscribe(SMARTLIGHT_CMD_SWITCH, NULL, smartLightSwitchCb);
- }
- void loop()
- {
- }
4 绑定设备,创建设备后,
手机上的IntroRobot APP会自动显示刚生成的设备(
有时候立即显示,有时候会长时间的延时,不知为什么),找到设备MySmartLed,点击进入,点击右上角,选择绑定设备,然后安装官方教程绑定即可。可能第一次要花费些时间,但后来就快了,而且绑定成功率也非常高。
5 烧录程序,烧录前必要绑定工程对应的设备,只有绑定成功才能正确烧写,
不然会报出网络没有连接对的错误提示。
6 控制演示
----------------------------------------------------------------------------------------------
二、温湿度设备
1 创建设备,同上,在设备展示下的我的设备,点击添加,输出设备名称,并选择可控。
由于默认是智能灯控制设备,如果想实现其他设备的功能,需要编辑控件,具体看下面第三部分的智能家居设备控件的编辑。
2 创建工程,同上,在在线编程下的我的工程,点击添加,输出工程名称,并选择刚创建的设备
3 编写程序,同上,代码的实现,参考humiture示例,具体可在示例下输入humiture查询
- #include
- //温湿度计控件topic定义
- #define HUMITURE_DATA_TEMPERATURE "channel/humiture_0/data/temperature" //空气温度
- #define HUMITURE_DATA_HUMIDITY "channel/humiture_0/data/humidity" //空气湿度
- DHT11 dht11 = DHT11(D1);
- void setup()
- {
- //初始化
- dht11.begin();
- }
- void loop()
- {
- IntoRobot.publish(HUMITURE_DATA_TEMPERATURE, dht11.ReadTemperature(0)); //上送温度值
- IntoRobot.publish(HUMITURE_DATA_HUMIDITY, dht11.ReadHumidity()); //上送湿度值
- delay(1000);
- }
4 绑定设备,创建设备后,手机上的IntroRobot APP会自动显示刚生成的设备(有时候立即显示,有时候会长时间的延时,不知为什么)
5 烧录程序,烧录前必要绑定工程对应的设备,只有绑定成功才能正确烧写,不然会报出网络没有连接对的错误提示。
6 控制演示
-----------------------------------------------------------------------------
三、智能家居系统
1 创建设备,在设备展示下的我的设备,点击添加,输出设备名称,并选择可控。
2 编辑控件,
之所以要编辑控制,是因为IntoRobot系统默认生成的智能灯设备,对应的控件也是智能灯的控件,如下图所示,而编辑控制的目的有两个,一个是将其设置为自己需要的控制,另一个是实现一个设备控制多个“控件”的目的。具体方法是:
(1)在新建的设备界面,点击“..."然后选择编辑控件
(2)弹出如下编辑控件界面,最左边的是当前IntoRobot系统中已有控件的分类;中间的是当前分类下,提供的控件;最右边是当前设备包含的控制。由于要实现智能灯的控制和温湿度传感器数据的采集,故保留智能灯,选择温湿度计***度计,在弹出的界面的最下面,选择添加,就形成了如下图所示的控件。
(3)最后一定要选择保存,不然。。。
(4)保存后,就会在手机APP下面生成对应的设备(
如果没有,下位刷新或关闭后重新启动,一般是可以的),点击进去,可看到有两个控件
3 创建工程,同上,在在线编程下的我的工程,点击添加,输出工程名称,并选择刚创建的设备
4 编写程序,代码的实现,整合以上两个示例
- ///////////////////////////////////////
- /*
- ************************************************************************
- * 作者: 口袋物联
- * 版本: V1.0.1
- * 日期: 2016-01-17
- * 微信公众号 :koudaiwulian
- ************************************************************************
- 功能描述:
- 智能家居环境检测与控制:
- 智能灯控制
- 温湿度检测
- 后续功能完善中。。。
- 所需器件:
- 0.IntoRobot Atom
- 1.Led发光二级管
- 2.DHT11传感器模块
- 3.连接线若干
- 接线说明:
- 1 LED
- GND
- I/O D1
- 2 DHT11传感器模块
- GND
- VCC V3.3
- S D0
- */
- #include
- //控件topic定义
- //Led
- #define LED_CMD_SWITCH "channel/smartLight_0/cmd/switch" //开关命令
- #define LED_DATA_STATUS "channel/smartLight_0/data/status" //开关状态
- //温湿度计
- #define HUMITURE_DATA_TEMPERATURE "channel/humiture_0/data/temperature" //空气温度
- #define HUMITURE_DATA_HUMIDITY "channel/humiture_0/data/humidity" //空气湿度
- #define LEDPIN D0 //定义灯泡控制引脚
- DHT11 dht11 = DHT11(D1);
- void LEDSwitchCb(uint8_t *payload, uint32_t len)
- {
- if(payload[0] == '1')
- {
- digitalWrite(LEDPIN, HIGH); // 打开灯泡
- IntoRobot.publish(LED_DATA_STATUS,"1");
- }
- else
- {
- digitalWrite(LEDPIN, LOW); //关闭灯泡
- IntoRobot.publish(LED_DATA_STATUS,"0");
- }
- }
- void setup() {
- // put your setup code here, to run once:
- //初始化
- pinMode(LEDPIN, OUTPUT);
- dht11.begin();
- //接收灯开关命令
- IntoRobot.subscribe(LED_CMD_SWITCH, NULL, LEDSwitchCb);
- }
- void loop() {
- // put your main code here, to run repeatedly:
- IntoRobot.publish(HUMITURE_DATA_TEMPERATURE, dht11.ReadTemperature(0)); //上送温度值
- IntoRobot.publish(HUMITURE_DATA_HUMIDITY, dht11.ReadHumidity()); //上送湿度值
- delay(1000);
- }
5 绑定设备,在最后实现的时候,不知道为什么,每次都可以绑定,但开始就会出现绑定不成功的问题,不知为什么。
6 烧录程序,烧录前必要绑定工程对应的设备,只有绑定成功才能正确烧写,不然会报出网络没有连接对的错误提示。
7 控制演示
对Atom上设备的控制,其实有两种方法
,一个是通过手机IntoRobot的APP来实现,如上面两个示例效果所示;
另一个就是通过InroRobot的网站进行数据的查看和控制的控制。下面看下Web端的控制。
1 查看温湿度值
2 控制Led灯
(1)Web控制
(2)Atom效果