diff --git a/docs/Advanced_development/zh/QuecPythonCloud/TencentCloud.md b/docs/Advanced_development/zh/QuecPythonCloud/TencentCloud.md index d7f5b784a7530ce0495284ae1c3ea3c1491debfb..c78d5f0c43c674601ccbdd76b977037e91e49683 100644 --- a/docs/Advanced_development/zh/QuecPythonCloud/TencentCloud.md +++ b/docs/Advanced_development/zh/QuecPythonCloud/TencentCloud.md @@ -1,4 +1,10 @@ -# QuecPython 接入腾讯云 +## 修订历史 + +| Version | Date | Author | Change expression | +| ------- | ---------- | ---------- | ----------------- | +| 1.0 | 2021-09-18 | David.Tang | Initial version | + +## 前言 文档主要介绍如何使用TencentCloud腾讯云,腾讯云物联网通信(Internet of Things Hub, IoT Hub)旨在提供一个安全、稳定、高效的连接平台,帮助开发者低成本、快速地实现“设备-设备”、“设备-用户应用”、“设备-云服务”之间可靠、高并发的数据通信。不仅可以实现设备之间的互动、设备的数据上报和配置下发,还可以基于规则引擎和腾讯云产品打通,方便快捷地实现海量设备数据的存储、计算以及智能分析。下面主要从MQTT连接方式讲解,通过阅读本文,您将了解到QuecPython连接TencentCloud的过程操作和验证实验理论。 @@ -10,206 +16,136 @@ 点击右上角的“控制台” -![](media/24a89c0909a160b38a301d4ca2876df9.png) +![](media/TencentCloud_01.png) 点击“云产品”---“物联网通信” -![](media/1416c8539a0b3d360a83a545da7788f4.png) +![](media/TencentCloud_02.png) ### 创建产品 -在创建产品时的“认证方式”选择“秘钥认证” +在创建产品时的“认证方式”选择“密钥认证” -![](media/598f51f9cd2a03212a6db95152a3e840.png) +![](media/TencentCloud_03.png) ### 添加设备 -![](media/cdb8eb0e42b3d0f64f6406a651073271.png) - -### 生成连接信息 - -![](media/474489294eb1eb48b202e8cc30882230.png) +1.点击图中的“产品名”进入添加设备界面 -**Broker Address:** 广州域设备填入:PRODUCT_ID.iotcloud.tencentdevices.com,这里PRODUCT_ID 为变量参数,用户需填入创建产品时自动生成的产品 ID +![TencentCloud_04](media/TencentCloud_04.png) -**Broker Port:**证书认证型端口:8883;密钥认证型:1883 +2.按图操作添加设备 -``` -CLIENT_ID = b'X3Z30XABBU001' +![TencentCloud_05](media/TencentCloud_05.png) -SERVER = b'X3Z30XABBU.iotcloud.tencentdevices.com' +### 生成连接信息 -PORT = 1883 +对于一机一密的话,三元组需要关注以下几点: -USER = b'X3Z30XABBU001;12010126;M8STP;1647306844' +**“productID”**位置如下(下图的3位置) -PASSWORD=b'e181d0cfaf5540c8e3f173a6e88efa1f3d34db2db7a9ff845aedc67f48d9d607;hmacsha256' -``` +![TencentCloud_06](media/TencentCloud_06.png) +**“devicename”**和**“devicePsk”**位置如下(下图的3、4位置) +![TencentCloud_07](media/TencentCloud_07.png) ### 规则引擎 -规则引擎用于主题消息转发 - -![](media/06b02e9c78f1823acca37eb37a725377.png) - -![](media/c5a7283bc7b1752b03ecb85d32ca9418.png) - -### 筛选数据 - -![](media/b47c7195c07ef6a35deecf2d120f0439.png) - -### 行为操作 - -这里设定平台转主题消息的目的地 - -![](media/0d84f9fc42466747b7c45e8b42a3c2c7.png) - -填入变量\${DeviceName},在发布topic的Payload中设定DeviceName的值,消息就会转发到对应主题,如:A设备订阅“X3Z30XABBU/001/data”;B设备发布“{"DeviceName":"001","msg":"test publish"}”,那么目的地就是“X3Z30XABBU/\${DeviceName}/data”=“X3Z30XABBU/001/data”;A设备收到数据。 - -### 上报和下发数据 - -设备的主题格式:X3Z30XABBU/\${deviceName}/data - -在发布的消息内容必须包含"DeviceName":"001",消息才会转发到主题“X3Z30XABBU/001/data”。 +规则引擎用于主题消息转发,本文的规则引擎配置如下: -如:{"DeviceName":"001", "msg":"test publish" }” +规则引擎1(相同topic的规则转发): -![](media/c0c93c45631fe7577ebb26031461ec10.png) +![TencentCloud_08](media/TencentCloud_08.png) -![](media/c9cd162f304fac476fe198c32b5b912e.png) +规则引擎2(不同topic的规则转发): -![](media/ad7ae354e1ce677edab9f54818878657.png) +![TencentCloud_09](media/TencentCloud_09.png) ## 软件设计 -在QuecCloud平台取得连接信息之后,即可在umqtt连接云平台,连接云平台的地址和端口固定不变,因此在程序中设定连接信息的值之后,就可以运行实验了。 - -示例代码: - -```python -CLIENT_ID = b'X3Z30XABBU001' - -SERVER = b'X3Z30XABBU.iotcloud.tencentdevices.com' - -PORT = 1883 - -USER = b'X3Z30XABBU001;12010126;M8STP;1647306844' - -PASSWORD=b'e181d0cfaf5540c8e3f173a6e88efa1f3d34db2db7a9ff845aedc67f48d9d607;hmacsha256' - -IMEI = None # modem.getDevImei() - -SUB_TOPIC = 'X3Z30XABBU/{}/data' - -PUB_TOPIC = SUB_TOPIC - -def GetDevImei(): - - global IMEI - - # IMEI = modem.getDevImei() - - IMEI= '001' - - print(IMEI) - -state = 0 - -def sub\_cb(topic, msg): - - global state +示例代码如下,在此做几点解释: - print( +(1)本代码使用腾讯云套件测试,对于一机一密的腾讯云连接只需要配置相应的三元组,即**productID、devicename、devicePsk**(具体如何找到对应的信息参考上面“**生成连接信息**”) - "Subscribe Recv: Topic={},Msg={}".format( +(2)本代码做了两个简单的规则转发示例,具体原理是:代码中向**topic = "3ICA4ULOXI/QuecPython_test/data"**发布消息,同时会订阅到此主题的数据(原因是做了规则转发且此主题支持发布与订阅);代码中向**pub_topic = "3ICA4ULOXI/QuecPython_test/event"**发布消息,会订阅到**sub_topic = "3ICA4ULOXI/QuecPython_test/control"**主题的消息(原因是做了规则转发) - topic.decode(), - - msg.decode())) - - state = 1 - -def MQTT_Init(): - - # 创建一个mqtt实例 - - c = MQTTClient( - - client_id=CLIENT_ID, - - server=SERVER, - - port=PORT, - - user=USER, - - password=PASSWORD, - - keepalive=30) # 必须要 keepalive=30 ,否则连接不上 - - # 设置消息回调 - - c.set_callback(sub_cb) - - # 建立连接 - - try: - - c.connect() - - except Exception as e: - - print('!!!,e=%s' % e) - - # c.connect() - - # 订阅主题 - - c.subscribe(SUB_TOPIC.format(IMEI)) - - # 发布消息 - - Payload = '{"DeviceName":"{}","msg":"test publish"}'.format(IMEI) - - c.publish(PUB_TOPIC.format(IMEI), Payload) - - while True: - - c.wait_msg() - - if state == 1: - - break - - # 关闭连接 - - c.disconnect() - -def main(): - - GetDevImei() - - MQTT_Init() - -if __name__ == "__main__": - - main() +```python +from TenCentYun import TXyun +import log +import utime +import checkNet + + +''' +下面两个全局变量是必须有的,用户可以根据自己的实际项目修改下面两个全局变量的值 +''' +PROJECT_NAME = "QuecPython_TencentYun_example" +PROJECT_VERSION = "1.0.0" + +checknet = checkNet.CheckNetwork(PROJECT_NAME, PROJECT_VERSION) + +# 设置日志输出级别 +log.basicConfig(level=log.INFO) +txyun_log = log.getLogger("TenCentYun") + +''' +腾讯云物联网套件客户端功能 +''' +productID = "3ICA4ULOXI" # 产品标识(参照接入腾讯云应用开发指导) +devicename = "QuecPython_test" # 设备名称(参照接入腾讯云应用开发指导) +devicePsk = "1uZhJRjRTQnBG8TVHKZ2xw==" # 设备密钥(一型一密认证此参数传入None, 参照接入腾讯云应用开发指导) +ProductSecret = None # 产品密钥(一机一密认证此参数传入None,参照接入腾讯云应用开发指导) + +tenxun = TXyun(productID, devicename, devicePsk, ProductSecret) # 创建连接对象 +state = 5 + +def sub_cb(topic, msg): # 云端消息响应回调函数 + global state + txyun_log.info("Subscribe Recv: Topic={},Msg={}".format(topic.decode(), msg.decode())) + state -= 1 + + +if __name__ == '__main__': + stagecode, subcode = checknet.wait_network_connected(30) + if stagecode == 3 and subcode == 1: + txyun_log.info('Network connection successful!') + + tenxun.setMqtt(clean_session=True, keepAlive=300, reconn=True) # 设置mqtt + tenxun.setCallback(sub_cb) # 设置消息回调函数 + topic = "3ICA4ULOXI/QuecPython_test/data" # 输入发布的Topic + sub_topic = "3ICA4ULOXI/QuecPython_test/control" + pub_topic = "3ICA4ULOXI/QuecPython_test/event" + tenxun.subscribe(sub_topic, 1) + tenxun.subscribe(topic, 1) # 订阅Topic + tenxun.start() + while True: + tenxun.publish(topic, "123456789", 1) # 发布消息 + tenxun.publish(pub_topic, "987654321", 1) # 发布消息 + utime.sleep(5) + + while 1: + if state: + pass + else: + tenxun.disconnect() + break + else: + txyun_log.info('Network connection failed! stagecode = {}, subcode = {}'.format(stagecode, subcode)) ``` -接下来就可以下载验证了,python代码不需要编译,直接通过QPYcom工具把.py文件下载到模块中运行。 +接下来就可以下载验证了,QuecPython代码不需要编译,直接通过QPYcom工具把.py文件下载到模块中运行。 ## 下载验证 -下载.py文件到模组运行: +下载.py文件到模组中: + +![TencentCloud_10](media/TencentCloud_10.png) -![](media/c6405128fd86e2502ab214141b264435.png) +下载之后,手动让脚本运行起来,查看现象如下。 -下载之后,手动让脚本运行起来。 +![TencentCloud_11](media/TencentCloud_11.png) -![](media/155611da8af10b8e913850f238390899.png) -## 配套代码 diff --git a/docs/Advanced_development/zh/QuecPythonCloud/code/TencentCloud.py b/docs/Advanced_development/zh/QuecPythonCloud/code/TencentCloud.py index 27fb262781ead47a78c7d4e2928a477c556449be..c0725530486f285455973b92a054d1eacf101df3 100644 --- a/docs/Advanced_development/zh/QuecPythonCloud/code/TencentCloud.py +++ b/docs/Advanced_development/zh/QuecPythonCloud/code/TencentCloud.py @@ -1,77 +1,61 @@ -# 实验1: TencentCloud 实验 -# API资料参考连接: https://python.quectel.com/wiki/api/#umqtt-mqtt +from TenCentYun import TXyun +import log +import utime +import checkNet -from umqtt import MQTTClient -import modem +''' +下面两个全局变量是必须有的,用户可以根据自己的实际项目修改下面两个全局变量的值 +''' +PROJECT_NAME = "QuecPython_TencentYun_example" +PROJECT_VERSION = "1.0.0" -CLIENT_ID = b'X3Z30XABBU001' -SERVER = b'X3Z30XABBU.iotcloud.tencentdevices.com' -PORT = 1883 -USER = b'X3Z30XABBU001;12010126;M8STP;1647306844' -PASSWORD = b'e181d0cfaf5540c8e3f173a6e88efa1f3d34db2db7a9ff845aedc67f48d9d607;hmacsha256' +checknet = checkNet.CheckNetwork(PROJECT_NAME, PROJECT_VERSION) -IMEI = None # modem.getDevImei() -SUB_TOPIC = 'X3Z30XABBU/{}/data' -PUB_TOPIC = SUB_TOPIC +# 设置日志输出级别 +log.basicConfig(level=log.INFO) +txyun_log = log.getLogger("TenCentYun") +''' +腾讯云物联网套件客户端功能 +''' +productID = "3ICA4ULOXI" # 产品标识(参照接入腾讯云应用开发指导) +devicename = "QuecPython_test" # 设备名称(参照接入腾讯云应用开发指导) +devicePsk = "SBhVd5jyjimkL8SPlCB7VA==" # 设备密钥(一型一密认证此参数传入None, 参照接入腾讯云应用开发指导) +ProductSecret = None # 产品密钥(一机一密认证此参数传入None,参照接入腾讯云应用开发指导) -def GetDevImei(): - global IMEI - # IMEI = modem.getDevImei() - IMEI= '001' - print(IMEI) +tenxun = TXyun(productID, devicename, devicePsk, ProductSecret) # 创建连接对象 +state = 5 - -state = 0 - - -def sub_cb(topic, msg): +def sub_cb(topic, msg): # 云端消息响应回调函数 global state - print( - "Subscribe Recv: Topic={},Msg={}".format( - topic.decode(), - msg.decode())) - state = 1 - - -def MQTT_Init(): - # 创建一个mqtt实例 - c = MQTTClient( - client_id=CLIENT_ID, - server=SERVER, - port=PORT, - user=USER, - password=PASSWORD, - keepalive=30) # 必须要 keepalive=30 ,否则连接不上 - # 设置消息回调 - c.set_callback(sub_cb) - # 建立连接 - try: - c.connect() - except Exception as e: - print('!!!,e=%s' % e) - return - # c.connect() - # 订阅主题 - c.subscribe(SUB_TOPIC.format(IMEI)) - # 发布消息 - Payload = '{"DeviceName":"{}","msg":"test publish"}'.format(IMEI) - c.publish(PUB_TOPIC.format(IMEI), Payload) - - while True: - c.wait_msg() - if state == 1: - break - - # 关闭连接 - c.disconnect() - - -def main(): - GetDevImei() - MQTT_Init() - - -if __name__ == "__main__": - main() + txyun_log.info("Subscribe Recv: Topic={},Msg={}".format(topic.decode(), msg.decode())) + state -= 1 + + +if __name__ == '__main__': + stagecode, subcode = checknet.wait_network_connected(30) + if stagecode == 3 and subcode == 1: + txyun_log.info('Network connection successful!') + + tenxun.setMqtt(clean_session=True, keepAlive=300, reconn=True) # 设置mqtt + tenxun.setCallback(sub_cb) # 设置消息回调函数 + topic = "3ICA4ULOXI/QuecPython_test/data" # 输入发布的Topic + sub_topic = "3ICA4ULOXI/QuecPython_test/control" + pub_topic = "3ICA4ULOXI/QuecPython_test/event" + tenxun.subscribe(sub_topic, 1) + tenxun.subscribe(topic, 1) # 订阅Topic + tenxun.start() + while True: + tenxun.publish(topic, "123456789", 1) # 发布消息 + tenxun.publish(pub_topic, "987654321", 1) # 发布消息 + utime.sleep(5) + + while 1: + if state: + pass + else: + tenxun.disconnect() + break + else: + txyun_log.info('Network connection failed! stagecode = {}, subcode = {}'.format(stagecode, subcode)) diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/06b02e9c78f1823acca37eb37a725377.png b/docs/Advanced_development/zh/QuecPythonCloud/media/06b02e9c78f1823acca37eb37a725377.png deleted file mode 100644 index 8cce881e8de7896ad5ef328974384c371bad8d5c..0000000000000000000000000000000000000000 Binary files a/docs/Advanced_development/zh/QuecPythonCloud/media/06b02e9c78f1823acca37eb37a725377.png and /dev/null differ diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/0d84f9fc42466747b7c45e8b42a3c2c7.png b/docs/Advanced_development/zh/QuecPythonCloud/media/0d84f9fc42466747b7c45e8b42a3c2c7.png deleted file mode 100644 index 4fd8ec85b1511dce6518093d2c656094f8ee8b7b..0000000000000000000000000000000000000000 Binary files a/docs/Advanced_development/zh/QuecPythonCloud/media/0d84f9fc42466747b7c45e8b42a3c2c7.png and /dev/null differ diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/155611da8af10b8e913850f238390899.png b/docs/Advanced_development/zh/QuecPythonCloud/media/155611da8af10b8e913850f238390899.png deleted file mode 100644 index ceb540e833b0abc7a4361b041dc212c30bbcb057..0000000000000000000000000000000000000000 Binary files a/docs/Advanced_development/zh/QuecPythonCloud/media/155611da8af10b8e913850f238390899.png and /dev/null differ diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/474489294eb1eb48b202e8cc30882230.png b/docs/Advanced_development/zh/QuecPythonCloud/media/474489294eb1eb48b202e8cc30882230.png deleted file mode 100644 index c49c08787ea4e11db0efba87b1f438861f156be9..0000000000000000000000000000000000000000 Binary files a/docs/Advanced_development/zh/QuecPythonCloud/media/474489294eb1eb48b202e8cc30882230.png and /dev/null differ diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/24a89c0909a160b38a301d4ca2876df9.png b/docs/Advanced_development/zh/QuecPythonCloud/media/TencentCloud_01.png similarity index 100% rename from docs/Advanced_development/zh/QuecPythonCloud/media/24a89c0909a160b38a301d4ca2876df9.png rename to docs/Advanced_development/zh/QuecPythonCloud/media/TencentCloud_01.png diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/1416c8539a0b3d360a83a545da7788f4.png b/docs/Advanced_development/zh/QuecPythonCloud/media/TencentCloud_02.png similarity index 100% rename from docs/Advanced_development/zh/QuecPythonCloud/media/1416c8539a0b3d360a83a545da7788f4.png rename to docs/Advanced_development/zh/QuecPythonCloud/media/TencentCloud_02.png diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/598f51f9cd2a03212a6db95152a3e840.png b/docs/Advanced_development/zh/QuecPythonCloud/media/TencentCloud_03.png similarity index 100% rename from docs/Advanced_development/zh/QuecPythonCloud/media/598f51f9cd2a03212a6db95152a3e840.png rename to docs/Advanced_development/zh/QuecPythonCloud/media/TencentCloud_03.png diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/TencentCloud_04.png b/docs/Advanced_development/zh/QuecPythonCloud/media/TencentCloud_04.png new file mode 100644 index 0000000000000000000000000000000000000000..65165d065f21cc9208bd7502056e9aefb8681da3 Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/TencentCloud_04.png differ diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/TencentCloud_05.png b/docs/Advanced_development/zh/QuecPythonCloud/media/TencentCloud_05.png new file mode 100644 index 0000000000000000000000000000000000000000..976686be43d2e706a1f11b01ea196b0edeadba35 Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/TencentCloud_05.png differ diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/TencentCloud_06.png b/docs/Advanced_development/zh/QuecPythonCloud/media/TencentCloud_06.png new file mode 100644 index 0000000000000000000000000000000000000000..a585f37f051468351371bd5cdc4de67feacd1e85 Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/TencentCloud_06.png differ diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/TencentCloud_07.png b/docs/Advanced_development/zh/QuecPythonCloud/media/TencentCloud_07.png new file mode 100644 index 0000000000000000000000000000000000000000..3006aa251e810b4deb90dec7a8d1036a399b990b Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/TencentCloud_07.png differ diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/TencentCloud_08.png b/docs/Advanced_development/zh/QuecPythonCloud/media/TencentCloud_08.png new file mode 100644 index 0000000000000000000000000000000000000000..89f801b39feaffcc98551876e6cc698cb1bb1a57 Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/TencentCloud_08.png differ diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/TencentCloud_09.png b/docs/Advanced_development/zh/QuecPythonCloud/media/TencentCloud_09.png new file mode 100644 index 0000000000000000000000000000000000000000..d9793b34bcdb6bf42ec94edd3b0d83c40cb81e3b Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/TencentCloud_09.png differ diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/TencentCloud_10.png b/docs/Advanced_development/zh/QuecPythonCloud/media/TencentCloud_10.png new file mode 100644 index 0000000000000000000000000000000000000000..b0326c47a95ec1169efffc1d23b91555924261b0 Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/TencentCloud_10.png differ diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/TencentCloud_11.png b/docs/Advanced_development/zh/QuecPythonCloud/media/TencentCloud_11.png new file mode 100644 index 0000000000000000000000000000000000000000..fa16648bc619ad78181cad86ce3792f123c7aa1e Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/TencentCloud_11.png differ diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/a77c5bba88013408eb44dde38f358938.png b/docs/Advanced_development/zh/QuecPythonCloud/media/a77c5bba88013408eb44dde38f358938.png deleted file mode 100644 index 44d32143102ab2d7532540dcf7a9bf807649a39a..0000000000000000000000000000000000000000 Binary files a/docs/Advanced_development/zh/QuecPythonCloud/media/a77c5bba88013408eb44dde38f358938.png and /dev/null differ diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/b47c7195c07ef6a35deecf2d120f0439.png b/docs/Advanced_development/zh/QuecPythonCloud/media/b47c7195c07ef6a35deecf2d120f0439.png deleted file mode 100644 index ed6122453bc9912191b87ff6fb63da3044d25f8b..0000000000000000000000000000000000000000 Binary files a/docs/Advanced_development/zh/QuecPythonCloud/media/b47c7195c07ef6a35deecf2d120f0439.png and /dev/null differ diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/c0c93c45631fe7577ebb26031461ec10.png b/docs/Advanced_development/zh/QuecPythonCloud/media/c0c93c45631fe7577ebb26031461ec10.png deleted file mode 100644 index fa3080902976eb7ad4c157e1c626177915b1b467..0000000000000000000000000000000000000000 Binary files a/docs/Advanced_development/zh/QuecPythonCloud/media/c0c93c45631fe7577ebb26031461ec10.png and /dev/null differ diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/c5a7283bc7b1752b03ecb85d32ca9418.png b/docs/Advanced_development/zh/QuecPythonCloud/media/c5a7283bc7b1752b03ecb85d32ca9418.png deleted file mode 100644 index bd2ed4ae3ef8080c79b7f3c4709bdc09c26b98ee..0000000000000000000000000000000000000000 Binary files a/docs/Advanced_development/zh/QuecPythonCloud/media/c5a7283bc7b1752b03ecb85d32ca9418.png and /dev/null differ diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/c6405128fd86e2502ab214141b264435.png b/docs/Advanced_development/zh/QuecPythonCloud/media/c6405128fd86e2502ab214141b264435.png deleted file mode 100644 index 1776bf8d0f61334e3b8e8b0569961cc54ba36412..0000000000000000000000000000000000000000 Binary files a/docs/Advanced_development/zh/QuecPythonCloud/media/c6405128fd86e2502ab214141b264435.png and /dev/null differ diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/cdb8eb0e42b3d0f64f6406a651073271.png b/docs/Advanced_development/zh/QuecPythonCloud/media/cdb8eb0e42b3d0f64f6406a651073271.png deleted file mode 100644 index 43fff9f01f636b4cad406d54e4ca623be7fda54b..0000000000000000000000000000000000000000 Binary files a/docs/Advanced_development/zh/QuecPythonCloud/media/cdb8eb0e42b3d0f64f6406a651073271.png and /dev/null differ diff --git a/docs/sbs/zh/sidebar.yaml b/docs/sbs/zh/sidebar.yaml index bd77d5b16f24bbfa456db2440fdbc431192c22d2..faccefea6171191dd90c6fc96286fd5a22f15559 100644 --- a/docs/sbs/zh/sidebar.yaml +++ b/docs/sbs/zh/sidebar.yaml @@ -39,7 +39,10 @@ items: - label: 多线程开发 file: Thread/thread.md - label: 消息队列开发 - file: Thread/queue.md + file: Thread/queue.md + - label: Format_String + file: Thread/Format_String.md + - label: 系统 items: - label: json解析 diff --git a/docs/FAQ/zh/Format_String/Format_String.md b/docs/sbs/zh/thread/Format_String.md similarity index 89% rename from docs/FAQ/zh/Format_String/Format_String.md rename to docs/sbs/zh/thread/Format_String.md index 656aa4ef2b986cb39f01a20708c057b1542ed57b..77944cc09b732a917786f86407521846bc70c26d 100644 --- a/docs/FAQ/zh/Format_String/Format_String.md +++ b/docs/sbs/zh/thread/Format_String.md @@ -1,8 +1,8 @@ ## 修订历史 -| 版本 | 日期 | 作者 | 变更表述 | -| ---- | --------- | ----- | ------------------------------------------------------------ | -| 1.0 | 2021-4-07 | David | 首次编写,包括位运算、字符串与十六进制转换、以及Struct的说明 | +| Version | Date | Author | Change expression | +| ------- | ---------- | ---------- | ----------------- | +| 1.0 | 2021-09-28 | David.Tang | Initial version | 对于字符串与十六进制之间的转换需求,特编写这篇文档,详细介绍相关知识。 @@ -73,8 +73,6 @@ 15 ``` -还有位运算,struct的用法,所以写个demo还是有必要的哦。这是一项通过将设备置于从高温到低温的快速改变环境中或反之变换来测试机器和焊接部分的可靠性 - ## 字符串与十六进制 ### 字符串与十六进制转换的封装 @@ -102,7 +100,7 @@ str_test = String.from_hex(hex_test) print(str_test) ``` -### 字符串与十六进制转换的应用(待完善) +### 字符串与十六进制转换的应用 当然转换后的HEX无法串口直接接收解析,仍需要一定的转换,下面基于EC600SCNLB模组做个简单的实验 diff --git a/docs/FAQ/zh/Format_String/media/UartAssist.png b/docs/sbs/zh/thread/media/UartAssist.png similarity index 100% rename from docs/FAQ/zh/Format_String/media/UartAssist.png rename to docs/sbs/zh/thread/media/UartAssist.png diff --git a/docs/FAQ/zh/Format_String/media/dirver_setup.png b/docs/sbs/zh/thread/media/dirver_setup.png similarity index 100% rename from docs/FAQ/zh/Format_String/media/dirver_setup.png rename to docs/sbs/zh/thread/media/dirver_setup.png diff --git a/docs/FAQ/zh/Format_String/media/file_download.png b/docs/sbs/zh/thread/media/file_download.png similarity index 100% rename from docs/FAQ/zh/Format_String/media/file_download.png rename to docs/sbs/zh/thread/media/file_download.png diff --git a/docs/FAQ/zh/Format_String/media/str_hex_result.png b/docs/sbs/zh/thread/media/str_hex_result.png similarity index 100% rename from docs/FAQ/zh/Format_String/media/str_hex_result.png rename to docs/sbs/zh/thread/media/str_hex_result.png diff --git a/docs/FAQ/zh/Format_String/media/uart_read.png b/docs/sbs/zh/thread/media/uart_read.png similarity index 100% rename from docs/FAQ/zh/Format_String/media/uart_read.png rename to docs/sbs/zh/thread/media/uart_read.png