跟着官方学Atom(五)APP无线控制
通过前面4篇对Atom的体验,现在基本上对Atom有了一个全面的认识,而Atom最大的优点就是在线编程,在线上传,丰富的传感器器库,远程云服务等。接下来,通过一个简单的示例,真正实现Atom的无线控制。本示例参考智能灯实例来玩成。
一 添加设备
1 首先登录IntoRobot的官网http://www.intorobot.com/
2 添加设备,在设备展示中,增加新的设备,如下图所示
2 配置,查看设备配置信息,如下图所示
3 APP绑定,通过上面的步骤,就在云端生成了一个新的设备,这时在手机APP端可以查看到,如下图所示,点击右上角,进行绑定,这一步非常重要,不然程序烧录时,不会成功的。
二 代码实现
1 选择在线编程,新增加一个工程,注意此时要选择刚才绑定的设备
2 完善代码,新建工程后,出现如下界面,
3 在代码区,将如下代码复制到代码区
- //智能灯控件topic定义
- #define LED_CMD_SWITCH "channel/smartLight_0/cmd/switch" //开关命令
- #define LED_DATA_STATUS "channel/smartLight_0/data/status" //开关状态
-
- #define LEDPIN D13 //定义灯泡控制引脚
-
- 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);
- //接收灯开关命令
- IntoRobot.subscribe(LED_CMD_SWITCH, NULL, LEDSwitchCb);
- }
-
- void loop() {
- // put your main code here, to run repeatedly:
-
- }
代码简述
在设备信息中,通过宏定义,定义了led的控制命令路径和数据状态路径,宏名字可以自由取,但路径是固定的
然后定义了控制引脚,在Atom中,引出了32个数字引脚,任意取一个,在此取引脚为13,然后定义了一个回调函数,用来判断APP端传输过来的数据,以便对led作出对应的响应,即数字引脚13输出高电平或低电平在setup函数中,重点调用了IntoRobot.subscribe函数,此函数的详细信息可参见以下链接。个人觉得,在部分的功能,应该是IntoRobot平台使用了MQTT协议,即调用了MQTT协议中的发布与订阅功能。
有关代码的参考示例,有3个地方:
1 http://wiki.intorobot.com/
2 http://docs.intorobot.com/zh/firmware/
3http://www.intorobot.com/main.html#program/pub/LCD显示模块
三 APP控制
1 在手机端,打开intorobot APP端,注意设备后面右上角的绿色连接标识,表示当前被绑定的设备,即可以操作的设备,点击进入
2 控制led点亮
1)云端控制
2)手机端控制
3)Atom端响应
3 控制led熄灭
1)云端控制
2)手机端控制
3)Atom端响应
PS:
1 设备配置不稳定,正常情况下,很快就可以联网、配置、编译、烧录成功,但有时出现很多问题,可能IntoRobot在调试服务器吧,毕竟每一步操作,都需要连接IntoRobot的云端或服务端
2 如果出现如下错误,说明程序和APP端绑定的设备不匹配
写的很详细,赞