我是靠谱客的博主 淡淡芹菜,最近开发中收集的这篇文章主要介绍树莓派使用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并存入数据库一、简介二、硬件准备三、软件准备四、问题总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部