Przeglądaj źródła

Merge pull request #7 from flyingcys/update

upate README && demo
Bernard Xiong 8 lat temu
rodzic
commit
2f96663392
3 zmienionych plików z 40 dodań i 32 usunięć
  1. 19 13
      README.md
  2. 18 17
      docs/README.md
  3. 3 2
      example/gagent_cloud_demo.c

+ 19 - 13
README.md

@@ -1,21 +1,27 @@
-# GAgent of Gizwits in RT-Thread  
-### 1.概述
-GAgent是机智云物联网整体解决方案中可入网设备(如WiFi模组、GPRS模组)接入部分,是一套运行在可入网模组(如WiFi模组、GPRS模组)上,使用机智云协议接入机智云平台,并与手机APP通信的程序。
+# GAgent #
+## GAgent of Gizwits in RT-Thread ##
+## 概述 ##
+GAgent是机智云物联网整体解决方案中可入网设备(如WiFi模组、GPRS模组)接入部分,是一套运行在可入网模组(如WiFi模组、GPRS模组)上,使用机智云协议接入机智云平台,并与手机APP通信的程序。  
 
-开发者通过使用GAgent of Gizwits in RT-Thread该packages,配合RT-Thread的Env工具,可快速将设备接入移植机智云平台。该packages与硬件设备无关,开发者只需具备RT-Thread系统,将设备连接互联网后即可使用。
+GAgent of Gizwits in RT-Thread并非直接移植机智云开源SDK,而是基于机智云开源协议编写,并结合RT-Thread开源webclient、Paho MQTT、TinyCrypt等packages,完成机智云物联接入。当前已支持有线、无线WiFi等网络设备使用,其他功能将会不断更新维护。  
 
-应用GAgent of Gizwits in RT-Thread后,开发者可更多关注设备本身的功能开发,而无需关心设备与机智云平台通讯交互过程。
+开发者使用GAgent of Gizwits in RT-Thread,配合RT-Thread的env工具和menuconfig,可快速将设备接入移植机智云平台。该packages与硬件设备无关,开发者只需完成RT-Thread移植,将设备连接互联网后即可使用。应用GAgent of Gizwits in RT-Thread后,开发者可更多关注设备本身的功能开发,而无需关心设备与机智云平台通讯交互过程。  
 
-### 2.相关链接
+## 许可证 ##
+GAgent of Gizwits in RT-Thread与RT-Thread一致,遵循GPLv2+许可证,详细请参照RT-Thread。
+
+## 使用示例 ##
+GAgent使用示例请参考example目录下gagent_cloud_demo.c文件,详情可阅读[《GAgent of Gizwits in RT-Thread使用手册》](./docs/README.md)。  
+
+## 相关链接 ##
 1. 机智云开发者中心:  
 [https://dev.gizwits.com/zh-cn/developer/](https://dev.gizwits.com/zh-cn/developer/)  
 
-2. Env工具获取:`RT-Thread官网`->`资源`->`下载`  
-[https://www.rt-thread.org/page/download.html](https://www.rt-thread.org/page/download.html)  
+2. 机智云开源SDK:  
+[https://github.com/gizwits/Gizwits-GAgent](https://github.com/gizwits/Gizwits-GAgent)  
 
-3. 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)  
-
-### 3.GAgent使用
+3. Env工具获取:`RT-Thread官网`->`资源`->`下载`  
+[https://www.rt-thread.org/page/download.html](https://www.rt-thread.org/page/download.html)  
 
-GAgent使用示例请参考example目录下gagent_cloud_demo.c文件,详情可阅读[《GAgent of Gizwits in RT-Thread使用手册》](./docs/README.md)。
+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)  

+ 18 - 17
docs/README.md

@@ -1,8 +1,8 @@
 ## GAgent of Gizwits in RT-Thread使用手册
-### 1. GAgent Package获取:
+### 1. GAgent package获取:
 GAgent of Gizwits in RT-Thread是运行在RT-Thread上的机智云接入package,代码已开源在[https://github.com/RT-Thread-packages/GAgent](https://github.com/RT-Thread-packages/GAgent) 上。
 #### 1.1 RT-Thread env工具:
-* 强烈推荐使用RT-Thread env工具下载配置Package。env请在`RT-Thread官网`->`资源`->`下载`处获取。  
+* 强烈推荐使用RT-Thread env工具下载配置package。env请在`RT-Thread官网`->`资源`->`下载`处获取。  
 下载地址:[https://www.rt-thread.org/page/download.html](https://www.rt-thread.org/page/download.html)   
 
 ![RT-Thread env](images/env.png)  
@@ -12,31 +12,32 @@ GAgent of Gizwits in RT-Thread是运行在RT-Thread上的机智云接入package
 
 ![RT-Thread package](images/manuals.png)  
 
-#### 1.2 Package下载:
-* 运行env工具,进入RT-Thread已支持menuconfig配置的bsp目录,如stm32f429-apollo(也可自行配置Kconfig,方法如上文档),运行`pkgs --upgrade`更新Packages list,成功后运行menuconfig命令。  
+#### 1.2 GAgent package下载:
+* 运行env工具,进入RT-Thread已支持menuconfig配置的bsp目录,如stm32f429-apollo(也可自行配置Kconfig,方法参照RT-Thread工具手册),运行`pkgs --upgrade`更新packages list,成功后运行menuconfig命令。  
 
 ![menuconfig](images/menuconfig.png)  
 
 * 进入`RT-Thread online packages`菜单,选择`IoT -internet of things`菜单,进入后选中`GAgent: GAgent of Gizwits in RT-Thread`。  
 * GAgent有`example`和`debug`选项可配置:  
 > 选中`example`,package内含GAgent运行demo,可通过finsh或msh启动。  
-> 选中`debug`,将打印GAgent运行期间日志。  
+> 选中`debug`,将打印GAgent运行期间全部日志。  
 
 ![Gagent](images/Gagent.png)  
 
-* GAgent 不断优化升级中,推荐使用`latest`版本。
+* GAgent版本选择:当前GAgent不断优化升级中,推荐使用`latest`版本。
 
 ![version](images/version.png)  
 
-* GAgent用到的`IoT package`包括`WebClient`、`Paho MQTT`。这2个Packages已被默认选中。GAgent使用了2个`subscribe topic`,所以需要配置`Paho MQTT`中的`Max pahomqtt subscribe topic handlers`为2。  
+* 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。  
 
 ![pahomqtt](images/pahomqtt.png)  
 
-* GAgent同时还用到了`security package`中的`TinyCrypt`中的AES加解密,已默认选中。其他加密算法暂时没有用到,可手工关闭。  
+* 同时GAgent还用到了`security packages`中的`TinyCrypt`中的AES加解密,该package也被自动选中。其他加密算法暂时没有用到,可手工关闭。  
 
 ![TinyCrypt](images/TinyCrypt.png)  
 
-* 在env工具下输入`pkgs --update`下载Package,等待下载完成后,当前stm32f429-apollo目录下的packages下已经有GAgent及其他相关packages。  
+* 在env工具下输入`pkgs --update`下载package,等待下载完成后,当前stm32f429-apollo目录下的packages下已经有GAgent及其他相关packages。  
 
 ![packages](images/packages.png)
 
@@ -65,17 +66,16 @@ GAgent of Gizwits in RT-Thread是运行在RT-Thread上的机智云接入package
 
 ![protocol](images/protocol.png)  
 2.2.4. 获取产品基本信息:  
-`Product_key`及`Product_Secret`是2个创建产品的唯一标示,需要在GAgent初始化时输入
+`Product_key`及`Product_Secret`是2个创建产品的唯一标识,在GAgent初始化时需要输入,请记录
 
 #### 2.3 `机智云`APP下载:  
 在`下载中心`->`开发与调试工具`下载`机智云Wi-Fi/移动产品调试APP`  
 
 ![app](images/app.png)  
 
-
 ### 3. 运行GAgent:  
 #### 3.1 GAgent example:  
-* 如在menuconfig中选中`Enable GAgent Example`,在编译过程中会加入`GAgent Package`包中`example`目录下的`gagent_cloud_demo.c`。该文件完成GAgent初始化,可通过finsh/msh启动运行 
+* 如在menuconfig中选中`Enable GAgent Example`,在编译过程中会加入`GAgent package`包中`example`目录下的`gagent_cloud_demo.c`。该文件完成GAgent初始化、参数读取/写入、命令下发等功能,可通过finsh/msh启动运行 
 ``` C
 int gagent_cloud(void)
 {
@@ -103,7 +103,7 @@ FINSH_FUNCTION_EXPORT(gagent_cloud, "gagent cloud test");
 #### 3.2 GAgent流程
 3.2.1 将新产品注册时候`product_key`和`product_secret`填入`gagent_param.product_key`和`gagent_param.product_secret`。  
 3.2.2. `gagent_param.mac`填入当前产品的mac地址,每个产品下的mac地址不能重复。  
-3.2.3. 分别设置`read_param_callback`、`write_param_callback`回调函数,分别对应`读参数`、`写参数`;这2个回调函数必须实现正确的参数读取与写入。  
+3.2.3. 设置`read_param_callback`、`write_param_callback`回调函数,分别对应`读参数`、`写参数`;这2个回调函数必须实现正确的参数读取与写入。  
 ``` C
 int gagent_read_param(struct gagent_config *param, rt_uint32_t len)
 {
@@ -150,13 +150,14 @@ int gagent_write_param(struct gagent_config *param, rt_uint32_t len)
 ```
 
 3.2.4. 设置`recv_packet_callback`回调函数,该回调为APP下发数据包处理函数。  
-1. 数据包协议请参照`2.2.4通讯协议文档`。  
+1. 数据包协议请参照`2.2.3 通讯协议文档`。  
 2. 设备收到APP下发`ACTION_CONTROL`命令完成处理后,需使用`ACTION_REPORT_STATUS`同步状态。
 ``` C
 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 */
-    uint8_t power;
+    
+    static uint8_t power;
     
     switch(action)
     {
@@ -169,7 +170,7 @@ int gagent_recv_packet(rt_uint8_t from, rt_uint8_t action, rt_uint8_t *kv, rt_ui
 
         case ACTION_READ_STATUS:
             rt_kprintf("ACTION_READ_STATUS\r\n");
-//            gagent_cloud_send_packet(ACTION_READ_STATUS_ACK, buf, buf_len);
+            gagent_cloud_send_packet(ACTION_READ_STATUS_ACK, &power, 1);
         break;
 
         case ACTION_TRANS_RECV:
@@ -191,7 +192,7 @@ int gagent_recv_packet(rt_uint8_t from, rt_uint8_t action, rt_uint8_t *kv, rt_ui
 `int gagent_cloud_send_packet(rt_uint8_t action, rt_uint8_t *buf, rt_uint16_t buf_len);`
 
 #### 3.5 设备发现与绑定:
-设备运行正常后,需要与APP正常绑定后才能通过APP控制设备,初始状态APP绑定设备需确保APP与设备处于同一在局域网,否则APP将无法发现设备,发现设备后点击即可绑定。  
+设备正常运行GAgent后,需要与APP正常绑定后才能通过APP控制设备,初始状态APP绑定设备需确保APP与设备处于同一在局域网,否则APP将无法发现设备,发现设备后点击即可绑定。  
 
 ![discove](images/discove.png)  
 

+ 3 - 2
example/gagent_cloud_demo.c

@@ -86,7 +86,8 @@ int gagent_write_param(struct gagent_config *param, rt_uint32_t len)
 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 */
-    uint8_t power;
+    
+    static uint8_t power;
     
     switch(action)
     {
@@ -99,7 +100,7 @@ int gagent_recv_packet(rt_uint8_t from, rt_uint8_t action, rt_uint8_t *kv, rt_ui
 
         case ACTION_READ_STATUS:
             rt_kprintf("ACTION_READ_STATUS\r\n");
-//            gagent_cloud_send_packet(ACTION_READ_STATUS_ACK, buf, buf_len);
+            gagent_cloud_send_packet(ACTION_READ_STATUS_ACK, &power, 1);
         break;
 
         case ACTION_TRANS_RECV: