单片机学习笔记---DS18B20温度传感器
目录
DS18B20介绍
模拟温度传感器的基本结构
数字温度传感器的应用
引脚及应用电路
DS18B20的原理图
DS18B20内部结构框图
暂存器内部
单总线介绍
单总线电路规范
单总线时序结构
初始化
发送一位
发送一个字节
接收一位
接收一个字节
DS18B20操作流程
指令介绍
ROM指令
功能指令
DS18B20数据帧
温度变换
温度读取
温度存储格式
DS18B20介绍
DS18B20是一种常见的数字温度传感器,其控制命令和数据都是以数字信号的方式输入输出,相比较于模拟温度传感器,具有功能强大、硬件简单、易扩展、抗干扰性强等特点
测温范围:-55°C 到 +125°C
通信接口:1-Wire(单总线)
其它特征:可形成总线结构(可以在一条通信线上挂很多设备,这样就可以节省IO口,这样单片机一个IO口就可以读很多个温度传感器)、内置温度报警功能、可寄生供电(因为数字温度传感器的三个引脚当中,有两个是供电的,一个是数据输入输出的,如果使用寄生供电的话,那么VCC电源正极就不用接了,直接一个数据线和一个GND就可以实现数据通信,这样十分省线路)
DS18B20这个模块就在我们开发板上的这个位置:
这个温度传感器是可以拔下来的
模拟温度传感器的基本结构
通过上图我们知道模拟温度传感器的结构比较复杂,我们最后读取到的温度只是正比于我们的温度,我们还得对这个数据进行一定的系数配比,才能测出我们真正的温度。
数字温度传感器的应用
那数字温度传感器又是怎样应用的呢?
比如下面的这个DS18B20:
它里面集成了模拟温度传感器和微控制器。其实它里面也是有芯片的,它相当于把整个模拟温度传感器的结构合起来变成一个芯片,然后它内部读取内部的模拟温度传感器,然后通过内部转化(内部有一些控制器把温度数据读出来),把温度存在里面的RAM里面。我们只需要通过引脚和单总线(1-Wire)通信协议把这个温度给转化读取出来。而且整个转化的过程中都是数字量输入输出的,所以也不需要我们的单片机有AD转换这个功能,也不需要外部AD芯片,因此应用起来比较简单。
引脚及应用电路
这个数字温度传感器的封装跟三极管一样的封装,叫做TO92封装。
PS:VDD和VCC的意思基本一样
DS18B20所接的上拉电阻和I2C所接的上拉电阻功能是一样的,都是为了实现总线操作。
DS18B20的原理图
原理图上这个模块没有接上拉电阻是因为我们单片机的IO口上已经接了上拉电阻
DS18B20内部结构框图
PS:64-BIT ROM:作为器件地址,用于总线通信的寻址;
SCRATCHPAD(暂存器):用于总线的数据交互;
EEPROM:用于保存温度触发阈值和配置参数。
其中这部分是寄生供电电路,有了它可以省去VDD,省去VDD之后总得有电源的正极吧,那个电源就是从DQ进来的。
比如,正常的来说这个电路就是上图所画的路径,但是如果说那个VDD没有接的话,那这条路显然是没有电源正极的,这时它就会从DQ取出电源正极然后通过这个二极管,然后向内部的控制器供电。
这个电容是相当于一个电池,如果DQ是高电平时,则就可以给这个电容充电,当DQ是低电平是,这个cpp就提取电源给内部。
如果采用这种寄生供电的话,对于内部比较耗电的操作,我们还需要给这个DQ一个强上拉,因为我们的上拉电阻比较弱,通过的电流比较小,不能达到温度传感器强电流工作时的需要。
给它一个强上拉就相当于给它一个非常高的电源正极,以达到内部供电的稳定。
这里是一个电源供给的供应,它可以感应那个外部VDD是否存在,如果不存在,它会调节内部的结构来省电,或者调节内部的一些执行操作逻辑。
当然这个寄生供电的结构是自动运行的,我们不需要对程序进行任何的配置。如果采用寄生供电,直接把这个外部VDD接到GND就行了。
这次我们的程序将不会用到寄生供电,因为寄生供电还需要一个强上拉,而我们的电路板没有强上拉的电路。我们直接使用这个外部VDD供电,就不用考虑寄生供电的部分了。
DQ的数据端口过来的时候首先要经过64位的ROM(只读存储器)和1-Wire port,这里的ROM真的是只读存储器,是一种光刻ROM,标识着ID号(每一个DS18B20都有一个全球唯一的ID号,用来表明它的身份),在通信的时候作为器件的地址,用于总线的一个通信选址(就像上一节所讲的I2C总线也有一个选址一样,比如固定地址1010和三位可编程地址,这就是器件的地址),但是这里我们没有可编程地址,它所有的地址都是存在了这个64位的ROM里面,而且是不可更改的。
DQ首先进来时是到1-Wire接口这里来,就像I2C一样刚要通信时就要发出地址,1-Wire接口就像是整个DS18B20通信的一个大门,外部发送正确的地址,才能通过这个大门。当然我们后面还会学习它可以选择指令跳过这个大门(如果只有一个设备在总线上的话我们可以选择跳过这个大门)。
至此,我们知道1-Wire接口这里是用来寻址的,当它选址进来之后就会进到内存的一个控制逻辑,我们可以把它理解为一个房子的管家,如果我们通过大门就会与它进行交互,它直接掌管着内部的一个RAM。
这个RAM这里的英文叫做Scratch Pad,这个东西叫作暂存器,实际上就是一种RAM,里面存的就是温度等等一些配置的参数。它也就是数据交互的寄存器,用于总线的数据交互,就相当于当我们想要通信的时候跳过大门和管家进行交流,管家就会知道我们想要干什么,如果是想要读取,它就会把这个暂存器或是说这个RAM的东西放到总线上,如果是想要写入的话,它就会把我们的数据写到这个暂存器里面,或者是执行一些指令,都是由这一部分(管家)来完成的。
这个RAM只是一个存数据的一个盒子,它跟这些设备进行关联:
这是它内部的一些设备(实实在在的设备)。其中第一个就是Temperature Sensor温度传感器。它相当于内部的一个模拟温度传感器,它自动把这些温度转换。当我们发出指令让它开始温度转换的时候,这个温度传感器就工作,然后把它的数据放在我们的RAM里面,然后再进行数据交互,就可以把温度值拿出来了。
其他的这些设备是用于更高阶的功能。比如alarm high Trigger报警高触发寄存器,用来存储温度的上限阈值,用来温度报警的,它的一个存储器是E2PROM(掉电不丢失数据)
接着下面那个设备就是与alarm high Trigger对应的报警低触发寄存器,也是E2PROM
再下来就是配置寄存器,这个寄存器里面存的就一个东西,就是设备分辨率和精度,分辨率是可以调的,出厂默认最高分辨率是0.0625摄氏度,我们可以通过配置这个寄存器里面的两位(其他位没有用),配置之后可以把精度降低,分辨率就会最低是0.5摄氏度,温度转换的速度就会提升。它也是E2PROM。
最后一个就是8位的CRC Generator(CRC生成器),CRC在我们这个领域里面是一个比较出名的一种校验码的算法,它会通过一种特殊的格式把我们这个RAM之前的一些数据进行一个校验,然后得到一个校验码放在后面,用于通信时判断数据是否正确。举个例子,我们身份证的最后一位就是校验码,是把我们前面的数字做一个运算得到的一个校验码,当输身份证输错了的时候,它都能校验出来,而且这个CRC校验是一个校正率比较高的一个校验码。
当然本节的代码演示并不会涉及到这个内容,我们只需要把暂存器的温度读出来。
暂存器内部
我们接下来看一下这个暂存器(红色标识)内部是怎么存的和左边的三个EEPROM(蓝色标识)是怎么交互的,绿色标识的两个设备是实实在在的设备,是不会变的,所以我们先不用介绍。
那我们来具体介绍一下这个暂存器,它内部总共是9个字节,其中前两位存的分别是最低有效位和最高有效位,这两个字节共同组成温度的一个数据。括号里面的是一个默认值,如果上电直接读的话,默认就是85摄氏度。
接下来是暂存器的字节2~字节4和EEPROM上的字节一样,为什么呢?因为当我们往暂存器里写东西的时候,我们要发送一条指令把暂存器里的东西复制到EEPROM里面。当然我们也可以发送指令将EEPROM里面的东西回调到暂存器里面。
其实暂存器是运行的时候实实在在参考的,EEPROM只做一个永久存储。在上电的时候会自动把EEPROM三个字节搬到RAM里面,方便里面判断。
再往下三个字节时保留位,在本节没有使用,以后如果器件升级的话可能会用到。
最后一位是CRC校验,就是把前面八个字节做一个运算,算出来一个校验位跟在后面。
我们把整个校验位读出来之后,可以进行相同的运算,我们在程序里运算,看看是不是得到这个校验位。如果是的话证明数据是正确的,否则是有问题的。
总结我们最后的操作流程就是:我们最后会发送一条温度转换指令,我们的硬件(实实在在的传感器)就会把我们的这个温度值放在我们的暂存器RAM里面,然后我们再发送一条读暂存器的指令,紧接着跟着我们的读时序就会把我们的暂存器给读出来。这样我们就可以根据这两个字节得到我们的温度。
那么我们的问题就转变为下一个问题就是如何通过我们的单总线来发送指令,来接收我们的暂存器。发送指令本身也是发送数据,接收暂存器就是接收数据,咋么来解决这两个问题?
单总线介绍
单总线(1-Wire BUS)是由Dallas公司开发的一种通用数据总线
一根通信线:DQ
异步(没有单独磁通线)、半双工(只有一根线,要在这根线上负责数据的来回,及发送又接收)
单总线只需要一根通信线即可实现数据的双向传输,当采用寄生供电时,还可以省去设备的VDD线路,此时,供电加通信只需要DQ和GND两根线
上图左边是DS18B20,右边的那个是温湿度传感器(可以测湿度和温度),这两种设备都利用了单总线。
工程项目上,一般单总线的使用比I2C总线少。
单总线电路规范
设备的DQ均要配置成开漏输出模式
DQ添加一个上拉电阻,阻值一般为4.7KΩ左右
若此总线的从机采取寄生供电,则主机还应配一个强上拉输出电路
不使用寄生供电时的电路(本节代码主要用这种独立供电模式):
使用寄生供电时的电路(稍作了解):
将VDD接到GND上,只需要GND和DQ两根线,然后主机还接上一个强上拉输出电路
这里有个电子开关,当左边给个低电平时,开关闭合,就是强上拉
当左边给个高电平时,开关断开,就是弱上拉,这时满足它基本的操作还是可以的,但是在温度转换或者EEPROM读写的时候这些耗电操作是必须要强上拉才能满足内部的工作要求的。
单总线时序结构
初始化
初始化:主机将总线拉低至少480us,然后释放总线,等待15~60us(可以取中间值)后,存在的从机会拉低总线60~240us(可以取中间值)以响应主机,之后从机将释放总线
可以将这个时序分成两个部分
发送一位
发送一位:主机将总线拉低60~120us(最大不能超过120us),然后释放总线,表示发送0;主机将总线拉低1~15us,然后释放总线,表示发送1。从机将在总线拉低30us后(典型值)读取电平,整个时间片应大于60us
这个也可以分为两部分
发送一个字节
发送一个字节:连续调用8次发送一位的时序,依次发送一个字节的8位(低位在前)
接收一位
接收一位:主机将总线拉低1~15us,然后释放总线,并在拉低后15us内读取总线电平(尽量贴近15us的末尾),读取为低电平则为接收0,读取为高电平则为接收1 ,整个时间片应大于60us
接收一个字节
接收一个字节:连续调用8次接收一位的时序,依次接收一个字节的8位(低位在前)
DS18B20操作流程
初始化:从机复位,主机判断从机是否响应
ROM操作:ROM指令+本指令需要的读写操作
(ROM操作就相当于我们前面说的要进入这个大门)
功能操作:功能指令+本指令需要的读写操作
(功能操作就相当于RAM操作,访问里面的数据,对里面的数据进行读写)
指令介绍
ROM指令
SEARCH ROM [F0h]:搜寻ROM,具体的操作流程是比较复杂的,本节不用管
READ ROM [33h]:读ROM
MATCH ROM [55h]:匹配ROM,相当于I2C想要读写操作时首先要发从机地址,那匹配ROM紧跟着就会发送设备ROM的地址,我们就可以选择得到对应的开门的钥匙,和某一个设备单独通信了。
SKIP ROM [CCh]:跳过ROM,本节就是使用这个,因为我们只有一个设备连在上面,所以根本不需要绳子,先跟谁交流还不知道吗?当然如果线上有多个设备,就不能使用跳过ROM。
ALARM SEARCH [ECh]:报警ROM,这个也是在多个设备时使用,我们的温度有上限阈值和下限阈值,如果某个设备处于报警状态,那我可以报警搜索获取哪个设备会有报警。这个操作和搜寻ROM一样比较复杂,本节不会使用。
功能指令
CONVERT T [44h]:温度变换,我们想要读取温度之前,首先要执行温度变换,但我们执行完ROM指令之后,如果发送这条指令,它就会在这里(如下图所示)启动温度变化,然后把这个温度传感器的数值读取出来放到暂存器里面,相当于暂存器温度值更新:
WRITE SCRATCHPAD [4Eh]:写暂存器,如果调用这条指令,再跟写的一个时序,它就会把我们的字节写入到中间三个字节
READ SCRATCHPAD [BEh]:读暂存器,在温度读取的时候会用到这条指令,如果调用这条指令,再调用接收字节这个时序,那DS18B20就会依次将暂存器的内容读出来,最后会读出来CRC,然后这个指令也解出来。我们得到这么多字节后就可以进行数据的操作处理了
但我们本节只想读取温度,所以读两个字节,这个时序就不需要继续执行了,后面都不需要,只需要这两个字节就可以获取温度了
COPY SCRATCHPAD [48h]:复制暂存器,当从机接收到这条指令的时候,它就会暂存器里面的这三个字节给写入到这个EEPROM里面。如果接收这条指令就相当于左边三个值就会覆盖原来的值(右边)。如果我们想要掉电不丢失,我们先写暂存器,把放在里面,然后再调用这条指令,复制暂存器,它就会把左边三个值写入EEPROM里面。
RECALL E2 [B8h]:recall EEPROM,和上一条复制暂存器指令是相反的过程,如果发这条指令,它就会把EEPROM的三个字节给覆盖到暂存器里的那三个字节里面去。
READ POWER SUPPLY [B4h]:读取设备的供电模式,发完这条指令后,后面会跟着读取一位的时序,它就会响应我们的供电到底是寄生供电还是独立供电
也就是我们之前之前讲的这里,会感应供电模式是寄生供电还是独立供电
我们为什么要读取这里是寄生供电还是独立供电呢?
因为在寄生供电的时候,温度变换之后需要强上拉,那么什么时候需要呢?我们就可以先读一下这个位,看看是不是在寄生供电,如果不是在寄生供电就不需要了强上拉了。本节是独立供电模式,所以也不需要这条指令。
这些所有的指令中重点是三个指令:跳过ROM,温度变换,读暂存器。
DS18B20数据帧
温度变换
温度变换:初始化→跳过ROM →开始温度变换
PS:CCH就是0xCC字节,H是16进制的后缀
温度读取
温度读取:初始化→跳过ROM →读暂存器→连续的读操作
温度存储格式
高字节和低字节合起来成了这16位数据
这16位数据的前5位表示符号位,如果是负的,那么这5位全是1,如果是正的,这5位全是0
后四位是存小数的,
bit3是1的话,代表存的是0.5,
bit2是1的话,代表存的是0.25,
bit1是1的话,代表存的是0.125,
bit0是1的话,代表存的是0.0625
所以最低位变化一次,整个温度值变化的是0.0625
剩下的bit4到bit10都是温度的整数部分
我们这张表上的数值都是例子
注意:存储是以二进制的补码形式来存储的。对负数的补码的整个位进行取反加1就能得到相应的正数值,比如-0.5度的二进制取反的话就是0000 0000 0000 0111,加1就变成0000 0000 0000 1000,结果正好是正0.5的二进制数值
以上就是本节内容,下一节开始代码演示!
相关文章:

单片机学习笔记---DS18B20温度传感器
目录 DS18B20介绍 模拟温度传感器的基本结构 数字温度传感器的应用 引脚及应用电路 DS18B20的原理图 DS18B20内部结构框图 暂存器内部 单总线介绍 单总线电路规范 单总线时序结构 初始化 发送一位 发送一个字节 接收一位 接收一个字节 DS18B20操作流程 指令介…...

【网络】WireShark过滤 | WireShark实现TCP三次握手和四次挥手
目录 一、开启WireShark的大门 1.1 WireShark简介 1.2 常用的Wireshark过滤方式 二、如何抓包搜索关键字 2.1 协议过滤 2.2 IP过滤 编辑 2.3 过滤端口 2.4 过滤MAC地址 2.5 过滤包长度 2.6 HTTP模式过滤 三、ARP协议分析 四、WireShark之ICMP协议 五、TCP三次握…...

开源免费的Linux服务器管理面板分享
开源免费的Linux服务器管理面板分享 一、1Panel1.1 1Panel 简介1.2 1Panel特点1.3 1Panel面板首页1.4 1Panel使用体验 二、webmin2.1 webmin简介2.2 webmin特点2.3 webmin首页2.4 webmin使用体验 三、Cockpit3.1 Cockpit简介3.2 Cockpit特点3.3 Cockpit首页3.4 Cockpit使用体验…...
leetcode算法-位运算
位运算,直接在二进制上进行的按位操作,位运算的种类如下: 1.按位异或^:异或的含义是操作的两位不同,则结果为1,相同则结果为0,所以两个相同的数异或,结果应该是0,3^3的结果是0,3^4的…...
「MySQL」约束
概述 分类 约束描述关键字非空约束限制该字段的数据不能为 nullNOT NULL唯一约束保证该字段的所有数据都是唯一、不重复的UNIQUE主键约束主键是一行数据的唯一标识,要求非空且唯一PRIMARY KEY默认约束保存数据时,如果未指定该字段的值,则采…...

C语言:详解操作符(下)
上一篇链接:C语言:详解操作符(上)摘要: 在上篇文章中,我们已经讲过位操作符等涉及二进制的操作符,这些有助于帮助我们后期理解数据如何在计算机中运算并存储,接下来本篇将更多的讲述…...

Vue3.0(六):VueX 4.x详解
Vuex4状态管理 什么是状态管理 在开发中,我们的应用程序需要处理各种各样的数据,这些数据需要保存在应用程序的某一个位置,对于这些数据的管理,就是 状态管理目前前端项目越来越复杂,多组件共享同一数据的状态很常见…...
突破编程_C++_面试(基础知识(13))
面试题45:C中的字符串如何存储 在C中,字符串可以通过多种方式存储,但最常见和推荐使用的方式是通过 std::string 类,该类位于 <string> 头文件中。std::string 是一个类模板的实例,通常用于存储字符数组&#x…...

掌握C语言文件操作:从入门到精通的完整指南!
✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C语言学习 贝蒂的主页:Betty‘s blog 1. 什么是文件 文件其实是指一组相关数据的有序集合。这个数据集有一个名称&a…...

JavaEE作业-实验二
目录 1 实验内容 2 实验要求 3 思路 4 核心代码 5 实验结果 1 实验内容 实现两个整数求和的WEB程序 2 实验要求 ①采用SpringMVC框架实现 ②数据传送到WEB界面采用JSON方式 3 思路 ①创建一个SpringMVC项目,配置好相关的依赖和配置文件。 ②创建一个Con…...
2月8号作业
Sqlite3系统命令 .quit 退出数据库 .exit 退出数据库 .help 显示帮助信息,获取所有系统命令 .table 查看当前数据库下的所有表格 .schema 查看表的结构 Sqlite3语句 创建表格: create table 表名 (字段名 数据类型, 字段名 数据类型); create table if…...

08:K8S资源对象管理|服务与负载均衡|Ingress
K8S资源对象管理|服务与负载均衡|Ingress DaemonSet控制器污点策略容忍容忍污点 其他资源对象Job资源对象 有限生命周期CronJob资源对象 集群服务服务自动发现headless服务 实现服务定位与查找 服务类型 Ingress插件 发布服务的方式 DaemonSet控制器 Da…...

HarmonyOS 横屏调试与真机横屏运行
我们有些程序 需要横屏才能执行出效果 我们在预览器上 点击如下图指向出 就进入一个横屏调试了 但 我们真机运行 依旧是竖着的 我们如下图 找到 module.json5 在 abilities 下面 第一个对象 最下面 加上 "orientation": "landscape"然后 我们再真机运…...

Javaweb基础-tomcat,servlet
一.配置文件基础: properties配置文件: 由键值对组成 键和值之间的符号是等号 每一行都必须顶格写,前面不能有空格之类的其他符号 xml配置文件:(xml语法HTML语法HTML约束)xml约束-DTD / Schema DOM4…...

HCIA-HarmonyOS设备开发认证V2.0-3.2.轻量系统内核基础-中断管理
目录 一、中断基础概念二、中断管理使用说明三、中断管理模块接口四、代码分析(待续...)坚持就有收获 一、中断基础概念 在程序运行过程中,出现需要由 CPU 立即处理的事务时,CPU 暂时中止当前程序的执行转而处理这个事务…...

【开源】JAVA+Vue+SpringBoot实现就医保险管理系统
目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 科室档案模块2.2 医生档案模块2.3 预约挂号模块2.4 我的挂号模块 三、系统展示四、核心代码4.1 用户查询全部医生4.2 新增医生4.3 查询科室4.4 新增号源4.5 预约号源 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVue…...

Stable Diffusion 模型下载:DreamShaper XL(梦想塑造者 XL)
本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十 下载地址 模型介绍 DreamShaper 是一个分格多样的大模型,可以生成写实、原画、2.5D 等…...

【机器学习】数据清洗之处理异常点
🎈个人主页:甜美的江 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:机器学习 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步…...
JavaScript学习之旅10------掌握jQuery:实用应用案例深度解析
目录 写在开头1. jQuery基础知识回顾1.1. 选择器1.2. 事件1.3. 效果1.4. DOM操作1.5. AJAX 2. 实用应用案例分析2.1. 动态内容加载2.2. 表单验证2.3. 图像滑动门效果2.4. 创建动态导航菜单 3. 高级技巧与最佳实践3.1. 优化jQuery代码的性能3.2. jQuery插件的使用和自定义3.3. j…...
017_逆向工程搭建和使用
文章目录 启动代码生成器然后访问第一步处理:前端代码删除逆向生成的代码中有好多东西要引入创建gulimall-common插曲:修改模块名dao层entity层service层controllerRQuery文件当中的报错☆ 调整renren-generator的逆向工程逆向生成代码当中有什么总结...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
PostgreSQL 与 SQL 基础:为 Fast API 打下数据基础
在构建任何动态、数据驱动的Web API时,一个稳定高效的数据存储方案是不可或缺的。对于使用Python FastAPI的开发者来说,深入理解关系型数据库的工作原理、掌握SQL这门与数据库“对话”的语言,以及学会如何在Python中操作数据库,是…...