【MiCO教学贴】MiCOKit微信控制综合开发实例 - 问答 - 电子技术论坛 - 最好最受欢迎电子论坛!

【MiCO教学贴】MiCOKit微信控制综合开发实例

micolover ( 楼主 )2015-7-30 10:14:12只看该作者倒序浏览
MiCO Document Working Group (MDWG)
Tom Hong
Track Number: 0010CN
MXCHIP Co., Ltd
Version: 1.0
2015.07.28
Category: Technical Manual
MiCOKit微信控制综合开发实例
摘要(Abstract)
本文档仅介绍如何使用 MiCOKit开发套件(MiCOKit-3288或MiCOKit-3165)开发一个简单的,使用微信控制的综合例程:用微信展示MiCOKit发上来的温湿度数据,也能控制LED灯的开关。在温度为20度以下时,LED灯成黄色;在温度为20到30度时,LED灯成绿色;在温度为20度以下时,LED灯成红色。
适合读者(Suitable Readers)
本文适用于初级MiCOKit开发套件的开发者,
并适合所有MiCO-物联网(IoT)设备开发者参考。
零基础的读者请参考《“微信控制RGB LED灯” 开发实例教程》《“微信读取温湿度传感器数值” 开发实例教程》
版权声明(Copyright No tice)
Copyright (c) 2015 MDWG Trust and the persons identified as the documentauthors. All rights reserve.

2 S0 D: L- a% ^( O& W * Y( ` k, l/ A& m
目录
# i8 S/ A z7 o( L* @

- b. H8 f2 L6 ^- ?6 _+ c2 L
1. 概述
本文档仅介绍如何使用MiCOKit开发套件(MiCOKit-3288或MiCOKit-3165)开发一个简单的使用微信控制综合实例的过程。如图示:

# U3 E+ b r# b5 z7 G4 e: v
2. 准备工作
注意:开始前请确定射频驱动为最新版本
版本查询及升级方法请参考MiCO社区 → WiKi中心 →MiCOKit板块射频驱动升级
1. MiCOKit-3288开发套件;
2. 开发工具请使用IAR7.3版本及以上;
3. FogCloud开发者账号(Fog云使用、开发必须);
4. SDK_MiCOKit_V2.2.0.4_Beta(最新版本至: http://mico.io/wiki/doku.php?id=micokit_sdk));
5. 个人微信号(用来开通“测试公众号”);
6. github个人账号(托管微信APP代码);
7. 网页编辑工具(sublime等);
8. 大致了解MQTT协议及json格式。
2 c ]- p& `# m5 Y8 c( h) ^5 ^
3. 开发流程
1. 注册FogCloud开发者账号;
2. 使用个人微信号开通测试公众号;
3. 在FogCloud上创建、定义自己的产品;
4. 在FogCloud上创建产品对应的微信APP;
5. Github上创建微信APP代码托管仓库;
6. 配置微信APP和微信测试公众号;
7. 使用综合例程的固件;
8. 用IAR或Keil MDK工具开发MiCOKit固件(代码注释部分);
9. 使用Github工具托管APP代码;
10. 在FogCloud上生成设备微信二维码;
11. 手机微信扫码,测试Airkiss配网功能、设备控制功能。

; [5 F! B/ q- {2 H7 @
4. 详细步骤
本例程为综合实例,针对一些步骤的详细信息,“ 零基础读者“请参考《 微信控制 RGB LED 开发实例教程》或《 微信读取温湿度传感器数值 开发实例教程》
4.1. 注册开发者账号
登录 www.fogcloud.io,直接注册账号即可,该账号将用来管理你的产品及APP。
4.2. 使用个人微信号开通测试公众号
1. 浏览器打开 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login,点击登录,使用手机微信扫码,进入后即开通了测试公众号。
2. 获得微信号、appID、appsecrect,用于后续在FogCloud上创建产品对应的微信APP。
4.3. 在FogCloud上创建、定义自己的产品
1. 点击产品名称,进入详细信息(产品ID/KEY将在4.7节被写入设备固件代码中)
2. 创建产品的数据模型
数据模型是用来在云端定义产品功能、性能等特征数据的标准格式,可以储存设备监控、收集、控制、用户行为等数据,从而对数据进行分析,提升产品服务,开发案例过程中定义数据模型,能够有效帮助开发者将APP、云端与设备端的关键功能、特征数据等同步,避免开发过程出错。
本实例所需创建的控制数据点有(属性名和描述可按个人习惯添加):
1)开关(rgbled_switch) 读写属性为1 时间序列为否
2)色相(rgbled_hues) 读写属性为1 时间序列为否
3)饱和度(rgbled_saturation) 读写属性为1 时间序列为否
4)亮度(rgbled_brightness) 读写属性为1 时间序列为否
5)温度(Temp) 读写属性为0 时间序列为否
6)湿度(Hum) 读写属性为0 时间序列为否
7)设备开关(device_switch) 读写属性为1 时间序列为否
4.4. 在FogCloud上创建产品对应的微信APP
根据提示,填写相关信息,其中微信号、AppID/AppSecret从步骤4.2中开通的微信测试公众号中获得。
4.5. Github上创建微信APP代码托管仓库
请登录github.com自行创建新仓库。并克隆到本地,克隆方法详见《上传文件到GitHub》。该步骤的目的是获得一个可以在任何地方访问的git仓库,后面会使用该仓库托管微信APP的代码(其他类似git仓库托管工具也可以)。
获得仓库地址,例如: https://github.com/wangeshen/MiCOKit_test.git
4.6. 配置微信APP以及微信测试公众号
(a) FogCloud上的微信APP信息:
其中URL和Token会在后续配置微信测试号时用到。
(b) Git部署(同步微信APP代码到FogCloud)
Repo即步骤5中创建的github仓库地址,填写后保存;
Deploy key和Web HookUrl可添加到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!!!
开通微信测试号的所有测试功能,如下图1,2,3:
点击4,修改网页账号, 如下图:
同“JS接口安全域名”,格式为前面提供的URL的域名部分,如xxxx.app.easylink.io,其中“xxxx”为FogCloud上创建的微信APP的id。

- w- t3 J; i: Z% _
4.7. 使用MiCOKit SDK开发综合例程的固件
(a) 登陆MiCO开发者网站mico.io,去MiCO社区注册账号,并登陆。
(b) 重新打开mico.io首页,开发者中心 ==> Wiki中心,下载MiCOKit SDK。
(c) 打开MiCOKit SDK中的综合例程开发实例工程:
…SDK_MiCOKit_V2.2.0.4_BetaProjects STM32F4xxCloud_RGB_HumitureEWARMCloud_RGB_Humiture.eww
1)开发者手中拿到的可能是硬件平台可能是MiCOKit3288或者MiCOKit3165,编译 时先选择硬件平台
2)将FogCloud上创建的产品ID/KEY写入固件 必须替换
3) 修改版本号,这样才能把新的产品ID/KEY烧入FLASH;
4)添加固件代码;
5)MiCOKit与云端上下 通信,以JSON格式解析消息,并执行相应操作;
6)错误代码参考:在运行过程中如果出现错误,可在user_log中查看错误代码;
7)MiCOKit SDK固件烧录。(详细固件烧录方法及步骤请参考 http://mico.ioWiKi中心)。
选择使用的烧录工具J-Link或者ST-LINK→编译/连接→烧录/下载。
n2 |! ^9 q" E
4.8. 用IAR或Keil MDK工具开发MiCOKit固件(代码注释部分)
// 应用程序入口在application_start(void),一系列动作(如配网、连接云等)以后,用户程序入口在这里。
OSStatus user_main( mico_Context_t * constmico_context )
{
user_log_trace();
OSStatus err =kUnknownErr;
charoled_show_line[OLED_DISPLAY_MAX_CHAR_PER_ROW+1] = {''};
require(mico_context, exit);
h***2rgb_led_init(); // 初始化 RBG_LED 灯
h***2rgb_led_close(); // 关闭 RBG_LED 灯
// 开启 downstream 线程用来处理用户指令
Err = mico_rtos_create_thread(&user_downstrem_thread_handle,MICO_APPLICATION_PRIORITY,"user_downstream",user_downstream_thread,STACK_SIZE_USER_DOWNSTREAM_THREAD,mico_context);
//参数检查
require_noerr_action( err, exit, user_log("ERROR:create user_downstream thread failed!") );
// 开启 upstream 线程用来发送温湿度数据 Err=mico_rtos_create_thread(&user_upstream_thread_handle,MICO_APPLICATION_PRIORITY,"user_upstream",user_upstream_thread,STACK_SIZE_USER_UPSTREAM_THREAD,mico_context );
//参数检查
require_noerr_action(err, exit, user_log("ERROR: create user_uptream thread failed!") );
// 用户主循环,每秒更新一次oled显示
while(1){
mico_thread_msleep(500);// 小睡500ms
// 设备开关变化
if(device_switch_changed){
device_switch_changed = false;
// 设备关
if(!device_switch){
// 挂机 upstream 线程
mico_rtos_suspend_thread(&user_upstream_thread_handle);
h***2rgb_led_close();// 关闭LED
OLED_Display_Off();// 关闭OLED
}
// 设备开
else{
// 继续 upstream 线程
mico_rtos_resume_thread(&user_upstream_thread_handle);
// 开启OLED
OLED_Display_On();
}
}
// 设备开, 更新 OLED 和 rgbled 状态
if(device_switch){
// 更新 OLED 2~4 行
OLED_ShowString(OLED_DISPLAY_COLUMN_START,OLED_DISPLAY_ROW_2, "Demo H/T && LED");memset(oled_show_line,'',OLED_DISPLAY_MAX_CHAR_PER_ROW+1);
snprintf(oled_show_line,OLED_DISPLAY_MAX_CHAR_PER_ROW+1"T:%2dC",dht11_temperature);
OLED_ShowString(OLED_DISPLAY_COLUMN_START,OLED_DISPLAY_ROW_3,(uint8_t*)oled_show_line)
memset(oled_show_line,'', OLED_DISPLAY_MAX_CHAR_PER_ROW+1);
snprintf(oled_show_line,OLED_DISPLAY_MAX_CHAR_PER_ROW+1, "H: %2d%% ", dht11_humidity);
OLED_ShowString(OLED_DISPLAY_COLUMN_START,OLED_DISPLAY_ROW_4,(uint8_t*)oled_show_line);
// 控制 RBG_LED 灯
if(rgbled_changed){
rgbled_changed= false;
if(rgbled_switch){
// 打开 RBG_LED 灯
h***2rgb_led_open(rgbled_hues,rgbled_saturation, rgbled_brightness);
}else{
// 关闭 RBG_LED 灯
h***2rgb_led_close();
}
}
}
}
exit:
if(kNoErr !=err){
user_log("ERROR: user_main thread exit with err=%d", err);
}
mico_rtos_delete_thread(NULL); // 删除当前线程
return err;
}
4.9. 使用Github工具托管APP代码
在例程包中(MiCOKitSDK的APP目录下),找到微信APP控制页面代码(index.html和yourID.html),将xxxxx.html.重命名为你的产品ID,如cabca380.html。拷贝这两个文件到本地git仓库,再同步到git服务器。同步方法详见《上传文件到GitHub》。
index.html —— OAuth按钮跳转到该页面(一般为设备列表页面,可不做改动)
xxxx.html —— 设备控制页面( 将xxxx替换成FogCloud上创建的产品id
详细代码见附件代码包,部分代码解释如下:
修改、并提交代码后,如果没有配置WebHook让FogCloud自动更新代码,则需要到FogCloud上手动点击“发布”按钮更新代码,并通过git提交记录确认是否更新成功。
4.10. FogCloud上生成设备二维码
(1)创建新设备
填写设备MAC地址(由小写字母和数字构成,设备上电后会向串口发送MAC地址及其他数据,可用串
口工具查看)接口创建设备。
(2)为设备生成微信二维码
点击“同步到微信”按钮,选择创建的产品和要使用的APP后点击同步按钮。
成功后提示:{"result":200,"message":"success"}
返回到产品界面,可看到你的新设备。
极少数情况会出现result:500问题。解决方法:
(1)确认步骤4.6节中微信测试号已开通所有测试功能。
(2)因为微信公共平台具有“延时”的问题,等待几分钟后重试。
4.11. 使用手机微信扫码,测试“Airkiss”配网功能以及设备控制功能
(a) Airkiss配网
Airkiss技术可以帮助你的设备在没有人机交互的情况下智能配置当前Wi-Fi环境的SSID及密码。(假如你的智能设备是一颗灯泡,总没有屏幕和按键让你输入SSID及密码吧)
按设备上的Easylink按钮进入配网模式,底板上的LED(D1)灯快速闪烁;
手机输入当前所在环境的wifi密码,点击连接,成功或超时会自动跳出该页面。
(b) 设备控制
Airkiss配网成功后会跳转到设备列表,红色圆点表示设备不在线,蓝色圆点表示设备在线。
注意:
(1)若配网成功后,没有自动跳转至设备列表页面,请确认步骤4.9节中设备页面html文件名已改为FogCloud中的产品ID。
(2)若配网成功后,设备依然显示设备不在线,可点击右上角刷新按钮。
点击列表进入设备控制界面,点击控制按钮,控制MiCOKit-3288扩展板上的RGB LED灯。
已经配网成功的设备不需要再次进行Airkiss,只需点击测试公众号中的“Devices”按钮,进入设备列表,点击设备进入设备控制界面。此时能收到MiCOKit发上来的温湿度数据,也能控制LED的开关。在温度为20度以下时,LED灯成黄色;在温度为20到30度时,LED灯成绿色;在温度为20度以下时,LED灯成红色。
如果您完成到此步骤,那么恭喜您又通关啦!!
通过本案例主要向大家展示了MiCOKit上下行通信的功能。
没有完成也不要灰心,仔细参照本文检查之前的步骤,如果还有问题,请移步至MiCO社区 http://mico.io
Good Luck
: ^+ ?; h1 E, a& f% |
5. 版本更新
日期
修改人
版本
更新内容
2015-7-28
Tom Hong
V1.0
1. 初始版本
MiCOKit微信控制综合开发实例V1.0.rar(1.32 MB, 下载次数: 22) ; n5 {( f+ b/ \; J+ ?& f1 t

, U" f9 N3 q, S8 P3 j0 n 1 u/ ^/ @; ]8 r3 W9 X* @

* N7 p$ s0 l# I: L' L# z0 c

! j' {8 ^3 T7 V) r& Q8 `# F

0个回复

您需要登录后才可以回帖 登录| 注册

本版积分规则


关闭

站长推荐上一条/6下一条

小黑屋|手机版|Archiver|德赢Vwin官网(湘ICP备2023018690号)

GMT+8, 2024-8-28 17:34, Processed in 0.603408 second(s), Total 65, Slave 45 queries .

Powered by德赢Vwin官网 网

© 2015bbs.elecfans.com

微信扫描
快速回复 返回顶部 返回列表