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

基于单片机设计的水平仪(STC589C52+MPU6050)

一、前言

【1】项目背景

水平仪是一种常见的测量工具,用于检测物体或设备的水平姿态。在许多应用中,如建筑、制造和航空等领域,保持设备的水平姿态是非常重要的。为了实现实时的水平检测和显示,基于单片机设计的水平仪是一个常见的解决方案。

数字水平仪是一种用于测量物体相对于水平面的角度的仪器。它基于单片机设计,主控芯片为STC89C52,姿态检测采用MPU6050六轴传感器,显示屏用于显示水平姿态数据,锂电池供电。该仪器具有高精度、低功耗、易操作等特点,广泛应用于建筑、工程、测绘等领域。

整个系统的设计思路是通过MPU6050获取设备的姿态数据,然后利用STC89C52进行数据处理和计算,最后将计算得到的水平偏移值通过SPI接口传输到0.96寸的OLED显示屏上进行实时显示。

基于单片机设计的数字水平仪具有以下功能特点:

  1. 主控芯片:本设计采用STC89C52单片机作为主控芯片,具有强大的处理能力和丰富的外设接口,能够满足数字水平仪的功能需求。
  2. 姿态检测:通过MPU6050六轴传感器实现对物体姿态的实时检测,包括加速度计、陀螺仪和磁力计等,能够精确测量物体在三维空间中的倾斜角度。
  3. 显示屏显示:采用液晶显示屏实时显示水平姿态数据,用户可以通过显示屏直观地了解物体的倾斜情况。
  4. 锂电池供电:采用锂电池作为电源,具有高能量密度、长寿命和环保等优点,能够满足数字水平仪长时间工作的需求。
  5. 低功耗设计:通过合理的硬件设计和软件优化,实现低功耗运行,降低能耗,延长电池使用寿命。
  6. 数据存储与传输:内置存储器可存储大量姿态数据,支持USB接口进行数据传输,方便用户进行数据分析和处理。
  7. 易于操作:数字水平仪具有简洁明了的操作界面,用户只需简单设置即可开始测量,无需复杂的操作步骤。
  8. 稳定性高:通过高精度的姿态检测和数据处理算法,实现对物体倾斜角度的准确测量,保证测量结果的稳定性和可靠性。

image-20230913122223179

下面是手机上的水平仪软件显示效果: 原理是一样的

image-20230913122020531

image-20230913121840612

【2】项目的关键点包括

(1)硬件设计:包括将STC89C52和MPU6050连接在一起,确保它们之间的通信正常。同时,需要将OLED显示屏与STC89C52通过SPI接口连接起来,以便将姿态数据显示在屏幕上。

(2)软件设计:需要编写嵌入式软件,包括驱动程序和算法,以实现数据的采集、处理和显示。主控芯片STC89C52上的程序需要读取MPU6050传感器的数据,并进行姿态计算,然后将结果发送到OLED显示屏上进行显示。

(3)界面设计:在OLED显示屏上实时显示水平偏移值,需要设计一个简洁直观的用户界面,使用户能够清楚地了解设备的姿态状态。

通过该项目,能够实现一个基于单片机设计的水平仪,可以实时检测设备的水平姿态,并将结果显示在OLED屏幕上。这对于许多需要保持设备水平的应用场景非常有用,提高了工作效率和准确性。

二、项目软硬件设计思路

【1】硬件设计思路

(1)主控芯片选择:选择了STC89C52作为主控芯片。STC89C52是一款常用的单片机,具有丰富的外设接口和强大的处理能力,适合用于嵌入式应用。它具有8位的数据总线和12MHz的主频,能够满足的需求。

(2)姿态检测传感器选择:选择了MPU6050作为姿态检测传感器。MPU6050是一种集成了三轴陀螺仪和三轴加速度计的传感器模块,能够准确地检测设备的姿态变化。它通过I2C接口与主控芯片进行通信,传输姿态数据。

(3)OLED显示屏选择:选择了一款采用SPI接口的0.96寸OLED显示屏。SPI接口可以提供高速的数据传输,适合实时显示姿态数据。OLED显示屏具有高对比度、低功耗和快速响应的特点,非常适合作为水平偏移值的显示设备。

(4)硬件接线:在硬件设计中,需要将STC89C52、MPU6050和OLED显示屏进行合适的接线连接。具体接线方式如下:

将STC89C52的引脚与MPU6050的I2C接口连接,实现主控芯片与姿态传感器之间的通信。

将STC89C52的引脚与OLED显示屏的SPI接口连接,以便将姿态数据传输到显示屏上。

【2】软件设计思路

(1)初始化:在软件设计中,首先需要进行硬件的初始化设置。包括初始化STC89C52的引脚和外设配置,以及初始化MPU6050和OLED显示屏的通信设置。

(2)数据采集:通过主控芯片的I2C接口,读取MPU6050传感器的原始数据。MPU6050提供了陀螺仪和加速度计的数据,可以通过读取寄存器获取这些数据。

(3)姿态计算:利用获取的陀螺仪和加速度计数据,进行姿态计算。常见的姿态计算算法包括互补滤波算法和卡尔曼滤波算法。

(4)水平偏移值计算:根据姿态计算的结果,计算出水平偏移值。水平偏移值可以通过比较设备的当前姿态与水平状态的差异来确定。

(5)数据显示:将计算得到的水平偏移值通过SPI接口发送到OLED显示屏。需要设计一个简洁的用户界面,在屏幕上实时显示水平偏移值。

(6)循环执行:以上步骤需要在一个循环中不断执行,以实现实时的姿态检测和显示。循环的周期可以根据实际需求进行设置,通常需要考虑到实时性和性能的平衡。

【3】硬件连线说明

在此项目中,硬件模块需要连接到STC89C52单片机的不同引脚。

下面是硬件模块与单片机引脚的连接描述:

(1)MPU6050连接:

  • MPU6050的SCL引脚(时钟线)连接到STC89C52的P1.0引脚,作为I2C总线的时钟线。
  • MPU6050的SDA引脚(数据线)连接到STC89C52的P1.1引脚,作为I2C总线的数据线。
  • MPU6050的VCC引脚连接到电源正极(3.3V或5V)。
  • MPU6050的GND引脚连接到电源地线。

(2)OLED显示屏连接:

  • OLED显示屏的SCL引脚(时钟线)连接到STC89C52的P1.2引脚,作为SPI总线的时钟线。
  • OLED显示屏的SDA引脚(数据线)连接到STC89C52的P1.3引脚,作为SPI总线的数据线。
  • OLED显示屏的RST引脚(复位线)连接到STC89C52的P1.4引脚,用于复位显示屏。
  • OLED显示屏的DC引脚(数据/命令选择线)连接到STC89C52的P1.5引脚,用于选择发送数据或命令。
  • OLED显示屏的CS引脚(片选线)连接到STC89C52的P1.6引脚,用于选中显示屏。
  • OLED显示屏的VCC引脚连接到电源正极(3.3V或5V)。
  • OLED显示屏的GND引脚连接到电源地线。

三、项目代码设计

#include <reg52.h>
#include <intrins.h>// 定义OLED显示屏引脚
sbit OLED_RST = P1^0;   // RST引脚
sbit OLED_DC = P1^1;    // DC引脚
sbit OLED_DIN = P1^2;   // DIN引脚
sbit OLED_CLK = P1^3;   // CLK引脚
sbit OLED_CS = P1^4;    // CS引脚// 姿态检测传感器相关定义
sbit MPU_SCL = P2^6;    // I2C时钟引脚
sbit MPU_SDA = P2^7;    // I2C数据引脚// 定义全局变量
float pitch = 0.0;       // 当前设备的俯仰角// OLED显示屏相关函数
void OLED_WrCmd(unsigned char cmd);
void OLED_WrDat(unsigned char dat);
void OLED_Init();
void OLED_SetPos(unsigned char x, unsigned char y);
void OLED_Fill(unsigned char bmp_data);
void OLED_ShowString(unsigned char x, unsigned char y, unsigned char *str);// I2C总线相关函数
void I2C_Start();
void I2C_Stop();
unsigned char I2C_WaitAck();
void I2C_Ack();
void I2C_NAck();
void I2C_SendByte(unsigned char dat);
unsigned char I2C_ReadByte();// MPU6050相关函数
void MPU_Init();
void MPU_WriteReg(unsigned char reg, unsigned char dat);
unsigned char MPU_ReadReg(unsigned char reg);
void MPU_ReadData(short *data);// 延时函数
void Delay(unsigned int n);// 主函数
void main() {unsigned char str[16];MPU_Init();   // 初始化MPU6050OLED_Init();   // 初始化OLED显示屏while (1) {short data[3];MPU_ReadData(data);   // 读取姿态传感器数据pitch = -atan2(data[1], data[2]) * (180.0 / 3.14159);   // 计算俯仰角度sprintf(str, "Pitch:%.2f", pitch);   // 格式化俯仰角数据OLED_ShowString(0, 0, str);   // 在OLED显示屏上显示俯仰角度Delay(100);}
}// OLED显示屏写命令
void OLED_WrCmd(unsigned char cmd) {unsigned char i;OLED_DC = 0;OLED_CS = 0;for (i = 0; i < 8; i++) {OLED_CLK = 0;if (cmd & 0x80) {OLED_DIN = 1;} else {OLED_DIN = 0;}OLED_CLK = 1;cmd <<= 1;}OLED_CS = 1;
}// OLED显示屏写数据
void OLED_WrDat(unsigned char dat) {unsigned char i;OLED_DC = 1;OLED_CS = 0;for (i = 0; i < 8; i++) {OLED_CLK = 0;if (dat & 0x80) {OLED_DIN = 1;} else {OLED_DIN = 0;}OLED_CLK = 1;dat <<= 1;}OLED_CS = 1;
}// OLED显示屏初始化
void OLED_Init() {OLED_RST = 0;Delay(100);OLED_RST = 1;Delay(100);OLED_WrCmd(0xae);   // 关闭显示OLED_WrCmd(0x00);   // 设置低列地址OLED_WrCmd(0x10);   // 设置高列地址OLED_WrCmd(0x40);   // 设置起始行地址OLED_WrCmd(0x81);   // 对比度设置OLED_WrCmd(0xcf);   // 设置对比度OLED_WrCmd(0xa1);   // 设置段重映射OLED_WrCmd(0xc8);   // 设置列重映射OLED_WrCmd(0xa6);   // 正常显示OLED_WrCmd(0xa8);   // 多路复用设置OLED_WrCmd(0x3f);   // 设置多路复用OLED_WrCmd(0xd3);   // 设置显示偏移OLED_WrCmd(0x00);   // 设置显示偏移OLED_WrCmd(0xd5);   // 设置显示时钟分频OLED_WrCmd(0x80);   // 设置显示时钟分频OLED_WrCmd(0xd9);   // 设置预充电周期OLED_WrCmd(0xf1);   // 设置预充电周期OLED_WrCmd(0xda);   // 设置COM硬件引脚配置OLED_WrCmd(0x12);   // 设置COM硬件引脚配置OLED_WrCmd(0xdb);   // 设置VCOMH电压倍率OLED_WrCmd(0x40);   // 设置VCOMH电压倍率OLED_WrCmd(0x8d);   // 设置DC-DC电压输出开关OLED_WrCmd(0x14);   // 设置DC-DC电压输出开关OLED_WrCmd(0xaf);   // 打开显示OLED_Fill(0x00);    // 清屏
}// OLED显示屏设置位置
void OLED_SetPos(unsigned char x, unsigned char y) {OLED_WrCmd(0xb0 + y);OLED_WrCmd(((x & 0xf0) >> 4) | 0x10);OLED_WrCmd((x & 0x0f) | 0x01);
}// OLED显示屏填充
void OLED_Fill(unsigned char bmp_data) {unsigned char y, x;for (y = 0; y < 8; y++) {OLED_WrCmd(0xb0 + y);OLED_WrCmd(0x00);OLED_WrCmd(0x10);for (x = 0; x < 128; x++) {OLED_WrDat(bmp_data);}}
}// OLED显示屏显示字符串
void OLED_ShowString(unsigned char x, unsigned char y, unsigned char *str) {unsigned char c = 0, i = 0;while (str[i] != '\0') {c = str[i] - 32;if (x > 120) {x = 0;y++;}OLED_SetPos(x, y);for (i = 0; i < 6; i++) {OLED_WrDat(F6x8[c][i]);}i++;x += 6;}
}// I2C总线开始信号
void I2C_Start() {MPU_SDA = 1;MPU_SCL = 1;Delay(1);MPU_SDA = 0;Delay(1);MPU_SCL = 0;
}// I2C总线停止信号
void I2C_Stop() {MPU_SDA = 0;MPU_SCL = 1;Delay(1);MPU_SDA = 1;Delay(1);
}// I2C总线等待应答信号
unsigned char I2C_WaitAck() {unsigned char ack;MPU_SDA = 1;Delay(1);MPU_SCL = 1;Delay(1);ack = MPU_SDA;MPU_SCL = 0;return ack;
}// I2C总线发送应答信号
void I2C_Ack() {MPU_SCL = 0;MPU_SDA = 0;Delay(1);MPU_SCL = 1;Delay(1);MPU_SCL = 0;MPU_SDA = 1;Delay(1);
}// I2C总线发送非应答信号
void I2C_NAck() {MPU_SCL = 0;MPU_SDA = 1;Delay(1);MPU_SCL = 1;Delay(1);MPU_SCL = 0;
}// I2C总线发送一个字节数据
void I2C_SendByte(unsigned char dat) {unsigned char i;for (i = 0; i < 8; i++) {MPU_SDA = (dat & 0x80) >> 7;dat <<= 1;Delay(1);MPU_SCL = 1;Delay(1);MPU_SCL = 0;Delay(1);}MPU_SDA = 1;Delay(1);MPU_SCL = 1;Delay(1);MPU_SCL = 0;
}// I2C总线读取一个字节数据
unsigned char I2C_ReadByte() {unsigned char i, dat;for (i = 0; i < 8; i++) {dat <<= 1;MPU_SCL = 1;Delay(1);dat |= MPU_SDA;MPU_SCL = 0;Delay(1);}return dat;
}// MPU6050初始化
void MPU_Init() {I2C_Start();I2C_SendByte(0xd0);   // 输入器件地址I2C_WaitAck();I2C_SendByte(0x6b);   // PWR_MGMT_1寄存器地址I2C_WaitAck();I2C_SendByte(0x00);   // 写0,唤醒设备I2C_WaitAck();I2C_Stop();
}// MPU6050写寄存器
void MPU_WriteReg(unsigned char reg, unsigned char dat) {I2C_Start();I2C_SendByte(0xd0);   // 输入器件地址I2C_WaitAck();I2C_SendByte(reg);    // 寄存器地址I2C_WaitAck();I2C_SendByte(dat);    // 数据I2C_WaitAck();I2C_Stop();
}// MPU6050读寄存器
unsigned char MPU_ReadReg(unsigned char reg) {unsigned char dat;I2C_Start();I2C_SendByte(0xd0);   // 输入器件地址I2C_WaitAck();I2C_SendByte(reg);    // 寄存器地址I2C_WaitAck();I2C_Start();I2C_SendByte(0xd1);   // 输出器件地址I2C_WaitAck();dat = I2C_ReadByte();  // 读取数据I2C_NAck();I2C_Stop();return dat;
}// MPU6050读取数据
void MPU_ReadData(short *data) {unsigned char i;unsigned char buf[14];I2C_Start();I2C_SendByte(0xd0);   // 输入器件地址I2C_WaitAck();I2C_SendByte(0x3b);   // 寄存器地址I2C_WaitAck();I2C_Start();I2C_SendByte(0xd1);   // 输出器件地址I2C_WaitAck();for (i = 0; i < 13; i++) {buf[i] = I2C_ReadByte();   // 读取数据I2C_Ack();}buf[13] = I2C_ReadByte();   // 读取数据I2C_NAck();I2C_Stop();// 数据转换data[0] = ((short)buf[0] << 8) | buf[1];data[1] = ((short)buf[2] << 8) | buf[3];data[2] = ((short)buf[4] << 8) | buf[5];
}

四、总结

这个项目是基于单片机设计的水平仪,使用了STC89C52作为主控芯片和MPU6050作为姿态检测传感器。其主要功能是检测当前设备的姿态,并计算出水平偏移值,最后通过OLED显示屏实时展示。

整个项目涉及到硬件和软件两个方面。硬件方面,使用STC89C52作为主控芯片,负责控制整个系统的运行和数据处理。MPU6050姿态检测传感器用于获取设备的姿态信息,包括加速度和角速度。OLED显示屏采用SPI接口的0.96寸显示屏,用于将计算得到的水平偏移值实时显示出来。

软件方面,编写嵌入式C程序来实现系统的功能。通过STC89C52与MPU6050进行通信,获取姿态传感器的原始数据。根据这些原始数据进行姿态计算,得到水平偏移值。再将计算得到的水平偏移值通过SPI接口发送给OLED显示屏,实时显示在屏幕上。

项目利用STC89C52和MPU6050实现了一个水平仪,能够检测设备的姿态并计算出水平偏移值,并通过OLED显示屏实时展示。这个水平仪可以在许多应用场景中使用,如建筑工地、航空航天等需要测量水平的领域。

相关文章:

基于单片机设计的水平仪(STC589C52+MPU6050)

一、前言 【1】项目背景 水平仪是一种常见的测量工具&#xff0c;用于检测物体或设备的水平姿态。在许多应用中&#xff0c;如建筑、制造和航空等领域&#xff0c;保持设备的水平姿态是非常重要的。为了实现实时的水平检测和显示&#xff0c;基于单片机设计的水平仪是一个常见…...

射频与微波综合测试仪-4958手持式微波综合测试仪

4958 微波综合测试仪 频率范围&#xff1a;1MHz&#xff5e;20GHz 4958手持式微波综合测试仪测量频率范围可达1MHz~20GHz&#xff0c;集电缆和天线驻波比测试、不连续点故障定位测试、插入损耗和增益测试、频谱分析、功率测量等多种功能于一体&#xff0c;携带方便&…...

Redis内存淘汰机制

Redis内存淘汰机制 引言 Redis 启动会加载一个配置&#xff1a; maxmemory <byte> //内存上限 默认值为 0 (window版的限制为100M)&#xff0c;表示默认设置Redis内存上限。但是真实开发还是需要提前评估key的体量&#xff0c;提前设置好内容上限。 此时思考一个问题…...

EXCEL——计算数据分散程度的相关函数

一、PERCENTIL函数 1.函数介绍 通常用来返回数据集给定百分点上的值。 2.函数解读 函数公式&#xff1a; PERCENTILE(数据, 百分点) 参数释义&#xff1a; 数据&#xff08;必填&#xff09;&#xff1a;待处理的数组或数据区域。 百分点&#xff08;必填&#xff09;&…...

详解如何使用Jenkins一键打包部署SpringBoot项目

目录 1、Jenkins简介 2、Jenkins的安装及配置 2.1、Docker环境下的安装​编辑 2.2、Jenkins的配置 3、打包部署SpringBoot应用 3.1、在Jenkins中创建执行任务 3.2、测试结果 1、Jenkins简介 任何简单操作的背后&#xff0c;都有一套相当复杂的机制。本文将以SpringBoot应…...

【JVM】内存区域划分、类加载机制(双亲委派模型图解)、垃圾回收(可达性分析、分代回收)

一、JVM简介 JVM (Java虚拟机) 是执行Java字节码的虚拟机。它是Java平台的核心&#xff0c;并且为Java代码提供了跨平台的能力。JVM 是一种虚拟的计算机&#xff0c;在其上运行的程序是Java字节码&#xff0c;它提供了Java代码在不同操作系统和硬件平台上执行的能力。JVM 将Ja…...

解决 requests 2.28.x 版本 SSL 错误

最近&#xff0c;在使用requests 2.28.1版本进行HTTP post传输时&#xff0c;您可能遇到了一个问题&#xff0c;即SSL验证失败并显示错误消息(Caused by SSLError(SSLCertVerificationError(1, [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get loc…...

hive数据质量规范

当谈到大数据处理和分析时&#xff0c;数据质量成为至关重要的因素。Hive作为一种常用的大数据查询和分析工具&#xff0c;也需要遵循一定的数据质量规范以确保数据的准确性、一致性和可靠性。本文将介绍Hive数据质量规范的相关内容&#xff0c;并提供代码示例来说明如何在Hive…...

Jenkinsfile+Dockerfile前端vue自动化部署

前言 本篇主要介绍如何自动化部署前端vue项目 其中&#xff0c;有两种方案&#xff1a; 第一种是利用nginx进行静态资源转发&#xff1b;第二种方案是利用nodejs进行启动访问&#xff1b; 各个组件版本如下&#xff1a; Docker 最新版本&#xff1b;Jenkins 2.387.3nginx …...

SQL server从安装到入门(一)

文章目录 彻底安装怎么安装&#xff1f;Polybase要求安装orcale jre 7更新 51或更高版本&#xff1f;安装完怎么配置&#xff1f;没有SSMS&#xff1f; 熟悉一下SMSS&#xff01; 根据本人实际安装和初步使用SQL server的过程中&#xff0c;经历的一些关键性的步骤和精品文章。…...

Unexpected WSL error错误处理备忘

运行docker时提示下图错误&#xff0c;看了下WSL好像没啥问题&#xff0c;看网上有人说需要重置下网络&#xff0c;命令是netsh winsock reset&#xff0c;重置完后果然好了...

计算机毕业设计 基于Vue的米家商城系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…...

Linux终端与交互式Bash

常用的Linux终端 GNOME Terminal&#xff1a;GNOME 桌面环境下的默认终端程序&#xff0c;支持多个选项卡和配置。Konsole&#xff1a;KDE 桌面环境下的默认终端程序&#xff0c;提供了丰富的功能和选项。Terminator&#xff1a;开源的终端程序&#xff0c;支持多个可调整大小…...

呕心整理的常用热门API大全

短信验证码&#xff1a;可用于登录、注册、找回密码、支付认证等等应用场景。支持三大运营商&#xff0c;3秒可达&#xff0c;99.99&#xff05;到达率&#xff0c;支持大容量高并发。通知短信&#xff1a;当您需要快速通知用户时&#xff0c;通知短信是最快捷有效的方式。短信…...

Redis7.2.3集群安装,新增节点,删除节点,分配哈希槽,常见问题

概念&#xff1a; 【Redis】高可用之三&#xff1a;集群&#xff08;cluster&#xff09; - 知乎 实操&#xff1a; Redis集群三种模式 主从模式 优势&#xff1a; 主节点可读可写 从节点只能读&#xff08;从节点从主节点同步数据&#xff09; 缺点&#xff1a; 当主节点…...

并行计算机系统结构基础

一、并行计算机系统结构 1.并行性 并行性&#xff1a;计算机系统在同一时刻或者同一时间间隔内 进行多种运算或操作 并行性包括两方面的含义 同时性&#xff1a;两个或两个以上的事件在同一时刻发生并发性&#xff1a;两个或两个以上的事件在同一时间间隔 内发生 从处理数…...

Ubuntu开启永久开启串口权限方法

sudo gedit /etc/udev/rules.d/70-ttyusb.rules//不存在就创建 在该文件中添加如下一行 KERNEL“ttyUSB*”, MODE“0777” 重启系统 sudo reboot...

zTree设置默认选中节点(当前组织默认选中)

/* 节点点击事件 */function onClick(e, treeId, treeNode) {var zTree $.fn.zTree.getZTreeObj("treeDemo"),nodes zTree.getSelectedNodes(),v "";//存储组织名称idd"";//存储组织IDnodes.sort(function compare(a,b){return a.id-b.id;});…...

结合 Django 和 Vue.js 打造现代 Web 应用

概要 在 Web 开发的世界里&#xff0c;Django 和 Vue.js 分别是后端和前端两个非常流行的框架。Django 以其强大的后端能力、快速开发以及安全性而著称&#xff0c;而 Vue.js 因其简洁、灵活和易于上手在前端开发领域广受欢迎。 本篇文章将详细介绍如何将 Django 与 Vue.js 结…...

【Linux网络】ssh服务与配置,实现安全的密钥对免密登录

目录 一、SSH基础 1、什么是ssh服务器 2、对比一下ssh协议与telnet协议 3、常见的底层为ssh协议的软件&#xff1a; 4、拓展 二、SSH软件学习 1、ssh服务软件学习 2、sshd公钥传输的原理&#xff1a; 3、ssh命令学习&#xff1a; 4、学习解读sshd服务配置文件&#x…...

自建ES7.10集群,使用OSS快照恢复数据测试

一、云上集群创建仓库 前置条件 创建云OSS bucket lcsc-es-snapshot,并获取到access_key_id,secret_access_key信息 授予oss bucket lcsc-es-snapshot相关方完全控制权限 创建一个名称为my_backup的仓库。 云上集群创建仓库。PUT _snapshot/my_backup/ {"type": &qu…...

电源线虚接,导致信号线发烫

音频板的信号是经过隔直电容接到音频板的。...

【23真题】难!985难度第一梯队!

今天分享的是23年华南理工大学811的信号与系统试题及解析 本套试卷难度分析&#xff1a;22年华南理工大学811考研真题&#xff0c;我也发布过&#xff0c;若有需要&#xff0c;戳这里自取&#xff01;本套试题难度中等偏上&#xff0c;只有十道大题&#xff0c;考察大家的综合…...

计算机网络———ipv6简解

文章目录 1.前言&#xff1a;2. ipv6简单分析&#xff1a;2.1.地址长度对比2.2. ipv6包头分析2.3. ipv6地址的压缩表示&#xff1a;2.3. NDP&#xff1a;2.4. ipv6地址动态分配&#xff1a; 1.前言&#xff1a; 因特网地址分配组织)宣布将其最2011年2月3日&#xff0c;IANA (In…...

SQL之开窗函数

文章目录 主要内容一.介绍1.特点2.作用 二.语法及示例1.语法代码如下&#xff08;示例&#xff09;: 2.示例代码如下&#xff08;示例&#xff09;:代码如下&#xff08;示例&#xff09;:代码如下&#xff08;示例&#xff09;: 总结 主要内容 SQL的开窗函数是SQL语言中非常强…...

OpenAI与微软合作,构建 ChatGPT 5 模型;10天准确天气预报

&#x1f989; AI新闻 &#x1f680; OpenAI与微软合作&#xff0c;构建 ChatGPT 5 模型&#xff0c;下一代人工智能或拥有超级智能 摘要&#xff1a;OpenAI首席执行官 Sam Altman 在接受采访时表示&#xff0c;OpenAI正在与微软合作构建下一代人工智能模型 ChatGPT 5&#x…...

git简明指南

目录 安装 创建新仓库 检出仓库 工作流 安装 下载 git OSX 版 下载 git Windows 版 下载 git Linux 版 创建新仓库 创建新文件夹&#xff0c;打开&#xff0c;然后执行 git init 以创建新的 git 仓库。 检出仓库 执行如下命令以创建一个本地仓库的克隆版本&…...

软件测试面试-如何定位线上出现bug

其实无论是线上还是在测试出现bug&#xff0c;我们核心的还是要定位出bug出现的原因。 定位出bug的步骤&#xff1a; 1&#xff0c;如果是必现的bug&#xff0c;尽可能的复现出问题&#xff0c;找出引发问题的操作步骤。很多时候&#xff0c;一个bug的产生&#xff0c;很多时…...

5、鸿蒙项目远程调试

一、注册华为账号&#xff0c; 如果是华为手机&#xff0c;并注册了账号可能跳过此步骤&#xff0c;如果使用邮箱注册&#xff0c;此邮箱一定是要正确的邮箱&#xff0c;此处需要使用邮箱获取验证码 注册地址&#xff1a;‎ 1、进入注册页面&#xff0c;输入手机号等信息后点…...

什么是原生IP与广播IP?如何区分?为什么需要用原生IP?

在代理IP中&#xff0c;我们常常听到原生IP与广播IP&#xff0c;二者有何区别&#xff1f;如何区分呢&#xff1f;下面为大家详细讲解。 一、什么是原生IP 原生IP地址是互联网服务提供商&#xff08;ISP&#xff09;直接分配给用户的真实IP地址&#xff0c;无需代理或转发。此…...