基于python的4G DTU设备温度数据的仿真并传输

本文档详细介绍了如何使用Converter类进行JSON数据编码,以适应塔石4GDTU设备特定的编码格式,并通过mSerial类与OneNet平台进行串口通信。通过实例展示了如何将温度数据转化为编码并发送至设备,以及串口操作的控制流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据编码模块

OneNet平台设备开发文档

中移平台开发文档
开发文档链接:ONeNet设备开发文档

数据编码代码如下:

class Converter(object):
    def to_hex(data):
        # onenet平台 .Json数据类型
        byte_list = '\x03'
        # 获取ANSI编码及长度
        list = data.encode('mbcs')
        len_list = len([format(i, 'X') for i in list])
        #塔石4G DTU编码格式
        byte_list += chr(0) + chr(len_list)
        for i in list:
            byte_list += chr(i)
        byte_list += '\r\n'
        # 串口使用比特流传输
        s_byte_list = bytes(byte_list, encoding='UTF-8')
        return s_byte_list

串口模块

class mSerial:
    def __init__(self, com, bps, timeout):
        self.port = com
        self.bps = bps
        self.timeout = timeout
        global Ret
        try:
            # 打开串口,得到串口对象
            self.main_serial = serial.Serial(self.port, self.bps, timeout=self.timeout)
            # 判断是否打开成功
            if (self.main_serial.is_open):
                Ret = True
        except Exception as error:
            print("---Error---:", error)
    # 打开串口
    def Open_serial(self):
        self.main_serial.open()
    # 发送数据
    def Send_data(self, data):
        self.main_serial.write(data)
    # 关闭串口
    def Close_serial(self):
        self.main_serial.close()
        print(self.main_serial.is_open)  # 检验串口是否打开

源代码

# -*- coding: utf-8 -*-
"""
@author: 浅笑醉红楼.(3303295829@qq.com)
"""
import serial
import serial.tools.list_ports
import time
import random

class Converter(object):
    def to_hex(data):
        # 数据类型
        byte_list = '\x03'
        # 获取ANSI编码及长度
        list = data.encode('mbcs')
        len_list = len([format(i, 'X') for i in list])
        #塔石4G DTU编码格式
        byte_list += chr(0) + chr(len_list)
        for i in list:
            byte_list += chr(i)
        byte_list += '\r\n'
        # 串口使用比特流传输
        s_byte_list = bytes(byte_list, encoding='UTF-8')
        return s_byte_list

class mSerial:
    def __init__(self, com, bps, timeout):
        self.port = com
        self.bps = bps
        self.timeout = timeout
        global Ret
        try:
            # 打开串口,得到串口对象
            self.main_serial = serial.Serial(self.port, self.bps, timeout=self.timeout)
            # 判断是否打开成功
            if (self.main_serial.is_open):
                Ret = True
        except Exception as error:
            print("---Error---:", error)
    # 打开串口
    def Open_serial(self):
        self.main_serial.open()
    # 发送数据
    def Send_data(self, data):
        self.main_serial.write(data)
    # 关闭串口
    def Close_serial(self):
        self.main_serial.close()
        print(self.main_serial.is_open)  # 检验串口是否打开

if __name__ == '__main__':
    count=1
    myserial=mSerial('COM5',9600,0.5)
    if (Ret):
        while (1):
            Chang = random.uniform(-5, 15)
            temperature = 20 + Chang
            temperature = round(temperature, 2)
            data = {"Temperature": temperature}
            a = Converter.to_hex(str(data))
            myserial.Send_data(a)
            time.sleep(3)
            print('数据序号:',count)
            print('温度值:',temperature)
            count+=1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

✎浅笑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值