Skip to content

Commit bf9996e

Browse files
committed
add: 18b20
1 parent 5194d6e commit bf9996e

5 files changed

Lines changed: 133 additions & 1 deletion

File tree

docs/tutorial-extras/bmp180.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ BMP180 使用I²C通信接口,是专为测量大气压力而设计的基本传
3939

4040
:::
4141

42-
开头引用`Adafruit_BMP085`包,并实例化对象`bmp`,后续仅需调用`bmp`对象即可使用BMP180
42+
开头引用`Adafruit_BMP085`包,并实例化对象`bmp`,后续仅需调用`bmp`对象即可使用BMP180
4343

4444
```cpp
4545
#include <Adafruit_BMP085.h>

docs/tutorial-extras/ds18b20.md

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
---
2+
title: 温度传感器 DS18B20
3+
order: 8
4+
icon: thermometer
5+
---
6+
7+
## 简介
8+
9+
本章介绍使用Air001开发板驱动 DS18B20。
10+
11+
::: tip
12+
13+
DS18B20 是数字温度传感器,使用1Wire(单总线)通信接口,只需要一条数据线 (和地线) 即可与处理器进行数据传输。
14+
器件可以工作在-55°C至+125°C范围,在-10°C至+85°C范围内测量精度为±0.5°C。
15+
每个DS18B20具有唯一的64位序列号,从而允许多个DS18B20挂接在同一条1-Wire总线。
16+
17+
:::
18+
19+
## 硬件准备
20+
21+
-[☁️ Air001开发板入门](/tutorial-advanced/Air001_start.html),将`Air001``DAPLink调试器`使用排针排母连接。
22+
23+
-`DS18B20`模块与`Air001开发板`,按如下表格进行相连:
24+
25+
| DS18B20 | Air001 |
26+
| :-----: | :----: |
27+
| GND | GND |
28+
| VCC | 3.3V |
29+
| DQ | PA_5 |
30+
31+
::: warning
32+
33+
如果你是直接连接的`DS18B20`元器件,你需要为`DQ`进行上拉操作。
34+
(比如在`VCC``DQ`之间连接一颗`4.7K电阻`
35+
36+
:::
37+
38+
## 软件部分
39+
40+
首先,安装`DallasTemperature`库,并选择`全部安装`以安装所需依赖。
41+
42+
:::details 打开Arduino管理库,进行安装
43+
44+
可以打开Arduino管理库,找到`Adafruit DallasTemperature Library`库,并选择`全部安装`以安装所需依赖。
45+
46+
![库管理器中的 Adafruit DallasTemperature Library](img/QQ20230824141517.png)
47+
48+
![全部安装](img/QQ20230824141534.png)
49+
50+
:::
51+
52+
为了保证单总线的时序保持正常,我们需要将芯片主频设置为最高的 48M。
53+
54+
:::details 在Arduino中设置芯片主频
55+
56+
![设置芯片主频](img/EB3567B1-7F1A-4da0-A8C6-5F24503D9588.png)
57+
58+
:::
59+
60+
开头引用`OneWire`包与`DallasTemperature`包,并实例化对象`sensors`,后续仅需调用`sensors`对象即可使用DS18B20。
61+
62+
```cpp
63+
// 引用必要的库
64+
#include <OneWire.h>
65+
#include <DallasTemperature.h>
66+
67+
// 初始化一个单总线对象,设置使用PA_5引脚进行通信
68+
OneWire oneWire(PA_5);
69+
// 初始化一个传感器对象,使用刚新建的单总线对象
70+
DallasTemperature sensors(&oneWire);
71+
```
72+
73+
在`setup()`函数中初始化串口与`sensors`对象:
74+
75+
```cpp
76+
void setup() {
77+
//初始化串口
78+
Serial.begin(9600);
79+
//初始化传感器库
80+
sensors.begin();
81+
}
82+
```
83+
84+
`loop()`函数中添加如下代码:
85+
86+
```cpp
87+
void loop() {
88+
Serial.print("开始获取温度信息...");
89+
sensors.requestTemperatures(); //发出获取温度的请求
90+
Serial.println("获取完成");
91+
// 我们只取第一个传感器的温度信息
92+
float tempC = sensors.getTempCByIndex(0);
93+
94+
//检查一下是不是真的获取成功了
95+
if (tempC != DEVICE_DISCONNECTED_C) {
96+
Serial.print("获取到的温度为:");
97+
Serial.print(tempC);
98+
Serial.println("℃");
99+
} else {
100+
Serial.println("数据读取失败!");
101+
delay(500);
102+
}
103+
Serial.println();
104+
}
105+
```
106+
107+
- 使用`sensors.requestTemperatures`方法,尝试获取温度。
108+
- 使用`sensors.getTempCByIndex`方法,获取到第一个设备的温度值。
109+
- 如果成功获取,将温度值打印出来
110+
111+
## 输出结果
112+
113+
在串口监视器中将波特率调至9600,可观察到当前的信息,如下:
114+
115+
```log
116+
开始获取温度信息...获取完成
117+
获取到的温度为:27.19℃
118+
119+
开始获取温度信息...获取完成
120+
获取到的温度为:27.25℃
121+
122+
开始获取温度信息...获取完成
123+
获取到的温度为:27.19℃
124+
125+
开始获取温度信息...获取完成
126+
获取到的温度为:27.25℃
127+
128+
开始获取温度信息...获取完成
129+
获取到的温度为:27.19℃
130+
131+
开始获取温度信息...
132+
```
18.5 KB
Loading
13 KB
Loading
10.2 KB
Loading

0 commit comments

Comments
 (0)