diff --git a/docs/Advanced_development/zh/QuecPythonCloud/Aliyun.md b/docs/Advanced_development/zh/QuecPythonCloud/Aliyun.md index 823fe79a1785d021442553bb8be5ff779b4fc52b..a0ed340e9329f0f2b8011b0e61fb7f9151c5b7af 100644 --- a/docs/Advanced_development/zh/QuecPythonCloud/Aliyun.md +++ b/docs/Advanced_development/zh/QuecPythonCloud/Aliyun.md @@ -10,27 +10,29 @@ 点击【产品】---【物联网IoT】---【企业物联网平台】 -![](media/579f0beb67f1e0a7daa16ff000d6b33d.png) +![](media/AliyunCloud_IoT_210324_001.png) ### 创建实例 -![](media/f3a6297aa2a71798598892414c41d361.png) +![](media/AliyunCloud_IoT_210324_002.png) -![](media/00e8249a6f31097d6f644a540787cf16.png) +![](media/AliyunCloud_IoT_210324_002A.png) ### 创建产品 -![](media/33a7f4fd4ea75b78b264ea78eaa1c2e6.png) +![](media/AliyunCloud_IoT_210324_003.png) ### 添加设备 -![](media/dc2b5625311e10a79eca5427746c05f5.png) +![](media/AliyunCloud_IoT_210324_004.png) ### 获取三元组 三元组ProductKey、DeviceName、DeviceSecret用于下个步骤生成连接密码 -![](media/0c60712858d58b38683613fbb697dd03.png) +![](media/AliyunCloud_IoT_210324_005.png) + +![](media/AliyunCloud_IoT_210324_006.png) ### 生成连接信息 @@ -42,29 +44,25 @@ http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/189223/cn_zh/160 method加密方式要和连接MQTT时的设置一致。 -![](media/8e92e1660f578af51625aaaf9daf23f8.png) +![](media/AliyunCloud_IoT_210324_007.png) 计算签名后,可获得Password,即可连接平台。 ``` -CLIENT_ID = b'22222\|securemode=3,signmethod=hmacsha1\|' - +CLIENT_ID = b'Chic_001|securemode=3,signmethod=hmacsha1|' SERVER = b'a1llZotKkCm.iot-as-mqtt.cn-shanghai.aliyuncs.com' - PORT = 1883 - -USER = b'22222&a1llZotKkCm' - -PASSWORD = b'CD31C5E9C8633B174A6E9C2A97D04FCD8EF73BB4' +USER = b'Chic_001&a1llZotKkCm' +PASSWORD = b'EC01986E912222B0A82049A874AF183D0A490E5E' ``` **CLIENT_ID:**格式固定:\${clientId}\|securemode=3,signmethod=hmacsha1\| -​ 完整示例:22222\|securemode=3,signmethod=hmacsha1\| +​ 完整示例:Chic_001\|securemode=3,signmethod=hmacsha1\| **USER:**固定格式:\${YourDeviceName}&\${YourProductKey} -​ 完整示例:device&alxxxxxxxxx +​ 完整示例:Chic_001&a1llZotKkCm **PASSWORD:**即上面工具生成的字符串 @@ -78,132 +76,99 @@ PASSWORD = b'CD31C5E9C8633B174A6E9C2A97D04FCD8EF73BB4' ​ https://help.aliyun.com/document_detail/40654.html?spm=a2c4g.11186623.2.21.7b967908BJu7SZ -![](media/21a2c497d167773be8850aa506d34eb9.png) +![](media/AliyunCloud_IoT_210324_008.png) ### 上报和下发数据 在上面创建的Topic名称如:test,只要以test/为开头的Topic都可以订阅发布。 -示例Topic如:test、test/123,test/123/ABC +示例Topic如:/broadcast/a1llZotKkCm/123 -![](media/cfd9d30539dcc7bec17d952c04e7d5b6.png) +![](media/AliyunCloud_IoT_210324_009.png) -![](media/7d97c96182cd7cba909f2f8110af2195.png) +![](media/AliyunCloud_IoT_210324_010.png) ## 软件设计 -在AliyunCloud平台取得UserName、Password、ClientID之后,即可在umqtt连接云平台,连接云平台的地址和端口固定不变,因此在程序中设定相应连接信息之后,就可以运行实验了。 +​ 在AliyunCloud平台取得ProductKey、DeviceName、DeviceSecret之后,即可使用aLiYun套件连接云平台,连接云平台的地址和端口固定不变,因此在程序中设定相应连接信息之后,就可以运行实验了。 示例代码: ```python -from umqtt import MQTTClient - -import modem - -CLIENT_ID = b'22222|securemode=3,signmethod=hmacsha1|' - -SERVER = b'a1llZotKkCm.iot-as-mqtt.cn-shanghai.aliyuncs.com' - -PORT = 1883 - -USER = b'22222&a1llZotKkCm' - -PASSWORD = b'CD31C5E9C8633B174A6E9C2A97D04FCD8EF73BB4' +import log +import utime +import checkNet +from aLiYun import aLiYun -IMEI = None # modem.getDevImei() +''' +下面两个全局变量是必须有的,用户可以根据自己的实际项目修改下面两个全局变量的值, +在执行用户代码前,会先打印这两个变量的值。 +''' +PROJECT_NAME = "QuecPython_AliYin_example" +PROJECT_VERSION = "1.0.0" +checknet = checkNet.CheckNetwork(PROJECT_NAME, PROJECT_VERSION) -SUB_TOPIC = '/broadcast/a1llZotKkCm/{}' -PUB_TOPIC = SUB_TOPIC +# 设置日志输出级别 +log.basicConfig(level=log.INFO) +aliYun_log = log.getLogger("ALiYun") -def GetDevImei(): +productKey = "a1llZotKkCm" # 产品标识(参照阿里云应用开发指导) +productSecret = None # 产品密钥(使用一机一密认证时此参数传入None,参照阿里云应用开发指导) +DeviceName = "11111" # 设备名称(参照阿里云应用开发指导) +# 设备密钥(使用一型一密认证此参数传入None,免预注册暂不支持,需先在云端创建设备,参照阿里云应用开发指导) +DeviceSecret = "03c5e91aea167edead7d381d4b41ed71" - global IMEI +state = 1 - 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) - - # 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__": - - main() + 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 ``` 接下来就可以下载验证了,python代码不需要编译,直接通过QPYcom工具把.py文件下载到模块中运行。 @@ -212,10 +177,10 @@ if __name__ == "__main__": 下载.py文件到模组运行: -![](media/40eb66200d1d4ad0090a1786f8d27579.png) +![](media/AliyunCloud_IoT_210324_011.png) 下载之后,手动让脚本运行起来。 -![](media/be1090df6a3161dd621b541463887a8f.png) +![](media/AliyunCloud_IoT_210324_012.png) ## 配套代码 diff --git a/docs/Advanced_development/zh/QuecPythonCloud/code/AliyunCloud_IoT.py b/docs/Advanced_development/zh/QuecPythonCloud/code/AliyunCloud_IoT.py index 75d23ea968072a5535843d7619e9ab94bf196b92..9f3908c7f61f49da9e276529c182df61beeeb287 100644 --- a/docs/Advanced_development/zh/QuecPythonCloud/code/AliyunCloud_IoT.py +++ b/docs/Advanced_development/zh/QuecPythonCloud/code/AliyunCloud_IoT.py @@ -1,75 +1,75 @@ -# 实验1: AliyunCloud 实验 -# API资料参考连接: https://python.quectel.com/wiki/api/#umqtt-mqtt +import log +import utime +import checkNet +from aLiYun import aLiYun -from umqtt import MQTTClient -import modem +''' +下面两个全局变量是必须有的,用户可以根据自己的实际项目修改下面两个全局变量的值, +在执行用户代码前,会先打印这两个变量的值。 +''' +PROJECT_NAME = "QuecPython_AliYin_example" +PROJECT_VERSION = "1.0.0" +checknet = checkNet.CheckNetwork(PROJECT_NAME, PROJECT_VERSION) -CLIENT_ID = b'22222|securemode=3,signmethod=hmacsha1|' -SERVER = b'a1llZotKkCm.iot-as-mqtt.cn-shanghai.aliyuncs.com' -PORT = 1883 -USER = b'22222&a1llZotKkCm' -PASSWORD = b'CD31C5E9C8633B174A6E9C2A97D04FCD8EF73BB4' -IMEI = None # modem.getDevImei() -SUB_TOPIC = '/broadcast/a1llZotKkCm/{}' -PUB_TOPIC = SUB_TOPIC +# 设置日志输出级别 +log.basicConfig(level=log.INFO) +aliYun_log = log.getLogger("ALiYun") +productKey = "a1llZotKkCm" # 产品标识(参照阿里云应用开发指导) +productSecret = None # 产品密钥(使用一机一密认证时此参数传入None,参照阿里云应用开发指导) +DeviceName = "11111" # 设备名称(参照阿里云应用开发指导) +# 设备密钥(使用一型一密认证此参数传入None,免预注册暂不支持,需先在云端创建设备,参照阿里云应用开发指导) +DeviceSecret = "03c5e91aea167edead7d381d4b41ed71" -def GetDevImei(): - global IMEI - IMEI = modem.getDevImei() - print('IMEI:{}'.format(IMEI)) +state = 1 - -state = 0 +# 回调函数 def sub_cb(topic, msg): global state - print( + aliYun_log.info( "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() + 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 # 订阅主题 - c.subscribe(SUB_TOPIC.format(IMEI)) + ali.subscribe(topic) # 发布消息 - c.publish(PUB_TOPIC.format(IMEI), b"test publish") + ali.publish(topic, "hello world") + # 运行 + ali.start() while True: - c.wait_msg() - if state == 1: + if state: + pass + else: + ali.disconnect() break - - # 关闭连接 - c.disconnect() - - -def main(): - GetDevImei() - MQTT_Init() - - -if __name__ == "__main__": - main() diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_001.png b/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_001.png new file mode 100644 index 0000000000000000000000000000000000000000..275a04a2c06c5f40ab346be17eb467533e84c76d Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_001.png differ diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_002.png b/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_002.png new file mode 100644 index 0000000000000000000000000000000000000000..1ea252d0fc741f5f827190e0e0226a12d560d355 Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_002.png differ diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_002A.png b/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_002A.png new file mode 100644 index 0000000000000000000000000000000000000000..c2b9341c1d88f306decb80b5f374390c9af14159 Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_002A.png differ diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_003.png b/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_003.png new file mode 100644 index 0000000000000000000000000000000000000000..9a3b3664300a19d9633f7f2799a62b4e1f113d24 Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_003.png differ diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_004.png b/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_004.png new file mode 100644 index 0000000000000000000000000000000000000000..f52880d0c6ac4f92c3fddf633cd0477a3f6a28da Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_004.png differ diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_005.png b/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_005.png new file mode 100644 index 0000000000000000000000000000000000000000..66d66e980f1a9744569da5ccc245c42fc69f34fe Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_005.png differ diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_006.png b/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_006.png new file mode 100644 index 0000000000000000000000000000000000000000..9f17684074e74a616ba212c1821c143139bc19f8 Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_006.png differ diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_007.png b/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_007.png new file mode 100644 index 0000000000000000000000000000000000000000..b67a870232d0783407f6484f0f89594f0f09b509 Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_007.png differ diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_008.png b/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_008.png new file mode 100644 index 0000000000000000000000000000000000000000..ab1c297875ac5aae8176694152c5f11d35002d1e Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_008.png differ diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_009.png b/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_009.png new file mode 100644 index 0000000000000000000000000000000000000000..9135c8e237116aa32bb1d8ce7efc5875ab4c026e Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_009.png differ diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_010.png b/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_010.png new file mode 100644 index 0000000000000000000000000000000000000000..fc098834adec4d916f668ae85c87db4075880e5b Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_010.png differ diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_011.png b/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_011.png new file mode 100644 index 0000000000000000000000000000000000000000..0f43d769e739ce8e4b432e625891f194ab5ac922 Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_011.png differ diff --git a/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_012.png b/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_012.png new file mode 100644 index 0000000000000000000000000000000000000000..7449980c169dafd0f3c24781d24842fc5da5434c Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonCloud/media/AliyunCloud_IoT_210324_012.png differ