
本帖最后由 micolover2015 于 2015-7-31 11:44 编辑 上接:微信控灯11式(利用微信控制RGB LED灯)(1) https://www.stmcu.org.cn/module/forum/thread-602767-1-1.html 4.8. 用IAR或Keil MDK工具开发MiCOKit固件代码(代码注释部分) //应用程序入口在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; } 4.9. 使用Github工具托管APP代码在例程包中(MiCOKit SDK的APP目录下),找到微信APP控制页面代码(index.html和yourID.html),将yourID.html.重命名为你的产品ID,如cabca380.html。拷贝这两个文件到本地git仓库,再同步到git服务器。同步方法详见《上传文件到GitHub》。 ![]() index.html —— OAuth按钮跳转到该页面(一般为设备列表页面,可不做改动) ![]() xxxx.html —— 设备控制页面(其中xxxx为FogCloud上创建的产品id) ![]() 详细代码见附件代码包,部分代码解释如下: ![]() ![]() 修改、并提交代码后,如果没有配置WebHook让FogCloud自动更新代码,则需要到FogCloud上手动点击“发布”按钮更新代码,并通过git提交记录确认是否更新成功。 4.10. FogCloud上生成设备二维码 (a) 创建新设备 ![]() (b)填写设备MAC地址(由小写字母和数字构成,设备上电后会向串口发送MAC地址及其他数据,可用串口工具查看)接口创建设备。 ![]() (c) 为设备生成微信二维码 点击“同步到微信”按钮: ![]() 选择创建的产品和要使用的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-3288扩展板上的RGB LED灯。 ![]() ![]() ![]() 如果您完成到此步骤,那么恭喜您大功筑基已成!! 武功在手,天下我有! 祝愿各位米客能手持MiCO利剑,在物联网智能设备的新江湖建功立业! 另:源代码地址 https://pan.baidu.com/s/1bnsGEy7 GitHub使用教程http://mico.io/ask/?/article/12 PDF版:
![]() |
不错,不过开发涉及的东西比较多。有单片机开发,WEB开发,手机客户端开发。。。一时半会搞不定的。 |