大神玩转MiCO好生羡慕
菜鸟低头不语无从下手
别慌~看完下面的
武功秘籍,你也能成为
一代米侠,
被人仰望!
一.微信控灯十一式
第一式:注册开发者账号
第二式:使用个人微信号开通测试公众号
第三式:在FogCloud上创建、定义自己的产品
第四式:在FogCloud上创建产品对应的微信APP
第五式:Github上创建微信APP代码托管仓库
第六式:配置微信APP以及微信测试公众号
第七式:使用MiCO SDK开发RGB LED灯的固件
第八式:用网页编辑工具(sublime等)开发微信APP代码
第九式:使用Github工具托管APP代码
第十式:FogCloud上生成设备二维码
第十一式:使用手机微信扫码,测试“Airkiss”配网功能以及设备控制功能。
二.基本功
注意:练功开始前请确定射频驱动为最新版本
版本查询及升级方法请参考MiCO社区 → wiki中心 → MiCOKit板块射频驱动升级
1. MiCOKit-3288开发套件;
2. 开发工具请使用IAR7.3版本及以上;
3. FogCloud开发者账号(Fog云使用、开发必须);
4. MiCO SDK v2.2.0(固件开发包);
5. 个人微信号(开通测试公众号);
6. github个人账号(托管微信APP代码);
7. 网页编辑工具(sublime等);
8. 大致了解MQTT协议及json格式。
三.招式详解
第一式:注册开发者账号
登录
www.fogcloud.io直接注册账号即可。该账号将用来管理你的产品及APP。
第二式:使用个人微信号开通测试公众号
浏览器打开
http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login,点击登录,使用手机微信扫码,进入后即开通了测试公众号。
获得微信号、appID、appsecrect,用于后续在FogCloud上创建产品对应的微信APP。
第三式:在FogCloud上创建、定义自己的产品
根据提示填写相关信息,创建完成后,如下
点击产品名称,进入详细信息:
产品ID/KEY会写到设备固件代码中;
创建产品的数据模型,数据模型是用来在云端定义产品功能、性能等特征数据的标准格式,可以储存设备监控、收集、控制、用户行为等数据,从而对数据进行分析,提升产品服务,开发案例过程中定义数据模型,能够有效帮助开发者将APP、云端与设备端的关键功能、特征数据等同步,避免开发过程出错。
本实例仅控制MiCOKit-3288上的一个RGB LED灯,所需创建的控制数据点有:
1)开关(rgbled_switch) 读写属性为1 时间序列为否
2)色相(rgbled_hues) 读写属性为1 时间序列为否
3)饱和度(rgbled_saturation) 读写属性为1 时间序列为否
4)亮度(rgbled_brightness) 读写属性为1 时间序列为否
*属性名和描述可按个人习惯添加
注意:在创建数据点时,“时间序列”选项:选中时云端保存历史数据;不选时云端只保存最新的数据。
数据模型的具体作用在后面的进阶教程中详细讲解。
第四式:在FogCloud上创建产品对应的微信APP
根据提示,填写相关信息,其中微信号、AppID/AppSecret从步骤2中开通的微信测试公众号中获得。
第五式:Github上创建微信APP代码托管仓库
请登录github.com自行创建新仓库。并克隆到本地,克隆方法详见《上传文件到GitHub》。该步骤的目的是获得一个可以在任何地方访问的git仓库,后面会使用该仓库托管微信APP的代码(其他类似git仓库托管工具也可以)。
获得仓库地址,例如:
https://github.com/wangeshen/MiCOKit_test.git
第六式:配置微信APP以及微信测试公众号
(a) FogCloud上的微信APP信息:
其中URL和Token会在后续配置微信测试号时用到。
(b)Git部署(同步微信APP代码到FogCloud)
其中:
Repo即步骤5中创建的github仓库地址,填写后保存;
Deploy key和Web Hook Url可添加到github仓库的设置中,以自动同步代码到FogCloud;也可以不添加,但是github仓库中代码更新后,需要手动点击“发布”按钮来同步代码,同步后右边可看到最新的代码提交记录。
(c) 微信菜单管理
通过FogCloud提供的微信公众号首页菜单定制功能,方便的定制手机端微信上的控制界面及功能;至少包含“Airkiss”按钮,打开微信Airkiss配网功能,“OAuth”按钮(名称可自定义)进入设备控制。
(d) 设置微信测试公众号 URL与Token在创建的APP信息中可以找到
修改配置信息:
URL一般为:http://4addb71f-1b5c-XXXX-94c5-f3d93795a17e.app.easylink.io/wechat.php
下划线部分作为JS接口安全域名和授权回调页面域名。域名中不包含http:// 和 /wechat.php!!!
开通所有测试功能,并填写网页授权域名:
点击修改,打开如下:
同“JS接口安全域名”,格式为前面提供的URL的域名部分,如xxxx.app.easylink.io,其中“xxxx”为FogCloud上创建的微信APP的id。
第七式:使用MiCO SDK开发RGB LED灯的固件
(a) 登陆MiCO开发者网站mico.io,去MiCO社区注册账号,并登陆;
(b) 重新打开mico.io首页,开发者中心 ==> Wiki中心,下载MiCO SDK。
(c) 打开MiCO SDK中的微信开发实例工程:
1)开发者手中拿到的可能是硬件平台可能是MiCOKit3288或者MiCOKit3165,在编译工程时要先选择硬件平台;
2)将FogCloud上创建的产品ID/KEY写入固件(必须替换):
3)修改版本号,这样才能把新的产品ID/KEY烧入FLASH
4)添加LED灯控制代码:
5)改为收到云端消息后,解析JSON数据,并控制LED。
6)错误代码参考:在运行过程中如果出现错误,可在user_log中查看错误代码。
7)MiCO SDK固件烧录。(详细固件烧录方法及步骤请参考
http://mico.io wiki中心)
选择使用的烧录工具J-Link或者ST-LINK:
编译/连接:
烧录/下载:
第八式:用网页编辑工具(sublime等)开发微信APP代码
以下为核心代码及其注释
//应用程序入口在application_start(void),一系列动作(如配网、连接云等)以后,用户程序入口在这里。
OSStatus user_main( mico_Context_t * const mico_context
{
//user_log_trace();
OSStatus err = kUnknownErr;
fogcloud_msg_t *recv_msg = NULL;//接收数据结构体
json_object *recv_json_object = NULL;//结构体内包含json数据格式
/* rgb灯的色彩模式采取hsb色彩模式(色相、饱和度、亮度) */
bool led_switch = false;//rgb灯开关
int led_hues = 0;
int led_saturation = 0;
int led_brightness = 0;
require(mico_context, exit);
hsb2rgb_led_init(); // RGB_LED初始化
while(1){
mico_thread_msleep(100); //延时100ms
// 检测 fogcloud 连接状态
if(!mico_context->appStatus.fogcloudStatus.isCloudConnected){
continue;
}
/*
接收来自云端的数据
recv_msg->data = <topic>+<data>
topic表示模块订阅的MQTT通道名,data表示云端返回的数据
*/
err = MicoFogCloudMsgRecv(mico_context, &recv_msg, 100);
if(kNoErr == err){
// 打印 例://user_logtopic[30]=[de54a8ea/c8934691816b/in/write]data[23]=[{"rgbled_switch":false}]
user_log("Cloud => Module: topic[%d]=[%.*s]\tdata[%d]=[%.*s]",
recv_msg->topic_len, recv_msg->topic_len, recv_msg->data,
recv_msg->data_len, recv_msg->data_len, recv_msg->data + recv_msg->topic_len);
// json格式的字符串数据转成json对象
recv_json_object = json_tokener_parse((const char*)(recv_msg->data + recv_msg->topic_len));
if (NULL != recv_json_object)
{
//根据键值对遍历
json_object_object_foreach(recv_json_object, key, val) {
if(!strcmp(key, "rgbled_switch")){
//如果键为"rgbled_switch",提取值“开关值”
led_switch = json_object_get_boolean(val);
}
else if(!strcmp(key, "rgbled_hues")){
//如果键为"rgbled_hues",提取值“色相值"
led_hues = json_object_get_int(val);
}
else if(!strcmp(key, "rgbled_saturation")){
//如果键为"rgbled_saturation",提取值“饱和度值"
led_saturation = json_object_get_int(val);
}
else if(!strcmp(key, "rgbled_brightness")){
//如果键为"rgbled_brightness",提取值“亮度值"
led_brightness = json_object_get_int(val);
}
}
// 控制LED
if(led_switch){
hsb2rgb_led_open(led_hues, led_saturation, led_brightness);
}else{
hsb2rgb_led_close(); // 关闭
}
// json对象内存释放
json_object_put(recv_json_object);
recv_json_object = NULL;
}
// 结构体内存释放
if(NULL != recv_msg){
free(recv_msg);
recv_msg = NULL;
}
}
}
exit:
user_log("ERROR: user_main exit with err=%d", err);
return err;
}
第九式:使用Github工具托管APP代码
在例程包中(MiCOKit SDK的APP目录下),找到微信APP控制页面代码(index.html和yourID.html),将yourID.html.重命名为你的产品ID,如cabca380.html。拷贝这两个文件到本地git仓库,再同步到git服务器。同步方法详见附件——上传文件到GitHub.zip。
index.html —— OAuth按钮跳转到该页面(一般为设备列表页面,可不做改动)
xxxx.html —— 设备控制页面(其中xxxx为FogCloud上创建的产品id)
详细代码见附件代码包,部分代码解释如下:
修改、并提交代码后,如果没有配置WebHook让FogCloud自动更新代码,则需要到FogCloud上手动点击“发布”按钮更新代码,并通过git提交记录确认是否更新成功。
第十式:FogCloud上生成设备二维码
(a) 创建新设备
(b)填写设备MAC地址(由小写字母和数字构成,设备上电后会向串口发送MAC地址及其他数据,可用串口工具查看)接口创建设备。
(c) 为设备生成微信二维码
点击“同步到微信”按钮:
选择创建的产品和要使用的APP后点击同步按钮。
成功后提示:{"result":200,"message":"success"}
极少数情况会因为微信公共平台延时的问题出现err:500问题。等待几分钟后重试即可。
返回到产品界面,可看到你的新设备。
第十一式:使用手机微信扫码,测试“Airkiss”配网功能以及设备控制功能。
(a) Airkiss配网
Airkiss技术可以帮助你的设备在没有人机交互的情况下智能配置当前Wi-Fi环境的SSID及密码。(假如你的智能设备是一颗灯泡,总没有屏幕和按键让你输入SSID及密码吧)
按设备上的Easylink按钮进入配网模式,底板上的LED(D1)灯快速闪烁;
手机输入当前所在环境的wifi密码,点击连接,成功或超时会自动跳出该页面。
(b) 设备控制
Airkiss配网成功后会跳转到设备列表,红色圆点表示设备不在线,蓝色圆点表示设备在线。若配网成功后设备依然显示设备不在线,可点击右上角刷新按钮。点击列表进入设备控制界面,点击控制按钮,控制MiCOKit-3288扩展板上的RGB LED灯。
已经配网成功的设备不需要再次进行Airkiss,只需点击测试公众号中的“Devices”按钮,进入设备列表,点击列表进入设备控制界面,点按按钮,控制MiCOKit-3288扩展板上的RGB LED灯。
如果您完成到此步骤,那么恭喜您大功筑基已成!!
武功在手,天下我有!
祝愿各位米客能手持MiCO利剑,在物联网智能设备的新江湖建功立业!
另:源代码地址
http://pan.baidu.com/s/1kTlEHRD
GitHub使用教程
http://mico.io/ask/?/article/12
MiCO团队
敬上!