我是靠谱客的博主 大意长颈鹿,最近开发中收集的这篇文章主要介绍实现单片机通过传感器获取信息,并且将信息通过wifi模块发送信息给PC端,并在pyqt5界面上显示(PC端部分),觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
Q1:PC如何接收到wifi模块发送过来的信息?
A1:可以通过python的socket模块,在某个端口建立服务器监听信息,当然发送和监听的端口号要一致。
Q2:如何将数据在界面上显示?
A2:pyqt5模块可以很好上手开发一些简单的小应用,可以将数据在上面显示,自学一天就好了。
Q3:为什么单片机发送过来的数据跟我想要的不一致?
A3:单片机发送的是字节流,想要显示还要转码decode(‘utf-8’)
Q4:如何实现服务端一边监听和pyqt5界面一直刷新显示?
A4:可以用Qthread类开启子线程,在子线程中执行服务端监听,至于刷新显示可以有两种方法,一种是使用定时器中断,另一种是由子线程直接emit()发送信号。
定义子线程监听
class WorkThread(QThread):
def __init__(self):
super(WorkThread,self).__init__()
def run(self):
ip = '192.168.2.100'
port = 9999
global data_list
#创建服务端
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定ip端口号
serversocket.bind((ip, port)) # ip也可以用Host代替
# 最大连接数
serversocket.listen(1)
BUFSIZ = 1024 #最大读取字节数
print("正在监听%s:%d" % (ip,port))
while True:
# 建立客户端连接,被动接受TCP客户端连接,(阻塞式)等待连接的到来
clientsocket, addr = serversocket.accept()
print("链接的客户端:%s" % str(addr))
while True:
try:
data = clientsocket.recv(BUFSIZ) # 读取已链接客户的发送的消息,bufsiz是字节数
except Exception:
print("断开的客户端", addr)
break
print(type(data))
print("客户端发送的内容:", data.decode('utf-8'))
if not data:
break
data_list = str(data.decode('utf-8')).split("=")
msg = time.strftime("%Y-%m-%d %X") # 获取结构化事件戳
msg1 = '[%s]:温度 = %s°C 湿度 = %s%% 光照强度 = %sLX ' % (msg, data_list[0], data_list[1],data_list[2])
print(msg1)
time.sleep(1)
clientsocket.close() # 关闭客户端链接
serversocket.close()
定义pyqt5界面
self.btnStart = QPushButton('开始监测')
self.btnEnd = QPushButton('暂停监测')
# 把控件放置在栅格布局中
grid = QGridLayout()
grid.setSpacing(10)
grid.addWidget(temp, 1, 0)
grid.addWidget(self.tempEdit, 1, 1)
grid.addWidget(humi, 2, 0)
grid.addWidget(self.humiEdit, 2, 1)
grid.addWidget(light, 3, 0)
grid.addWidget(self.lightEdit, 3, 1)
grid.addWidget(review, 4, 0)
grid.addWidget(self.reviewEdit, 4, 1,5,1)
grid.addWidget(self.btnStart,10,1)
grid.addWidget(self.btnEnd, 10, 2)
连接与槽函数:
# 信号与槽函数的连接
self.btnStart.clicked.connect(self.slotStart)
#self.btnEnd.clicked.connect(QCoreApplication.instance().quit) #这是直接退出
self.btnEnd.clicked.connect(self.slotPause)
self.show()
def Mytimer(self):
self.timer = QTimer(self)
# 信号与槽函数的连接
self.timer.timeout.connect(self.update) #过一段时间timeout触发,执行update。触发可以用这种定时器触发,也可以用emit发送
self.timer.start(1000) #启动或重新启动一个超时时间间隔为毫秒的定时器。控制窗口刷新延迟,有两种方案实现刷新数据,一种是这种定时器,另一种是由子线程直接emit()发送信号
def update(self):
try:
self.tempEdit.setText(data_list[0] + '°C') #py默认unicode编码,所以不用加u
self.humiEdit.setText(data_list[1] + "%")
self.lightEdit.setText(data_list[2] + "LX")
msg = time.strftime("%Y-%m-%d %X") # 获取结构化事件戳
self.reviewEdit.setText("今天又是充满希望的一天呢,加油! n n n %s" %(msg))
except:
pass
def slotStart(self):
self.btnStart.setEnabled(False) #点击开始后进入不可点击状态
self.Mytimer() #开启定时器开始更新数据
def slotPause(self):
self.timer.stop() #关闭定时器
self.btnStart.setEnabled(True) #打开按键使能
#清空信息
self.tempEdit.setText("")
self.humiEdit.setText("")
self.lightEdit.setText("")
self.reviewEdit.setText("")
实现效果
源码,之前没看到的消息,希望有用:https://pan.baidu.com/s/1DOKI72v7cRPjgGvM2RPWIw
提取码:c8t5
最后
以上就是大意长颈鹿为你收集整理的实现单片机通过传感器获取信息,并且将信息通过wifi模块发送信息给PC端,并在pyqt5界面上显示(PC端部分)的全部内容,希望文章能够帮你解决实现单片机通过传感器获取信息,并且将信息通过wifi模块发送信息给PC端,并在pyqt5界面上显示(PC端部分)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复