树莓派使用Socket发送数据至PC并存入数据库


一、简介

  因为项目需要将传感器监测到的数据通过树莓派传递给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 %d\n" % 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语句改为如下即可:(同时注意占位符和双引号)
在这里插入图片描述

  • 13
    点赞
  • 135
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 20
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TomLazy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值