Alios-Thins教程连载 ④ 图文并茂教你使用乐鑫esp8266轻松连接阿里飞燕平台,个人设备实现轻松对接天猫精灵 。(下篇)(附带demo)
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。
1、 如何搭建阿里开源系统Alios-Things环境,烧录到乐鑫esp8266,打印 HelloWorld 。
2、 乐鑫esp8266如何在Alios-Things环境移植 gpio 驱动,点亮一盏LED。
3、 图文并茂教你使用乐鑫esp8266轻松连接阿里生活平台,个人设备实现轻松对接天猫精灵 。(上篇)
4、 图文并茂教你使用乐鑫esp8266轻松连接阿里生活平台,个人设备实现轻松对接天猫精灵 。(下篇)
文章目录
- 一、 前言;
- 二、 `linkkitapp`工程代码运行流程;
- 三、 `linkkit_example.c`代码简单分析;
- 四、 `linkkit_app.c`代码简单分析;
- 五、 如何集成天猫精灵控制;
- 六、 后记;
一、 前言;
- 这阿里生活平台系列的博文已经有一个多月没更新了,主要是边学边记录这开发笔记!没时间更新博文,大家谅解下,关注下本博客!有时间过来浏览下,每个月固定几篇干货分享给大家哈!告密下,本系列博文将有视频教学同步到阿里云大学物联网专题,不容错过哦!多谢支持!
- 上篇我已经介绍怎么在分支
1.3
下面使用linkkitapp
来连接阿里生活平台,主要概述就是云端新建产品,以及怎么配合测试版app
来配网连接服务器!那么本篇博客,继续讲述linkkitapp
的代码逻辑过程!
二、 linkkitapp
工程代码运行流程;
- 上述我总结的流程图,很详细地说明了过程:
- 首先工程开始时候,会检查设备有没有保存了最近连接成功的路由器
AP
热点的名字和密码,如果有连接记录,他会自动去连接这个路由器,一直直到连接成功!如果没有,会自动进去配网模式! - 一旦连接配网成功之后,就会自动连接路由器,同时本地还会发出
UDP
广播包告诉局域网内的手机有新设备! - 配网过程的代码在
linkkit_example.c
文件,包括配网开始,配网确认激活,以及网络监控连接成功触发函数! - 与服务器交互的代码在
linkkit_app.c
文件,包括收到服务器下发数据触发,以及主动上报!
- 首先工程开始时候,会检查设备有没有保存了最近连接成功的路由器
三、 linkkit_example.c
代码简单分析;
- 由于前面讲述的是
1.3
分支的代码,那么这里依然教大家怎么看1.3
分支的;入口函数是application_start()
! 1.3
分支的没有配网开始的回调,但是有连接路由器过程的回调,这点我感觉遗憾!下篇我会做下2.0
分支的代码,敬请期待!- 因为流程需要用户手动确认配网,所以,我加个按键中断检测!我移植第二篇的博文代码过来,在中断回调这样写:
static void gpio_isr_handler()
{//for esp8266 ,need to disable interrupthal_gpio_disable_irq(&input);printf("gpio_isr_handler() \n");do_awss_active(); //用户确认配网函数调用//delay 2s ,then enable interruptaos_post_delayed_action(2000, gpio_enable_irq, NULL);
}
- 其他的也没啥好说了,这个
wifi_service_event()
方法是回调路由器连接情况; - 核心调用还是
do_awss_active()
是配网确认,而do_awss_reset()
是再次进去配网模式!
四、 linkkit_app.c
代码简单分析;
- 下面提到的
TSL
模型,在上节并没有提到,它其实是一种数据模型,是为了便于与服务器通讯!具体的可以去官网文档自行浏览!当然了,我也会教大家怎么新建这个数据模型!
int linkkit_main()
{sample_context_t* sample_ctx = &g_sample_context;int execution_time = 0;int get_tsl_from_cloud = 0;execution_time = execution_time < 1 ? 1 : execution_time;LINKKIT_PRINTF("sample execution time: %d minutes\n", execution_time);LINKKIT_PRINTF("%s tsl from cloud\n", get_tsl_from_cloud == 0 ? "Not get" : "get"); //打印TSL自定义是从云端获取还是本地获取memset(sample_ctx, 0, sizeof(sample_context_t));sample_ctx->thing_enabled = 1;//开始linkkit任务,连接服务器linkkit_start(16, get_tsl_from_cloud, linkkit_loglevel_debug, &alinkops, linkkit_cloud_domain_sh, sample_ctx);//如果不是从云端设置获取tsl,那么从本地获取!if (!get_tsl_from_cloud) {linkkit_set_tsl(TSL_STRING, strlen(TSL_STRING));}
#ifdef SUBDEV_ENABLE //是否定义了网关的子设备linkkit_subdev_init(&subdev_ops, &g_subdev_sample_context);
#endifaos_post_delayed_action(100, linkkit_action, sample_ctx);return 0;
}
- 自定义回调方法设置,下面函数中,我们看到在自定义了各种参数,包括方法,具体的什么含义,大家去官网文档看看,很详细的!
static linkkit_ops_t alinkops = {.on_connect = on_connect,.on_disconnect = on_disconnect,.raw_data_arrived = raw_data_arrived,.thing_create = thing_create,.thing_enable = thing_enable,.thing_disable = thing_disable,.thing_call_service = thing_call_service,.thing_prop_changed = thing_prop_changed, //服务器下发属性修改时候出发.response_arrived = on_response_arrived,.linkit_data_arrived = masterdev_linkit_data_arrived,
};
- 最重要的还是
thing_prop_changed()
方法,其里面是服务器下发属性的时候,我们就在这里面做对应的动作设置!大家可以感兴趣地打印下这些参数是什么,只有自己亲身实践了,才会知道这里面是什么东西!下面的代码是我开源的一盏LED点亮的下发处理!
static int thing_prop_changed(const void* thing_id, const char* property, void* ctx)
{char *value_str = NULL;char property_buf[64] = {0};int response_id = -1;INFO("post property(%s) response id: %d ", property, response_id);if (strstr(property, "PowerSwitch") != 0) //判断属性是否PowerSwitch{int PowerSwitch;/* generate property identifier HSVColor.Hue */snprintf(property_buf, sizeof(property_buf), "%s", property, "PowerSwitch");/* get value by linkkit_get_value */linkkit_get_value(linkkit_method_get_property_value, thing_id, property_buf, &PowerSwitch, &value_str);if (PowerSwitch == 1){hal_gpio_output_low(&trigger); //低电平}else if (PowerSwitch == 0){hal_gpio_output_high(&trigger); //高电平}if (value_str){free(value_str);value_str = NULL;}INFO("property(%s), PowerSwitch:%d\n", property, PowerSwitch);}/* do user's process logical here. */linkkit_post_property(thing_id, property); //上报数据return 0;
}
- 最重要的一项,需要修改自己的
TSL
模型,首先我们在我们的后台项目那里找到数据,复制他:
- 然后压缩转义这个数据格式,来这网址 https://www.sojson.com/yasuo.html ,意义在于添加在我们的文件中的大概第42行的代码的数组
TSL_STRING
初始化覆盖就可以了!
五、 如何集成天猫精灵控制;
- 这个相信都是大家所期待的,呵呵!当你和
app
交互成功后,你在天猫精灵APP
上打开主页看到如下: - 你可以备注下这个设备,用方糖或者天猫精灵x1语音控制下!
六、 后记;
- 上篇讲到的配网时候,要自己弄二维码,其实可以去后台给予的二维码扫描配网!
另外,不要把我的博客作为学习标准,我的只是笔记,难有疏忽之处,如果有,请指出来,也欢迎留言哈!
- 玩转
esp8266
带你飞、加群付费QQ
群,不喜的朋友勿喷勿加:434878850 - 本博文对应硬件代码,针对
1.3
分支和2.0
分支, 详见readme.txt
:https://github.com/xuhongv/StudyInEsp8266/tree/master/31_ESP8266_AliOS-Things - esp8266源代码学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp8266
- esp32源代码学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp32
Alios-Thins教程连载 ④ 图文并茂教你使用乐鑫esp8266轻松连接阿里飞燕平台,个人设备实现轻松对接天猫精灵 。(下篇)(附带demo)相关推荐
- Alios-Thins教程连载 ③ 图文并茂教你使用乐鑫esp8266轻松连接阿里飞燕平台,个人设备实现轻松对接天猫精灵 。(上篇)(附带demo)
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. 如何搭建阿里开源系统Alios-Things环境,烧录到乐鑫e ...
- Alios-Thins教程连载 ①如何搭建阿里开源系统Alios-Things环境,烧录到乐鑫esp8266,打印 HelloWorld 。(附带镜像)
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. 如何搭建阿里开源系统Alios-Things环境,烧录到乐鑫e ...
- Esp8266 进阶之路28 【高级篇】教你轻松自如使用cJson在乐鑫 esp8266 如何解析一段json数据以及如何生成一段json数据。(附带demo)
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 序号 SDK版本 内容 链接 1 nonos2.0 搭建 ...
- 【详细教程】App inventor连接阿里云平台(APP显示STM32发来的温湿度数据等)
前言: 目前已经成功将esp8266连接上了阿里云平台,实现了温湿度等数据的上云操作.但是在阿里云查看数据非常的不方便,因为阿里云的Web网页版都是临时的,链接在一段时间后会失效,除非绑定了域名才能长 ...
- MQTT网关连接阿里云平台案例教程
MQTT协议网关网口连接西门子SMART200PLC 前言:MQTT是一个基于客户端-服务器的消息发布/订阅传输协议.MQTT协议的特点是轻量.简单.开放和易于实现的,同时,西门子PLC广泛应于工业控 ...
- 安信可ESP8266模块实现对接天猫精灵IOT平台控制单路插座的教程
文章目录 一.材料准备 二.软件配置 一.材料准备 天猫精灵一个,ESP8266模块一个(为了方便接线我们直接使用了Nodemcu开发板),插座一个(方便查看现象),杜邦线若干,接线方式如下 Node ...
- M5310-A通过MQTT连接阿里云平台教程
1.串口调试 首先我们要准备一个usb转串口,这个在淘宝就可以购买,很便宜. 接线: usb转ttl M5310-A RX TX TX RX 5V VIN GND GND 接下来我们打开串口调试助手并 ...
- 天猫精灵对接AliOS ESP32 设备
天猫精灵对接AliOS ESP32 设备 1. 介绍 IoT物联网变得越来越火热, 智能家居已经走入家庭. 智能设备,如灯, 开关, 空调, 温湿度传感器, 风扇, 扫地机器人都可以通过智能音箱来控制 ...
- 使用ESP8266,基于Alios things 的linkkit连接阿里生活物联网平台,实现天猫精灵控制
1.写在前面 我使用的模块是ESP-12F,理论上使用8266的WIFI模组都大同小异.关于8266的学习资料,大家可以参考安信可的相关资料,网址如下:http://wiki.ai-thinker.c ...
最新文章
- C语言网络编程:close或者shutdown断开通信连接
- mysql 创建函数问题
- kbone-cli初始化项目,提示‘模板xx不存在’
- 处理器指令编码可重定义的方法_从零开始设计四位栈处理器(2)——结构与指令集...
- CompletableFuture详解~CompletionStage
- 重磅!谷歌发布3D目标检测数据集及检测方案
- path manipulation怎么解决_超详细的toad报错解决--no valid oracle clients found.
- [leetcode]5170. 验证二叉树
- Hibernate之Inverse的用法
- 添加类别html页面,WordPress分类/标签/页面的url链接添加html后缀
- 文本数据标注工具Doccano
- 基于遗传算法的柔性车间调度优化(Matlab代码实现)
- Github渗透测试工具库
- python3爬虫实战一: 爬取豆瓣最新上映电影及画出词云分布
- 用例图、功能模块图和数据库的区别
- 家用宽带如何叠加多条宽带,提高局域网速度
- pc端js获取当前经纬度_js获取用户当前地理位置(省、市、经纬度)
- Amy Palladino 加入 BCW,担任企业运作执行副总裁兼董事总经理
- java导出excel 打不开_java – 无法使用AbstractExcelView导出Excel工作表
- matlab代码折叠与分节注释
热门文章
- 外贸企业邮箱网页登录入口,免费注册电子邮箱教你如何登录企业邮箱
- CSS布局相关知识点(二):水平布局、垂直布局
- python web 开发实践 读书笔记
- 猫罐里含有蒙脱石,猫咪可以吃吗?
- 51 Proteus仿真0-30V数字可调电源TLC5165-FZ0018
- 温暖相伴 | “健康未来”项目携手九三学社走进玉林市乡村小学
- ArcGIS:根据DEM数据提取区域水系
- 自写app与树莓派制作智能小车
- excel图表交互联动_不用excel,如何实现图表联动?
- [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(八)暴力破解相关面试题