4G MQTT采集RS485协议传感器到数据库

这篇具有很好参考价值的文章主要介绍了4G MQTT采集RS485协议传感器到数据库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

image.png

1、Modbus slave设置从机Modbus TCP参数

设置Modbus TCP协议和地址

模拟软件设置的是 当前电脑的,所以后面 配置Modbus TCP的从机时,就要填当前电脑的ip地址,不要写 bl系列设备的ip地址
image.png

设置数据参数

设备地址:22
功能码:04
数据类型:16
起始地址:0
数量:5个
image.png

2、设置BL102将Modbus slave从机数据点映射

设置WAN口为Modbus TCP Master模式

image.png

设置bl102设备和从机同个网段

image.png

添加从机

从机的ip地址,需要填写Modbus slave软件的所在电脑的ip地址,不要填了 bl网关的ip地址
image.png

添加数据点

image.png

设置MQTT broker(MQTT服务器)信息

image.png

查看设备上下行状态

查看下行连接设备和上行连接MQTT服务器状态
image.png

3、MQTT客户端设置订阅

客户端设置连接MQTT服务器参数

服务器ip、端口、ID、心跳等。
image.png

设置订阅BL102设备的主题

刚才设置BL102设备的发布主题是 test,那么订阅也是 test
image.png
image.png

查看已收到BL102设备的数据

image.png

4、Python采集并写入数据库

其他语言也有对应MQTT客户端库,根据对应语言查找即可,这里演示用python。文章来源地址https://www.toymoban.com/news/detail-433342.html

# python3.6
import json
import sqlite3

import random
from datetime import datetime

from paho.mqtt import client as mqtt_client


broker = '192.168.1.165'
#broker = 'broker-cn.emqx.io'
port = 1883
topic = "test"
# generate client ID with pub prefix randomly
client_id = f'python-mqtt-{random.randint(0, 100)}'


def connect_mqtt() -> mqtt_client:
    def on_connect(client, userdata, flags, rc):
        if rc == 0:
            print("Connected to MQTT Broker!")
        else:
            print("Failed to connect, return code %d\n", rc)

    client = mqtt_client.Client(client_id)
    client.on_connect = on_connect
    client.connect(broker, port)
    return client


#将数据出入数据库
def create_table():
    #连接数据库,没有则创建
    conn = sqlite3.connect('plcdata') 
    print('连接数据库成功')
    
    #判断iot表是否存在,不存在则新建。 CREATE TABLE IF NOT EXISTS iot
    try:
        create_tb_cmd='''
        CREATE TABLE IF NOT EXISTS iot
        (lat TEXT,
        lng TEXT,
        signal_strength  INT,
        REG001 INT,
        REG002 INT,
        REG003 INT,
        REG004 INT,
        REG005 INT);
        '''
        #执行创建数据表语句
        conn.execute(create_tb_cmd)
    except:
        print("Create table failed")
        return False
    
    insert_dt_cmd='INSERT INTO iot (lat,lng,signal_strength,REG001,REG002,REG003,REG004,REG005) VALUES '+ strlist + ';'
    print(insert_dt_cmd)
#     insert_dt_cmd='''
#     INSERT INTO iot (lat,lng,signal_strength,REG001,REG002,REG003,REG004,REG005) VALUES (0.000000,0.000000,0,33,8538,234,22,9046);
#     '''
    
    conn.execute(insert_dt_cmd)
    print('写入数据库成功')
    conn.commit()
    conn.close()

strlist = ''
def subscribe(client: mqtt_client):
    def on_message(client, userdata, msg):
        t = datetime.now()
        print('当前时间:',t)
        #print(f"Received `{msg.payload.decode()}` from `{msg.topic}` topic")
        json_data = msg.payload.decode() #解析订阅主题信息,
#         print(type(json_data)) #判断data类型,是json字符串
        dict_json = json.loads(json_data)
        #print(type(dict_json))
        #print(dict_json)
        
        sensordatas = dict_json['sensorDatas']
        list_data =[]
        for i in sensordatas:
            #print(type(i),i)
            #print(i['flag'],type(i['flag']))


            if i['flag'] == 'GPS':
                list_data.append(i['lat'])
                list_data.append(i['lng'])
                #print(list_data)

            else:
                #print(i['flag'],i['value']) 
                list_data.append(i['value'])
                #print(list_data)
        global strlist
        strlist = str(tuple(list_data))
        print(strlist)
        create_table()
        
        
    client.subscribe(topic)
    client.on_message = on_message


def run():
    client = connect_mqtt()
    subscribe(client)
    client.loop_forever()


if __name__ == '__main__':
    run()

其他:python发布和订阅

发布
# python 3.6

import random
import time

from paho.mqtt import client as mqtt_client


#broker = '192.168.1.165'
broker = 'broker-cn.emqx.io'
port = 1883
topic = "test"
# generate client ID with pub prefix randomly
client_id = f'python-mqtt-{random.randint(0, 1000)}'


def connect_mqtt():
    def on_connect(client, userdata, flags, rc):
        if rc == 0:
            print("Connected to MQTT Broker!")
        else:
            print("Failed to connect, return code %d\n", rc)

    client = mqtt_client.Client(client_id)
    client.on_connect = on_connect
    client.connect(broker, port)
    return client


def publish(client):
    msg_count = 0
    while True:
        time.sleep(1)
        msg = f"messages: {msg_count}"
        result = client.publish(topic, msg)
        # result: [0, 1]
        status = result[0]
        if status == 0:
            print(f"Send `{msg}` to topic `{topic}`")
        else:
            print(f"Failed to send message to topic {topic}")
        msg_count += 1


def run():
    client = connect_mqtt()
    client.loop_start()
    publish(client)


if __name__ == '__main__':
    run()

订阅
# python3.6

import random
from datetime import datetime

from paho.mqtt import client as mqtt_client


#broker = '192.168.1.165'
broker = 'broker-cn.emqx.io'
port = 1883
topic = "test"
# generate client ID with pub prefix randomly
client_id = f'python-mqtt-{random.randint(0, 100)}'


def connect_mqtt() -> mqtt_client:
    def on_connect(client, userdata, flags, rc):
        if rc == 0:
            print("Connected to MQTT Broker!")
        else:
            print("Failed to connect, return code %d\n", rc)

    client = mqtt_client.Client(client_id)
    client.on_connect = on_connect
    client.connect(broker, port)
    return client


def subscribe(client: mqtt_client):
    def on_message(client, userdata, msg):
        t = datetime.now()
        print('当前时间:',t)
        print(f"Received `{msg.payload.decode()}` from `{msg.topic}` topic")
        

    client.subscribe(topic)
    client.on_message = on_message


def run():
    client = connect_mqtt()
    subscribe(client)
    client.loop_forever()


if __name__ == '__main__':
    run()

到了这里,关于4G MQTT采集RS485协议传感器到数据库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • # 项目一:‍‍‍STM32+串口DMA+RS485+MODBUS+传感器实现SO2的测试

    通过STM32控制传感器实现气体浓度的测量:RS485+MODBUS+串口DMA+定时器。 其中,USART2负责控制数据的发送和接受,USART3负责将询问帧、应答帧以及处理后数据打印出来,TIM1负责每隔1秒发送一次询问帧。 持续更新手中的项目(导师给的活)经验。。。 打工人加油🐱‍🚀🐱‍🚀

    2024年02月11日
    浏览(36)
  • MFC+Modbus-Tcp协议实现温湿度传感器采集 二、libmodbus驱动库

    本文简单介绍 MFC 使用 Modbus -Tcp通信实现 RS-WS-ETH-6 系列 MODBUSTCP 型温湿度传感器采集数据。  一文看懂Modbus协议:一文看懂Modbus协议  libmodbus驱动库的使用:Modbus驱动库—libmodbus驱动库的使用_whik1194的博客-CSDN博客_libmodbus  modbus 中文手册: libmodbus官方手册中文翻译_跃动的风

    2024年02月02日
    浏览(48)
  • STM32教学——JQ8900语音模块+光照传感器+4G模块数据上传阿里云物联网

    原理图 PCB 实物图 选用EC200U模块,集成4g和GPS以及蓝牙功能 通过串口2与4G模块串口连接,串口传输数据指令。 这个时候4g模块已经成功启动,下一步注册进阿里云物联网平台 然后就是上发数据给阿里云平台 上发了之后阿里云就可以收到这些数据 根据厂家提供的手册资料,可

    2024年03月14日
    浏览(43)
  • Java采集传感器数据,亲测有效!

    先说背景 , 最近公司项目需要用到传感器,采集设备温湿度,倾斜角,电流…,公司采购采购了一个温湿度传感器给我们开发测试使用,如下图: 看着还挺精致有没有。 有了这个温湿度传感器,我们如何读取其采集到的数据呢。需要一个 RS485转串口工具 ,下面这个蓝色的

    2024年01月15日
    浏览(49)
  • LabVIEW-模拟传感器采集数据并预测数据

    已知某传感器过去的一段时间内采集的数据为d1,d2,d3,......,dn,现欲以m点的数据宽度,预测 tao 步后的数据值,即将一维的时间序列数据重构为如下m+1列的形式: d(1)    d(2 )   .......    d(m),        d(m+tao) d(2)    d(3 )   .......    d(m+1),    d(m+tao+1) ......................

    2024年02月16日
    浏览(45)
  • 柔性阵列压阻式传感器采集电路

    以4*4阵列式传感器为例,等效电路如下图: 其中第一行传感器的行线是共享的,然后每个传感器又单独接列线。 Tekscan推荐电路如下: Multisim仿真电路如下: 传感器需要单片机控制逐列扫描,例如,看上图扫描第2列时,需要控制其他3列的电源开关断开,只保证第二列传感器

    2024年02月05日
    浏览(39)
  • homeassistant配置MQTT集成以及传感器实体(STM32连接进入homeassistant)

    大家可以看作者的小破站教学视频(如果喜欢的话可以点个关注,给个三联!啊哈哈哈哈哈哈): 【homeassistant配置MQTT集成以及传感器实体(STM32连接进入homeassistant)】 最近homeassistan更新之后,传统的MQTT服务器配置是完全不适用的 目前(2023.4.16)的教程都没有找到特别适用

    2024年02月10日
    浏览(40)
  • 车载测试:详解ADAS传感器(相机)标定数据采集方法

    1.基本原理 相机外参标定,通过拍摄多角度棋盘格标定相机外参。 2.外参标定板设计 标定板分为垂直标定板和水平标定板,由于地面的水平标定板不容易被检测到,本文采用垂直标定板进行相机标定。 在标定过程中标定板需要和车身坐标成正交状态,也就是标定板垂直边需

    2024年02月13日
    浏览(74)
  • 单片机采集传感器数据(整形,浮点型)modbus上传

    浮点型数据 占两个寄存器(四个字节) short 整形 占一个寄存器 (两个字节) 注意!!!! stm32 是小端模式,而modbus解析数据是大端模式 所以先发送高字节 如int a=16777220,化为十六进制是0x01 00 00 04, 则04属于低字节,01属于高字节 例如float a=125.6     十六进制0x42 fb 33 3

    2024年02月09日
    浏览(44)
  • STM32+DHT11采集温湿度传感器数据

            DHT11 是一款湿温度一体化的数字传感器。该传感器包括一个电阻式测湿元件和一个 NTC 测温元件,并与一个高性能 8 位单片机相连接。通过单片机等微处理器简单的电路连接就能够 实时的采集本地湿度和温度。 DHT11 与单片机之间能采用简单的单总线进行通信,仅

    2024年02月07日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包