上海維立勝衡傳感器有限公司
閱讀:79發(fā)布時(shí)間:2025-3-3
首先,我們需要了解DS18B20溫度傳感器。DS18B20溫度傳感器是一款1線數(shù)字溫度傳感器。每個(gè)傳感器都有一個(gè)的64位序列號(hào),這意味著可以在同一數(shù)據(jù)總線上使用許多傳感器。這對(duì)于數(shù)據(jù)記錄和溫度控制項(xiàng)目特別有用。
DS18B20溫度傳感器的主要規(guī)格如下:
1.通過1線總線通信進(jìn)行通信
2.工作溫度范圍:-55°C至125°C
3.精度+/-0.5℃(范圍-10℃至85℃)
4.引腳從左到右:個(gè)引腳是接地,第二個(gè)引腳是數(shù)據(jù),最右邊的引腳是電壓控制電路。
連接DS18B20溫度傳感器時(shí),需要在VCC和數(shù)據(jù)線之間添加一個(gè)4.7k歐姆的電阻。以下使用Arduino IDE通過ESP32讀取三個(gè)DS18B20溫度傳感器的溫度的示例:

Arduino IDE有一個(gè)附加組件,允許使用Arduino IDE及其編程語言對(duì)ESP32進(jìn)行編程。在上傳代碼之前,需要在Arduino IDE中安裝兩個(gè)庫。OneWire庫和Dallas Temperature library庫。
每個(gè)DS18B20溫度傳感器都分配有一個(gè)序列號(hào)。首先,您需要找到該編號(hào)來相應(yīng)地標(biāo)記每個(gè)傳感器。您需要這樣做,以便稍后您知道您正在從哪個(gè)傳感器讀取溫度。
將以下代碼上傳到ESP32。確保是正確的板和COM端口。
/*
* Rui Santos
* Complete Project Details
*/#Include
// Based on the OneWire library example
OneWire ds(4); //data wire connected to GPIO 4
void setup(void) {
Serial.begin(115200);
}void loop(void) {
byte i;
byte addr[8];
if (!ds.search(addr)) {
Serial.println(" No more addresses.");
Serial.println();
ds.reset_search();
delay(250);
return;
}
Serial.print(" ROM =");
for (i = 0; i < 8; i++) {
Serial.write(' ');
Serial.print(addr[i], HEX);
}
}
一次僅連接一個(gè)傳感器以查找其地址(或連續(xù)添加一個(gè)新傳感器),以便能夠通過其地址識(shí)別每個(gè)傳感器。然后,可以為每個(gè)傳感器添加物理標(biāo)簽。以9600的波特率打開串行監(jiān)視器,得到如下內(nèi)容:

取消選中“自動(dòng)滾動(dòng)”選項(xiàng),以便能夠復(fù)制地址。在該例子中,有以下地址:
傳感器1:28 FF 77 62 40 17 4 31
傳感器2:28 FF B4 6 33 17 3 4B
傳感器3:28 FF A0 11 33 17 3 96
從同一公共數(shù)據(jù)總線上的多個(gè)傳感器獲取溫度非常簡(jiǎn)單。下面的示例代碼從每個(gè)傳感器讀取攝氏溫度和華氏溫度,并在串行監(jiān)視器中打印結(jié)果。
/*
* Rui Santos
* Complete Project Details
*/// Include the libraries we need
#Include
#Include// Data wire is connected to GPIO15
#define ONE_WIRE_BUS 15
// Setup a oneWire instance to communicate with a OneWire device
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature sensor
DallasTemperature sensors(&oneWire);DeviceAddress sensor1 = { 0x28, 0xFF, 0x77, 0x62, 0x40, 0x17, 0x4, 0x31 };
DeviceAddress sensor2 = { 0x28, 0xFF, 0xB4, 0x6, 0x33, 0x17, 0x3, 0x4B };
DeviceAddress sensor3= { 0x28, 0xFF, 0xA0, 0x11, 0x33, 0x17, 0x3, 0x96 };void setup(void){
Serial.begin(115200);
sensors.begin();
}void loop(void){
Serial.print("Requesting temperatures...");
sensors.requestTemperatures(); // Send the command to get temperatures
Serial.println("DONE");
Serial.print("Sensor 1(*C): ");
Serial.print(sensors.getTempC(sensor1));
Serial.print(" Sensor 1(*F): ");
Serial.println(sensors.getTempF(sensor1));
Serial.print("Sensor 2(*C): ");
Serial.print(sensors.getTempC(sensor2));
Serial.print(" Sensor 2(*F): ");
Serial.println(sensors.getTempF(sensor2));
Serial.print("Sensor 3(*C): ");
Serial.print(sensors.getTempC(sensor3));
Serial.print(" Sensor 3(*F): ");
Serial.println(sensors.getTempF(sensor3));
delay(2000);
}
以115200的波特率打開串行監(jiān)視器,應(yīng)該會(huì)得到類似的結(jié)果:

儀表網(wǎng) 設(shè)計(jì)制作,未經(jīng)允許翻錄必究 .? ? ?
請(qǐng)輸入賬號(hào)
請(qǐng)輸入密碼
請(qǐng)輸驗(yàn)證碼
請(qǐng)輸入你感興趣的產(chǎn)品
請(qǐng)簡(jiǎn)單描述您的需求
號(hào)碼可能有誤,請(qǐng)核對(duì)!
請(qǐng)選擇省份