Просмотр исходного кода

【完善】:网络编程指南

SummerGift 7 лет назад
Родитель
Сommit
314eb79630

+ 5 - 1
docs/10-Net_Programming_Guide/01-简介.md

@@ -1,6 +1,10 @@
 # RT-Thread MicroPython 网络编程指南
 
 !!! abstract "简介"
-    MicroPython 提供丰富网络功能,可以加快物联网项目的开发进程,本章介绍常用的网络功能以及相关模块的使用方法。
+    MicroPython 提供丰富网络功能,可以加快物联网项目的开发进程,本章介绍常用的网络功能以及相关模块的使用方法。了解网络功能之后,就可以将产品轻松的接入网络,实现更多物联网功能。
 
+## 预备知识
+
+- 在阅读本网络编程指南之前,需要先行了解 MicroPython 模块的网络模块章节,了解基本网络连接模块的使用方法。
+- 如果想要使用较为复杂的网络功能,需要在 menuconfig 中将工具模块中的模块都打开,并且必须开启网络模块中的  `usocket` 模块。
 

+ 3 - 2
docs/10-Net_Programming_Guide/02-HttpClient.md

@@ -1,6 +1,7 @@
 ## Http Client
 
-在这里我们需要使用的模块是 `urequests` 。
+!!! abstract "简介"
+    本节介绍如何在 RT-Thread MicroPython 上使用 Http Client 功能,本章主要使用的模块为 `urequests` 。
 
 ### 获取并安装 urequests 模块
 
@@ -16,7 +17,7 @@
 
 ### urequests 模块的使用
 
-下面示例程序使用 `get` 命令来抓取 `http://www.baidu.com/` 的首页信息,并按照一定格式输出:
+下面示例程序使用 `get` 命令来抓取 `http://www.baidu.com/` 的首页信息,并格式输出:
 
 ```python
 try:

+ 14 - 2
docs/10-Net_Programming_Guide/03-HttpServer.md

@@ -1,6 +1,7 @@
 ## Http Server
 
-如果想要使用 RT-Thread MicroPython 搭建一个 Web 服务器该怎么做呢,这时候我们可以利用 MicroWebSrv 模块来实现这一功能。
+!!! abstract "简介"
+    本章介绍如何使用 RT-Thread MicroPython 搭建一个 Web 服务器,需要使用到的模块为 MicroWebSrv 模块。
 
 ### 获取并安装 MicroWebSrv 模块 
 - 首先从 `https://github.com/jczic/MicroWebSrv.git` 将相关文件克隆到本地。
@@ -10,7 +11,7 @@
 
 - 把其他文件拷贝到 /libs/mpy/ 文件夹中。
 
-![1525675205931](figures/copy_webser_othres_dir.png)
+![1525675205931](../figures/copy_webser_othres_dir.png)
 
 - 这样 MicroWebSrv 模块就安装好了,可以在 MicroPython 交互命令行中直接使用 `import` 命令导入了。
 
@@ -30,10 +31,21 @@
 
 ![1525659204069](../figures/use_test_func.png)
 
+如下代码完成了这个表格的获取功能:
+
+![1525770427295](../figures/get_test.png)
+
 - 点击 Submit,服务器返回你填写的信息。
 
 ![1525659232565](../figures/use_submit.png)
 
+如下代码完成了数据的推送功能:
+
+![1525770467078](../figures/push_test.png)
+
 ### 服务器功能的修改
 
 - 如果想过要通过服务器实现自己所需的功能,可以修改 main.py 文件,导入更多模块,使用 Python 语言来添加更多功能。
+- 在网页中展示加速度计和磁力计的例程中,下面的代码完成了这些数据的返回功能,可以参考 WebServer 的例子来对 main.py 进行修改,以达到自己想要完成的功能。
+
+![1525770559437](../figures/change_server_fuction.png)

+ 10 - 8
docs/10-Net_Programming_Guide/04-Mqtt.md

@@ -1,6 +1,7 @@
-## Mqtt
+## MQTT
 
-MQTT 是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议 。想要在 RT-Thread MicroPython 上使用 MQTT 功能需要安装 `umqtt.simple` 模块。
+!!! abstract "简介"
+    MQTT 是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议 。本章介绍如何在 RT-Thread MicroPython 上使用 MQTT 功能,使用到的模块为 `umqtt.simple` 模块。
 
 ### 获取并安装 umqtt.simple 模块
 同样的可以使用包管理中的两种方式来获取,使用 upip 安装的方式可使用  `upip.install("micropython-umqtt.simple")`如图:
@@ -8,8 +9,8 @@ MQTT 是一种基于发布/订阅(publish/subscribe)模式的“轻量级”
 ![1525690229174](../figures/install_umqtt_simple.png)
 
 ### umqtt.simple 模块的使用
-
-- mqtt 订阅示例,使用 `iot.eclipse.org` 作为测试服务器
+####  MQTT 订阅功能
+- 使用 `iot.eclipse.org` 作为测试服务器
 ```python
 import time
 from umqtt.simple import MQTTClient
@@ -21,11 +22,11 @@ from umqtt.simple import MQTTClient
 def sub_cb(topic, msg):
     print((topic, msg))
 
-def main(server="iot.eclipse.org"):
+def main(server="iot.eclipse.org"):   # 测试 server 为 iot.eclipse.org
     c = MQTTClient("RT-Thread", server)
     c.set_callback(sub_cb)
     c.connect()
-    c.subscribe(b"foo_topic")
+    c.subscribe(b"foo_topic")         # 订阅 foo_topic 主题
     while True:
         if True:
             # Blocking wait for message
@@ -43,11 +44,12 @@ if __name__ == "__main__":
     main()
 ```
 
-- 使用 python 命令执行上述代码文件,即可收到我们另一个客户端发布的主题
+- 使用 python 命令执行上述代码文件,就会连接上 Mqtt 服务器,可收到我们从另一个客户端发布的以 `foo_topic`为主题的内容
 
 ![1525665942426](../figures/sub_topic.png)
 
-- mqtt 发布示例,执行如下代码后可以在订阅该主题的客户端那里收到发布的信息
+####  MQTT 发布功能
+- 执行下面的代码后将向 MQTT 服务器发布以 `foo_topic` 为主题的信息
 ```python
 from umqtt.simple import MQTTClient
 

+ 73 - 2
docs/10-Net_Programming_Guide/05-云平台对接(OneNet).md

@@ -1,4 +1,75 @@
-## 云平台对接(onenet)
+## 云平台对接(OneNET)
 
-本节介绍如何使用 RT-Thread MicroPython 来对接 onenet 云平台,本次示例使用的接入协议为 MQTT。
+!!! abstract "简介"
+    本节介绍如何使用 RT-Thread MicroPython 来将设备接入 OneNET 云平台,本次示例使用的接入协议为 MQTT。
 
+## 产品创建
+
+- 想要将开发板接入 OneNET 云平台,首先要进行产品的创建,创建分为两步,第一步是注册一个用户账号,第二步是创建一个基于特定协议的产品。
+
+### 用户注册
+
+- 为了使用 OneNET 设备云的强大功能,首先要在 OneNET 上[注册开发者账号](https://open.iot.10086.cn/doc/art436.html#104),来创建专属的“开发者中心 。
+
+### 产品创建
+
+- 接下来需要在 OneNET 平台上[创建产品](https://open.iot.10086.cn/doc/art437.html#104)。这里要注意的是在最后选择`设备接入方式`和`设备接入协议时`,因为本次示例使用的是 MQTT 协议,所以要在设备接入方式中选择`公开协议`,设备接入协议选择 `MQTT`。
+
+![1525764833130](../figures/choose_mqtt.png)
+
+## 硬件接入
+
+- 成功创建设备之后,将得到的产品 ID 记录下来供后面推送数据使用。
+
+![1525765493792](../figures/get_product_id.png)
+
+
+- 将设备的`正式环境注册码`记录下来用于注册新的设备。
+
+![1525765209683](../figures/reg_code.png)
+
+- 接下来打开例程中的 main.py,修改 sn 为设备唯一标识码,product_id 为上面得到的6位产品 ID,regKey 为上面记录下来的正式环境注册码。
+
+![1525766961043](../figures/change_code.png)
+
+- 在开发板中运行 main.py 即可在 OneNET 上看到我们注册的设备。
+
+![1525767092149](../figures/run_main.png)
+
+- 名为 `DeviceRT_Thread_Test_Product` 的设备已经注册完毕并且上线。
+
+![1525767167244](../figures/reg_done.png)
+
+- 通过发送命令功能来给开发板发送几组命令。
+
+![1525767264155](../figures/cmd1.png)
+
+![1525767369050](../figures/cmd2.png)
+
+![1525767520609](../figures/cmd3.png)
+
+- 点击数据流管理来查看开发板回传的数据
+
+![1525767621708](../figures/look_data.png)
+
+- 可以在数据流管理中看到开发板回传的开关量数据 switch
+
+![1525767740215](../figures/switch.png)
+
+- 这里的 switch 数据是在 mqtt.py 的 pubData 函数里面修改的,可以通过修改这里的数据来给云平台传输不同的数据。
+
+![1525767815954](../figures/change_pub.png)
+
+- 至此设备到云平台就对接好了,为了方便使用还可以给设备[添加独立的应用](https://open.iot.10086.cn/doc/art461.html#108),效果如下图:
+
+![1525768143233](../figures/add_app.png)
+
+## 代码讲解
+
+- 通过修改 value 对象来修改向服务器发送的数据,这里是发送到特殊的系统 topic `$dp`
+
+![1525768277055](../figures/code_review1.png)
+
+- 给服务器发送数据的触发条件是收到服务器下发的命令,这样就没有保证会一直有数据发送到服务器,所以在没有数据交换的一段时间后,Mqtt 链接有可能断开。后面可以修改为在定时器中断中周期性的给服务器发送数据,这样就能保持连接不断开。
+
+![1525768433046](../figures/code_review2.png)

BIN
docs/figures/add_app.png


BIN
docs/figures/change_code.png


BIN
docs/figures/change_pub.png


BIN
docs/figures/change_server_fuction.png


BIN
docs/figures/choose_mqtt.png


BIN
docs/figures/cmd1.png


BIN
docs/figures/cmd2.png


BIN
docs/figures/cmd3.png


BIN
docs/figures/code_review1.png


BIN
docs/figures/code_review2.png


BIN
docs/figures/get_product_id.png


BIN
docs/figures/get_test.png


BIN
docs/figures/look_data.png


BIN
docs/figures/push_test.png


BIN
docs/figures/reg_code.png


BIN
docs/figures/reg_done.png


BIN
docs/figures/run_main.png


BIN
docs/figures/switch.png