python 串口接收数据 发送至MQTT服务器

项目背景:

购买了一个雷达,检测室内人员,需要将雷达数据上传至云服务器保存、展示和分析。
由于雷达是购买的,只留下了usb口通讯,因此只能接在电脑上

设计方案:

使用python,接收来自串口的消息,并将雷达数据上传到云服务器,
主要使用到了pyserial和paho-mqtt这两个py的第三方库。

代码:

import serial
from time import sleep

import json
import sys
import os
import paho.mqtt.client as mqtt
import time

sys.path.append(os.path.abspath(os.path.dirname(__file__) + '/' + '..'))
sys.path.append("..")

TASK_TOPIC = 'test'  # 客户端发布消息主题

client_id = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))

client = mqtt.Client(client_id, transport='tcp')

client.connect("xxx.xxx.xxx.xxx", 1883, 60)  # 第一个参数填入mqtt服务器ip,mqtt端口默认为1883,通信端口期keepalive默认60
client.loop_start()



if __name__ == '__main__':
    #需要修改此处的串口和波特率
    serial = serial.Serial('COM9', 115200)
    if serial.isOpen() :
        print("open success")
    else :
        print("open failed")

    while True:
        #根据实际接收长度修改参数
        data =serial.read(5)
        if data != '' :
            time_now = time.strftime('%Y-%m-%d %H-%M-%S', time.localtime(time.time()))
            #上传的数据包括串口接收数据和接收时间
            payload = {"msg": "%s" % data, "data": "%s" % time_now}
            client.publish(TASK_TOPIC, json.dumps(payload, ensure_ascii=False))
            print("Successful send message!")
            print("receive : ",data)
            print(type(data))

Python中实现与Modbus协议的连接以及数据交互通常涉及使用特定的库,如`pymodbus`或`modbus-tcp`。以下是一个概述: 1. **安装所需库**[^2] ```shell pip install pymodbus modbus-rtu ``` 2. **建立Modbus连接** ```python from pymodbus.client.sync import ModbusSerialClient # 创建一个串口连接(假设是RS-485) client = ModbusSerialClient(method='rtu', port='/dev/ttyUSB0') client.connect() # 发送请求(这里以读取寄存器为例) registers = client.read_holding_registers(0x0000, 10) ``` 3. **显示实时数据和用户输入** - 实时数据显示 ```python print(f"Received data: {registers.registers}") ``` - 接收用户输入 ```python new_data = input("Enter new data: ") ``` 4. **存储用户输入数据** ```python with open('data.txt', 'a') as f: f.write(f"{new_data}\n") ``` 5. **使用MQTT发送数据** 首先,安装`paho-mqtt`库: ```shell pip install paho-mqtt ``` 然后,设置MQTT连接并发布数据: ```python import paho.mqtt.client as mqtt def on_connect(client, userdata, flags, rc): client.subscribe("modbus/data") def publish_mqtt(new_data): client = mqtt.Client() client.on_connect = on_connect client.connect("your_mqtt_broker", 1883, 60) topic = "modbus/data" client.publish(topic, new_data) publish_mqtt(new_data) ``` 请注意,这只是一个基础示例,实际应用可能需要处理异常、配置文件读取等细节。上述代码需替换为实际的硬件连接信息和相应的Modbus地址。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值