"); //-->
前言
在之前的教程中,学习过如何使用MQTT协议接入OneNET平台,同时获取该平台下发的命令实现远程控制的功能。若之前没有接触过MQTT协议和OneNET平台的朋友,建议先学习之前的教程,点击链接进入:<http://docs.tpyboard.com/zh/latest/tpyboard/tutorial/v202/V2024/>。
本次教程,将要学习如何在OneNET平台上新建数据流,同时使用MQTT协议中publish报文格式上传数据点。
准备工作
TPYBoard v202开发板(33元某宝可以买到)
USB数据线
电脑
NotePad ++ 软件(其他编辑工具也可以)
MicroPython File Uploader(MFU)软件
浏览器(谷歌浏览器为例)
OneNET平台新建数据流
OneNET平台官网地址:<https://open.iot.10086.cn/>。
若没有使用过的该平台的,可以参考上面前言中的教程,先进行产品和设备的添加。
在数据点上报之前,我们需要在OneNET云平台上添加一个数据流模板。步骤如下:
1、进入[开发者中心]的[设备管理]页面,在左侧菜单栏中选择[数据流模板],点击[添加数据流]。

2、会弹出一个添加数据流的对话框,必填项名称,其他可以选填,填完之后点击[添加]。

3、添加成功后,对话框会自动关闭。数据流展示列表会自动增加刚才新添加的数据流信息。

到此,数据流模块就建立完成了。
向OneNET平台上传数据点
接下来就要进行数据点的上传了。上传数据点时需要参考协议规则说明,大家可以去OnetNET平台文档中心上下载,OnetNET平台文档中心地址:https://open.iot.10086.cn/doc/art431.html#118。
找到[1.1 说明文档]找到关于MQTT项目中的设备终端接入协议-MQTT进行下载。

下载的是一个word文档,打开之后找到[5.2消息发布]-[5.2.1 数据点上报]。

数据类型采用JSON格式,主要看[数据类型1(type == 1)格式说明]。

了解完publish报文格式后,找到之前[接入OneNET平台]教程的程序,添加上上传数据点的功能即可。
程序下载地址:https://github.com/TPYBoard/developmentBoard/tree/master/TPYBoard-v20x-master/TPYBoard v202 典型实例/09.MQTT协议接入OneNET平台。
修改mqtt.py文件,如下:
from simple import MQTTClient
from machine import Pin
import machine
import micropython
import json
#选择G4引脚
g4 = Pin(4, Pin.OUT, value=0)
# MQTT服务器地址域名为:183.230.40.39,不变
SERVER = "183.230.40.39"
#设备ID
CLIENT_ID = "deviceID"
#随便起个名字
TOPIC = b"TurnipRobot"
#产品ID
username='productID'
#产品APIKey:
password='APIKey'
state = 0
#要上报的数据点
message = {'datastreams':[{
'id':'temperature',
'datapoints':[{'value':35}]}
]}
def pubdata(data):
j_d = json.dumps(data)
j_l = len(j_d)
arr = bytearray(j_l + 3)
arr[0] = 1 #publish数据类型为json
arr[1] = int(j_l / 256) # json数据长度 高位字节
arr[2] = j_l % 256 # json数据长度 低位字节
arr[3:] = j_d.encode('ascii') # json数据
return arr
def sub_cb(topic, msg):
global state
print((topic, msg))
if msg == b"on":
g4.value(1)
state = 1
print("1")
elif msg == b"off":
g4.value(0)
state = 0
print("0")
elif msg == b"toggle":
state = 1 - state
g4.value(state)
def main(server=SERVER):
#端口号为:6002
c = MQTTClient(CLIENT_ID, server,6002,username,password)
c.set_callback(sub_cb)
c.connect()
c.subscribe(TOPIC)
print("Connected to %s, subscribed to %s topic" % (server, TOPIC))
#publish报文上传数据点
c.publish('$dp',pubdata(message))
print('publish message:',message)
try:
while 1:
c.wait_msg()
finally:
c.disconnect()
程序解析:
def pubdata(data):
j_d = json.dumps(data)
j_l = len(j_d)
arr = bytearray(j_l + 3)
arr[0] = 1 #publish数据类型为json
arr[1] = int(j_l / 256) # json数据长度 高位字节
arr[2] = j_l % 256 # json数据长度 低位字节
arr[3:] = j_d.encode('ascii') # json数据
return arr
我们自定义一个pubdata方法,该方法的功能是组合成协议要求的报文格式。
c.publish('$dp',pubdata(message))
设备使用publish报文来上传数据点。$dp为系统上传数据点的指令(2个字节的字符串)。
运行结果:

找到设备管理页面,在tpyboardv202设备信息的操作列中,点击[查看详情]。

选择[数据展示],

选择数据流[temperature]信息行的最右侧展开小三角,查看详细数据点。


大家可根据上面学习到的内容进行扩展,比如接DHT11温湿度模块等各类传感器,上传温湿度、气压、光照等信息。
OneNET云平台除了支持MQTT协议外,还支持HTTP、TCP透传等多种协议,大家可以尝试添加其他协议的产品进行智能物联的开发。
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
以“Edge Computing & WISE-Edge in Action”战略驱动产业智能化变革
双稳态计数基极触发电路
双稳态触动开关电路
黑芝麻智能一芯多域零拷贝共享内存技术:破解车载大数据传输效能困局
罗姆为英伟达800V HVDC架构提供高性能电源解决方案
三菱FX系列PLC教程 30 —— FX系列的BIN码变换指令
P89LPC924 925 Flash单片机数据手册-03
三菱FX系列PLC教程 29 —— FX系列的步进指令应用
庆祝,庆祝!编译通过...
提问的智慧
P89LPC924 925 Flash单片机使用指南-02
全球电子协会(Global Electronics Association)正式亮相,新名称传承IPC 70年影响力,赋能全球6万亿美元电子产业发展
黄仁勋看到了什么? 砸192亿元投资盖茨的\"钠核电厂\"
VxWork中,每个模块占用内存的大小怎么计算?
射极耦合双稳态电路
P89LPC924 925 Flash单片机数据手册-03 (英)
三菱FX系列PLC教程 28 —— FX系列的BCD变换指令
京城聚首,共绘蓝图!IDC Directions引领AI重塑业务
嵌入开发网络资源
「汇率、关税、战争」乱成一锅粥 AI供应链仍独强
美恐对台积电等3家在大陆晶圆厂取消技术授权
三菱FX系列PLC教程 27 —— FX系列的编程软件的应用
P89LPC924 925 Flash单片机使用指南-02 (英)
P89LPC930 931 Flash单片机使用指南 (英)
DoS攻击造成CN域名解析失常 CNNIC紧急说明情况
高频无稳态电路
改善输出波形的无稳态电路
三菱FX系列PLC教程 26 —— FX系列的步进指令
全球电子协会组织概况
宁德时代领投!这家机器人公司融资超11亿,具身智能赛道沸腾