引言:
文档主要介绍如何使用“企业物联网平台”,企业物联网平台提供全托管的实例服务,无需自建物联网的基础设施即可便捷地接入和管理设备,具有低成本、高可靠、高性能、易运维的优势。下面主要从MQTT连接方式讲解,通过阅读本文,您将了解到QuecPython连接“企业物联网平台”的过程操作和平台与模组的实验操作。
硬件准备
本实验硬件需求:一块QuecPython开发板即可。
云端设置
阿里云首页:阿里云-计算,为了无法计算的价值
读者自行注册账号,开通《物联网平台》实例,实例分公共实例和企业版实例,主要区别如下:
公共实例:公共实例一般供测试环境使用,部署于阿里云经典网络;不支持固定接入IP。
企业版实例:部署于阿里云VPC网络的物联网平台,独享每个实例资源;支持固定接入IP。
更详细的可以到阿里云帮助文档查阅。
下面给大家展示下从注册账号到设备连接阿里云的图文解说:
进入阿里云首页,注册账号:一般填入邮箱、密码、手机号。
注册完成后,进入到“物联网平台”
创建实例
使用限制
地域 | 实例类型 | 限制 |
华东2(上海)、日本(东京)、新加坡、美国(弗吉尼亚)、德国(法兰克福)、美国(硅谷) | 企业版实例 | 查看实例的可用资源:由已购买的同时在线设备数规格决定。 |
旧版公共实例 | 10,000,000 | |
华东2(上海) | 新版公共实例 | 500 |
华北2(北京)、华南1(深圳) | 企业版实例 | 查看实例的可用资源:由购买的同时在线设备数规格决定。 |
本文的介绍使用的是公共示例
这里的地域选择要特别注意,连接阿里云时会使用到。
SERVER:${YourProductKey}.iot-as-mqtt.${YourRegionId}.aliyuncs.com
其中:${YourProductKey}:请替换为设备所属产品的的ProductKey,可从物联网平台控制台设备详情页获取。
${YourRegionId}:在创建实例时选择的地区,替换为您的 Region ID。
在QuecPython套件API中,底层已经自动适配SERVER的连接地址了。
创建产品
添加设备
获取三元组
点进“设备”可以获取DeviceName,用于三元组登录平台。
点进“产品”可以获取ProductKey、ProductSecret,用于三元组登录平台。
三元组ProductKey、ProductSecret、DeviceName用于下个步骤生成连接密码
代码编写
在QuecPython开发之前确保开发板已经烧录Python固件。此部分有疑问的看官请自行到官网了解。
QuecPython官网-文档中心:https://python.quectel.com/doc
API 参考手册:https://python.quectel.com/doc/API_reference/zh/index.html
aLiYun套件介绍
实现接入可以使用QuecPython提供的API:
初始化阿里 IoT平台
aliyun = aLiYun(productKey, productSecret, DeviceName, DeviceSecret, MqttServer)
配置阿里 IoT 平台物联网套件的产品信息和设备信息
参数描述:
- productKey - 产品标识,字符串类型
- ProductSecret - 产品密钥,字符串类型,一机一密认证方案时,此参数传入None,同时云平台要开启动态注册开关。
一型一密认证方案时,此参数传入真实的产品密钥 - devicename - 设备名称 ,字符串类型
- DeviceSecret - 可选参数,默认为None,设备密钥(一型一密认证方案时此参数传入None),字符串类型
- MqttServer - 可选参数,需要连接的服务器名称,默认为"{productKey}.iot-as-mqtt.cn-shanghai.aliyuncs.com",字符串类型
返回值描述:
返回aLiYun连接对象。
# 创建aliyun连接对象
self.ali = aLiYun(
self.productKey,
self.productSecret,
self.DeviceName,
self.DeviceSecret)
# 设置mqtt连接属性
clientID = b'clientID' # 自定义字符(不超过64)
ret = self.ali.setMqtt(
clientID,
clean_session=False,
keepAlive=60,
reconn=True) # False True
# 设置回调函数
self.ali.setCallback(self.sub_cb)
修改官方demo
把上面获取到的三元组信息填入代码中相对应的变量,即完成。
self.productKey = "a1llZotKkCm"
self.productSecret = 'mj7qKfEn73y07gyK'
self.DeviceSecret = None
self.DeviceName = "Chic_001"
至此,代码完成,完整代码如下:
import utime
import checkNet
from aLiYun import aLiYun
import _thread
class aliyun_Class(object):
def __init__(self):
self.productKey = "a1llZotKkCm" # 产品标识(参照阿里云应用开发指导)
# 产品密钥(使用一机一密认证时此参数传入None,参照阿里云应用开发指导)
self.productSecret = 'mj7qKfEn73y07gyK'
self.DeviceSecret = None
self.DeviceName = "Chic_001" # 设备名称(参照阿里云应用开发指导)
# self.subscribe_topic1 = "/" + self.productKey + "/" + self.DeviceName + "/user/123"
# self.subscribe_topic2 = "/" + self.productKey + "/" + self.DeviceName + "/user/qq"
# self.publish_topic1 = "/" + self.productKey + "/" + self.DeviceName + "/user/qq"
self.subscribe_topic1 = "/broadcast" + "/" + self.productKey + "/" + "123"
self.subscribe_topic2 = "/broadcast" + "/" + self.productKey + "/" + "123"
self.publish_topic1 = "/broadcast" + "/" + self.productKey + "/" + "123"
# 创建aliyun连接对象
self.ali = aLiYun(
self.productKey,
self.productSecret,
self.DeviceName,
self.DeviceSecret)
# 设置mqtt连接属性
clientID = b'clientID' # 自定义字符(不超过64)
ret = self.ali.setMqtt(
clientID,
clean_session=False,
keepAlive=60,
reconn=True) # False True
# 设置回调函数
self.ali.setCallback(self.sub_cb)
def sub_cb(self, topic, msg): # 回调函数
print(
"Subscribe Recv: Topic={},Msg={}".format(
topic.decode(),
msg.decode()))
def ali_start(self):
# 运行
self.ali.start()
print('Runing')
# aLiYun.disconnect()
def ali_subscribe_topic(self):
# 订阅主题
self.ali.subscribe(self.subscribe_topic1, qos=0)
self.ali.subscribe(self.subscribe_topic2, qos=0)
def ali_publish_topic(self):
while True:
ret = self.ali.getAliyunSta()
print(ret)
if ret == 0:
try:
self.ali.publish(self.publish_topic1, "hello world", qos=0)
except BaseException:
print('!!!!!!!!!!发送失败')
utime.sleep_ms(500)
if __name__ == '__main__':
# _thread.stack_size(8 * 1024)
aliyunClass = aliyun_Class()
aliyunClass.ali_subscribe_topic()
aliyunClass.ali_start()
_thread.start_new_thread(aliyunClass.ali_publish_topic, ())
下载验证
本实验的只有一个代码文件《Aliyun_file_class.py》,把脚本下载到模组中,运行起来,可以看到模组连上阿里云后,会不停进行自收发广播。
至此模组上云功能便已实现完成。
总结:
本次实验还是很简单的一个演示,只填写了三元组,利用QuecPython提供的aliyun套件接入平台,并没有过多的逻辑控制,相信大家上手后很容易能写出自己想要实现的逻辑功能。
附言:
后期小Q也会陆续分享其他QuecPython学习心得,欢迎各位看官沟通交流。