我是靠谱客的博主 淡淡芹菜,最近开发中收集的这篇文章主要介绍树莓派使用Socket发送数据至PC并存入数据库一、简介二、硬件准备三、软件准备四、问题总结,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
文章目录
- 一、简介
- 二、硬件准备
- 1、树莓派4B * 1
- 2、网线 * 1
- 三、软件准备
- 1、PC(服务端)
- 2、Raspberry Pi(客户端)
- 3、实验结果
- 四、问题总结
- 1、Python之Socket实现PC与树莓派互动通信
- 2、菜鸟教程给出的pymysql数据库连接connect问题
- 3、pymysql插入带参变量不显示问题
一、简介
因为项目需要将传感器监测到的数据通过树莓派传递给PC,所以对树莓派和PC之间的通信进行了一次模拟实验,该实验使用树莓派作为客户端,利用Socket
向作为服务器端的PC发送数据,并通过pymysql
将接收到的数据插入到本地数据库。
二、硬件准备
1、树莓派4B * 1
2、网线 * 1
因为是通过局域网通信,所以需要用网线连接PC或者路由器实现,如果想通过无线通信,可以搭建一个云服务器,通过调用云服务器来实现,此处不做过多介绍。
如果不知道怎么通过网线连接PC的同学可以参考 树莓派4B一根网线直连PC
三、软件准备
运行程序时,先运行PC,再运行树莓派。
1、PC(服务端)
import pymysql # 导入 pymysql
import socket
import time
print("服务端开启")
# 套接字接口
mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 设置IP和端口
host = '192.168.137.1'
port = 2222
# bind绑定该端口
mySocket.bind((host, port))
mySocket.listen(10)
# 打开数据库连接
db = pymysql.connect(
host='localhost',
port=3306,
user='root',
passwd='123456',
db='skdb',
charset='utf8'
)
print("数据库开启")
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
sqltime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
while True:
# 接收客户端连接
print("等待连接....")
client, address = mySocket.accept()
print("新连接")
print("IP is %s" % address[0])
print("port is %dn" % address[1])
while True:
# 读取消息
msg = client.recv(1024)
# 把接收到的数据进行解码
print(msg.decode("utf-8"))
print("读取完成")
# SQL 插入语句
# sql = "INSERT INTO MAGNETISM(MTIME , MFLAG) VALUES ('%s','%s')" % (sqltime, msg.decode("utf-8"))
sql = "INSERT INTO MAGNETISM(MFLAG) VALUES ('%s')" % (msg.decode("utf-8"))
try:
# 执行sql语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()
except:
# 如果发生错误则回滚
db.rollback()
time.sleep(10)
if msg == "over":
client.close()
mySocket.close()
# 关闭数据库连接
db.close()
print("程序结束n")
exit()
2、Raspberry Pi(客户端)
import socket
import time
print("客户端开启")
#套接字接口
mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#设置ip和端口
host = '192.168.137.1'
port = 2222
try:
mySocket.connect((host, port)) ##连接到服务器
print("连接到服务器")
except : ##连接不成功,运行最初的ip
print ('连接不成功')
while True:
#发送消息
msg = '9'
#编码发送
mySocket.send(msg.encode("utf-8"))
print("发送完成")
time.sleep(10)
if msg == "over":
mySocket.close()
print("程序结束n")
exit()
print("程序结束n")
3、实验结果
每隔10秒客户端向服务器端发送模拟数据9,服务器端接收到后,将其存入mysql数据库中。
数据库表:
四、问题总结
1、Python之Socket实现PC与树莓派互动通信
树莓派与PC的Socket通信部分参考了 Python之Socket实现PC与树莓派互动通信 此篇文章,它实现的是PC向树莓派发送数据,我将其反过来改成了树莓派向PC发送数据。
2、菜鸟教程给出的pymysql数据库连接connect问题
菜鸟教程给出的范例中的connect报错,可能是过时了还是怎么得,咱也不知道。
#!/usr/bin/python3
import pymysql
# 打开数据库连接
db = pymysql.connect("localhost","testuser","test123","TESTDB" )
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 使用 execute() 方法执行 SQL 查询
cursor.execute("SELECT VERSION()")
# 使用 fetchone() 方法获取单条数据.
data = cursor.fetchone()
print ("Database version : %s " % data)
# 关闭数据库连接
db.close()
将其修改为以下即可:
# 打开数据库连接
db = pymysql.connect(
host='localhost',
port=3306,
user='root',
passwd='123456',
db='skdb',
charset='utf8'
)
数据库、用户啥的都需要改成自己的。
3、pymysql插入带参变量不显示问题
只需要将普通的insert语句改为如下即可:(同时注意占位符和双引号)
最后
以上就是淡淡芹菜为你收集整理的树莓派使用Socket发送数据至PC并存入数据库一、简介二、硬件准备三、软件准备四、问题总结的全部内容,希望文章能够帮你解决树莓派使用Socket发送数据至PC并存入数据库一、简介二、硬件准备三、软件准备四、问题总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复