X$
+
+### Access platform
+
+Click [product] - [IOT] - [enterprise IOT platform]
+
+
+
+### Create instance
+
+
+
+
+
+### Create product
+
+
+
+### Add device
+
+
+
+### Get triples
+
+The triple productkey, devicename and devicesecret are used to generate the connection password in the next step
+
+
+
+
+
+### Generate connection information
+
+Click download password generation widget
+
+http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/189223/cn_zh/1605168543507/MQTT_Password.7z?spm=a2c4g.11186623.2.19.373573a8XfigN5&file=MQTT_Password.7z
+
+ClientID is user-defined, which is generally the same name as devicename. It is used for mqtt connection.
+
+The encryption method should be consistent with that of mqtt connection.
+
+
+
+After calculating the signature, you can obtain the password to connect to the platform.
+
+```
+CLIENT_ID = b'Chic_001|securemode=3,signmethod=hmacsha1|'
+SERVER = b'a1llZotKkCm.iot-as-mqtt.cn-shanghai.aliyuncs.com'
+PORT = 1883
+USER = b'Chic_001&a1llZotKkCm'
+PASSWORD = b'EC01986E912222B0A82049A874AF183D0A490E5E'
+```
+
+**CLIENT_ ID: ** fixed format: \ ${ClientID} \ | securemode = 3, signmethod = hmacsha1\|
+
+Complete example: Chic_ 001\|securemode=3,signmethod=hmacsha1\|
+
+**User: ** fixed format: \ ${yourdevicename} & \ ${yourproductkey}
+
+Complete example: Chic_ 001&a1llZotKkCm
+
+**Password: ** is the string generated by the above tool
+
+**Port: ** fixed 1883
+
+**Server: ** \ ${yourproductkey}. IOT as mqtt. \ ${yourregionid}. Aliyuncs.com, where:
+
+ ${ Yourproductkey}: please replace with the productkey of the product to which the device belongs, which can be obtained from the device details page of the Internet of things platform console.
+
+ ${ Yourregionid}: replace the region selected when creating the instance with your region ID.
+
+ https://help.aliyun.com/document_detail/40654.html?spm=a2c4g.11186623.2.21.7b967908BJu7SZ
+
+
+
+### Report and distribute data
+
+The topic name created above, such as test, can subscribe to the publication as long as the topic starts with test /.
+
+Example topic: / broadcast / a1llzotkcm / 123
+
+
+
+
+
+## Software design
+
+ After the aliyuncloud platform obtains the productkey, devicename and devicesecret, you can use aliyun suite to connect to the cloud platform. The address and port of the cloud platform are fixed. Therefore, after setting the corresponding connection information in the program, you can run the experiment.
+
+Example code:
+
+```python
+import log
+import utime
+import checkNet
+from aLiYun import aLiYun
+
+'''
+The following two global variables are required. Users can modify the values of the following two global variables according to their actual projects,
+The values of these two variables are printed before executing the user code.
+'''
+PROJECT_NAME = "QuecPython_AliYin_example"
+PROJECT_VERSION = "1.0.0"
+checknet = checkNet.CheckNetwork(PROJECT_NAME, PROJECT_VERSION)
+
+
+#Set log output level
+log.basicConfig(level=log.INFO)
+aliYun_log = log.getLogger("ALiYun")
+
+productKey = "a1llZotKkCm" #Product identification (refer to Alibaba cloud application development guidance)
+productSecret = None #Product key (this parameter is passed to none when using one machine and one password authentication. Please refer to Alibaba cloud application development guidance)
+DeviceName = "11111" #Device name (refer to Alibaba Cloud Application Development Guide)
+#Device key (use one type one secret authentication. This parameter is passed into none without pre registration. It is not supported temporarily. You need to create a device in the cloud first, and refer to Alibaba cloud application development guidance)
+DeviceSecret = "03c5e91aea167edead7d381d4b41ed71"
+
+state = 1
+
+#Callback function
+
+
+def sub_cb(topic, msg):
+ global state
+ aliYun_log.info(
+ "Subscribe Recv: Topic={},Msg={}".format(
+ topic.decode(), msg.decode()))
+ state -= 1
+
+
+if __name__ == '__main__':
+ '''
+When running this routine manually, you can remove the delay. If you change the routine file name to main.py, you need to add the delay when you want to start up and run automatically,
+Otherwise, the following poweron cannot be seen from the CDC port_ print_ Information printed in once()
+ '''
+ utime.sleep(5)
+ checknet.poweron_print_once()
+ '''
+If the user program contains network related code, wait must be executed_ network_ Connected() wait for the network to be ready (dialing succeeded);
+If it is a network independent code, you can mask the wait_ network_ connected()
+[this routine must keep the following line!]
+ '''
+ checknet.wait_network_connected()
+
+ #Create aliyun connection object
+ ali = aLiYun(productKey, productSecret, DeviceName, DeviceSecret)
+
+ #Set mqtt connection properties
+ clientID = b'11111clientID' #Custom characters (no more than 64)
+ ali.setMqtt(clientID, clean_session=False, keepAlive=300)
+
+ #Set callback function
+ ali.setCallback(sub_cb)
+ topic = '/broadcast/a1llZotKkCm/123' #Cloud customized or self owned topics
+ #Subscribe to topics
+ ali.subscribe(topic)
+ #Release news
+ ali.publish(topic, "hello world")
+ #function
+ ali.start()
+
+ while True:
+ if state:
+ pass
+ else:
+ ali.disconnect()
+ break
+```
+
+Next, you can download and verify. The Python code does not need to be compiled. You can directly download the. Py file to the module through the qpycom tool.
+
+## Download verification
+
+Download the. Py file to the module to run:
+
+
+
+After downloading, manually let the script run.
+
+
+
+## Matching code
diff --git a/docs/Advanced_development/en/QuecPythonCloud/AmazonCloud.md b/docs/Advanced_development/en/QuecPythonCloud/AmazonCloud.md
new file mode 100644
index 0000000000000000000000000000000000000000..6bec9a6c308bbc77c29fae9d4495fdd634a1a8a5
--- /dev/null
+++ b/docs/Advanced_development/en/QuecPythonCloud/AmazonCloud.md
@@ -0,0 +1,61 @@
+# Introduction to quecpthon Amazon cloud experiment
+
+ This article mainly introduces how to use AWS IOT Amazon Internet of things cloud. AWS IOT provides cloud services and device support that can be used to implement IOT solutions. At the same time, it provides many cloud services to support IOT based applications. Users can access IOT devices and the functions provided by the cloud services connected to these devices. The following mainly explains the connection mode of mqtt. By reading this article, you will understand the process operation of quecpthon connecting AWS IOT and verify the experimental theory.
+
+
+
+## Cloud settings
+
+Amazon cloud homepage: https://amazonaws-china.com/cn/
+
+#### [enter the platform]
+
+Click [my account] - [AWS management console] - [IOT core]
+
+
+
+
+
+
+
+#### [create strategy]
+
+
+
+
+
+#### [create item]
+
+
+
+
+
+
+
+
+
+
+
+
+
+This completes the "create item". Connect the AWS IOT platform with a certificate. The same certificate can be used for multiple devices, and the client ID of different devices remains unique.
+
+
+
+#### [equipment communication]
+
+Obtain mqtt connection address and port of AWS server:
+
+
+
+
+
+Use the mqtt.fx tool to test the communication, and fill in "#" in the subscription topic column to receive all topics.
+
+
+
+
+
+
+
+
diff --git a/docs/Advanced_development/en/QuecPythonCloud/HuaweiCloud.md b/docs/Advanced_development/en/QuecPythonCloud/HuaweiCloud.md
new file mode 100644
index 0000000000000000000000000000000000000000..50cadd97452f05fa7dd00ae711f2d7e331461938
--- /dev/null
+++ b/docs/Advanced_development/en/QuecPythonCloud/HuaweiCloud.md
@@ -0,0 +1,246 @@
+# QuecPython accessing Huawei cloud
+
+The document mainly introduces how to use Huawei cloud. Huawei cloud device access service (iotda) is the Internet of things platform of Huawei cloud. It provides the capabilities of connecting massive devices to the cloud, two-way message communication between devices and the cloud, batch device management, remote control and monitoring, OTA upgrade, equipment linkage rules, and can flexibly transfer device data to other Huawei cloud services.
+
+The following mainly explains the mqtt connection mode of quecpthon. By reading this article, you will understand the process operation of quecpthon connecting Huawei cloud and verify the experimental theory.
+
+## Cloud settings
+
+Open Huawei cloud connection [www.huawei cloud. Com](http://www.huaweicloud.com)
+
+### Access platform
+
+Click [product] - [IOT Internet of things] - [device access to iotda] on the home page
+
+
+
+### Create product
+
+Click [product] - [create product]
+
+
+
+Select mqtt for the "protocol type" of the product
+
+
+
+### Add device
+
+Click [equipment] - [all equipment]
+
+> [https://console.huaweicloud.com/iotdm/?region=cn-north-4\#/dm-portal/device/all-device](https://console.huaweicloud.com/iotdm/?region=cn-north-4#/dm-portal/device/all-device)
+
+
+
+The [device ID] and [device key] automatically generated after registering the device are used to generate the information of the connection platform in the next step.
+
+
+
+### Generate connection information
+
+Visit [here](https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/),填写[注册设备](https://support.huaweicloud.com/qs-iothub/iot_05_0006.html#ZH-CN_TOPIC_0251997880__li1261073102011)后生成的设备ID(DeviceId)和密钥(DeviceSecret),生成连接信息(ClientId、Username、Password)。
+
+
+
+
+
+```
+CLIENT_ID = b'5fbbb784b4ec2202e982e643_868540050954037_0_0_2021011909'
+
+SERVER = b'a15fbbd7ce.iot-mqtts.cn-north-4.myhuaweicloud.com'
+
+PORT = 1883
+
+USER = b'5fbbb784b4ec2202e982e643_868540050954037'
+
+PASSWORD =b'8001a12405743199b3396943a2ed397286117a9ebab4f5dfda8dd6fafe341d94'
+```
+
+
+
+说明:
+
+For devices that do not support domain name access, execute "Ping" in the CMD command box
+"Domain name" to obtain the IP address and use the IP address to access the platform. Because the IP address is not fixed, you need to make the IP address into a configurable item.
+
+a15fbbd7ce.iot-mqtts.cn-north-4.myhuaweicloud.com
+
+1883
+
+Use the ClientID format generated by the generation tool. By default, the timestamp is not verified: device ID_ 0_ 0\_ Timestamp.
+
+-When the "hmacsha256" time stamp verification method is adopted, it will first verify whether the message time stamp is consistent with the platform time, and then judge whether the password is correct.
+
+-When "hmacsha256" does not check the timestamp, the authentication message must also have a timestamp, but it does not check whether the time is accurate, but only judge whether the password is correct.
+
+### Report data
+
+Fill in the interface address with "\ $OC / devices / {device"_ ID} / sys / properties / report ", for example," \ $OC / devices / 5e4e2e92ac-164aefa8fouquan1 / sys / properties / report ".
+
+
+
+\$oc/devices/{device_id}/sys/properties/report
+
+\$oc/devices/5fbbb784b4ec2202e982e643_868540050954037/sys/properties/report
+
+
+
+### Distribute data
+
+The distributed data can only be requested through the API on the application side.
+
+URI
+
+Request method post
+
+URI /v5/iot/{project_id}/devices/{device_id}/messages
+
+Transport protocol HTTPS
+
+Description of distributed data:
+
+
+
+API debugging page:
+
+
+
+
+
+Topic: \$oc/devices/{device_id}/sys/messages/down
+
+\$oc/devices/5fbbb784b4ec2202e982e643_1234567890123456789/sys/messages/down
+
+
+
+## Software design
+
+After the Huawei cloud platform obtains ClientID, username and password, you can connect to the cloud platform through umqtt of quecpthon. The address and port of the cloud platform are fixed. Then you can write code experiments.
+
+Example code:
+
+```python
+from umqtt import MQTTClient
+
+CLIENT_ID = b'5fbbb784b4ec2202e982e643_868540050954037_0_0_2021011909'
+
+SERVER = b'a15fbbd7ce.iot-mqtts.cn-north-4.myhuaweicloud.com'
+
+PORT = 1883
+
+USER = b'5fbbb784b4ec2202e982e643_868540050954037'
+
+PASSWORD = b'8001a12405743199b3396943a2ed397286117a9ebab4f5dfda8dd6fafe341d94'
+
+DEVICE_ID = '5fbbb784b4ec2202e982e643_868540050954037'
+
+state = 0
+
+def sub_cb(topic, msg):
+
+ global state
+
+ print(
+
+ "Subscribe Recv: Topic={},Msg={}".format(
+
+ topic.decode(),
+
+ msg.decode()))
+
+ state = 1
+
+def MQTT_Init():
+
+ #Create an mqtt instance
+
+ c = MQTTClient(
+
+ client_id=CLIENT_ID,
+
+ server=SERVER,
+
+ port=PORT,
+
+ user=USER,
+
+ password=PASSWORD,
+
+ keepalive=30) #You must keep alive = 30, otherwise you can't connect
+
+ #Set message callback
+
+ c.set_callback(sub_cb)
+
+ #Establish connection
+
+ c.connect()
+
+ #Subscribe to topics
+
+ c.subscribe('$oc/devices/{}/sys/messages/down'.format(DEVICE_ID))
+
+ msg = b'''{
+
+ "services": [{
+
+ "service_id": "WaterMeterControl",
+
+ "properties": {
+
+ "state": "T:15c, H: 85% "
+
+ },
+
+ "event_time": "20151212T121212Z"
+
+ }
+
+ ]
+
+ }'''
+
+ #Release news
+
+ c.publish('$oc/devices/{}/sys/properties/report'.format(DEVICE_ID), msg)
+
+ while True:
+
+ c.wait_msg()
+
+ if state == 1:
+
+ break
+
+ #Close connection
+
+ c.disconnect()
+
+def main():
+
+ MQTT_Init()
+
+if __name__ == "__main__":
+
+ main()
+```
+
+Next, you can download and verify. The Python code does not need to be compiled. You can directly download the. Py file to the module through the qpycom tool.
+
+## Download verification
+
+Download the. Py file to the module to run:
+
+
+
+After downloading, manually let the script run.
+
+
+
+After sending the data, you can see the experimental results:
+
+
+
+## Matching code
+
+
diff --git a/docs/Advanced_development/en/QuecPythonCloud/QuecCloud.md b/docs/Advanced_development/en/QuecPythonCloud/QuecCloud.md
new file mode 100644
index 0000000000000000000000000000000000000000..dbfb4a00f7f75027e71fd7941637e5148d2198de
--- /dev/null
+++ b/docs/Advanced_development/en/QuecPythonCloud/QuecCloud.md
@@ -0,0 +1,196 @@
+## Document history
+
+|** version ** date ** author ** change statement **|
+| -------- | ---------- | -------- | ------------ |
+|1.0 | 2021-04-30 | chic | initial version|
+
+
+
+## Platform settings
+
+Move far cloud home page:< http://iot-cloud.quectel.com/dashboard >
+
+### Access platform
+
+
+
+### Create project
+
+Click to enter the R & D center and click create new project
+
+
+
+Set project name:
+
+
+
+### Create product
+
+In the created item table, click View product --> create product
+
+
+
+Customize products according to requirements:
+
+Network connection mode selection: cellular mobile
+
+Data format: in case of Jason, interpret the data according to the function points of the object model; During transparent transmission, the data goes directly to the module as is and interprets the data by itself.
+
+
+
+Click [next] to select the module model used by a product to facilitate product tracking and management.
+
+
+
+After the product is created, you can see the new products:
+
+
+
+
+
+### Definition object model
+
+Click product information --> function definition to add product functions according to your needs. Note: the serial number of "** function ID **" here is used in the code.
+
+
+
+
+
+So far, the platform creation operation has been completed.
+
+
+
+### Certified equipment
+
+When the module is connected to the platform, the device will be automatically created and authenticated without adding the device manually.
+
+
+
+There is no device at present, and the device list is empty.
+
+
+
+### Get secret
+
+"R & D center" --> "view product" --> "product information" --> click [view], and productkey and productsecret will be sent to your registered mailbox for connecting to the platform.
+
+
+
+
+
+After obtaining the productkey and productsecret, you can use quecpthon code to connect to the platform.
+
+**Reminder: all operations are in the "R & D center"**
+
+
+
+## Software design
+
+Example code:
+
+```python
+import quecIot
+import quecTtlv
+
+key = "p1116T" #Fill in the product key
+src = "bGpkVnordkFodFZj" #Fill in product key
+
+DEF_ ID_ Type = ['0', 'temperature', 'Humidity', 'light']
+DEF_DATA_TYPE0 = 'bool'
+DEF_DATA_TYPE1 = 'num'
+DEF_DATA_TYPE2 = 'byte'
+DEF_DATA_TYPE3 = 'struct'
+DEF_DATA_TYPE = [
+ DEF_DATA_TYPE0,
+ DEF_DATA_TYPE1,
+ DEF_DATA_TYPE2,
+ DEF_DATA_TYPE3]
+#0 Boolean
+#1 value
+# 2 Byt
+#3 structure
+
+
+class Quecthing:
+ def __init__(self):
+ #'' initialize qucsdk '' '
+ quecIot.init()
+ #'' register event callback function '' '
+ quecIot.setEventCB(self.eventCB)
+ #'' configure product information '' '
+ quecIot.setProductinfo(key, src)
+ #'' configure server information, optional, default connection to mqtt production environment server '' '
+ # quecIot.setServer(1, "http://iot-south.quectel.com:2883")
+ #'' configure PDP context ID, optional, default is 1 ''
+ # quecIot.setPdpContextId(1)
+ #'' configure lifetime. Optional. Mqtt defaults to 120 ''
+ # quecIot.setLifetime(120)
+ #'' configure external MCU ID number and version number. Optional. If there is no external MCU, you do not need to configure ''
+ # quecIot.setMcuVersion("MCU1", "1_0_0")
+ #'' start cloud platform connection '' '
+ quecIot.setConnmode(1)
+ return
+
+ @staticmethod
+ def eventCB(data):
+ print("event:", data)
+
+ if 5 == data[0] and 10210 == data[1]:
+ data = data[2]
+ listret = quecTtlv.nodeGet(data)
+ print(listret)
+ listretlen = len(listret)
+ for i in range(listretlen):
+ id = listret[i][0]
+ type = listret[i][1]
+ if DEF_DATA_TYPE[type] == DEF_DATA_TYPE0:
+ ret = quecTtlv.idGetBool(data, id)
+ print(DEF_ID_TYPE[id], ret)
+ elif DEF_DATA_TYPE[type] == DEF_DATA_TYPE1:
+ ret = quecTtlv.idGetNum(data, id)
+ print(DEF_ID_TYPE[id], ret)
+
+
+if __name__ == '__main__':
+ Quecthing()
+```
+
+Next, you can download and verify. The Python code does not need to be compiled. You can directly download the. Py file to the module through the qpycom tool.
+
+## Download verification
+
+Download the. Py file to the module to run:
+
+
+
+After downloading, manually let the script run.
+
+
+
+Return to the device management list of the device management platform:
+
+
+
+A device is automatically added to the device list, which has been connected to the platform and authenticated.
+
+
+
+
+
+## Distribute data
+
+The mobile IOT equipment management platform provides equipment debugging functions,
+
+
+
+Enter the "equipment details" page, click [equipment debugging], see the debugging interface, change the data, and click [send command], and the module will receive the data.
+
+
+
+After the module receives the data, explain it in the code, and the qpycom debugging tool is shown as follows:
+
+
+
+
+
+## Matching code
diff --git a/docs/Advanced_development/en/QuecPythonCloud/README.md b/docs/Advanced_development/en/QuecPythonCloud/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..82ec3b146d77ca95dc25fd28bedb3e7684829478
--- /dev/null
+++ b/docs/Advanced_development/en/QuecPythonCloud/README.md
@@ -0,0 +1,11 @@
+# QuecPython cloud service
+
+[quecpthon access to alicloud](/zh-cn/QuecPythonCloud/Aliyun.md)
+
+[quecpthon access to Tencent cloud](/zh-cn/QuecPythonCloud/TencentCloud.md)
+
+[QuecPython QuecCloud](/zh-cn/QuecPythonCloud/QuecCloud.md)
+
+[quecpthon Huawei cloud](/zh-cn/QuecPythonCloud/HuaweiCloud.md)
+
+[quecpthon Amazon cloud](/zh-cn/QuecPythonCloud/AmazonCloud.md)
diff --git a/docs/Advanced_development/en/QuecPythonCloud/TencentCloud.md b/docs/Advanced_development/en/QuecPythonCloud/TencentCloud.md
new file mode 100644
index 0000000000000000000000000000000000000000..93c5c99dda73b5aea744a07606e93d75aa42e642
--- /dev/null
+++ b/docs/Advanced_development/en/QuecPythonCloud/TencentCloud.md
@@ -0,0 +1,215 @@
+# QuecPython access to Tencent cloud
+
+The document mainly introduces how to use Tencent cloud Tencent cloud. Tencent cloud Internet of things hub (IOT hub) aims to provide a safe, stable and efficient connection platform to help developers quickly realize reliable and highly concurrent data communication between "device device", "device user application" and "device cloud service" at low cost. It can not only realize the interaction between devices, data reporting and configuration distribution of devices, but also connect with Tencent cloud products based on rule engine, so as to conveniently and quickly realize the storage, calculation and intelligent analysis of massive device data. The following mainly explains the connection mode of mqtt. By reading this article, you will understand the process operation of quecpthon connecting tencentcloud and verify the experimental theory.
+
+## Cloud settings
+
+Tencent cloud homepage:< https://cloud.tencent.com/ >
+
+### Access platform
+
+Click "console" in the upper left corner
+
+
+
+Click "cloud products" -- "Internet of things communication"
+
+
+
+### Create product
+
+Select "secret key authentication" in the "authentication method" when creating the product
+
+
+
+### Add device
+
+
+
+### Generate connection information
+
+
+
+**Broker address: ** Guangzhou domain equipment fill in: product_ Id.iotcloud.tencentdevices.com, product here_ ID is a variable parameter. You need to fill in the product ID automatically generated when creating the product
+
+**Broker port: ** certificate authentication port: 8883; Key authentication type: 1883
+
+```
+CLIENT_ID = b'X3Z30XABBU001'
+
+SERVER = b'X3Z30XABBU.iotcloud.tencentdevices.com'
+
+PORT = 1883
+
+USER = b'X3Z30XABBU001;12010126;M8STP;1647306844'
+
+PASSWORD=b'e181d0cfaf5540c8e3f173a6e88efa1f3d34db2db7a9ff845aedc67f48d9d607;hmacsha256'
+```
+
+
+
+### Rule engine
+
+The rule engine is used for topic message forwarding
+
+
+
+
+
+### Filter data
+
+
+
+### Behavior operation
+
+The destination of the platform to topic message is set here
+
+
+
+Fill in the variable \ ${devicename}, set the value of devicename in the payload of publishing topic, and the message will be forwarded to the corresponding topic, such as: device a subscribes to "x3z30xabbu / 001 / data"; B device publishes "{" devicename ":" 001 "," MSG ":" test publish "}", then the destination is "x3z30xabbu / \ ${devicename} / data" = "x3z30xabbu / 001 / data"; A device receives data.
+
+### Report and distribute data
+
+Device theme format: x3z30xabbu / \ ${devicename} / data
+
+The published message content must contain "devicename": "001" before the message can be forwarded to the topic "x3z30xabbu / 001 / data".
+
+For example: {"devicename": "001", "MSG": "test publish"} "
+
+
+
+
+
+
+
+## Software design
+
+After the queicloud platform obtains the connection information, you can connect to the cloud platform in umqtt. The address and port of the cloud platform are fixed. Therefore, after setting the value of the connection information in the program, you can run the experiment.
+
+Example code:
+
+```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(
+
+ "Subscribe Recv: Topic={},Msg={}".format(
+
+ topic.decode(),
+
+ msg.decode()))
+
+ state = 1
+
+def MQTT_Init():
+
+ #Create an mqtt instance
+
+ c = MQTTClient(
+
+ client_id=CLIENT_ID,
+
+ server=SERVER,
+
+ port=PORT,
+
+ user=USER,
+
+ password=PASSWORD,
+
+ keepalive=30) #You must keep alive = 30, otherwise you can't connect
+
+ #Set message callback
+
+ c.set_callback(sub_cb)
+
+ #Establish connection
+
+ try:
+
+ c.connect()
+
+ except Exception as e:
+
+ print('!!!,e=%s' % e)
+
+ # c.connect()
+
+ #Subscribe to topics
+
+ c.subscribe(SUB_TOPIC.format(IMEI))
+
+ #Release news
+
+ Payload = '{"DeviceName":"{}","msg":"test publish"}'.format(IMEI)
+
+ c.publish(PUB_TOPIC.format(IMEI), Payload)
+
+ while True:
+
+ c.wait_msg()
+
+ if state == 1:
+
+ break
+
+ #Close connection
+
+ c.disconnect()
+
+def main():
+
+ GetDevImei()
+
+ MQTT_Init()
+
+if __name__ == "__main__":
+
+ main()
+```
+
+Next, you can download and verify. The Python code does not need to be compiled. You can directly download the. Py file to the module through the qpycom tool.
+
+## Download verification
+
+Download the. Py file to the module to run:
+
+
+
+After downloading, manually let the script run.
+
+
+
+## Matching code
+
+
diff --git "a/docs/little_demo/zh/QuecPythonTest/code/LCD_file/\346\230\276\347\244\272\345\233\276\347\211\207/example_display_image.py" b/docs/Advanced_development/en/QuecPythonCloud/code/AliyunCloud_IoT.py
similarity index 34%
rename from "docs/little_demo/zh/QuecPythonTest/code/LCD_file/\346\230\276\347\244\272\345\233\276\347\211\207/example_display_image.py"
rename to docs/Advanced_development/en/QuecPythonCloud/code/AliyunCloud_IoT.py
index 77020b5c7ea7ff9d1de8e6341dc136677f8c7480..9f3908c7f61f49da9e276529c182df61beeeb287 100644
--- "a/docs/little_demo/zh/QuecPythonTest/code/LCD_file/\346\230\276\347\244\272\345\233\276\347\211\207/example_display_image.py"
+++ b/docs/Advanced_development/en/QuecPythonCloud/code/AliyunCloud_IoT.py
@@ -1,49 +1,75 @@
-# -*- coding: UTF-8 -*-
-
-
-import utime
-
-'''
-如果用户使用的固件版本中没有checkNet库,请将checkNet.mpy文件上传到模块的usr目录,
-并将 import checkNet 改为 from usr import checkNet
-'''
-import checkNet
-from usr import st7789v
-from usr import image
-
-
-'''
-下面两个全局变量是必须有的,用户可以根据自己的实际项目修改下面两个全局变量的值,
-在执行用户代码前,会先打印这两个变量的值。
-'''
-PROJECT_NAME = "QuecPython_ST7789V_LCD_Example"
-PROJECT_VERSION = "1.0.0"
-
-checknet = checkNet.CheckNetwork(PROJECT_NAME, PROJECT_VERSION)
-lcd_st7789v = st7789v.ST7789V(240, 240)
-
-
-if __name__ == '__main__':
- '''
- 手动运行本例程时,可以去掉该延时,如果将例程文件名改为main.py,希望开机自动运行时,需要加上该延时,
- 否则无法从CDC口看到下面的 poweron_print_once() 中打印的信息
- '''
- # utime.sleep(5)
- checknet.poweron_print_once()
-
- '''
- 如果用户程序包含网络相关代码,必须执行 wait_network_connected() 等待网络就绪(拨号成功);
- 如果是网络无关代码,可以屏蔽 wait_network_connected()
- '''
- # checknet.wait_network_connected()
-
- # 用户代码
- '''######################【User code star】###################################################'''
-
- '''
- 要显示的图片像素为 99*100,下面设置显示图片的起始坐标位置为(70,70)
- 要注意:显示图片时,最后两个参数传入的是图片大小,即宽高,不是终点坐标
- '''
- lcd_st7789v.lcd_show_image(image.image_buf, 70, 70, 99, 100)
-
- '''######################【User code end 】###################################################'''
+
+import log
+import utime
+import checkNet
+from aLiYun import aLiYun
+
+'''
+下面两个全局变量是必须有的,用户可以根据自己的实际项目修改下面两个全局变量的值,
+在执行用户代码前,会先打印这两个变量的值。
+'''
+PROJECT_NAME = "QuecPython_AliYin_example"
+PROJECT_VERSION = "1.0.0"
+checknet = checkNet.CheckNetwork(PROJECT_NAME, PROJECT_VERSION)
+
+
+# 设置日志输出级别
+log.basicConfig(level=log.INFO)
+aliYun_log = log.getLogger("ALiYun")
+
+productKey = "a1llZotKkCm" # 产品标识(参照阿里云应用开发指导)
+productSecret = None # 产品密钥(使用一机一密认证时此参数传入None,参照阿里云应用开发指导)
+DeviceName = "11111" # 设备名称(参照阿里云应用开发指导)
+# 设备密钥(使用一型一密认证此参数传入None,免预注册暂不支持,需先在云端创建设备,参照阿里云应用开发指导)
+DeviceSecret = "03c5e91aea167edead7d381d4b41ed71"
+
+state = 1
+
+# 回调函数
+
+
+def sub_cb(topic, msg):
+ global state
+ aliYun_log.info(
+ "Subscribe Recv: Topic={},Msg={}".format(
+ topic.decode(), msg.decode()))
+ state -= 1
+
+
+if __name__ == '__main__':
+ '''
+ 手动运行本例程时,可以去掉该延时,如果将例程文件名改为main.py,希望开机自动运行时,需要加上该延时,
+ 否则无法从CDC口看到下面的 poweron_print_once() 中打印的信息
+ '''
+ utime.sleep(5)
+ checknet.poweron_print_once()
+ '''
+ 如果用户程序包含网络相关代码,必须执行 wait_network_connected() 等待网络就绪(拨号成功);
+ 如果是网络无关代码,可以屏蔽 wait_network_connected()
+ 【本例程必须保留下面这一行!】
+ '''
+ checknet.wait_network_connected()
+
+ # 创建aliyun连接对象
+ ali = aLiYun(productKey, productSecret, DeviceName, DeviceSecret)
+
+ # 设置mqtt连接属性
+ clientID = b'11111clientID' # 自定义字符(不超过64)
+ ali.setMqtt(clientID, clean_session=False, keepAlive=300)
+
+ # 设置回调函数
+ ali.setCallback(sub_cb)
+ topic = '/broadcast/a1llZotKkCm/123' # 云端自定义或自拥有的Topic
+ # 订阅主题
+ ali.subscribe(topic)
+ # 发布消息
+ ali.publish(topic, "hello world")
+ # 运行
+ ali.start()
+
+ while True:
+ if state:
+ pass
+ else:
+ ali.disconnect()
+ break
diff --git a/docs/Advanced_development/en/QuecPythonCloud/code/HuaweiCloud.py b/docs/Advanced_development/en/QuecPythonCloud/code/HuaweiCloud.py
new file mode 100644
index 0000000000000000000000000000000000000000..23bc8d6fab5103da0d9866a9934f3c4b8b83d82e
--- /dev/null
+++ b/docs/Advanced_development/en/QuecPythonCloud/code/HuaweiCloud.py
@@ -0,0 +1,71 @@
+# 实验1: HuaweiCloud 实验
+# API资料参考连接: https://python.quectel.com/wiki/api/#umqtt-mqtt
+
+
+from umqtt import MQTTClient
+
+CLIENT_ID = b'5fbbb784b4ec2202e982e643_868540050954037_0_0_2021011909'
+SERVER = b'a15fbbd7ce.iot-mqtts.cn-north-4.myhuaweicloud.com'
+PORT = 1883
+USER = b'5fbbb784b4ec2202e982e643_868540050954037'
+PASSWORD = b'8001a12405743199b3396943a2ed397286117a9ebab4f5dfda8dd6fafe341d94'
+
+DEVICE_ID = '5fbbb784b4ec2202e982e643_868540050954037'
+
+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)
+ # 建立连接
+ c.connect()
+ # 订阅主题
+ c.subscribe('$oc/devices/{}/sys/messages/down'.format(DEVICE_ID))
+
+ msg = b'''{
+ "services": [{
+ "service_id": "WaterMeterControl",
+ "properties": {
+ "state": "T:15c, H: 85% "
+ },
+ "event_time": "20151212T121212Z"
+ }
+ ]
+ }'''
+
+ # 发布消息
+ c.publish('$oc/devices/{}/sys/properties/report'.format(DEVICE_ID), msg)
+
+ while True:
+ c.wait_msg()
+ if state == 1:
+ break
+
+ # 关闭连接
+ c.disconnect()
+
+
+def main():
+ MQTT_Init()
+
+
+if __name__ == "__main__":
+ main()
diff --git a/docs/Advanced_development/en/QuecPythonCloud/code/QuecIoTCloud.py b/docs/Advanced_development/en/QuecPythonCloud/code/QuecIoTCloud.py
new file mode 100644
index 0000000000000000000000000000000000000000..751dcd08f368f85ddce664f904e34ab643e4bbb2
--- /dev/null
+++ b/docs/Advanced_development/en/QuecPythonCloud/code/QuecIoTCloud.py
@@ -0,0 +1,64 @@
+import quecIot
+import quecTtlv
+
+key = "p1116T" # 填入产品key
+src = "bGpkVnordkFodFZj" # 填入产品密钥
+
+DEF_ID_TYPE = ['0', '温度', '湿度', '光照']
+DEF_DATA_TYPE0 = 'bool'
+DEF_DATA_TYPE1 = 'num'
+DEF_DATA_TYPE2 = 'byte'
+DEF_DATA_TYPE3 = 'struct'
+DEF_DATA_TYPE = [
+ DEF_DATA_TYPE0,
+ DEF_DATA_TYPE1,
+ DEF_DATA_TYPE2,
+ DEF_DATA_TYPE3]
+# 0 布尔
+# 1 数值
+# 2 Byt
+# 3 结构体
+
+
+class Quecthing:
+ def __init__(self):
+ # ''' 初始化qucsdk '''
+ quecIot.init()
+ # ''' 注册事件回调函数 '''
+ quecIot.setEventCB(self.eventCB)
+ # ''' 配置产品信息'''
+ quecIot.setProductinfo(key, src)
+ # ''' 配置服务器信息,可选,默认连接MQTT生产环境服务器 '''
+ # quecIot.setServer(1, "http://iot-south.quectel.com:2883")
+ # ''' 配置PDP context Id,可选,默认为1 '''
+ # quecIot.setPdpContextId(1)
+ # ''' 配置lifetime,可选,MQTT默认为120 '''
+ # quecIot.setLifetime(120)
+ # ''' 配置外部MCU标识号和版本号,可选,如没有外部MCU则不需要配置 '''
+ # quecIot.setMcuVersion("MCU1", "1_0_0")
+ # ''' 启动云平台连接 '''
+ quecIot.setConnmode(1)
+ return
+
+ @staticmethod
+ def eventCB(data):
+ print("event:", data)
+
+ if 5 == data[0] and 10210 == data[1]:
+ data = data[2]
+ listret = quecTtlv.nodeGet(data)
+ print(listret)
+ listretlen = len(listret)
+ for i in range(listretlen):
+ id = listret[i][0]
+ type = listret[i][1]
+ if DEF_DATA_TYPE[type] == DEF_DATA_TYPE0:
+ ret = quecTtlv.idGetBool(data, id)
+ print(DEF_ID_TYPE[id], ret)
+ elif DEF_DATA_TYPE[type] == DEF_DATA_TYPE1:
+ ret = quecTtlv.idGetNum(data, id)
+ print(DEF_ID_TYPE[id], ret)
+
+
+if __name__ == '__main__':
+ Quecthing()
diff --git a/docs/Advanced_development/en/QuecPythonCloud/code/TencentCloud.py b/docs/Advanced_development/en/QuecPythonCloud/code/TencentCloud.py
new file mode 100644
index 0000000000000000000000000000000000000000..27fb262781ead47a78c7d4e2928a477c556449be
--- /dev/null
+++ b/docs/Advanced_development/en/QuecPythonCloud/code/TencentCloud.py
@@ -0,0 +1,77 @@
+# 实验1: TencentCloud 实验
+# API资料参考连接: https://python.quectel.com/wiki/api/#umqtt-mqtt
+
+
+from umqtt import MQTTClient
+import modem
+
+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(
+ "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()
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/00e8249a6f31097d6f644a540787cf16.png b/docs/Advanced_development/en/QuecPythonCloud/media/00e8249a6f31097d6f644a540787cf16.png
new file mode 100644
index 0000000000000000000000000000000000000000..c2b9341c1d88f306decb80b5f374390c9af14159
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/00e8249a6f31097d6f644a540787cf16.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/01d0bcf1fbf597194344c90c7b58e995.png b/docs/Advanced_development/en/QuecPythonCloud/media/01d0bcf1fbf597194344c90c7b58e995.png
new file mode 100644
index 0000000000000000000000000000000000000000..3a8f4368fa1cdf5c9c562a273d729e1ffcdcb6a9
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/01d0bcf1fbf597194344c90c7b58e995.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/06b02e9c78f1823acca37eb37a725377.png b/docs/Advanced_development/en/QuecPythonCloud/media/06b02e9c78f1823acca37eb37a725377.png
new file mode 100644
index 0000000000000000000000000000000000000000..8cce881e8de7896ad5ef328974384c371bad8d5c
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/06b02e9c78f1823acca37eb37a725377.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/0c60712858d58b38683613fbb697dd03.png b/docs/Advanced_development/en/QuecPythonCloud/media/0c60712858d58b38683613fbb697dd03.png
new file mode 100644
index 0000000000000000000000000000000000000000..f89636900d30bae00ab5ff3f44c14eb7591f42ac
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/0c60712858d58b38683613fbb697dd03.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/0d84f9fc42466747b7c45e8b42a3c2c7.png b/docs/Advanced_development/en/QuecPythonCloud/media/0d84f9fc42466747b7c45e8b42a3c2c7.png
new file mode 100644
index 0000000000000000000000000000000000000000..4fd8ec85b1511dce6518093d2c656094f8ee8b7b
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/0d84f9fc42466747b7c45e8b42a3c2c7.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/0d9c74f77ca83805912f29392d23cf08.png b/docs/Advanced_development/en/QuecPythonCloud/media/0d9c74f77ca83805912f29392d23cf08.png
new file mode 100644
index 0000000000000000000000000000000000000000..1b315182fafd33bdd89e5ba6e740b29fb38df821
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/0d9c74f77ca83805912f29392d23cf08.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/1.png b/docs/Advanced_development/en/QuecPythonCloud/media/1.png
new file mode 100644
index 0000000000000000000000000000000000000000..d0e6381512ac74878ef80a0e941fb78ff3fbc812
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/1.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/10.png b/docs/Advanced_development/en/QuecPythonCloud/media/10.png
new file mode 100644
index 0000000000000000000000000000000000000000..395a9176f8e3f9e939616fd42e4604d81c6d4d84
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/10.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/11.png b/docs/Advanced_development/en/QuecPythonCloud/media/11.png
new file mode 100644
index 0000000000000000000000000000000000000000..fedc518e47091a91fa4dddf768b40f24ddc50cdd
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/11.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/12.png b/docs/Advanced_development/en/QuecPythonCloud/media/12.png
new file mode 100644
index 0000000000000000000000000000000000000000..da0e93167b0be9269b18fdf709325db2822c80bd
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/12.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/13.png b/docs/Advanced_development/en/QuecPythonCloud/media/13.png
new file mode 100644
index 0000000000000000000000000000000000000000..9cdea6e45f0dd590284eb192340a44a3850ae743
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/13.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/14.png b/docs/Advanced_development/en/QuecPythonCloud/media/14.png
new file mode 100644
index 0000000000000000000000000000000000000000..2615399d47b78a9f9cf0982410b552d45ab09cd5
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/14.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/1416c8539a0b3d360a83a545da7788f4.png b/docs/Advanced_development/en/QuecPythonCloud/media/1416c8539a0b3d360a83a545da7788f4.png
new file mode 100644
index 0000000000000000000000000000000000000000..d9a17a43beb7cbe5c93e6b2c23d9201efc02c186
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/1416c8539a0b3d360a83a545da7788f4.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/15.png b/docs/Advanced_development/en/QuecPythonCloud/media/15.png
new file mode 100644
index 0000000000000000000000000000000000000000..4c4017d127e1c356bb9f6331485b39d638e5c848
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/15.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/155611da8af10b8e913850f238390899.png b/docs/Advanced_development/en/QuecPythonCloud/media/155611da8af10b8e913850f238390899.png
new file mode 100644
index 0000000000000000000000000000000000000000..ceb540e833b0abc7a4361b041dc212c30bbcb057
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/155611da8af10b8e913850f238390899.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/178b3243bd5399776eaac723d81ce845.png b/docs/Advanced_development/en/QuecPythonCloud/media/178b3243bd5399776eaac723d81ce845.png
new file mode 100644
index 0000000000000000000000000000000000000000..fc2d09cab274976edc9787de1a67b2f09b603f01
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/178b3243bd5399776eaac723d81ce845.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/184cc27df7aaf8e51ff5fba33b354abe.png b/docs/Advanced_development/en/QuecPythonCloud/media/184cc27df7aaf8e51ff5fba33b354abe.png
new file mode 100644
index 0000000000000000000000000000000000000000..116e135897e5d13c552cb5585082407fa21a3ba8
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/184cc27df7aaf8e51ff5fba33b354abe.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/2.png b/docs/Advanced_development/en/QuecPythonCloud/media/2.png
new file mode 100644
index 0000000000000000000000000000000000000000..813d35c1b3a291132384fd2830f61d0e4ba4dd27
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/2.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/20cb75f8677c6c8c4f54642e400036d9.png b/docs/Advanced_development/en/QuecPythonCloud/media/20cb75f8677c6c8c4f54642e400036d9.png
new file mode 100644
index 0000000000000000000000000000000000000000..79c59673e1f20f6a51145a2caefdda17a2d2ee4a
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/20cb75f8677c6c8c4f54642e400036d9.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/21a2c497d167773be8850aa506d34eb9.png b/docs/Advanced_development/en/QuecPythonCloud/media/21a2c497d167773be8850aa506d34eb9.png
new file mode 100644
index 0000000000000000000000000000000000000000..adde3dab1e8a572c9f82fa748cbf5cbc2920ffef
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/21a2c497d167773be8850aa506d34eb9.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/24a89c0909a160b38a301d4ca2876df9.png b/docs/Advanced_development/en/QuecPythonCloud/media/24a89c0909a160b38a301d4ca2876df9.png
new file mode 100644
index 0000000000000000000000000000000000000000..bca31f7c3d9c355a025b55dcf44e9402320b7b4b
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/24a89c0909a160b38a301d4ca2876df9.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/2dd7f1fa61d4861ddf3d5118b4d18a31.png b/docs/Advanced_development/en/QuecPythonCloud/media/2dd7f1fa61d4861ddf3d5118b4d18a31.png
new file mode 100644
index 0000000000000000000000000000000000000000..5774b0d47181b9ab376ea730525200678ac12560
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/2dd7f1fa61d4861ddf3d5118b4d18a31.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/3.png b/docs/Advanced_development/en/QuecPythonCloud/media/3.png
new file mode 100644
index 0000000000000000000000000000000000000000..d14144b6b22f27473e52951c87ed859dde192c5c
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/3.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/33a7f4fd4ea75b78b264ea78eaa1c2e6.png b/docs/Advanced_development/en/QuecPythonCloud/media/33a7f4fd4ea75b78b264ea78eaa1c2e6.png
new file mode 100644
index 0000000000000000000000000000000000000000..6abf2331a35fa03d8cfec6deb73174e6dc059146
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/33a7f4fd4ea75b78b264ea78eaa1c2e6.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/38b2f5b0b684ffdd198d772baef2c946.png b/docs/Advanced_development/en/QuecPythonCloud/media/38b2f5b0b684ffdd198d772baef2c946.png
new file mode 100644
index 0000000000000000000000000000000000000000..d3033cb5a4e7d459a875b2e133c5194127ac4d21
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/38b2f5b0b684ffdd198d772baef2c946.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/4.png b/docs/Advanced_development/en/QuecPythonCloud/media/4.png
new file mode 100644
index 0000000000000000000000000000000000000000..8bb158e663f68649cdfbbb04e5a930044b37c730
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/4.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/40eb66200d1d4ad0090a1786f8d27579.png b/docs/Advanced_development/en/QuecPythonCloud/media/40eb66200d1d4ad0090a1786f8d27579.png
new file mode 100644
index 0000000000000000000000000000000000000000..f9a3dbe26273cde1fd45b98926e942ca88474abc
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/40eb66200d1d4ad0090a1786f8d27579.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/437eefd54847b5780adc6b9c2c496544.png b/docs/Advanced_development/en/QuecPythonCloud/media/437eefd54847b5780adc6b9c2c496544.png
new file mode 100644
index 0000000000000000000000000000000000000000..a3184158813ec1d9242e0f83ad4291d76850da2c
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/437eefd54847b5780adc6b9c2c496544.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/440b41bd014245ad52d9f4680babcbac.png b/docs/Advanced_development/en/QuecPythonCloud/media/440b41bd014245ad52d9f4680babcbac.png
new file mode 100644
index 0000000000000000000000000000000000000000..63458ce91ca7f41149692be67b05d6143910a21f
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/440b41bd014245ad52d9f4680babcbac.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/474489294eb1eb48b202e8cc30882230.png b/docs/Advanced_development/en/QuecPythonCloud/media/474489294eb1eb48b202e8cc30882230.png
new file mode 100644
index 0000000000000000000000000000000000000000..c49c08787ea4e11db0efba87b1f438861f156be9
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/474489294eb1eb48b202e8cc30882230.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/4f4a5ee0d3c9728fc3a5e1a0044c02d4.png b/docs/Advanced_development/en/QuecPythonCloud/media/4f4a5ee0d3c9728fc3a5e1a0044c02d4.png
new file mode 100644
index 0000000000000000000000000000000000000000..fe0281c7abc524584e5fe2ac5f7cccb55cc53fe2
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/4f4a5ee0d3c9728fc3a5e1a0044c02d4.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/5.png b/docs/Advanced_development/en/QuecPythonCloud/media/5.png
new file mode 100644
index 0000000000000000000000000000000000000000..310681b5213a39746f719144a85630df9f7389c9
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/5.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/56bc1e7957122a00bd028918c3bb5d18.png b/docs/Advanced_development/en/QuecPythonCloud/media/56bc1e7957122a00bd028918c3bb5d18.png
new file mode 100644
index 0000000000000000000000000000000000000000..eaf88691e868934c105f1ea361b08e18ab054077
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/56bc1e7957122a00bd028918c3bb5d18.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/579f0beb67f1e0a7daa16ff000d6b33d.png b/docs/Advanced_development/en/QuecPythonCloud/media/579f0beb67f1e0a7daa16ff000d6b33d.png
new file mode 100644
index 0000000000000000000000000000000000000000..780e66ef99524c186709290402d6db948be8b416
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/579f0beb67f1e0a7daa16ff000d6b33d.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/58e05991a4eddf591effea2642579f4a.png b/docs/Advanced_development/en/QuecPythonCloud/media/58e05991a4eddf591effea2642579f4a.png
new file mode 100644
index 0000000000000000000000000000000000000000..593edb06dc739392e1287e27d3d562ecf611391f
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/58e05991a4eddf591effea2642579f4a.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/598f51f9cd2a03212a6db95152a3e840.png b/docs/Advanced_development/en/QuecPythonCloud/media/598f51f9cd2a03212a6db95152a3e840.png
new file mode 100644
index 0000000000000000000000000000000000000000..18f747eb1f19a4d70f8a8209f03b8a8a527a3aa3
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/598f51f9cd2a03212a6db95152a3e840.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/5cb4cffb7b4e9f1d2464ee487f5f1544.png b/docs/Advanced_development/en/QuecPythonCloud/media/5cb4cffb7b4e9f1d2464ee487f5f1544.png
new file mode 100644
index 0000000000000000000000000000000000000000..9b15b3874eda4eaeb622585a4d09ee27b7e64b62
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/5cb4cffb7b4e9f1d2464ee487f5f1544.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/6.png b/docs/Advanced_development/en/QuecPythonCloud/media/6.png
new file mode 100644
index 0000000000000000000000000000000000000000..a4c7bbc2dc7904a5cf6d101d923eafbfcef61d4c
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/6.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/642222a1f350d8d00ea7df18a97d1da9.png b/docs/Advanced_development/en/QuecPythonCloud/media/642222a1f350d8d00ea7df18a97d1da9.png
new file mode 100644
index 0000000000000000000000000000000000000000..ea0ee61503aa4669bffc1108b518336db1ffc86e
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/642222a1f350d8d00ea7df18a97d1da9.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/6928f54528bf7a8c7f9ad115db1520e4.png b/docs/Advanced_development/en/QuecPythonCloud/media/6928f54528bf7a8c7f9ad115db1520e4.png
new file mode 100644
index 0000000000000000000000000000000000000000..d8530ddb48142490b6b0fec199e2c9355f6745e8
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/6928f54528bf7a8c7f9ad115db1520e4.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/7.png b/docs/Advanced_development/en/QuecPythonCloud/media/7.png
new file mode 100644
index 0000000000000000000000000000000000000000..d7b11a1ac6f3478d6a97dc6d1b3083c8fda4bfa5
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/7.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/7404fb362b289bcd55a5d50aa25c8546.png b/docs/Advanced_development/en/QuecPythonCloud/media/7404fb362b289bcd55a5d50aa25c8546.png
new file mode 100644
index 0000000000000000000000000000000000000000..67adda1ced914156855e4b0a540f731fc8177164
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/7404fb362b289bcd55a5d50aa25c8546.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/744a99b28c9b15b0e515f4ce6b4e63a1.png b/docs/Advanced_development/en/QuecPythonCloud/media/744a99b28c9b15b0e515f4ce6b4e63a1.png
new file mode 100644
index 0000000000000000000000000000000000000000..8adf3b3f1c6958c634e1a049de9bf76c28060280
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/744a99b28c9b15b0e515f4ce6b4e63a1.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/7d97c96182cd7cba909f2f8110af2195.png b/docs/Advanced_development/en/QuecPythonCloud/media/7d97c96182cd7cba909f2f8110af2195.png
new file mode 100644
index 0000000000000000000000000000000000000000..b49a5d4b6956e71e61d6d96a44040ac8e2175cb7
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/7d97c96182cd7cba909f2f8110af2195.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/8.png b/docs/Advanced_development/en/QuecPythonCloud/media/8.png
new file mode 100644
index 0000000000000000000000000000000000000000..c7b5c51fbc627a0b5a397eb89dd3bc325768d0e4
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/8.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/88b354fa6b1122bc4eae448106fdb35e.png b/docs/Advanced_development/en/QuecPythonCloud/media/88b354fa6b1122bc4eae448106fdb35e.png
new file mode 100644
index 0000000000000000000000000000000000000000..6ca33a88b240676c41afc08666470023fd605a31
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/88b354fa6b1122bc4eae448106fdb35e.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/8b01f010e317cfd3129333709d60a514.png b/docs/Advanced_development/en/QuecPythonCloud/media/8b01f010e317cfd3129333709d60a514.png
new file mode 100644
index 0000000000000000000000000000000000000000..73d636b418908539572692a738d02e7f07fb842d
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/8b01f010e317cfd3129333709d60a514.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/8e92e1660f578af51625aaaf9daf23f8.png b/docs/Advanced_development/en/QuecPythonCloud/media/8e92e1660f578af51625aaaf9daf23f8.png
new file mode 100644
index 0000000000000000000000000000000000000000..5c5ec164137af2ade2b865adcccbc832d8559ce6
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/8e92e1660f578af51625aaaf9daf23f8.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/9.png b/docs/Advanced_development/en/QuecPythonCloud/media/9.png
new file mode 100644
index 0000000000000000000000000000000000000000..68eeecd8088498da7ce215e0df3605f48171d479
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/9.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/AliyunCloud_IoT_210324_001.png b/docs/Advanced_development/en/QuecPythonCloud/media/AliyunCloud_IoT_210324_001.png
new file mode 100644
index 0000000000000000000000000000000000000000..275a04a2c06c5f40ab346be17eb467533e84c76d
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/AliyunCloud_IoT_210324_001.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/AliyunCloud_IoT_210324_002.png b/docs/Advanced_development/en/QuecPythonCloud/media/AliyunCloud_IoT_210324_002.png
new file mode 100644
index 0000000000000000000000000000000000000000..1ea252d0fc741f5f827190e0e0226a12d560d355
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/AliyunCloud_IoT_210324_002.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/AliyunCloud_IoT_210324_002A.png b/docs/Advanced_development/en/QuecPythonCloud/media/AliyunCloud_IoT_210324_002A.png
new file mode 100644
index 0000000000000000000000000000000000000000..c2b9341c1d88f306decb80b5f374390c9af14159
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/AliyunCloud_IoT_210324_002A.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/AliyunCloud_IoT_210324_003.png b/docs/Advanced_development/en/QuecPythonCloud/media/AliyunCloud_IoT_210324_003.png
new file mode 100644
index 0000000000000000000000000000000000000000..9a3b3664300a19d9633f7f2799a62b4e1f113d24
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/AliyunCloud_IoT_210324_003.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/AliyunCloud_IoT_210324_004.png b/docs/Advanced_development/en/QuecPythonCloud/media/AliyunCloud_IoT_210324_004.png
new file mode 100644
index 0000000000000000000000000000000000000000..f52880d0c6ac4f92c3fddf633cd0477a3f6a28da
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/AliyunCloud_IoT_210324_004.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/AliyunCloud_IoT_210324_005.png b/docs/Advanced_development/en/QuecPythonCloud/media/AliyunCloud_IoT_210324_005.png
new file mode 100644
index 0000000000000000000000000000000000000000..66d66e980f1a9744569da5ccc245c42fc69f34fe
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/AliyunCloud_IoT_210324_005.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/AliyunCloud_IoT_210324_006.png b/docs/Advanced_development/en/QuecPythonCloud/media/AliyunCloud_IoT_210324_006.png
new file mode 100644
index 0000000000000000000000000000000000000000..9f17684074e74a616ba212c1821c143139bc19f8
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/AliyunCloud_IoT_210324_006.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/AliyunCloud_IoT_210324_007.png b/docs/Advanced_development/en/QuecPythonCloud/media/AliyunCloud_IoT_210324_007.png
new file mode 100644
index 0000000000000000000000000000000000000000..b67a870232d0783407f6484f0f89594f0f09b509
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/AliyunCloud_IoT_210324_007.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/AliyunCloud_IoT_210324_008.png b/docs/Advanced_development/en/QuecPythonCloud/media/AliyunCloud_IoT_210324_008.png
new file mode 100644
index 0000000000000000000000000000000000000000..ab1c297875ac5aae8176694152c5f11d35002d1e
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/AliyunCloud_IoT_210324_008.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/AliyunCloud_IoT_210324_009.png b/docs/Advanced_development/en/QuecPythonCloud/media/AliyunCloud_IoT_210324_009.png
new file mode 100644
index 0000000000000000000000000000000000000000..9135c8e237116aa32bb1d8ce7efc5875ab4c026e
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/AliyunCloud_IoT_210324_009.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/AliyunCloud_IoT_210324_010.png b/docs/Advanced_development/en/QuecPythonCloud/media/AliyunCloud_IoT_210324_010.png
new file mode 100644
index 0000000000000000000000000000000000000000..fc098834adec4d916f668ae85c87db4075880e5b
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/AliyunCloud_IoT_210324_010.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/AliyunCloud_IoT_210324_011.png b/docs/Advanced_development/en/QuecPythonCloud/media/AliyunCloud_IoT_210324_011.png
new file mode 100644
index 0000000000000000000000000000000000000000..0f43d769e739ce8e4b432e625891f194ab5ac922
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/AliyunCloud_IoT_210324_011.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/AliyunCloud_IoT_210324_012.png b/docs/Advanced_development/en/QuecPythonCloud/media/AliyunCloud_IoT_210324_012.png
new file mode 100644
index 0000000000000000000000000000000000000000..7449980c169dafd0f3c24781d24842fc5da5434c
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/AliyunCloud_IoT_210324_012.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_01.png b/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..614a7b8539bad8485a9e1accb0b02fc8a60ac224
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_01.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_02.png b/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..9e54b39bef6c5aa6290ecd7cb8d9166d311cef07
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_02.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_03.png b/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_03.png
new file mode 100644
index 0000000000000000000000000000000000000000..5c7244c13aeaec346556e336a840a800bea49cc9
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_03.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_04.png b/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_04.png
new file mode 100644
index 0000000000000000000000000000000000000000..456ae8874d0e9ecaa2a1f36de1ff6c9833515bb4
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_04.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_05.png b/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_05.png
new file mode 100644
index 0000000000000000000000000000000000000000..1d58fbee9a8a7a280af8963383a3b01aa0f7b9a6
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_05.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_06.png b/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_06.png
new file mode 100644
index 0000000000000000000000000000000000000000..6543f10084c45867b7d9e0e4265e74292842cfe2
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_06.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_07.png b/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_07.png
new file mode 100644
index 0000000000000000000000000000000000000000..0b913c4e90ff7a5f2ef00179ce4989ffcfbf6833
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_07.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_08.png b/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_08.png
new file mode 100644
index 0000000000000000000000000000000000000000..224e2ee147ee984e863b9618e7e1077d2a891e9b
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_08.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_09.png b/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_09.png
new file mode 100644
index 0000000000000000000000000000000000000000..5925e10ac2dee7a6a339d334711f54b517d6c8a5
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_09.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_10.png b/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_10.png
new file mode 100644
index 0000000000000000000000000000000000000000..a8fde8c7554ca55fc6c5117c0db30f6af328064b
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_10.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_11.png b/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_11.png
new file mode 100644
index 0000000000000000000000000000000000000000..dfc0b493ef3a8724ac1e8ca5445cb4118780bb4e
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_11.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_12.png b/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_12.png
new file mode 100644
index 0000000000000000000000000000000000000000..cdf32912a2dfd94260ccbd056f12f2b0e904f75f
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_12.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_13.png b/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_13.png
new file mode 100644
index 0000000000000000000000000000000000000000..72d27d648e44b8a284ac7864184c6bc45107f13a
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_13.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_14.png b/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_14.png
new file mode 100644
index 0000000000000000000000000000000000000000..a58c4a7402112b3d3bda32861967e964d2d0e315
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_14.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_15.png b/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_15.png
new file mode 100644
index 0000000000000000000000000000000000000000..a8fde8c7554ca55fc6c5117c0db30f6af328064b
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_15.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_16.png b/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_16.png
new file mode 100644
index 0000000000000000000000000000000000000000..2631c4c57384aa68616709e6c1befdc9e6c4bbf1
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_16.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_17.png b/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_17.png
new file mode 100644
index 0000000000000000000000000000000000000000..84f311855a2616d3ac3bb09f84403665c168daab
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_17.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_18.png b/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_18.png
new file mode 100644
index 0000000000000000000000000000000000000000..9d898906b29096e18d897457e5c516250eb26919
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_18.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_19.png b/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_19.png
new file mode 100644
index 0000000000000000000000000000000000000000..c8fdd43eee6fadbd4baebece11b9f2ad346d7e8d
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/QuecPythonCloud_210430_19.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/a77c5bba88013408eb44dde38f358938.png b/docs/Advanced_development/en/QuecPythonCloud/media/a77c5bba88013408eb44dde38f358938.png
new file mode 100644
index 0000000000000000000000000000000000000000..44d32143102ab2d7532540dcf7a9bf807649a39a
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/a77c5bba88013408eb44dde38f358938.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/ad674210c976e30f24d800bede396808.png b/docs/Advanced_development/en/QuecPythonCloud/media/ad674210c976e30f24d800bede396808.png
new file mode 100644
index 0000000000000000000000000000000000000000..5aa44c76a3c43bb9a73f9811df9c12c2243bcad1
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/ad674210c976e30f24d800bede396808.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/ad7ae354e1ce677edab9f54818878657.png b/docs/Advanced_development/en/QuecPythonCloud/media/ad7ae354e1ce677edab9f54818878657.png
new file mode 100644
index 0000000000000000000000000000000000000000..d9d36c41172e4f7d0fb7a590df041c5a69b4578f
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/ad7ae354e1ce677edab9f54818878657.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/b47c7195c07ef6a35deecf2d120f0439.png b/docs/Advanced_development/en/QuecPythonCloud/media/b47c7195c07ef6a35deecf2d120f0439.png
new file mode 100644
index 0000000000000000000000000000000000000000..ed6122453bc9912191b87ff6fb63da3044d25f8b
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/b47c7195c07ef6a35deecf2d120f0439.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/be1090df6a3161dd621b541463887a8f.png b/docs/Advanced_development/en/QuecPythonCloud/media/be1090df6a3161dd621b541463887a8f.png
new file mode 100644
index 0000000000000000000000000000000000000000..0caede62ae632f073fc3684437dbd418459c1571
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/be1090df6a3161dd621b541463887a8f.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/bf41a9ad7dcf2bc0718496712c30dd72.png b/docs/Advanced_development/en/QuecPythonCloud/media/bf41a9ad7dcf2bc0718496712c30dd72.png
new file mode 100644
index 0000000000000000000000000000000000000000..f37e7170efb5b5c930f2e5c243ba4cb9da78d47e
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/bf41a9ad7dcf2bc0718496712c30dd72.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/c0c93c45631fe7577ebb26031461ec10.png b/docs/Advanced_development/en/QuecPythonCloud/media/c0c93c45631fe7577ebb26031461ec10.png
new file mode 100644
index 0000000000000000000000000000000000000000..fa3080902976eb7ad4c157e1c626177915b1b467
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/c0c93c45631fe7577ebb26031461ec10.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/c5a7283bc7b1752b03ecb85d32ca9418.png b/docs/Advanced_development/en/QuecPythonCloud/media/c5a7283bc7b1752b03ecb85d32ca9418.png
new file mode 100644
index 0000000000000000000000000000000000000000..bd2ed4ae3ef8080c79b7f3c4709bdc09c26b98ee
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/c5a7283bc7b1752b03ecb85d32ca9418.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/c6405128fd86e2502ab214141b264435.png b/docs/Advanced_development/en/QuecPythonCloud/media/c6405128fd86e2502ab214141b264435.png
new file mode 100644
index 0000000000000000000000000000000000000000..1776bf8d0f61334e3b8e8b0569961cc54ba36412
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/c6405128fd86e2502ab214141b264435.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/c919d92250a8d791e7b604d40a08d13d.png b/docs/Advanced_development/en/QuecPythonCloud/media/c919d92250a8d791e7b604d40a08d13d.png
new file mode 100644
index 0000000000000000000000000000000000000000..2381744c2f0703c4ea21d71d06c7e91019820ffc
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/c919d92250a8d791e7b604d40a08d13d.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/c9cd162f304fac476fe198c32b5b912e.png b/docs/Advanced_development/en/QuecPythonCloud/media/c9cd162f304fac476fe198c32b5b912e.png
new file mode 100644
index 0000000000000000000000000000000000000000..64b8d54bdd82385bd4ce3957eded5423f8f31aee
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/c9cd162f304fac476fe198c32b5b912e.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/cdb8eb0e42b3d0f64f6406a651073271.png b/docs/Advanced_development/en/QuecPythonCloud/media/cdb8eb0e42b3d0f64f6406a651073271.png
new file mode 100644
index 0000000000000000000000000000000000000000..43fff9f01f636b4cad406d54e4ca623be7fda54b
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/cdb8eb0e42b3d0f64f6406a651073271.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/cf31ba54e8b803da79ad1e8b9fccfa4e.png b/docs/Advanced_development/en/QuecPythonCloud/media/cf31ba54e8b803da79ad1e8b9fccfa4e.png
new file mode 100644
index 0000000000000000000000000000000000000000..4e607d3c97b6f7d517d98971571464051ec604b1
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/cf31ba54e8b803da79ad1e8b9fccfa4e.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/cfd9d30539dcc7bec17d952c04e7d5b6.png b/docs/Advanced_development/en/QuecPythonCloud/media/cfd9d30539dcc7bec17d952c04e7d5b6.png
new file mode 100644
index 0000000000000000000000000000000000000000..58608880682881e9f192c87683f3bf186230a2f0
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/cfd9d30539dcc7bec17d952c04e7d5b6.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/dc2b5625311e10a79eca5427746c05f5.png b/docs/Advanced_development/en/QuecPythonCloud/media/dc2b5625311e10a79eca5427746c05f5.png
new file mode 100644
index 0000000000000000000000000000000000000000..78aaa807b016ee63cee9c467b8bea1e1b9754400
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/dc2b5625311e10a79eca5427746c05f5.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/ed3b9173920f4482dfa234c37b3850e7.png b/docs/Advanced_development/en/QuecPythonCloud/media/ed3b9173920f4482dfa234c37b3850e7.png
new file mode 100644
index 0000000000000000000000000000000000000000..1c8c03193b0aedc7aac32f87fb89275289a50fbe
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/ed3b9173920f4482dfa234c37b3850e7.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/ee306a4acca2ec6a25d90a026d6cff22.png b/docs/Advanced_development/en/QuecPythonCloud/media/ee306a4acca2ec6a25d90a026d6cff22.png
new file mode 100644
index 0000000000000000000000000000000000000000..574ea533f50387429d5bf9527e5dfe65750f47ec
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/ee306a4acca2ec6a25d90a026d6cff22.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/ee86dd4eeaf37ec47d9a51073c1ca133.png b/docs/Advanced_development/en/QuecPythonCloud/media/ee86dd4eeaf37ec47d9a51073c1ca133.png
new file mode 100644
index 0000000000000000000000000000000000000000..3151e3ed0d57c3897df897418aa151d38d6f424f
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/ee86dd4eeaf37ec47d9a51073c1ca133.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/f3a6297aa2a71798598892414c41d361.png b/docs/Advanced_development/en/QuecPythonCloud/media/f3a6297aa2a71798598892414c41d361.png
new file mode 100644
index 0000000000000000000000000000000000000000..1f19efe3d5af360bc8a1203945c3e14fbbefe1ca
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/f3a6297aa2a71798598892414c41d361.png differ
diff --git a/docs/Advanced_development/en/QuecPythonCloud/media/f51db8dc51ba6ae73375cbfe7f8b0063.png b/docs/Advanced_development/en/QuecPythonCloud/media/f51db8dc51ba6ae73375cbfe7f8b0063.png
new file mode 100644
index 0000000000000000000000000000000000000000..3ce8dba29dc342d6a0b73ae9b117ebdc5ebaff2d
Binary files /dev/null and b/docs/Advanced_development/en/QuecPythonCloud/media/f51db8dc51ba6ae73375cbfe7f8b0063.png differ
diff --git a/docs/Advanced_development/en/QuecPythonInterface/FOTA_binary_upgrade.md b/docs/Advanced_development/en/QuecPythonInterface/FOTA_binary_upgrade.md
new file mode 100644
index 0000000000000000000000000000000000000000..ebb2797f7d2d6d8b021d3bbdd0ae0815d5a958fa
--- /dev/null
+++ b/docs/Advanced_development/en/QuecPythonInterface/FOTA_binary_upgrade.md
@@ -0,0 +1,204 @@
+## ** user guide for quecpthon FOTA firmware upgrade**
+
+This document introduces how to upgrade FOTA firmware based on quecpthon, and guides users to use FOTA upgrade function from the aspects of introduction of new FOTA scheme, production of upgrade package, firmware upgrade process, etc.
+
+This document applies to the following modules:
+
+- EC100Y-CN
+
+- EC600S-CN
+
+
+
+## New FOTA upgrade scheme
+
+Compared with the old scheme, the biggest advantage of the new FOTA scheme is that it can reduce the occupation of flash. Firstly, CP and DSP adopt LZMA compression with higher compression rate. Compared with the previous lzop compression, the image of CP can be reduced by 1m +, and the image of DSP can be reduced by 200 K +; Secondly, using the difference before compression, the differential packet can be smaller. Because the compression changes the file content, the difference effect is not good. The higher the compression rate, the worse the difference effect will be. Using LZMA's high compression rate algorithm, we must adopt a new FOTA upgrade scheme, which not only reduces the image, but also does not increase the differential packet. Compared with the old lzop upgrade scheme, the differential packet is smaller.
+
+## Manufacturing method of differential upgrade package
+
+The directory of upgrade package making tools is shown in the figure below.
+
+
+
+### Upgrade package production command and parameter description
+
+>The upgrade package creation commands are as follows:
+
+> adiff_2.3.exe -l [fs][fp] system_old.img system_new.img system_patch.bin
+
+- *system_ Old. Img *: represents the firmware upgrade file of the old version;
+
+- *system_ New. Img *: represents the firmware upgrade file of the new version;
+
+- *system_ Patch. Bin *: represents the generated differential upgrade file;
+
+-- L represents the location where the differential upgrade file is stored. If it is set to FS, it means that the differential file will be put into the file system; If it is set to FP, it means that the difference file will be put into FOTA_ PKG partition.
+
+The purpose of specifying the file storage location is to judge whether the backup area is sufficient at the stage of making differential subcontracting, so as to meet the old firmware backup during differential restore, which is used as a security protection test.
+
+### Upgrade package production process
+
+When making differential packages, two different versions of firmware packages are required: the old version of firmware package B (short for before) and the new version of firmware package a (short for after). The manufacturing steps are as follows:
+
+1. Copy the * system. Img * file in the firmware package to the root directory of the tool, as shown in the following figure:
+
+
+
+1. Name * system. Img * in a * systeam_ Old. Img *, and then name * system. Img * in B as
+ *systeam_ New. Img *, as shown in the figure below:
+
+
+
+1. Execute the following command:
+
+ adiff_2.3.exe -l fs system_old.img system_new.img FotaFile.bin
+
+When a and B need to upgrade each other, exchange the command to create * a respectively_ b. Bin * and * B_ a.bin*; As follows:
+
+> adiff_2.3.exe -l fs system_new.img system_old.img FotaFile.bin
+
+Similarly, you can also modify the image name.
+
+
+
+1. Complete the upgrade package of differential upgrade, and the results are shown in the figure below:
+
+
+
+## FOTA firmware upgrade process
+
+### Process introduction
+
+Upload the completed differential upgrade package to the file system of the module, and then complete the firmware upgrade through the demo provided.
+
+### Introduction to FOTA related APIs
+
+fota_obj
+
+This function is used to create FOTA objects.
+
+-** function prototype**
+
+fota_obj = fota()
+
+
+-** parameters**
+
+nothing
+
+-** return value**
+
+Returns the FOTA object.
+
+fota_obj.write
+
+This function is used to write upgrade package file data.
+
+-** function prototype**
+
+fota_obj.write(bytes, file_size)
+
+
+-** parameters**
+
+*bytes*:
+
+[in] upgrade package data.
+
+*file_size*:
+
+[in] total byte size of upgrade package file.
+
+-** return value**
+
+*0 * indicates successful writing
+
+*-1 * indicates write failure
+
+fota_obj.verify
+
+This function is used to verify the upgrade package file data.
+
+-** function prototype**
+
+fota_obj.verify()
+
+
+-** parameters**
+
+nothing
+
+-** return value**
+
+*0 * indicates that the verification is successful
+
+*-1 * indicates verification failure
+
+### Sample code
+
+```python
+import fota
+
+import utime
+
+import log
+
+import uos
+
+from misc import Power
+
+#Set log output level
+
+log.basicConfig(level=log.INFO)
+
+fota_log = log.getLogger("Fota")
+
+#This example requires upgrade package files (differential package and other. Bin files). Please refer to the method of making upgrade package in this document.
+
+def run():
+
+ fota_obj = fota() #Create a FOTA object
+
+ file_size = uos.stat("FotaFile.bin")[6] #Get total bytes of file
+
+ with open("/usr/FotaFile.bin", "rb")as f: #Open. Bin file in Rb mode (upgrade package file needs to be made)
+
+ while 1:
+
+ c = f.read(1024) # read
+
+ if not c:
+
+ break
+
+ fota_obj.write(c, file_size) #Write. Bin file data and total bytes of the file
+
+ fota_log.info("flush verify...")
+
+ res = fota_obj.verify() #check
+
+ if res != 0:
+
+ fota_log.error("verify error")
+
+ return
+
+ fota_log.info("flush power_reset...")
+
+utime.sleep(2)
+
+Power.powerRestart() #Restart module
+```
+
+
+
+## Appendix a abbreviations of terms
+
+Table 1: Abbreviations of terms
+
+|** abbreviation *** full English name *** full Chinese name **|
+| -------- | ---------------------------- | ---------------- |
+|CP | payload compression protocol | IP load compression protocol|
+|DSP | digital signal processing | digital signal processing|
+|FOTA firmware over the air download software upgrade|
+
diff --git a/docs/Advanced_development/en/QuecPythonInterface/Multithreading.md b/docs/Advanced_development/en/QuecPythonInterface/Multithreading.md
new file mode 100644
index 0000000000000000000000000000000000000000..d423dadaa7cc5d2961cc953629fec17b5a72cec9
--- /dev/null
+++ b/docs/Advanced_development/en/QuecPythonInterface/Multithreading.md
@@ -0,0 +1,394 @@
+## ** quecpthon multithreaded development**
+
+Taking ec600s-cn as an example, this paper introduces how to use the multithreading function of quecpthon. Almost all operating systems support the concept of process, and the running tasks in the operating system generally correspond to a process. When a program runs in memory, it becomes a process. Multithreading extends the concept of multi process, so that the same process can process multiple tasks simultaneously. A thread is also called a lightweight process. A thread is the execution unit of a process. Similar to the status of process in the operating system, thread is an independent and concurrent execution flow in the program.
+
+Through this article, you will understand all the setting parameters and usage of ec600s-cn thread.
+
+### Hardware description
+
+Thread is a function realization at the software level. In terms of hardware, it only needs enough memory, which will not be repeated here.
+
+### Software design
+
+_ The thread module provides methods to create new threads and provides mutexes. The functions of each interface are described in detail below.
+
+#### Get current thread number
+
+**_thread.get_ident()**
+
+**Parameter description**
+
+nothing
+
+**Return value**
+
+If the execution is successful, the current thread number is returned;
+
+Other values indicate execution failure.
+
+#### Gets the remaining memory size of the system
+
+**_thread.get_heap_size()**
+
+**Parameter description**
+
+nothing
+
+**Return value**
+
+If the execution is successful, the remaining memory size of the system is returned;
+
+Other values indicate execution failure.
+
+#### Set the stack size used by the thread to be created
+
+**_thread.stack_size(size)**
+
+**Parameter description**
+
+|Parameter | type | description|
+| :--: | :--: | :----------------------------------------------: |
+|Size | integer | the stack size used by the thread to be created. Unit: byte; Default: 8K|
+
+**Return value**
+
+0 is returned if the execution is successful;
+
+Other values indicate execution failure.
+
+#### Create a new thread
+
+**_thread.start_new_thread(function, args)**
+
+**Parameter description**
+
+|Parameter | type | description|
+| :------: | :--: | :------------: |
+|Function | - | receive and execute function|
+|Args | - | executed function parameters|
+
+**Return value**
+
+If the creation is successful, there is no return;
+
+If the creation fails, an error is returned.
+
+#### Create a mutex object
+
+**_thread.allocate_lock()**
+
+**Parameter description**
+
+nothing
+
+**Return value**
+
+If the creation is successful, there is no return;
+
+If the creation fails, an error is returned.
+
+#### Get mutex
+
+**lock.acquire()**
+
+**Parameter description**
+
+nothing
+
+**Return value**
+
+* ture * will be returned if the acquisition is successful;
+
+* false * is returned if acquisition fails.
+
+#### Release mutex
+
+**lock.release()**
+
+**Parameter description**
+
+nothing
+
+**Return value**
+
+If the release is successful, there is no return;
+
+An error is returned if the release fails.
+
+#### Query mutex status
+
+**lock.locked()**
+
+**Parameter description**
+
+nothing
+
+**Return value**
+
+* true * is returned if the mutex is obtained by a thread;
+
+* false * is returned if the mutex is not obtained by the thread.
+
+### Interactive operation
+
+Use qpycom tool to interact with ec600s-cn, as shown in the screenshot below.
+
+```python
+>>> import _thread
+>>> _thread.get_ident()
+2126467632
+>>> _thread.get_heap_size()
+748032
+>>> lock = _thread.allocate_lock()
+>>> lock.acquire()
+True
+>>> lock.locked()
+True
+>>> lock.release()
+>>> lock.locked()
+False
+```
+
+be careful:
+
+1. import _ Thread is to let_ The thread module is visible in the current space.
+
+2. Only import_ Thread module can only be used_ Functions and variables in thread.
+
+### Download verification
+
+#### Software code
+
+The reference code of the supporting demo is * thread in the same directory as the document_ File. Py * file. Download the. Py file to ec600s-cn and run it. The code is as follows:
+
+```python
+import _thread
+import utime
+import log
+from machine import UART
+
+#Set log output level
+log.basicConfig(level=log.INFO)
+uart_log = log.getLogger("Thread")
+
+state = 1
+msglen = 0
+count = 10
+uart = UART(UART.UART2, 115200, 8, 0, 1, 0)
+
+def uartwrite():
+ global count
+ while count:
+ write_msg = "Quectel count={}".format(count) #send data
+ uart.write(write_msg)
+ uart_log.info("write msg :{}".format(write_msg))
+ utime.sleep(1)
+ count -= 1
+ if count == 0:
+ break
+ uart_log.info("uartWrite end!")
+
+def uartread():
+ global state
+ global msglen
+ while 1:
+ utime.sleep_ms(10)
+ msgLen = uart.any() #Returns whether there is a readable data length
+ if msgLen:
+ msg = uart.read(msgLen) #Read when there is data
+ utf8_msg = msg.decode() #The initial data is the byte type (bytes), and the byte type data is converted to str
+ uart_log.info("uartread msg: {}".format(utf8_msg))
+ state = 0
+ break
+ else:
+ continue
+
+def run():
+ _thread.start_new_thread(uartread, ()) #Create a thread to listen and receive UART messages
+ _thread.start_new_thread(uartwrite, ())
+
+
+if __name__ == "__main__":
+ run()
+ while 1:
+ if state:
+ pass
+ else:
+ break
+
+```
+
+#### Hardware connection
+
+Power is supplied to ec600s-cn through type-C interface. The connection between UART and TTL to USB module is shown in the table below (for reference only):
+
+|Module UART_ Pin | TTL to USB module|
+| :------------: | :----------: |
+| Rx1 | Tx |
+| Tx1 | Rx |
+| GND | GND |
+
+The hardware connection diagram is as follows:
+
+
+
+#### Operation effect
+
+(1) Open qpycom and run * thread_ File. Py *, as shown below:
+
+
+
+(2) Since the two threads are running at the same time, UART can send data to ec600s-cn serial port while writing data (the following only indicates that reading and writing are running at the same time, but the specific log output order depends on the time of manual transmission). The following is the "quecpython" sent to ec600s-cn through TTL to USB in the third and fourth gaps of ec600s-cn writing data.
+
+
+
+### Matching code
+
+
+
+