简单记录温湿度采集485转TCP/IP

安装pip

python -m pip install pip--upgrade pip
pip install --user PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install --user pyqtgraph -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install --user pymysql -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install --user matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install --user opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install --user playsound -i https://pypi.tuna.tsinghua.edu.cn/simple

在这里插入图片描述

import configparser
cf = configparser.ConfigParser()
cf.read("./conf/config.ini", encoding="utf-8")  # 读取配置文件
pip install --user PySide2 -i https://pypi.tuna.tsinghua.edu.cn/simple
python -m pip install python-lsp-server[all] -i https://pypi.tuna.tsinghua.edu.cn/simple

在这里插入图片描述
在这里插入图片描述

pip install --user PySide2 -i https://pypi.tuna.tsinghua.edu.cn/simple
python -m pip install python-lsp-server[all] -i https://pypi.tuna.tsinghua.edu.cn/simple
python -m PyQt5.uic.pyuic form.ui -o demo.py
python -m PyQt5.uic.pyuic form.ui -o para.py
python -m PyQt5.uic.pyuic form.ui -o para1.py
python -m PyQt5.uic.pyuic form.ui -o hum.py
python -m PyQt5.uic.pyuic mainwindow.ui -o para.py
python -m PyQt5.uic.pyuic mainwindow.ui -o demo.py

pyqt设置背景图片格式

self.log1.setStyleSheet("background-image: url(bg.png)")
self.centralwidget.setStyleSheet("border-image: url(bg.png)")
self.task_widget.setStyleSheet("background:transparent")
background-color:transparent;
#objectname{border-image: url(:/resource/2850Demo_background.jpg);}
QWidget #background_centralwidget{border-image: url(:/001/bg.png);}\\n\n
QWidget #centralwidget {border-image: url(:/sources/images/54_bg.png);}
QWidget #centralwidget {border-image: url(:/sources/images/54_bg.png);}

ser = serial.Serial("com11", 115200)   # 选择串口,并设置波特率

#错误整理

def portAddress(self,com):
#error:
def portAddress(com,self):
#error
<__main__.MyWindow object at 0x000002166BCE9510>
ERROR 'MyWindow' object has no attribute 'split'

在这里插入图片描述
在这里插入图片描述

QWidget #background_centralwidget{border-image: url(:/001/sources/bg.png);
}
#widTop{border: 5px solid red}

在这里插入图片描述

#报错,‘QT’not defined
self.setWindowModality(Qt.ApplicationModal)
#正确
self.setWindowModality(QtCore.Qt.ApplicationModal)
#字符串空格格外注意
#湿度
        elif sender == self.pushButton_2:
            text, ok = QInputDialog.getInt(self, '修改湿度', '请设置湿度最大值:', self.Humidity_max,1,100,1)  # 可以输入整数,最小值、最大值可以自己设定。
            if ok:
                self.label_4.setText(str(text))  # 如果我们按下ok键,则标签6的text值是从对话框接收的文本。
                self.label_4.setStyleSheet("font-size:35px;")
                cf.set('Sensor', 'humidity_max ', str(text))
                with open(cfg_path, "w+") as f:
                    cf.write(f)

在这里插入图片描述

QTabWidget:pane {border-top:0px solid #e8f3f9;background:  transparent; }



/*标签样式*/
QTabBar::tab{
	background-color: rgb(172, 195, 205);	
	width:150px;/*宽度根据实际需要进行调整*/
	height:20px;
	border-top-left-radius: 15px;
	border-top-right-radius: 15px;
	padding: 5px;
	font-size:12pt;

}
QTabBar::tab:selected{
	/*选中样式*/
	background-color: rgb(40, 117, 167);
	font-weight:bold;
	color: rgb(0, 79, 115);
	font-size:16pt;
	color:#ffffff;
}
QTabBar::tab:hover{
	/*鼠标悬停*/
	background-color: rgb(2, 64, 115);
}


QTabWidget{background-color: rgb(168, 193, 221);} # 配置以下代码使用
ui.tabWidget.setAttribute(Qt.WA_StyledBackground)  # 背景色应用到tab标题右侧

##QTabWidget设置背景图片

QTabWidget:pane {border-top:0px solid #e8f3f9;
border-image: url(:/sources/images/bord09.png); }

#代码结构如下
在这里插入图片描述
#错误示范

QTabWidget #test {border-top:0px solid #e8f3f9;
border-image: url(:/sources/images/bord09.png); }

在这里插入图片描述
打脸来的太快,实验证明,这种方式在QT里面无法显示背景图片,但是在程序(pycharm)里面可以显示。
而上一种方法能够在QT和程序(pycharm)里面同时显示。
而且确实需要一个容器才能正常显示这张图片。否则程序(pycharm)里面也无法正常显示。
而第一种方法则不需要这个容器。
在这里插入图片描述

#补充QtabBar设置标题栏位置

/*标签样式*/
QTabBar::tab{
	background-color: rgb(73, 167, 236);
	width:150px;/*宽度根据实际需要进行调整*/
	height:20px;
	border-top-left-radius: 10px;
	border-top-right-radius: 10px;
	padding: 5px;
	font-size:12pt;
	left:3px;
}
#QmenuBar
QMenuBar{
    background-color: #4F4F4F;
	color: rgb(255, 255, 255);
    margin: 0px;
    padding: 3px 10px;
    min-height: 20px;
    min-width: 20px;
}
QMenuBar::item{
    background-color: transparent;
    color: rgb(255, 255, 255);
    margin: 0px;
    padding: 3px 10px;
}
QMenuBar::item:selected{
    background-color: #262829;
    border: 1px solid #00BB9E;
}
QMenuBar::item:pressed{
    background-color: #969696;
    border: 1px solid #00BB9E;
}
QMenuBar,QMenuBar:disabled{
    color: #DCE1E6;
    background-color: #4F4F4F;
    border: 1px solid #4F4F4F;
    margin: 0px;
}
/* QMenu ------------------------------------------------------------
菜单
--------------------------------------------------------------------------- */
QMenu::item{
    padding: 3px 20px;
}
QMenu::indicator{
    width: 13px;
    height: 13px;
}
QMenu,QMenu:disabled{
    color: #DCE1E6;
    background-color: #4F4F4F;
    border: 1px solid #4F4F4F;
    margin: 0px;
}
QMenu::item:selected{
    background-color: #262829;
    border: 1px solid #00BB9E;
}
QMenu::item:pressed{
    background-color: #969696;
    border: 1px solid #00BB9E;
}
QMenu::separator{ /*分隔符*/
    height: 1px;
    background-color: #969696;}

##值得研究的代码(来自QT官方)
QPushButton

QPushButton#evilButton::menu-indicator {
    image: url(myindicator.png);
}

#自己用的代码

QPushButton{  
border-image: url(:/sources/images/bord03.png);
color:white;font-family:微软雅黑;font-size:20pt;font-weight:300;
border-radius:25px;
}  
setEnabled(false)
setClickable(false) 

#比较列表元素

a=[3,4,5,10,11,14]
b=3
if 14in a:
    print("yes",(b in a))

在这里插入图片描述

# 设置图例并且设置图例的字体及大小
        font1 = {'family': 'Microsoft YaHei',
                 'weight': 'normal',
                 'size': 10,
                 }
        # 通过画子图的方式,使legend显示完全,如果不用这种方法,legend放在图像外面时,legend显示不全
        # 定义legend在图像外
        lgnd = self.axes.legend(
            ["upper_limit", "lower_limit", "temperature", ], bbox_to_anchor=(1, 1), loc='best', facecolor='None',
            prop=font1,labelcolor='w')

自定义画图基类

#!D:/workplace/python
# -*- coding: utf-8 -*-
# @File  : MyCanvas.py
# @Author:Romulushe
# @Time    : 2022/8/22 13:43
# @Software: PyCharm
# @Use: 画图类
import time

import matplotlib
matplotlib.use("Qt5Agg")  # 声明使用pyqt5
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg  # pyqt5的画布
import matplotlib.pyplot as plt
# matplotlib.figure 模块提供了顶层的Artist(图中的所有可见元素都是Artist的子类),它包含了所有的plot元素
from matplotlib.figure import Figure


from PyQt5 import QtCore, QtWidgets, QtGui #图形库
import sys,os,random
import numpy as np

class MyMatplotlibFigure(FigureCanvasQTAgg):
    """
    创建一个画布类,并把画布放到FigureCanvasQTAgg
    """
    def __init__(self, width=10, heigh=10, dpi=100):
        plt.rcParams['figure.facecolor'] = 'None'
        plt.rcParams['axes.facecolor'] = 'None'  # 设置绘图区颜色
        # 创建一个Figure,该Figure为matplotlib下的Figure,不是matplotlib.pyplot下面的Figure
        self.figs = Figure(figsize=(2.60, 1.50), dpi=dpi)
        super(MyMatplotlibFigure, self).__init__(self.figs)  # 在父类种激活self.fig,
        self.axes = self.figs.add_subplot(111)  # 添加绘图区


        # self.axes_xlabel('times', fontsize=10)
        # self.axes_ylabel('℃',fontsize = 10)

        self.axes.spines['top'].set_visible(False)
        self.axes.spines['right'].set_visible(False)

        # self.axes.spines['top'].set_color('White')
        # self.axes.spines['right'].set_color('White')
        self.axes.spines['left'].set_color('White')
        self.axes.spines['bottom'].set_color('White')
        self.axes.tick_params(axis='y', colors='w',labelsize=8)
        self.axes.tick_params(axis='x', colors='w',labelsize=6.5)



    def set_fig_position(self):
        pass

    def set_fig_title(self,text):
        self.axes.set_title(str(text), color='white', fontproperties='Microsoft YaHei', fontsize=8)

    def set_legend(self):
        # 设置图例并且设置图例的字体及大小
        font1 = {'family': 'Microsoft YaHei',
                 'weight': 'normal',
                 'size': 5,
                 }
        # 通过画子图的方式,使legend显示完全,如果不用这种方法,legend放在图像外面时,legend显示不全
        # 定义legend在图像外
        lgnd = self.axes.legend(
            ["upper_limit", "lower_limit", "temperature", ], bbox_to_anchor=(1, 1), loc='best', facecolor='None',
            prop=font1, labelcolor='w', frameon=False, title='tips')


    def upper_limit(self,text):#直线
        self.axes.cla()  # 清除绘图区
        self.set_fig_title(text)
        self.axes.axhline(y=26.5, color='red', linestyle='-', label='温度上限')
        self.draw()

    def lower_limit(self):#直线
        self.axes.axhline(y=20.5, color='white', linestyle='--', label='温度下限')
        self.draw()

    def total_plot(self, tem,a):
        x = range(0,len(tem))
        self.axes.plot(tem, color='y',label='temperature', marker='', linewidth=2, markerfacecolor='None', markersize=10)
        for a, b in zip(x, tem):
            self.axes.text(a, b + 0.5, b, color='None', ha='center', va='bottom', fontsize=6,rotation=0)
        if a=='1':
            self.set_legend()
        self.figs.subplots_adjust(right=0.8)
        self.figs.canvas.draw()  # 这里注意是画布重绘,self.figs.canvas
        self.figs.canvas.flush_events()  # 画布刷新self.figs.canvas
        # self.draw()

查看matplolib版本

import matplotlib
print(matplotlib.__version__)

如何将横坐标设置为时间坐标轴?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可将 RS-422/485 串口设备连接至以太网 业界首款全双工、不间断、低成本服务器 支持TCP服务器、TCP客户端、UDP模式 支持虚拟串口、Web登录或使用VirCom进行配置 ZLAN3110 概述 ZLAN3110串口服务器是上海卓岚信息科技有限公司开发的一款工业级RS422/485TCP/IP之间协议化器。该串口服务器可以方便地使得串口设备连接到以太网和Internet,实现串口设备的网络化管理。和同类产品相比,其显著特点是稳定性(可以全双工、不间断发送大批量数据而不丢失一字节)和适中的价格。 特点 通过内嵌Web服务器可配置其网络参数、串口参数、登录口令等。 Web服务器支持密码登录,以防止随意修改。 支持跨网关:能够将串口服务器和任何Internet上有公网IP的主机连接。 支持1200~115200波特率。 支持9位数据发送功能:第9位可以为无、奇校验、偶校验、1、0,五种方式方便在485通信中区分数据帧和地址帧。 ZLVirCom配置工具可在网络上自动寻找设备联网服务器。 支持虚拟串口。 支持数据写保护,防止随意篡改。 支持默认配置启动。 LINK灯连接指示。 硬件流控CTS/RTS。 1KV网络浪涌保护。 外壳采用抗辐射的SECC板,保证在高电磁辐射区也能够正常工作。 规格 网络界面 以太网 10/100 Mbps, RJ45 保护 内建2KV电磁隔离 串口界面 界面 RS-485/422 串口数 1 校验位 None, Even, Odd, Space, Mark 数据位 5~9 停止位 1,2 流控 RTS/CTS,DTR/DCR, XON/XOFF 速率 1200bps~115200bps 软件特性 协议 TCP,HTTP,UDP,ICMP,ARP,IP 虚拟串口平台 Windows 95/98/ME/NT/2000/XP/WIN7 配置方式 Web浏览器、卓岚ZLVirCom 电器特性 电压输入 DC9~24V,45mA 机械特性 外壳材料 抗电磁材料SECC钢板 尺寸 长×宽×高=9.4cm×6.5cm×2.5cm 工作环境 工作温度,湿度 -30~85℃,5~95% RH 储存温度,湿度 -30~85℃,5~95% RH W
好的,我可以帮你解答这个问题。 首先,你需要安装 DHT11 传感器的相关库,可以使用 Adafruit_DHT 库。你可以通过以下命令安装该库: ``` sudo pip3 install Adafruit_DHT ``` 然后,你需要编写采集温湿度并发送数据的 Python 脚本。可以参考以下代码: ```python import socket import Adafruit_DHT # 设置 TCP 服务器的 IP 地址和端口号 TCP_IP = '192.168.1.100' TCP_PORT = 5005 # 初始化 DHT11 传感器 DHT_SENSOR = Adafruit_DHT.DHT11 DHT_PIN = 4 # 创建 TCP 客户端 client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client_socket.connect((TCP_IP, TCP_PORT)) # 循环采集温湿度并发送数据 while True: humidity, temperature = Adafruit_DHT.read_retry(DHT_SENSOR, DHT_PIN) if humidity is not None and temperature is not None: # 将温湿度数据换为字符串并发送到服务器 data = f"Temperature={temperature:.1f}C, Humidity={humidity:.1f}%" client_socket.send(data.encode()) ``` 在这个代码中,我们先设置了 TCP 服务器的 IP 地址和端口号。然后,通过 Adafruit_DHT 库初始化了 DHT11 传感器,并在循环中采集温湿度数据。最后,将采集到的数据换为字符串并通过 TCP 客户端发送到服务器。 需要注意的是,该脚本是一个无限循环的程序,可以通过 Ctrl+C 终止。另外,你需要将 IP 地址和端口号替换为你自己的服务器地址和端口号。 希望这个回答能够帮助到你。如果有任何问题,欢迎随时向我提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值