1.前言
环境Linux centos7.9
一般搭建的服务器会自带python2.7版本,不建议使用,python3.6以下的版本使用的话报错修改的怀疑人生,亲身体验,建议安装python3.8版本及以上
2.centos环境安装python3.8
- 使用以下命令从国内源安装Python 3.8:
- 安装需要的软件包:
sudo yum install gcc openssl-devel bzip2-devel libffi-devel zlib-devel wget
- 从国内源安装python3.8:
wget https://npm.taobao.org/mirrors/python/3.8.0/Python-3.8.0.tgz
- 解压安装包
tar xzf Python-3.8.0.tgz
- 进入解压后的目录
cd Python-3.8.0
- 配置编译选项
./configure --enable-optimizations
- 编译安装
sudo make altinstall
- 验证python3.8是否成功安装
python3.8 --version
如果输出Python 3.8的版本信息,则表示安装成功。
3.创建python脚本文件
网上应该可以找的到:初步运行应该有很多相关库没装,依次安装就行
import paho.mqtt.client as mqtt
import json
import mysql.connector
# MySQL数据库连接参数
mysql_config = {
'user': '',
'password': '',
'host': '',
'database': 'test'//test为你建的数据库名称
}
# 订阅的MQTT主题名称
MQTT_TOPIC = 'EC8'
# 连接MySQL数据库
mysql_conn = mysql.connector.connect(**mysql_config)
# MQTT消息处理函数
def on_message(client, userdata, msg):
payload = msg.payload.decode('utf-8')
data = json.loads(payload)
# 将消息数据写入MySQL数据库,这一段得根据你的客户端发布的数据内容来写,我的是json格式
cursor = mysql_conn.cursor()
insert_sql = "INSERT INTO `data` ('datetime',`tem`, `hum`, `pm1`, `pm2`, `pm10`, `co`) VALUES (NOW(), %s,%s, %s, %s, %s, %s)"
values = (data['params']['temperature']['value'], data['params']['humidity']['value'], data['params']['pm1']['value'], data['params']['pm2']['value'], data['params']['pm10']['value'], data['params']['co']['value'])
cursor.execute(insert_sql, values)
mysql_conn.commit()
cursor.close()
# 连接MQTT服务器并订阅主题
client = mqtt.Client()
client.on_message = on_message
client.connect("ip")
client.subscribe(MQTT_TOPIC)
# 启动MQTT消息循环
client.loop_forever()
脚本运行报错:
- SyntaxError: Non-ASCII character ‘\xe5’ in file mysql.py on line 5, but no encoding declared;
解决:这个错误是因为您的Python脚本包含了非ASCII字符,但是没有在脚本的开头声明字符编码方式。为了解决这个问题,您需要在脚本的开头添加一个特定的注释来声明脚本的字符编码方式。例如,如果您的脚本使用的是UTF-8编码,您可以在脚本的开头添加以下注释:# -*- coding: utf-8 -*-
- ImportError: No module named paho.mqtt.client
解决:这个错误是因为您的Python环境中缺少了paho-mqtt库。paho-mqtt是一个Python实现的MQTT客户端库,它允许您创建MQTT客户端应用程序并与MQTT代理通信。
为了解决这个问题,您需要安装paho-mqtt库。您可以使用以下命令在命令行界面中安装它:
python3.8 pip install paho-mqtt
- ImportError: No module named connector
解决:这个错误是因为您的Python环境中缺少了MySQL的Python驱动程序。在Python中与MySQL数据库交互,需要使用一个Python驱动程序,MySQL官方提供了一个Python驱动程序称为MySQL Connector/Python,您需要安装这个驱动程序才能在Python中访问MySQL数据库。
python3.8 pip install mysql-connector-python
4.运行.py文件
- 在主控制命令下运行:
python3.8 mysensor.py //你的脚本文件名
- 后台运行,使用 nohup 命令,不用安装,自带
nohup python3.8 your_script.py > output.log 2>&1 &
这个命令将会在后台运行 your_script.py 脚本,并将输出写入 output.log 文件。2>&1 的作用是将错误输出重定向到标准输出,这样所有输出都会被写入到 output.log 文件中。在命令的结尾加上 & 符号可以让程序在后台运行。
在使用 nohup 命令时,如果命令执行成功,它会返回一个状态码 0。但是,如果命令执行失败,它会返回一个非 0 的状态码,表示命令执行出现了错误。
另外,状态码后面的数字 30769 表示命令在后台运行的进程 ID。你可以使用 ps 命令来查看进程 ID 所对应的进程,例如:
ps -p 30769
- 如果你想要停止使用 nohup 命令在后台运行的进程,你可以使用 kill 命令。kill 命令可以发送信号给指定的进程,以控制进程的行为。一般情况下,使用 kill 命令发送的信号是 TERM(终止)信号,它会请求进程正常退出。
你需要先查找到要停止的进程的进程 ID,然后使用 kill 命令向该进程发送 TERM 信号。
查找进程id:
ps aux | grep your_script_name.py
返回:user 12345 0.0 0.1 12345 6789 pts/0 S 08:00 0:00 python your_script_name.py
user: 进程的所有者。
12345: 进程的PID。
0.0: 进程使用的CPU百分比。
0.1: 进程使用的内存百分比。
12345: 进程使用的虚拟内存大小(单位为KB)。
6789: 进程使用的实际内存大小(单位为KB)。
pts/0: 进程运行时使用的终端。
S: 进程状态,S表示睡眠状态。
08:00: 进程启动的时间戳。
0:00: 进程已经使用的CPU时间。
python your_script_name.py: 进程的命令行。
例如,假设要停止进程 ID 为 30769 的进程,你可以使用以下命令:
kill 30769
5.运行节点端,运行脚本文件,远程连接数据库查看数据
- 远程登录数据库,查看数据:接收数据成功