当前位置: 首页 > news >正文

构建树莓派温湿度监测系统:从硬件到软件的完整指南

在这里插入图片描述

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:Python案例分享专栏
✨特色专栏:国学周更-心性养成之路
🥭本文内容:构建树莓派温湿度监测系统:从硬件到软件的完整指南

文章目录

    • 引言
      • 一、项目概述
      • 二、硬件准备
        • 1. 树莓派
        • 2. DHT11温湿度传感器
        • 3. 显示屏
        • 4. 蜂鸣器
        • 5. 按键
        • 6. 面包板和跳线
        • 7. 其他配件
      • 三、硬件连接
        • 1. 树莓派的准备
        • 2. DHT11温湿度传感器连接
        • 3. 显示屏连接
        • 4. 蜂鸣器连接
        • 5. 按键连接
        • 6. 整体连接示意图
      • 四、软件环境搭建
        • 1. 安装操作系统
        • 2. 更新系统
        • 3. 安装Python
        • 4. 安装必要的库
        • 5. 验证库安装
        • 6. 编写代码
        • 7. 运行代码
      • 五、代码实现
        • 1. 导入必要的库
        • 2. 设置GPIO引脚
        • 3. 初始化传感器和显示屏
        • 4. 定义报警阈值
        • 5. 读取传感器数据
        • 6. 显示数据
        • 7. 按键输入处理
        • 8. 主循环
        • 9. 完整代码示例
      • 六、功能扩展
        • 1. 数据记录与存储
        • 2. 远程监控与数据可视化
        • 3. 移动应用集成
        • 4. 增加传感器类型
        • 5. 用户界面优化
        • 6. 设备管理与维护
        • 7. 能源管理
    • 总结

引言

在现代社会,随着科技的迅猛发展,物联网(IoT)技术逐渐渗透到我们生活的方方面面。温湿度监测作为物联网应用中的一个重要领域,广泛应用于智能家居、农业监控、环境保护等多个场景。温度和湿度不仅影响我们的生活舒适度,还对农作物的生长、工业生产的质量以及环境的健康状况起着至关重要的作用。

树莓派作为一款功能强大且易于使用的单板计算机,因其灵活性和可扩展性,成为了许多DIY项目的首选平台。在本项目中,我们将利用树莓派搭建一个温湿度监测系统,结合DHT11传感器、显示屏、蜂鸣器和按键,实现实时数据监测、显示和报警功能。通过这个项目,不仅可以帮助我们更好地理解温湿度的变化,还能为我们提供一个实践物联网技术的绝佳机会。

在接下来的内容中,我们将详细介绍项目的硬件组成、软件实现以及可能的功能扩展,带你一步步构建属于自己的温湿度监测系统。无论你是物联网的初学者还是有经验的开发者,这个项目都将为你提供有价值的学习体验。让我们开始这段探索之旅吧!

一、项目概述

本项目的目标是创建一个温湿度监测系统,能够实时显示环境的温度和湿度,并在超过设定阈值时发出报警。用户还可以通过按键来调整报警阈值。

二、硬件准备

在构建树莓派温湿度监测系统之前,首先需要准备好所需的硬件组件。每个组件在系统中都有其特定的功能,下面将详细介绍每个硬件的特点、连接方式以及选择建议。

1. 树莓派

选择建议

  • 推荐使用树莓派3B、3B+或树莓派4B。这些版本具有较强的处理能力和丰富的GPIO接口,适合进行各种物联网项目。

功能

  • 树莓派作为系统的核心控制单元,负责处理传感器数据、控制显示屏和蜂鸣器,并与用户进行交互。

连接方式

  • 通过USB电源适配器为树莓派供电,确保其正常运行。
2. DHT11温湿度传感器

选择建议

  • DHT11是一款低成本、易于使用的数字温湿度传感器,适合初学者和小型项目。其测量范围为0-50°C的温度和20-90%的湿度。

功能

  • 负责实时获取环境的温度和湿度数据,并将其传输给树莓派进行处理。

连接方式

  • DHT11传感器通常有三个引脚:
    • VCC:连接到树莓派的5V引脚。
    • GND:连接到树莓派的GND引脚。
    • DATA:连接到树莓派的GPIO4引脚(可以根据需要选择其他GPIO引脚,但需在代码中进行相应修改)。
3. 显示屏

选择建议

  • 可以选择LCD(如1602 LCD)或OLED显示屏(如0.96寸OLED)。OLED显示屏通常具有更好的对比度和视角,适合在不同光照条件下使用。

功能

  • 实时显示温湿度数据,便于用户观察和监控环境变化。

连接方式

  • LCD显示屏通常需要多个引脚连接,包括电源引脚、数据引脚和控制引脚。OLED显示屏则通常使用I2C接口,连接方式相对简单:
    • VCC:连接到树莓派的5V引脚。
    • GND:连接到树莓派的GND引脚。
    • SDA:连接到树莓派的SDA引脚(GPIO2)。
    • SCL:连接到树莓派的SCL引脚(GPIO3)。
4. 蜂鸣器

选择建议

  • 可以选择有源蜂鸣器或无源蜂鸣器。有源蜂鸣器只需供电即可发声,而无源蜂鸣器需要通过PWM信号控制音调。

功能

  • 当温湿度超过设定阈值时,蜂鸣器发出报警声,提醒用户注意。

连接方式

  • 蜂鸣器通常有两个引脚:
    • 正极:连接到树莓派的GPIO18引脚。
    • 负极:连接到树莓派的GND引脚。
5. 按键

选择建议

  • 可以使用简单的机械按键或薄膜按键。按键的选择应考虑到使用的方便性和耐用性。

功能

  • 允许用户通过按键输入来调整报警阈值。

连接方式

  • 按键通常有两个引脚:
    • 一端连接到树莓派的GPIO17引脚。
    • 另一端连接到GND引脚。可以使用上拉电阻或树莓派的内置上拉电阻。
6. 面包板和跳线

选择建议

  • 面包板用于方便地连接各个组件,跳线则用于连接不同的引脚。

功能

  • 通过面包板和跳线,可以快速搭建电路,方便测试和修改。
7. 其他配件
  • 电源适配器:为树莓派提供稳定的电源,建议使用5V/2.5A的电源适配器。
  • 外壳:可以为树莓派和其他组件提供保护,防止损坏。
  • 散热片:如果使用树莓派4B,建议加装散热片以防止过热。

三、硬件连接

在构建树莓派温湿度监测系统时,正确的硬件连接是确保系统正常运行的关键步骤。下面将详细介绍各个组件的连接方式,包括树莓派、DHT11温湿度传感器、显示屏、蜂鸣器和按键的具体连接方法。

1. 树莓派的准备

首先,确保树莓派已安装好操作系统(如Raspberry Pi OS),并且可以正常启动。将树莓派放置在一个稳定的工作台上,并准备好所需的工具,如跳线、面包板等。

2. DHT11温湿度传感器连接

DHT11传感器通常有三个引脚,分别是VCC、GND和DATA。连接步骤如下:

  • VCC引脚:将DHT11的VCC引脚连接到树莓派的5V引脚(通常是引脚2或引脚4)。
  • GND引脚:将DHT11的GND引脚连接到树莓派的GND引脚(引脚6、引脚9、引脚14、引脚20或引脚25中的任意一个)。
  • DATA引脚:将DHT11的DATA引脚连接到树莓派的GPIO4引脚(引脚7)。

连接示意图:

DHT11        树莓派
-----------------------
VCC   ---->  5V (引脚2或引脚4)
GND   ---->  GND (引脚6)
DATA  ---->  GPIO4 (引脚7)
3. 显示屏连接

根据选择的显示屏类型,连接方式会有所不同。以下是LCD和OLED显示屏的连接方法:

LCD(1602 LCD)连接

  • VSS引脚:连接到树莓派的GND引脚。
  • VDD引脚:连接到树莓派的5V引脚。
  • VO引脚:连接到一个可调电位器的中间引脚,电位器的另一端连接到GND,另一端连接到5V(用于调节对比度)。
  • RS引脚:连接到树莓派的GPIO17引脚(引脚11)。
  • RW引脚:连接到GND。
  • E引脚:连接到树莓派的GPIO27引脚(引脚13)。
  • D0-D3引脚:可以不连接(使用4位模式)。
  • D4引脚:连接到树莓派的GPIO22引脚(引脚15)。
  • D5引脚:连接到树莓派的GPIO23引脚(引脚16)。
  • D6引脚:连接到树莓派的GPIO24引脚(引脚18)。
  • D7引脚:连接到树莓派的GPIO25引脚(引脚22)。

OLED显示屏(I2C接口)连接

  • VCC引脚:连接到树莓派的5V引脚。
  • GND引脚:连接到树莓派的GND引脚。
  • SDA引脚:连接到树莓派的SDA引脚(GPIO2,引脚3)。
  • SCL引脚:连接到树莓派的SCL引脚(GPIO3,引脚5)。

连接示意图(以OLED为例):

OLED          树莓派
-----------------------
VCC   ---->  5V (引脚2或引脚4)
GND   ---->  GND (引脚6)
SDA   ---->  SDA (GPIO2,引脚3)
SCL   ---->  SCL (GPIO3,引脚5)
4. 蜂鸣器连接

蜂鸣器通常有两个引脚,连接步骤如下:

  • 正极引脚:将蜂鸣器的正极引脚连接到树莓派的GPIO18引脚(引脚12)。
  • 负极引脚:将蜂鸣器的负极引脚连接到树莓派的GND引脚。

连接示意图:

蜂鸣器      树莓派
-----------------------
正极  ---->  GPIO18 (引脚12)
负极  ---->  GND (引脚6)
5. 按键连接

按键通常有两个引脚,连接步骤如下:

  • 一端引脚:将按键的一端连接到树莓派的GPIO17引脚(引脚11)。
  • 另一端引脚:将按键的另一端连接到树莓派的GND引脚。

连接示意图:

按键        树莓派
-----------------------
一端  ---->  GPIO17 (引脚11)
另一端 ---->  GND (引脚6)
6. 整体连接示意图

将所有组件连接在一起后,整个系统的连接示意图如下:

树莓派
-----------------------
5V   ----> DHT11 VCC
GND  ----> DHT11 GND
GPIO4 ----> DHT11 DATA5V   ----> OLED VCC
GND  ----> OLED GND
GPIO2 ----> OLED SDA
GPIO3 ----> OLED SCLGPIO18 ----> 蜂鸣器 正极
GND      ----> 蜂鸣器 负极GPIO17 ----> 按键 一端
GND      ----> 按键 另一端

四、软件环境搭建

在构建树莓派温湿度监测系统之前,首先需要搭建合适的软件环境。这一过程包括安装操作系统、必要的库和工具,以便能够顺利地进行编程和硬件控制。以下是详细的步骤和说明。

1. 安装操作系统

首先,确保树莓派上安装了Raspberry Pi OS(以前称为Raspbian)。可以通过以下步骤进行安装:

  • 下载操作系统镜像
    访问Raspberry Pi官方网站下载最新版本的Raspberry Pi OS镜像。

  • 烧录镜像
    使用工具(如Balena Etcher或Raspberry Pi Imager)将下载的镜像烧录到SD卡中。插入SD卡后,选择镜像文件并选择目标SD卡,点击“烧录”开始。

  • 首次启动
    将烧录好的SD卡插入树莓派,连接显示器、键盘和电源,启动树莓派。首次启动时,系统会引导你完成基本设置,包括语言、时区和网络配置。

2. 更新系统

在安装完操作系统后,建议更新系统以确保所有软件包都是最新的。打开终端,输入以下命令:

sudo apt-get update
sudo apt-get upgrade

这将更新软件包列表并升级已安装的软件包。

3. 安装Python

Raspberry Pi OS通常预装了Python,但可以通过以下命令确认Python版本:

python3 --version

如果未安装,可以使用以下命令安装:

sudo apt-get install python3
4. 安装必要的库

为了与DHT11传感器和显示屏进行交互,需要安装一些Python库。以下是安装步骤:

  • 安装Adafruit_DHT库
    该库用于读取DHT11传感器的数据。可以通过以下命令安装:

    sudo pip3 install Adafruit-DHT
    
  • 安装RPi.GPIO库
    该库用于控制树莓派的GPIO引脚。通常,RPi.GPIO库已经预装,但可以通过以下命令确认或安装:

    sudo apt-get install python3-rpi.gpio
    
  • 安装显示屏库
    如果使用OLED显示屏,可以安装Adafruit_SSD1306库。对于LCD显示屏,通常使用lcd库。以下是安装OLED显示屏库的命令:

    sudo pip3 install Adafruit-SSD1306
    

    对于LCD显示屏,可能需要安装RPLCD库:

    sudo pip3 install RPLCD
    
  • 安装I2C支持(如果使用I2C接口的显示屏):
    确保I2C接口已启用。可以通过raspi-config工具启用I2C:

    sudo raspi-config
    

    在菜单中选择“Interfacing Options”,然后选择“I2C”,启用它。完成后,重启树莓派。

5. 验证库安装

在终端中输入Python交互式环境,验证库是否成功安装:

python3

然后尝试导入库:

import Adafruit_DHT
import RPi.GPIO as GPIO
import Adafruit_SSD1306  # 如果使用OLED
# 或者
from RPLCD import CharLCD  # 如果使用LCD

如果没有错误提示,说明库安装成功。

6. 编写代码

在完成软件环境搭建后,可以使用文本编辑器(如nano、vim或Thonny IDE)编写Python代码。创建一个新的Python文件,例如temp_humidity_monitor.py,并将后续的代码逻辑写入该文件。

nano temp_humidity_monitor.py
7. 运行代码

在编写完代码后,可以通过以下命令运行Python脚本:

python3 temp_humidity_monitor.py

确保在运行代码之前,所有硬件连接都已正确完成,并且树莓派已正常启动。

五、代码实现

在完成硬件连接和软件环境搭建后,接下来是实现温湿度监测系统的核心部分——编写代码。本文将详细阐述如何使用Python编写代码,以实现温湿度的读取、显示、报警和用户交互功能。

1. 导入必要的库

首先,在代码的开头导入所需的库。这些库将帮助我们与DHT11传感器、显示屏和GPIO引脚进行交互。

import Adafruit_DHT
import RPi.GPIO as GPIO
import time
from Adafruit_SSD1306 import SSD1306_128_64  # 如果使用OLED
# from RPLCD import CharLCD  # 如果使用LCD
2. 设置GPIO引脚

接下来,设置GPIO引脚的模式和初始状态。我们需要定义蜂鸣器和按键的引脚。

# GPIO设置
GPIO.setmode(GPIO.BCM)  # 使用BCM引脚编号
buzzer_pin = 18  # 蜂鸣器引脚
button_pin = 17  # 按键引脚
GPIO.setup(buzzer_pin, GPIO.OUT)  # 设置蜂鸣器引脚为输出
GPIO.setup(button_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)  # 设置按键引脚为输入,并启用上拉电阻
3. 初始化传感器和显示屏

初始化DHT11传感器和显示屏。这里以OLED显示屏为例,LCD显示屏的初始化方式会有所不同。

sensor = Adafruit_DHT.DHT11  # 定义传感器类型
dht_pin = 4  # DHT11数据引脚# 初始化OLED显示屏
disp = SSD1306_128_64(rst=None)  # 创建显示屏对象
disp.begin()  # 初始化显示屏
disp.clear()  # 清空显示屏
disp.display()  # 刷新显示
4. 定义报警阈值

设置初始的温湿度报警阈值,并定义一个函数来检查报警条件。

# 初始阈值
threshold_temp = 30  # 温度阈值
threshold_hum = 70   # 湿度阈值def check_alarm(temperature, humidity):if temperature > threshold_temp or humidity > threshold_hum:GPIO.output(buzzer_pin, GPIO.HIGH)  # 启动蜂鸣器else:GPIO.output(buzzer_pin, GPIO.LOW)   # 关闭蜂鸣器
5. 读取传感器数据

定义一个函数来读取DHT11传感器的数据,并处理可能的读取错误。

def read_sensor():humidity, temperature = Adafruit_DHT.read_retry(sensor, dht_pin)if humidity is not None and temperature is not None:return temperature, humidityelse:print("Failed to retrieve data from humidity sensor")return None, None
6. 显示数据

定义一个函数来在OLED显示屏上显示温湿度数据。

def display_data(temperature, humidity):disp.clear()  # 清空显示屏disp.text(f'Temp: {temperature}C', 0, 0)  # 显示温度disp.text(f'Hum: {humidity}%', 0, 10)  # 显示湿度disp.display()  # 刷新显示
7. 按键输入处理

定义一个函数来处理按键输入,以便用户可以调整报警阈值。

def adjust_threshold():global threshold_temp, threshold_humwhile True:if GPIO.input(button_pin) == GPIO.LOW:  # 检测按键按下threshold_temp += 1  # 增加温度阈值threshold_hum += 5    # 增加湿度阈值print(f'New Temp Threshold: {threshold_temp}C')print(f'New Humidity Threshold: {threshold_hum}%')time.sleep(1)  # 防止多次触发
8. 主循环

在主循环中,读取传感器数据、检查报警条件、显示数据,并处理按键输入。

try:while True:temperature, humidity = read_sensor()  # 读取传感器数据if temperature is not None and humidity is not None:print(f'Temperature: {temperature}°C, Humidity: {humidity}%')check_alarm(temperature, humidity)  # 检查报警条件display_data(temperature, humidity)  # 显示数据adjust_threshold()  # 调整阈值time.sleep(2)  # 每2秒读取一次数据except KeyboardInterrupt:GPIO.cleanup()  # 清理GPIO设置
9. 完整代码示例

将上述所有代码整合在一起,形成完整的Python脚本:

import Adafruit_DHT
import RPi.GPIO as GPIO
import time
from Adafruit_SSD1306 import SSD1306_128_64  # 如果使用OLED# GPIO设置
GPIO.setmode(GPIO.BCM)
buzzer_pin = 18
button_pin = 17
GPIO.setup(buzzer_pin, GPIO.OUT)
GPIO.setup(button_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)sensor = Adafruit_DHT.DHT11
dht_pin = 4# 初始化OLED显示屏
disp = SSD1306_128_64(rst=None)
disp.begin()
disp.clear()
disp.display()# 初始阈值
threshold_temp = 30
threshold_hum = 70def check_alarm(temperature, humidity):if temperature > threshold_temp or humidity > threshold_hum:GPIO.output(buzzer_pin, GPIO.HIGH)else:GPIO.output(buzzer_pin, GPIO.LOW)def read_sensor():humidity, temperature = Adafruit_DHT.read_retry(sensor, dht_pin)if humidity is not None and temperature is not None:return temperature, humidityelse:print("Failed to retrieve data from humidity sensor")return None, Nonedef display_data(temperature, humidity):disp.clear()disp.text(f'Temp: {temperature}C', 0, 0)disp.text(f'Hum: {humidity}%', 0, 10)disp.display()def adjust_threshold():global threshold_temp, threshold_humwhile True:if GPIO.input(button_pin) == GPIO.LOW:threshold_temp += 1threshold_hum += 5print(f'New Temp Threshold: {threshold_temp}C')print(f'New Humidity Threshold: {threshold_hum}%')time.sleep(1)try:while True:temperature, humidity = read_sensor()if temperature is not None and humidity is not None:print(f'Temperature: {temperature}°C, Humidity: {humidity}%')check_alarm(temperature, humidity)display_data(temperature, humidity)adjust_threshold()time.sleep(2)except KeyboardInterrupt:GPIO.cleanup()

六、功能扩展

在完成基本的温湿度监测系统后,可以考虑对系统进行功能扩展,以提升其实用性、灵活性和用户体验。以下是一些可能的功能扩展建议:

1. 数据记录与存储

功能描述
将实时监测到的温湿度数据记录到文件或数据库中,以便后续分析和查看历史数据。

实现方法

  • 文件存储:可以将数据以CSV格式存储到本地文件中。每次读取数据时,将温湿度值和时间戳写入文件。

    示例代码:

    import csv
    from datetime import datetimedef log_data(temperature, humidity):with open('temperature_humidity_log.csv', mode='a') as file:writer = csv.writer(file)writer.writerow([datetime.now(), temperature, humidity])
    
  • 数据库存储:使用SQLite或MySQL等数据库存储数据,便于进行复杂查询和分析。

    示例代码(使用SQLite):

    import sqlite3# 创建数据库连接
    conn = sqlite3.connect('sensor_data.db')
    c = conn.cursor()
    c.execute('''CREATE TABLE IF NOT EXISTS readings (timestamp TEXT, temperature REAL, humidity REAL)''')def log_data(temperature, humidity):c.execute("INSERT INTO readings (timestamp, temperature, humidity) VALUES (?, ?, ?)",(datetime.now(), temperature, humidity))conn.commit()
    
2. 远程监控与数据可视化

功能描述
通过网络将温湿度数据上传到云端,用户可以通过网页或手机应用进行远程监控。

实现方法

  • 使用云服务:可以使用MQTT、HTTP API等协议将数据发送到云服务(如ThingSpeak、Adafruit IO等)。

    示例代码(使用HTTP POST):

    import requestsdef send_data_to_cloud(temperature, humidity):url = 'https://api.thingspeak.com/update'params = {'api_key': 'YOUR_API_KEY','field1': temperature,'field2': humidity}response = requests.get(url, params=params)print(response.text)
    
  • 创建Web界面:使用Flask或Django等框架创建一个简单的Web应用,实时显示温湿度数据和历史记录。

3. 移动应用集成

功能描述
开发一个移动应用,用户可以通过手机实时查看温湿度数据,并接收报警通知。

实现方法

  • 使用Firebase:将数据存储在Firebase数据库中,移动应用可以实时获取数据。
  • 推送通知:使用Firebase Cloud Messaging(FCM)实现报警通知,用户在手机上接收到温湿度超标的警报。
4. 增加传感器类型

功能描述
除了温湿度传感器外,可以增加其他类型的传感器,如光照传感器、气体传感器等,提供更全面的环境监测。

实现方法

  • 光照传感器:使用光敏电阻或BH1750传感器,读取环境光照强度。
  • 气体传感器:使用MQ系列传感器(如MQ-2、MQ-7等),监测空气中的有害气体浓度。
5. 用户界面优化

功能描述
改善用户界面,使其更加友好和直观,提升用户体验。

实现方法

  • 图形化界面:使用Tkinter或Pygame创建图形化用户界面,显示实时数据和历史记录。
  • 多语言支持:为系统添加多语言支持,方便不同语言的用户使用。
6. 设备管理与维护

功能描述
实现设备的远程管理和维护功能,用户可以通过界面进行设置和更新。

实现方法

  • 远程配置:允许用户通过Web界面或移动应用调整报警阈值、传感器类型等设置。
  • 固件更新:实现OTA(Over-The-Air)更新功能,方便用户更新系统固件。
7. 能源管理

功能描述
优化系统的能源管理,延长设备的使用寿命。

实现方法

  • 低功耗模式:在不需要实时监测时,进入低功耗模式,减少能源消耗。
  • 太阳能供电:考虑使用太阳能电池板为系统供电,适合户外环境监测。

总结

通过本项目,我们成功构建了一个基于树莓派的温湿度监测系统,利用DHT11传感器、显示屏、蜂鸣器和按键,实现了实时数据监测、显示和报警功能。通过详细的硬件连接和软件实现步骤,用户不仅能够掌握物联网技术的基本原理,还能提升动手能力和编程技能。此外,项目中提出的功能扩展建议,如数据记录、远程监控、移动应用集成等,进一步拓宽了系统的应用场景和实用性,为用户提供了更全面的环境监测解决方案。希望本项目能够激励更多的开发者探索物联网的无限可能,推动智能家居、农业监控和环境保护等领域的发展。无论是初学者还是有经验的开发者,都能从中获得宝贵的经验和启发。


  码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

在这里插入图片描述

相关文章:

构建树莓派温湿度监测系统:从硬件到软件的完整指南

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...

12.11数据结构-图

无向完全图:在无向图中,如果任意两个顶点之间都存在边,则称该图为无向完全图。 有向完全图:在有向图中,如果任意两个顶点之间都存在方向相反的两条弧,则称该图为有向完全图。 含有n个顶点的无向完全图有…...

BERT模型入门(2)BERT的工作原理

文章目录 如名称所示,BERT(来自Transformer的双向编码器表示)是基于Transformer模型。我们可以将BERT视为只有编码器部分的Transformer。 在上一个主题《Transformer入门》中,我们了解到将句子作为输入喂给Transformer的编码器&a…...

python3 中的成员运算符

一. 简介 在Python 3中,成员运算符用于测试序列(如字符串、列表、元组、集合或字典)中是否包含某个值。身份运算符用于比较两个对象的身份,即它们是否引用内存中的同一个对象。 本文简单学习一下 python3 中的成员运算符与身份运…...

【测试面试篇1】测试开发与开发|selenium实现自动化测试|设计测试用例|常见的测试方法|开发不认可提测试的bug该怎么办

目录 1.选择走测试为什么还要学这么多的开发知识? 2.为什么选择软件测试开发岗位而不是软件开发岗位? 3.个人的职业规划是什么? 4.测试中遇到的问题如何进行解决? 5.对自己的项目做过哪些测试工作? 6.描述selenium…...

人大金仓数据linux安装注意事项

人大金仓数据linux安装注意事项 本次是个人搭建虚拟机安装centos7的环境下进行安装。 1、安装流程参照https://help.kingbase.com.cn/v9/install-updata/install-linux/preface.html。 2、mount安装文件报错 操作手册提供mount的命令如下: mount KingbaseES_V009R0…...

【Maven】多模块项目的构建

项目构建 什么是构建? 项目构建指的是将源代码和资源文件转换为可执行或可分发的软件制品(如 JAR、WAR 文件)的过程。这个过程不仅包括编译代码,还包括运行测试、打包、部署等步骤。Maven 提供了一套标准化的方法来处理这些任务…...

大模型学习笔记------SAM模型详解与思考

大模型学习笔记------SAM模型详解与思考 1、SAM框架概述2、Segment Anything Task3、Segment Anything Model SAM模型是Meta 提出的分割一切模型(Segment Anything Model,SAM)突破了分割界限,极大地促进了计算机视觉基础模型的发展…...

crictl和ctr与docker的命令的对比

crictl是遵循CRI接口规范的一个命令行工具,通常用它来检查和管理kubelet节点上的容器运行时和镜像 ctr是containerd的一个客户端工具, 接下来就是crictl的的常见命令,其中能完全替代docker命令的参照下列表格 操作crictldocker查看运行容器…...

SQLite建表语句示例(含所有数据类型、索引、自增主键、唯一索引)

下面是一个示例,展示如何创建一个用户信息表。 包含 SQLite 支持的所有数据类型,同时设置主键为自增、一个字段为唯一索引,以及另一个字段为普通索引: -- 创建用户信息表 CREATE TABLE user_info (id INTEGER PRIMARY KEY AUTOI…...

探秘Redis哨兵模式:原理、运行与风险全解析

一、引言 Redis 概述 在当今的数据存储领域,Redis 占据着十分重要的地位。它是一个内存中的数据存储,凭借其出色的性能和丰富的功能,被数百万开发人员广泛应用于诸多场景之中,已然成为构建高性能、可扩展应用程序的得力工具。 从…...

.NET平台使用C#设置Excel单元格数值格式

设置Excel单元格的数字格式是创建、修改和格式化Excel文档的关键步骤之一,它不仅确保了数据的正确表示,还能够增强数据的可读性和专业性。正确的数字格式可以帮助用户更直观地理解数值的意义,减少误解,并且对于自动化报告生成、财…...

零基础学安全--wireshark简介

目录 主要功能 捕获网络数据包 协议解析 数据包分析 数据包重组 过滤功能 统计与图表功能 官网 Wireshark是一个开源的网络协议分析工具 主要功能 捕获网络数据包 能够实时捕获网络中传输的数据包,用户选择要监听的网络接口(如以太网、WiFi等…...

[Flutter] : Clipboard

import package:flutter/material.dart; import package:flutter/services.dart; setData Clipboard.setData(ClipboardData(text: "传入的文字内容")); getData Clipboard.getData(Clipboard.kTextPlain) 记录 | Flutter剪切板-刨根问底做一个可以在后台…...

ArcGIS MultiPatch数据转换Obj数据

文章目录 ArcGIS MultiPatch数据转换Obj数据1 效果2 技术路线2.1 Multipatch To Collada2.2 Collada To Obj3 代码实现4 附录4.1 环境4.2 一些坑ArcGIS MultiPatch数据转换Obj数据 1 效果 2 技术路线 MultiPatch --MultipatchToCollada–> Collada --Assimp–> Obj 2.…...

《开源数据:开启信息共享与创新的宝藏之门》

《开源数据:开启信息共享与创新的宝藏之门》 一、开源数据概述(一)开源数据的定义(二)开源数据的发展历程 二、开源数据的优势(一)成本效益优势(二)灵活性与可定制性&…...

如何评估基于TRIZ理论生成的方案的可行性和有效性?

在科技创新与问题解决的过程中,TRIZ理论(发明问题解决理论)以其系统性和高效性著称,为工程师和创新者提供了一套强大的工具和方法。然而,仅仅依靠TRIZ理论生成创新方案并不足以确保项目的成功,关键在于如何…...

sh-寡肽-78——头发护理多肽原料,改善头发外观

主要特征 人的头发纤维结构由角质层、皮质和髓质组成。角质层约占头发重量的 15%,由重叠的细胞层组成,类似于鳞片系统,半胱氨酸含量很高。它为头发纤维提供保护作用。皮质是头发的中间区域,负责头发的强度、弹性和颜色。它由多种细…...

metagpt 多智能体系统

metagpt 多智能体系统 代码1. 动作及角色定义2. 主函数 代码解释1. 导入模块:2. 环境设置:3. 定义行动(Action):4. 定义角色(Role):5. 学生和老师的行为:6. 主函数&#…...

下采样在点云处理中的关键作用——以PointNet++为例【初学者无门槛理解版!】

一、前言 随着3D传感器技术的快速发展,点云数据在计算机视觉、机器人导航、自动驾驶等领域中的应用日益广泛。点云作为一种高效的3D数据表示方式,能够精确地描述物体的几何形状和空间分布。然而,点云数据通常具有高维度和稀疏性的特点&#…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​,覆盖应用全生命周期测试需求,主要提供五大核心能力: ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...