Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
DIY综合交流区
IoT-Camera学习笔记之GAgent package应用
发布于 2018-02-05 09:06:06 浏览:5774
订阅该版
* 本帖最后由 燕十三 于 2018-2-5 09:06 编辑 * **1. **GAgent概述****GAgent是机智云物联网整体解决方案中可入网设备(如WiFi模组、GPRS模组)接入部分,是一套运行在可入网模组(如WiFi模组、GPRS模组)上,使用机智云协议接入机智云平台,并与手机APP通信的程序。 GAgent of Gizwits in RT-Thread是运行在RT-Thread上的机智云接入package,代码已开源在[_https://github.com/RT-Thread-packages/GAgent_](https://github.com/RT-Thread-packages/GAgent) 上。GAgent of Gizwits in RT-Thread并非直接移植机智云开源SDK,而是基于机智云开源协议编写,并结合RT-Thread开源webclient、Paho MQTT、TinyCrypt等packages,完成机智云物联接入,代码结构更清晰。当前已支持有线、无线WiFi等网络设备使用,其他功能将会不断更新维护。 开发者使用GAgent of Gizwits in RT-Thread,配合RT-Thread的env工具和menuconfig,可快速将设备接入移植机智云平台。该package与硬件设备无关,开发者只需完成RT-Thread移植,将设备连接互联网后即可使用。应用GAgent of Gizwits in RT-Thread后,开发者可更多关注设备本身的功能开发,而无需关心设备与机智云平台通讯交互过程。 **2. **RT-Thread env工具****env是RT-Thread推出的辅助工具,用来配置基于RT-Thread操作系统开发的项目工程。env工具提供了简单易用的配置剪裁工具,用来对内核和组件的功能进行配置,对组件进行自由裁剪,使系统以搭积木的方式进行构建。 同时env工具自带python、scons、qemu、GNU GCC交叉编译器等工具,可免除在使用RT-Thread过程中的安装多种开发工具。 env的软件包管理功能依赖git,请在使用前正确安装git,并将git添加到系统环境变量,git的下载地址为:[_https://git-scm.com/downloads_](https://git-scm.com/downloads)。强烈推荐使用RT-Thread env工具下载、配置RT-Thread的各种开源package。env请在“RT-Thread官网”->“资源”->“下载”处获取,地址:[_https://www.rt-thread.org/page/download.html_](https://www.rt-thread.org/page/download.html)。 ![env.png](/uploads/201802/05/082547u900d6k0bd99di0s.png)如对RT-Thread env工具及menuconfig配置不熟悉,可阅读官方《RT-Thread env工具手册》。手册可在“RT-Thread官网”->“文档”->“用户手册”->“RT-Thread工具手册”处获取,地址:_[https://www.rt-thread.org/document/site/zh/5chapters/01-chapter_env_manual/#env](https://www.rt-thread.org/document/site/zh/5chapters/01-chapter_env_manual/#env)__ _![manuals.png](/uploads/201802/05/082631jetztuff7tfftthd.png) **3. **IoT-Camera配置与运行******** ********3.1 源码下载******** ****IoT-Camera最新源码可在RT-Thread官方github仓库下载,仓库地址为:[_https://github.com/RT-Thread/IoT_Camera_](https://github.com/RT-Thread/IoT_Camera)。 IoT-Camera下包含firmware、hardware两个文件夹,其中firmware为源码目录,该目录下不含RT-Thread相关源码,所以还需要下载RT-Thread源码,请将RT-Thread源码下载至firmware根目录下。 ![图片1.png](/uploads/201802/05/082725yg99sy0wrzbgrwe4.png) ****3.2配置******** ****(1) WiFi驱动下载:运行env工具,进入IoT-Camera/firmware目录,运行pkgs --upgrade更新packages list,成功后运行menuconfig命令。 ![图片2.png](/uploads/201802/05/082811r8yylmxlqn1sz3kf.png)(2) 进入RT-Thread online packages菜单,选择IoT -internet of things菜单,进入后选中Wi-Fi->Wiced WiFi->Wiced WiFi drivers for rt-thread。![图片3.png](/uploads/201802/05/082849jryyt70r95rl0q47.png) (3) 退出后使用pkgs --update下载。完成后可以在packages目录下已下载wlan_wiced目录。 ****3.2运行****运行env工具,进入IoT-Camera/firmware目录,执行scons命令即可开始编译,交叉编译器env已经帮我们设置好。编译完成后请更新bin文件,bin文件更新方法请参照《IoT-Camera学习笔记之初识IoT-Camera》一文。 (1) **WiFi相关操作**** **正常启动后即可在msh命令行下输入相关命令进行WiFi连接操作。 **Step1:**使用ifconfig命令,查看网络相关配置。 ![图片4.png](/uploads/201802/05/082935iq7221e1kxk0k4ew.png) 有上可知,当前WiFi station的设备名为w0;AP的设备名为ap,并且ap为default设备。 **Step2:**使用wifi help命令,查看与wifi相关命令。![图片5.png](/uploads/201802/05/082944n8hiuka1ajmwmdjy.png) 输入wifi w0 join
连接指定路由器,其中w0为设备名,由ifconfig获得;
、
为路由器名和密码。** ****Step3:**连接成功后,再次使用ifconfig查看网络相关配置,即可看到station已经获取到ip地址。 ![图片6.png](/uploads/201802/05/082948nzti6txtn4xmwbwd.png) (2) **网络相关设置修改** 由于当前配置默认设备为ap,所有无法直接连接外网,需要做一个手工修改将默认设备修改为station。```void set_default(void) { struct netif *netif; rt_enter_critical(); netif = netif_list; while( netif != RT_NULL) { if((netif->name[0] == 'w') && (netif->name[1] == '0')) { netif_set_default(netif); break; } netif = netif->next; } rt_exit_critical(); } FINSH_FUNCTION_EXPORT(set_default, set station default); MSH_CMD_EXPORT(set_default, set station default);``` 添加以上代码,并执行该命令后即可设置w0位默认设备,此时station已可连接互联网。 ![图片21.png](/uploads/201802/05/090113xbuybchf04tc0cjv.png)** ****4. **GAgent****配置与下载**** ****4.1 ****packag****e配置**** (1) 运行env工具,进入IoT-Camera/firmware目录,运行pkgs --upgrade更新packages list,成功后运行menuconfig命令。 ![图片7.png](/uploads/201802/05/084138s565952ikzd5th63.png) (2) 进入RT-Thread online packages菜单,选择IoT -internet of things菜单,进入后选中GAgent: GAgent of Gizwits in RT-Thread。 ![图片8.png](/uploads/201802/05/084233q9qcjj7qg7orf7wj.png) (3) GAgent有example和debug选项可配置:* 选中example,package内含GAgent运行demo,可通过finsh或msh启动。 * 选中debug,将打印GAgent运行期间全部日志。 (4) GAgent版本选择:当前GAgent不断优化升级中,推荐使用latest版本。 ![图片9.png](/uploads/201802/05/084242ldmwkoh6mhoomlrr.png) (5) GAgent package依赖IoT -internet of things中的WebClient、Paho MQTT这2个package,当GAgent被选中,这2个package已自动选中。同时由于GAgent使用了2个subscribe topic,所以必须配置Paho MQTT中的Max pahomqtt subscribe topic handlers为2。 ![图片10.png](/uploads/201802/05/084242ejj3m037brfe8f0g.png) ![1107,775](file:///C:\Users\cys\AppData\Local\Temp\ksohtml\wpsBDC3.tmp.jpg) (6) GAgent还用到了security packages中的TinyCrypt中的AES加解密,该package也被自动选中。其他加密算法暂时没有用到,可手工关闭。**** ****![图片11.png](/uploads/201802/05/084242zbaymrijyjmi02yg.png)**** ********4.2 ****packag****e下载**** 在env工具下输入pkgs --update下载package,等待下载完成后,当前iot-camera/firmware/packages目录下已经增加GAgent及其他相关packages。 ![图片12.png](/uploads/201802/05/084740nduuoqqq6mz5otuu.png)** ****5. **GAgent****运行******** ********5.1运行前准备**** (1) **开发者账号注册** 前往机智云开发者中心[_https://dev.gizwits.com/zh-cn/developer/_](https://dev.gizwits.com/zh-cn/developer/) 注册开发者账号 ![图片13.png](/uploads/201802/05/084911g4tdv4dlpwygdtv4.png) (2) **产品创建** 在开发者中心创建新产品页面创建新产品 ![图片14.png](/uploads/201802/05/084916gy6rfj56936mlw66.png) (3) **产品功能定义*** 在开发向导中定义数据点: ![图片15.png](/uploads/201802/05/085156w1us8tsuwnutwww8.png) * 创建并修改数据点:数据点创建/修改请参照机智云相关文档 * 通讯协议下载: 在开发向导页面下载当前定义产品的通讯协议文档,后续开发会用到。 ![图片16.png](/uploads/201802/05/085205ytc937c77onls43a.png) * 获取产品基本信息: Product_key及Product_Secret是2个创建产品的唯一标识,在GAgent初始化时需要输入,请记录。 (4) **机智云APP下载:** 在下载中心->开发与调试工具下载机智云Wi-Fi/移动产品调试AP**** ****![图片17.png](/uploads/201802/05/085208qwmsxlts9eebx3m5.png)**** ********5.2 GAgent使用******** ****(1) 如在menuconfig中选中Enable GAgent Example,在编译过程中会加入GAgent package包中example目录下的gagent_cloud_demo.c。该文件完成GAgent初始化、参数读取/写入、命令下发等功能,可通过finsh/msh启动运行。 ```int gagent_cloud(void) { int rc = RT_EOK; rt_memset(&gagent_param, 0, sizeof(gagent_param)); // strcpy(gagent_param.product_key, DEMO_PRODUCT_KEY); strcpy(gagent_param.product_secret, DEMO_PRODUCT_KEY_SECRET); strcpy(gagent_param.mac, DEMO_MAC); gagent_param.read_param_callback = gagent_read_param; gagent_param.write_param_callback = gagent_write_param; gagent_param.recv_packet_callback = gagent_recv_packet; // gagent_cloud_start(&gagent_param); return rc; } #ifdef RT_USING_FINSH MSH_CMD_EXPORT(gagent_cloud, gagent cloud demo); FINSH_FUNCTION_EXPORT(gagent_cloud, "gagent cloud test"); #endif``` (2) 将新产品注册时候product_key和product_secret填入gagent_param.product_key和gagent_param.product_secret。 (3) gagent_param.mac填入当前产品的mac地址,每个产品下的mac地址不能重复。 (4) 设置read_param_callback、write_param_callback回调函数,分别对应读参数、写参数;这2个回调函数必须实现正确的参数读取与写入。 ```int gagent_read_param(struct gagent_config *param, rt_uint32_t len) { /* read param */ #ifdef RT_USING_DFS int fd; fd = open("/sdcard/demo", O_RDONLY, 0); if(fd >= 0) { read(fd, param, len); close(fd); } else return -RT_EOK; #endif return RT_EOK; } int gagent_write_param(struct gagent_config *param, rt_uint32_t len) { /* write param */ rt_kprintf("mac:%s", param->mac); rt_kprintf("did:%s", param->did); rt_kprintf("passcode:%s", param->passcode); rt_kprintf("pk:%s", param->pk); rt_kprintf("pk_secret:%s", param->pk_secret); rt_kprintf("hard_version:%s", param->hard_version); rt_kprintf("soft_version:%s", param->soft_version); #ifdef RT_USING_DFS int fd; fd = open("/sdcard/demo", O_WRONLY | O_CREAT |O_TRUNC | O_BINARY, 0); if(fd >= 0) { write(fd, param, len); close(fd); } #endif return RT_EOK; }``` (5) 设置recv_packet_callback回调函数,该回调为APP下发数据包处理函数。 * 数据包协议请参照2.2.3 通讯协议文档。 * 设备收到APP下发ACTION_CONTROL命令完成处理后,需使用ACTION_REPORT_STATUS同步状态。 ```int gagent_recv_packet(rt_uint8_t from, rt_uint8_t action, rt_uint8_t *kv, rt_uint16_t kv_len) { /* please read product protocol */ static uint8_t power; switch(action) { case ACTION_CONTROL: rt_kprintf("ACTION_CONTROL
"); power = *(kv + 1); rt_kprintf("power:%d
", power); gagent_cloud_send_packet(ACTION_REPORT_STATUS, &power, 1); break; case ACTION_READ_STATUS: rt_kprintf("ACTION_READ_STATUS
"); gagent_cloud_send_packet(ACTION_READ_STATUS_ACK, &power, 1); break; case ACTION_TRANS_RECV: rt_kprintf("this is your raw data from app
"); break; case ACTION_PUSH_OTA: rt_kprintf("ACTION_PUSH_OTA
"); break; } return RT_EOK; }``` (6) 设备主动上报:主动上报使用gagent_cloud_send_packet函数。 ```int gagent_cloud_send_packet(rt_uint8_t action, rt_uint8_t *buf, rt_uint16_t buf_len);``` ****5.3 GAgent运行****在shell窗口运行gagent_cloud命令即可运行GAgent。![图片18.png](/uploads/201802/05/085516yvcqqor88e8etqtc.png) 如果运行失败,请依次检查: A. 设备内存是否过小,内存过小会导致GAgent运行失败。 B. 设备是否已连接互联网,并且dns设置正确。 C. 设备是否正确输入product_key和product_secret,错误输入将导致GAgent连接MQTT服务器失败。(demo中的product_key和product_secret无法正常运行,请输入自己创建的产品product_key和product_secret)。 D. 设备是否正确完成GAgent参数保存与读取,否则GAgent将每次都重新注册设备;重新注册设备后,APP上将找不到该设备,需重新绑定。**** ** 6. **设备绑定与控制******** **** ****6.1 ****设备发现****与****绑定****设备正常运行GAgent后,需要与APP正常绑定后才能通过APP控制设备,初始状态APP绑定设备需确保APP与设备处于同一在局域网,否则APP将无法发现设备,发现设备后点击即可绑定。 ![图片19.png](/uploads/201802/05/085517u450vpw5nsbn3s5m.png) ****6.2 设备控制**** 在app内绑定完成后,即可控制设备。根据创建的功能不同,每个功能的控制方式也不同。 ![图片20.png](/uploads/201802/05/085517sncqccmuwzhhdhi2.png)** ****7. **相关链接**** 1. 机智云开发者中心:[_https://dev.gizwits.com/zh-cn/developer/_](https://dev.gizwits.com/zh-cn/developer/) 2. 机智云开源SDK:[_https://github.com/gizwits/Gizwits-GAgent _](https://github.com/gizwits/Gizwits-GAgent) 3. Env工具获取:“RT-Thread官网”->“资源”->“下载”:[_https://www.rt-thread.org/page/download.html_](https://www.rt-thread.org/page/download.html) 4. Env工具使用手册:“RT-Thread官网”->“文档”->“用户手册”->“RT-Thread工具手册”:_[https://www.rt-thread.org/document/site/zh/5chapters/01-chapter_env_manual/#env](https://www.rt-thread.org/document/site/zh/5chapters/01-chapter_env_manual/#env)_ 下载附件 [IoT-Camera实战GAgent Packages应用.pdf](https://oss-club.rt-thread.org/uploads/201802/05/090504p5i511sjnbqbwblj.attach)
查看更多
7
个回答
默认排序
按发布时间排序
aozima
2018-02-05
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
前排学习
快去买药
2018-02-05
这家伙很懒,什么也没写!
搬板凳来学习
fubaojun2006
2018-02-05
哇(挖)~~坑~~~啊!
坐稳小板凳,认真学习!
sundm75
2018-02-05
这家伙很懒,什么也没写!
收藏了
armink
2018-02-05
这家伙很懒,什么也没写!
教程非常全面,楼主费心了~~
sundm75
2018-02-27
这家伙很懒,什么也没写!
1. 所有的软件都要更新,一定要更新所有的,更新!!! git TortoiseGIT 配置好环境变量 RTT_ROOT 更新 IoT_Camera、rt-thread、env 2. 按照燕13的教程一步步往下做。 3. 教训 1)任何一个不更新都可能导致错误 2)后 update时 的 git clone 出现 fatal: unable to access 'https://github.com/RT-Thread/rt-thread.git/': error 但是在春节前是没有这个错误的 后去更新git 和 TortoiseGIT ,这下才能clone . 3)开始时使用的2017.12发布的 rt-thread 导致error一大堆 后去更新 rt-thread 4)后又出现了webclient.c里的很多函数的重复定义 后去更新 IoT_Camera 5)还有重复定义,请教燕13,去删除 \firmware\packages\webclient 文件夹及下面的所有文件 6)最后WEBCLIENT_RESPONSE_BUFSZ 提示没有声明,强行在 rtconfig.h 中加了一句 #define WEBCLIENT_RESPONSE_BUFSZ 2048 4.最后在文件夹firmware里出现了久违的 rtthread.bin rtthread.elf
sundm75
2018-02-27
这家伙很懒,什么也没写!
>1. 所有的软件都要更新,一定要更新所有的,更新!!! >git >TortoiseGIT --- 下面开始玩转 camera
撰写答案
登录
注册新账号
关注者
0
被浏览
5.8k
关于作者
燕十三
这家伙很懒,什么也没写!
提问
4
回答
15
被采纳
0
关注TA
发私信
相关问题
1
[项目]搞个开源的硬件项目
2
硬件计划贴,及时更新,欢迎提意见
3
软件计划贴,及时更新,欢迎提意见::WMA,MOUNT,LWIP等问题急需解决.
4
MMS协议
5
定点的wma解压库-libwma
6
QQ群记录 [20090821]
7
STM32网络收音机PCB报名征集
8
第一版调试记录
9
第二版硬件讨论
10
RADIO项目相关模块规格--欢迎大家自己做板时规格与此兼容,减少重复劳动
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
开源共生 商业共赢 | RT-Thread 2024开发者大会议程正式发布!
2
【24嵌入式设计大赛】基于RT-Thread星火一号的智慧家居系统
3
RT-Thread EtherKit开源以太网硬件正式发布
4
如何在master上的BSP中添加配置yml文件
5
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
MicroPython
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
19
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
6
个答案
2
次被采纳
用户名由3_15位
13
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
RTT_逍遥
1
篇文章
5
次点赞
大龄码农
1
篇文章
5
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部