【MQTT接收数据写入数据库】

MQTT接收数据写入数据库

1.搭建MQTT服务器

参考上一篇文章

2.安装数据库mysql

sudo apt update
sudo apt install mysql-server

创建一个数据库和数据表存储mqtt消息

首先,登录到MySQL服务器:

mysql -u root -p

输入你的root用户密码。默认root

3.创建mqtt数据表

  1. 创建数据库:
CREATE DATABASE mqtt_data;
  1. 选择创建的数据库:
USE mqtt_data;
  1. 创建数据表:

这里我们假设你从MQTT接收到的数据是一个简单的字符串。我们将创建一个包含两个字段的表,一个字段是自增的ID,另一个字段用于存储字符串数据。

CREATE TABLE mqtt_messages (id INT AUTO_INCREMENT PRIMARY KEY,message_data VARCHAR(255) NOT NULL,received_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

完成以上步骤后,你现在有一个名为mqtt_data的数据库和一个名为mqtt_messages的数据表。

4.编写python脚本来从MQTT接收数据并保存到数据库

模板文件

import paho.mqtt.client as mqtt
import mysql.connector# MySQL数据库配置
db_config = {'host': 'localhost','user': 'root','password': 'your_root_password',  # 替换为你的root密码'database': 'mqtt_data'
}# 连接到数据库
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor()# MQTT配置
MQTT_BROKER = 'localhost'  # 或其他MQTT服务器地址
MQTT_PORT = 1883
MQTT_TOPIC = 'your_topic'  # 更改为你的MQTT主题# 当接收到MQTT消息时的回调函数
def on_message(client, userdata, message):data = message.payload.decode('utf-8')print("Received message:", data)# 插入数据到数据库try:cursor.execute("INSERT INTO mqtt_messages (message_data) VALUES (%s)", (data,))conn.commit()except Exception as e:print("Error saving data to database:", e)client = mqtt.Client()
client.connect(MQTT_BROKER, MQTT_PORT)
client.subscribe(MQTT_TOPIC)
client.on_message = on_message
client.loop_forever()

MQTT_BROKER = ‘localhost’ # 或其他MQTT服务器地址代表本地的服务器

运行上述Python脚本后,每当有新的消息发布到你所订阅的MQTT主题时,on_message回调函数就会被调用,消息数据会被保存到你在MySQL中创建的mqtt_messages表中。

注意:别忘了替换your_root_password为你MySQL的root用户的实际密码,以及更改your_topic为你希望从MQTT broker订阅的实际主题。

更改后我的文件如下

import paho.mqtt.client as mqtt
import mysql.connector# MySQL数据库配置
db_config = {'host': 'localhost','user': 'root','password': 'root',  # 替换为你的root密码'database': 'mqtt_data'
}# 连接到数据库
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor()# MQTT配置
MQTT_BROKER = 'localhost'  # 或其他MQTT服务器地址
MQTT_PORT = 1883
MQTT_TOPIC = 'hdjhdj/newbie'  # 更改为你的MQTT主题# 当接收到MQTT消息时的回调函数
def on_message(client, userdata, message):data = message.payload.decode('utf-8')print("Received message:", data)# 插入数据到数据库try:cursor.execute("INSERT INTO mqtt_messages (message_data) VALUES (%s)", (data,))conn.commit()except Exception as e:print("Error saving data to database:", e)client = mqtt.Client()
client.connect(MQTT_BROKER, MQTT_PORT)
client.subscribe(MQTT_TOPIC)
client.on_message = on_message
client.loop_forever()

image-20230906001420106

5.运行py脚本

出现如下错误

image-20230906001630585

解决办法如下

错误信息是:

mysql.connector.errors.ProgrammingError: 1698 (28000): Access denied for user 'root'@'localhost'

这意味着Python脚本在尝试连接到MySQL数据库时遇到了权限问题。具体来说,root用户在localhost上没有登录MySQL的权限。这可能是由于以下原因:

  1. 密码错误:确保db_config中的密码与你为MySQL root用户设置的密码匹配。
  2. 权限问题:在默认的MySQL安装中,root用户可能没有通过密码从本地登录的权限。这意味着,即使密码是正确的,你仍然可能会收到“Access denied”错误。

解决错误如下:

使用其他用户 :考虑创建一个新的MySQL用户,并给予其适当的权限,然后在Python脚本中使用这个用户进行连接。

例如,为了创建一个名为mqttuser,密码为mqttpassword的用户,并给予其对mqtt_data数据库的所有权限,你可以执行以下SQL命令:

CREATE USER 'mqttuser'@'localhost' IDENTIFIED BY 'mqttpassword';
GRANT ALL PRIVILEGES ON mqtt_data.* TO 'mqttuser'@'localhost';
FLUSH PRIVILEGES;

然后,在使用新的用户名和密码。

打开mysql执行以上命令

image-20230906002156217

更改py脚本中用户名和密码

import paho.mqtt.client as mqtt
import mysql.connector# MySQL数据库配置
db_config = {'host': 'localhost','user': 'mqttuser','password': 'mqttpassword',  # 替换为你的root密码'database': 'mqtt_data'
}# 连接到数据库
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor()# MQTT配置
MQTT_BROKER = 'localhost'  # 或其他MQTT服务器地址
MQTT_PORT = 1883
MQTT_TOPIC = 'hdjhdj/newbie'  # 更改为你的MQTT主题# 当接收到MQTT消息时的回调函数
def on_message(client, userdata, message):data = message.payload.decode('utf-8')print("Received message:", data)# 插入数据到数据库try:cursor.execute("INSERT INTO mqtt_messages (message_data) VALUES (%s)", (data,))conn.commit()except Exception as e:print("Error saving data to database:", e)client = mqtt.Client()
client.connect(MQTT_BROKER, MQTT_PORT)
client.subscribe(MQTT_TOPIC)
client.on_message = on_message
client.loop_forever()

再次执行该脚本

 python3 mqtt_to_db.py

image-20230906002429422

这里没有任何数据出现 则代表订阅主题成功,连接数据库成功

6.验证MQTT

这里我的主题是 hdjhdj/newbie

使用服务器对该主题发布消息验证是否成功,我们可以看到一个客户端已经连接

image-20230906002755250

发布消息

image-20230906003115040

image-20230906003250995

7.查询数据库存储消息

手动检查数据库内容:

登录到MySQL:

mysql -u mqttuser -p

输入你的密码,然后选择数据库并查看mqtt_messages表的内容:

USE mqtt_data;
SELECT * FROM mqtt_messages;

这将显示表中的所有行。应该能看到你通过MQTT发送的消息。

image-20230906003735225

至此完成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/100506.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络技术一:计算机网络概述

计算机网络概述 计算机网络定义 一组自治计算机互联的集合 计算机网络基本功能 资源共享 综合信息服务 分布式处理与负载均衡 计算机网络的类型 局域网 LAN:由用户自行建设,使用私有地址组建的内部网络 城域网 MAN:由运营商或大规模…

zabbix 自动发现

哈喽大家好,我是咸鱼 昨天老大让我初始化一批服务器,吭哧吭哧弄完之后需要把这批机器添加到 zabbix 上去 但是我发现一台一台添加效率好低,而且特别繁琐,当时我没有想出有什么好的方法,今天上网搜了一下相关资料之后…

Linux cat 的作用

Linux中的cat命令用于连接文件并打印到标准输出设备(通常是终端)。 它的主要作用有以下几点: 查看文件内容:cat命令可用于查看文本文件的内容,将文件的内容从第一行到最后一行打印到终端。 合并文件:cat命…

vue Router从入门到精通

文章目录 介绍使用多级路由实例 路由的query参数传递参数接收参数实例 命名路由作用使用 params参数声明接收params参数传参接收参数实例 props配置实例 router-link的replace属性编程式路由导航作用使用实例 缓存路由组件两个新的生命周期钩子实例 路由守卫作用分类全局守卫独…

【Cisco Packet Tracer】交换机划分Vlan实验

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

ORB-SLAM2算法15之回环检测线程Loop Closing

文章目录 0 引言1 概述2 回环主函数3 回环检测4 计算Sim3变换5 回环矫正 0 引言 ORB-SLAM2算法7详细了解了System主类和多线程、ORB-SLAM2学习笔记8详细了解了图像特征点提取和描述子的生成、ORB-SLAM2算法9详细了解了图像帧、ORB-SLAM2算法10详细了解了图像关键帧、ORB-SLAM2…

Python小知识 - Python爬虫进阶:如何克服反爬虫技术

Python爬虫进阶:如何克服反爬虫技术 爬虫是一种按照一定的规则,自动抓取网页信息的程序。爬虫也叫网页蜘蛛、蚂蚁、小水滴,是一种基于特定算法的自动化程序,能够按照一定的规则自动的抓取网页中的信息。爬虫程序的主要作用就是从一…

实时操作系统Freertos开坑学习笔记:(五):任务调度和时间片调度

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、任务调度1.开启任务调度器函数2.启动第一个任务 二、任务切换的原理三、时间片调度1.基本概念2.看一个实际例程①我们设置滴答定时器中断时间为50ms&#x…

基于JavaScript粒子流动效果

这是一个HTML文件,主要包含了一些CSS样式和JavaScript代码,用于创建一个动画效果。 在CSS部分,定义了一些基本的样式,包括页面的背景颜色、位置、大小等。特别的,定义了两种球形元素(.ball_A 和 .ball_B&am…

51单片机串口通信

文章目录 一、硬件结构1.1 串口硬件结构1.2 串口控制寄存器1.2.1 SCON寄存器1.2.2 PCON寄存器 二、波特率计算三、程序编写3.1 步骤3.2 示例程序 一、硬件结构 1.1 串口硬件结构 有两个物理上独立的接受、发送缓冲器SBUF,占用了同一个地址99H。 在软件编写时&#…

ELK集群搭建流程(实践可用)

一、概述 ELK 是一个由三个开源软件工具组成的数据处理和可视化平台,包括 Elasticsearch、Logstash 和 Kibana。这些工具都是由 Elastic 公司创建和维护的。 Elasticsearch 是一个分布式的搜索和分析引擎,可以将大量数据存储在一个或多个节点上&#xf…

Xilinx FPGA 超温关机保护

在UG480文档,有关于FPGA芯片热管理的介绍。 首先需要理解XADC中的 Over Temperature(OT)和User Temperature的关系。片上温度测量用于关键温度警告,也支持自动关机,以防止设备被永久损坏。片上温度测量在预配置和自动关…