diff --git a/docs/Quick_start/zh/code/AliyunMQTT_Chic.py b/docs/Quick_start/zh/code/AliyunMQTT_Chic.py new file mode 100644 index 0000000000000000000000000000000000000000..1a0d8246a155a2add262237ac296c1ec56ba3de9 --- /dev/null +++ b/docs/Quick_start/zh/code/AliyunMQTT_Chic.py @@ -0,0 +1,87 @@ +from umqtt import MQTTClient +import modem +import checkNet +import utime +from misc import Power + +# AccessKey ID : LTAI5tRFwDhmXcmUFH8qoCVR +# AccessKey Secret : ocGC9I5YRf0EoZXJj75b2U42LNkvPj + +CLIENT_ID = b'GID_ZHIQIANG@@@001' +SERVER = b'post-cn-zvp262hla07.mqtt.aliyuncs.com' +PORT = 1883 +USER = b'Signature|LTAI5tRFwDhmXcmUFH8qoCVR|post-cn-zvp262hla07' +PASSWORD = b'z7VkmcsG9d5hOnMB/N5ITZ5WGeI=' + +IMEI = 'Chic_YE' # modem.getDevImei() +SUB_TOPIC = '{}' +PUB_TOPIC = SUB_TOPIC + + +# def GetDevImei(): +# global IMEI +# IMEI = modem.getDevImei() +# print('IMEI:{}'.format(IMEI)) + + +state = 0 + + +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)) + # 发布消息 + c.publish(PUB_TOPIC.format(IMEI), b"test publish") + + while True: + c.wait_msg() + if state == 1: + break + + # 关闭连接 + c.disconnect() + + +def main(): + # GetDevImei() + MQTT_Init() + + +if __name__ == '__main__': + PROJECT_NAME = "QuecPython" + PROJECT_VERSION = "1.0.0" + checknet = checkNet.CheckNetwork(PROJECT_NAME, PROJECT_VERSION) + checknet.poweron_print_once() + try: + checknet.wait_network_connected() + except BaseException: + print('Not Net, Resatrting...') + utime.sleep_ms(200) + Power.powerRestart() + main() diff --git a/docs/Quick_start/zh/media/mqtt_211017_01.png b/docs/Quick_start/zh/media/mqtt_211017_01.png new file mode 100644 index 0000000000000000000000000000000000000000..27265284dbe6a5079fb7597add05f8d5149655db Binary files /dev/null and b/docs/Quick_start/zh/media/mqtt_211017_01.png differ diff --git a/docs/Quick_start/zh/media/mqtt_211017_02.png b/docs/Quick_start/zh/media/mqtt_211017_02.png new file mode 100644 index 0000000000000000000000000000000000000000..f5993e2ab77fd9e07aa31e616d962a93f5344e7e Binary files /dev/null and b/docs/Quick_start/zh/media/mqtt_211017_02.png differ diff --git a/docs/Quick_start/zh/media/mqtt_211017_03.png b/docs/Quick_start/zh/media/mqtt_211017_03.png new file mode 100644 index 0000000000000000000000000000000000000000..4d5ea752a3d8aea890ec5f76e0983b1ca6b7b877 Binary files /dev/null and b/docs/Quick_start/zh/media/mqtt_211017_03.png differ diff --git a/docs/Quick_start/zh/media/mqtt_211017_04.png b/docs/Quick_start/zh/media/mqtt_211017_04.png new file mode 100644 index 0000000000000000000000000000000000000000..b0d70f66d9fdeb3de3f4a8245c5b892f192817a3 Binary files /dev/null and b/docs/Quick_start/zh/media/mqtt_211017_04.png differ diff --git a/docs/Quick_start/zh/media/mqtt_211017_05.png b/docs/Quick_start/zh/media/mqtt_211017_05.png new file mode 100644 index 0000000000000000000000000000000000000000..eb740028af890fcf9687eea3667fdcbad7a3bb82 Binary files /dev/null and b/docs/Quick_start/zh/media/mqtt_211017_05.png differ diff --git a/docs/Quick_start/zh/media/mqtt_211017_06.png b/docs/Quick_start/zh/media/mqtt_211017_06.png new file mode 100644 index 0000000000000000000000000000000000000000..53ebf38b49563214a427f82d3851c9f12c55b218 Binary files /dev/null and b/docs/Quick_start/zh/media/mqtt_211017_06.png differ diff --git a/docs/Quick_start/zh/media/mqtt_211017_07.png b/docs/Quick_start/zh/media/mqtt_211017_07.png new file mode 100644 index 0000000000000000000000000000000000000000..3edd715779812256ccdd6d1f2103f546c76f00fd Binary files /dev/null and b/docs/Quick_start/zh/media/mqtt_211017_07.png differ diff --git a/docs/Quick_start/zh/media/mqtt_211017_08.png b/docs/Quick_start/zh/media/mqtt_211017_08.png new file mode 100644 index 0000000000000000000000000000000000000000..bfd39413dd33e39f9a526549044e3bd660b54a0b Binary files /dev/null and b/docs/Quick_start/zh/media/mqtt_211017_08.png differ diff --git a/docs/Quick_start/zh/media/mqtt_211017_09.png b/docs/Quick_start/zh/media/mqtt_211017_09.png new file mode 100644 index 0000000000000000000000000000000000000000..7923d1d7c380565e7ebed9aac9c4058994757359 Binary files /dev/null and b/docs/Quick_start/zh/media/mqtt_211017_09.png differ diff --git a/docs/Quick_start/zh/media/mqtt_211017_10.png b/docs/Quick_start/zh/media/mqtt_211017_10.png new file mode 100644 index 0000000000000000000000000000000000000000..04ee48af97068d406ead3fe8a506af627d2fd72c Binary files /dev/null and b/docs/Quick_start/zh/media/mqtt_211017_10.png differ diff --git a/docs/Quick_start/zh/media/mqtt_211017_11.png b/docs/Quick_start/zh/media/mqtt_211017_11.png new file mode 100644 index 0000000000000000000000000000000000000000..05e6c514f379d4cbd19de1c2ef98a507f2687d52 Binary files /dev/null and b/docs/Quick_start/zh/media/mqtt_211017_11.png differ diff --git a/docs/Quick_start/zh/media/mqtt_211017_12.png b/docs/Quick_start/zh/media/mqtt_211017_12.png new file mode 100644 index 0000000000000000000000000000000000000000..2962c63fa8f946146d60458d8147562541049fca Binary files /dev/null and b/docs/Quick_start/zh/media/mqtt_211017_12.png differ diff --git a/docs/Quick_start/zh/media/mqtt_211017_13.png b/docs/Quick_start/zh/media/mqtt_211017_13.png new file mode 100644 index 0000000000000000000000000000000000000000..88a72265c52ee680af44e6ca7cbe90ac86fb881d Binary files /dev/null and b/docs/Quick_start/zh/media/mqtt_211017_13.png differ diff --git a/docs/Quick_start/zh/mqtt.md b/docs/Quick_start/zh/mqtt.md index 7555385539e7b6e5fe9eb60f899275a9ee500f77..50ec49a2f237787123a3b2fa9a26fe60cfec0e2f 100644 --- a/docs/Quick_start/zh/mqtt.md +++ b/docs/Quick_start/zh/mqtt.md @@ -1 +1,222 @@ -## 待补充 \ No newline at end of file +## 文档历史 + +**修订记录** + +| **版本** | **日期** | **作者** | **变更表述** | +| -------- | ---------- | -------- | ------------ | +| 1.0 | 2021-10-17 | Chic | 初始版本 | + + + +## 引言 + +文档主要介绍如何使用“微消息队列 MQTT”,微消息队列 MQTT 版是专为移动互联网(MI)、物联网(IoT)领域设计的消息产品,覆盖互动直播、金融支付、智能餐饮、即时聊天、移动 Apps、智能设备、车联网等多种应用场景;通过对 MQTT、WebSocket 等协议的全面支持,连接端和云之间的双向通信,实现 C2C、C2B、B2C 等业务场景之间的消息通信,可支撑千万级设备与消息并发。下面主要从MQTT连接方式讲解,通过阅读本文,您将了解到QuecPython连接“微消息队列 MQTT”的过程操作和验证实验理论。 + + + +## 云端设置 + +阿里云首页:https://www.aliyun.com + +【进入平台】 + +点击【产品】---【容器与中间件】---【微消息队列MQTT版】 + +![image-20211017101728372](media\mqtt_211017_01.png) + +【创建实例】 + +![image-20211017101750104](media\mqtt_211017_02.png) + +【创建Topic】 + +![image-20211017101815318](media\mqtt_211017_03.png) + +【创建Group ID】 + +![image-20211017101828016](media\mqtt_211017_04.png) + +【签名校验】 + +![image-20211017101840630](media\mqtt_211017_05.png) + +待签名的内容:GID_ZHIQIANG@@@002 (由三部分 GroupID +@@@+自定义组成) + +“Access Key”和“Secret Key”:由RAM访问控制台中的用户里生成 + +【RAM访问控制】 + +![image-20211017101851794](media\mqtt_211017_06.png) + +在RAM访问控制台中创建用户: + +![image-20211017101904409](media\mqtt_211017_07.png) + +【Access Key、Secret Key】 + +生成的Access Key、Secret Key只显示一次,切记要自己记录下来。 + +![image-20211017101915060](media\mqtt_211017_08.png) + +【生成连接信息】 + +填写Access Key、Secret Key、待签名的内容,点击“计算签名” + +待签名的内容:GID_ZHIQIANG@@@002 (由三部分 GroupID +@@@+自定义组成) + +![image-20211017101924515](media\mqtt_211017_09.png) + +点击计算签名,可获得UserName、Password、ClientID,在“实例详情”页获取Address、Port固定1883,即可连接平台。 + +`CLIENT_ID = b'GID_ZHIQIANG@@@001'` + +`SERVER = b'post-cn-st21wg9r10v.mqtt.aliyuncs.com'` + +`PORT = 1883` + +`USER = b'Signature|LTAI4G1dauHcnXn1r1wmUnNC|post-cn-st21wg9r10v'` + +`PASSWORD = b'3FhOhOcUFtDSCKripJQji3hsES0='` + +**CLIENT_ID:**格式固定:GroupID +@@@+自定义组成 + +**SERVER:**在“实例详情”页获取公网接入点 + +**PORT:**固定1883 + +**USER:**就是上面“签名校验”生成的字符串。 + +**PASSWORD:**就是上面“签名校验”生成的字符串。 + + ![image-20211017101940330](media\mqtt_211017_10.png) + +【上报数据】 + +【下发数据】 + +在上面创建的Topic名称如:test,只要以test/为开头的Topic都可以订阅发布。 + +示例Topic如:test、test/123,test/123/ABC + +![image-20211017102003865](media\mqtt_211017_11.png) + + + +## 软件设计 + +在AliyunCloud平台取得UserName、Password、ClientID之后,即可在umqtt连接云平台,连接云平台的地址和端口固定不变,因此在程序中设定相应连接信息之后,就可以运行实验了。 + + + +以下示例代码。 + +```python +from umqtt import MQTTClient +import modem +import checkNet +import utime +from misc import Power + +# AccessKey ID : LTAI5tRFwDhmXcmUFH8qoCVR +# AccessKey Secret : ocGC9I5YRf0EoZXJj75b2U42LNkvPj + +CLIENT_ID = b'GID_ZHIQIANG@@@001' +SERVER = b'post-cn-zvp262hla07.mqtt.aliyuncs.com' +PORT = 1883 +USER = b'Signature|LTAI5tRFwDhmXcmUFH8qoCVR|post-cn-zvp262hla07' +PASSWORD = b'z7VkmcsG9d5hOnMB/N5ITZ5WGeI=' + +IMEI = 'Chic_YE' # modem.getDevImei() +SUB_TOPIC = '{}' +PUB_TOPIC = SUB_TOPIC + + +# def GetDevImei(): +# global IMEI +# IMEI = modem.getDevImei() +# print('IMEI:{}'.format(IMEI)) + + +state = 0 + + +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)) + # 发布消息 + c.publish(PUB_TOPIC.format(IMEI), b"test publish") + + while True: + c.wait_msg() + if state == 1: + break + + # 关闭连接 + c.disconnect() + + +def main(): + # GetDevImei() + MQTT_Init() + + +if __name__ == '__main__': + PROJECT_NAME = "QuecPython" + PROJECT_VERSION = "1.0.0" + checknet = checkNet.CheckNetwork(PROJECT_NAME, PROJECT_VERSION) + checknet.poweron_print_once() + try: + checknet.wait_network_connected() + except BaseException: + print('Not Net, Resatrting...') + utime.sleep_ms(200) + Power.powerRestart() + main() + +``` + +接下来就可以下载验证了,python代码不需要编译,直接通过QPYcom工具把.py文件下载到模块中运行。 + + + +## 下载验证 + +下载.py文件到模组运行: + +![image-20211017102023045](media\mqtt_211017_12.png) + + + +下载之后,手动让脚本跑起来。 + +![image-20211017102032878](media\mqtt_211017_13.png) + + + + \ No newline at end of file