여러 DS18B20 온도 센서가 있는 ESP32
이 가이드는 Arduino IDE를 사용하여 ESP32로 여러 DS18B20 온도 센서에서 온도를 읽는 방법을 보여줍니다. 동일한 데이터 버스에 있는 센서를 ESP32에 연결하는 방법, 필요한 라이브러리를 설치하는 방법, 그리고 자신의 프로젝트에서 사용할 수 있는 스케치 예제를 보여드리겠습니다. 이 튜토리얼은 ESP8266 및 Arduino 보드와도 호환됩니다.
여러 센서의 판독값을 표시하는 웹 서버를 구축하려면 다음 튜토리얼을 따르세요. ESP32 차트의 센서 판독값 플롯(여러 DS18B20 센서)
다른 DS18B20 가이드도 읽어보세요.
- ESP32 DS18B20 Temperature Sensor with Arduino IDE
- ESP8266 DS18B20 Temperature Sensor with Arduino IDE
- ESP32/ESP8266 DS18B20 Temperature Sensor with MicroPython
- DS18B20 Temperature Sensor with Arduino
DS18B20 온도 센서 소개
DS18B20 온도 센서는 1-와이어 디지털 온도 센서입니다. 각 센서에는 고유한 64비트 일련 번호가 있어 동일한 데이터 버스에서 여러 센서를 사용할 수 있습니다(즉, 동일한 GPIO에 연결된 여러 센서). 이는 특히 데이터 로깅 및 온도 제어 프로젝트에 유용합니다. DS18B20은 저렴하고 정확하며 사용하기 매우 쉬운 훌륭한 센서입니다.
다음 그림은 DS18B20 온도를 보여줍니다.
참고: DS18B20 온도 센서의 방수 버전도 있습니다.
DS18B20 온도 센서의 주요 사양은 다음과 같습니다.
- 1-wire 버스 통신
- 작동 범위 온도: -55ºC ~ 125ºC
- 정확도 +/-0.5ºC(범위 -10ºC ~ 85ºC)
왼쪽에서 오른쪽으로: 첫 번째 핀은 GND, 두 번째 핀은 데이터, 가장 오른쪽 핀은 VCC입니다.
DS18B20 온도 센서는 어디에서 구매할 수 있나요?
여러 개의 DS18B20 센서 배선
다음은 이 예제를 따라하는 데 필요한 부품 목록입니다.
- ESP32 DOIT DEVKIT V1 보드 - ESP32 개발 보드 리뷰 및 비교 읽기
- DS18B20 온도 센서(이 예제에서는 3개의 센서 사용)
- 4.7kΩ 저항
- 점퍼 와이어
- 브레드보드
DS18B20 온도 센서를 배선할 때 VCC와 데이터 라인 사이에 4.7kΩ 저항을 추가해야 합니다. 다음 회로도는 3개의 센서에 대한 예를 보여줍니다(필요한 경우 센서를 더 추가할 수 있음).
이전 회로도에서 센서의 둥근 면이 뒤로 향하고 있습니다. 평평한 부분은 앞을 향하고 있습니다.
Arduino IDE 준비
Arduino IDE용 애드온이 있는데, 이를 사용하면 Arduino IDE와 해당 프로그래밍 언어를 사용하여 ESP32를 프로그래밍할 수 있습니다. 아직 준비하지 않았다면 다음 튜토리얼 중 하나를 따라 Arduino IDE를 ESP32와 함께 작동하도록 준비하세요.
Windows 지침 - Arduino IDE의 ESP32 보드
Mac 및 Linux 지침 - Arduino IDE의 ESP32 보드
라이브러리 설치
코드를 업로드하기 전에 Arduino IDE에 두 개의 라이브러리를 설치해야 합니다. Paul Stoffregen의 OneWire 라이브러리와 Dallas Temperature 라이브러리입니다. 다음 단계에 따라 해당 라이브러리를 설치하세요.
OneWire 라이브러리
- 여기를 클릭하여 OneWire 라이브러리를 다운로드하세요. 다운로드에 .zip 폴더가 있어야 합니다.
- .zip 폴더의 압축을 풀면 OneWire-master 폴더가 있어야 합니다.
- 폴더 이름을 OneWire-master에서 OneWire로 변경합니다.
- OneWire 폴더를 Arduino IDE 설치 라이브러리 폴더로 옮깁니다.
- 마지막으로 Arduino IDE를 다시 엽니다.
Dallas Temperature 라이브러리
- 여기를 클릭하여 DallasTemperature 라이브러리를 다운로드합니다. 다운로드에 .zip 폴더가 있어야 합니다.
- .zip 폴더의 압축을 풀면 Arduino-Temperature-Control-Library-master 폴더가 있어야 합니다.
- 폴더 이름을 Arduino-Temperature-Control-Library-master에서 DallasTemperature로 변경합니다.
- DallasTemperature폴더를 Arduino IDE 설치 라이브러리 폴더로 옮깁니다.
- 마지막으로 Arduino IDE를 다시 엽니다.
DS18B20 센서 주소 가져오기
각 DS18B20 온도 센서에는 일련 번호가 할당되어 있습니다. 먼저 해당 번호를 찾아서 각 센서에 그에 맞는 레이블을 지정해야 합니다. 이렇게 하면 나중에 어느 센서에서 온도를 읽는지 알 수 있습니다.
다음 코드를 ESP32에 업로드합니다. 올바른 보드와 COM 포트를 선택했는지 확인하세요.
/*
* Rui Santos
* Complete Project Details https://randomnerdtutorials.com
*/
#include <OneWire.h>
// 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);
}
}
한 번에 하나의 센서만 연결하여 주소를 찾거나(또는 새로운 센서를 연속적으로 추가) 각 센서를 주소로 식별할 수 있습니다. 그런 다음 각 센서에 물리적 레이블을 추가할 수 있습니다. 9600의 전송 속도로 직렬 모니터를 열면 다음과 같은 결과가 나와야 합니다(하지만 주소는 다름):
"자동 스크롤" 옵션의 선택을 해제하여 주소를 복사할 수 있도록 합니다. 우리의 경우 다음 주소가 있습니다.
센서 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
여러 센서에서 온도 가져오기
동일한 공통 데이터 버스에서 여러 센서의 온도를 가져오는 것은 매우 간단합니다.
아래 예제 코드는 각 센서에서 섭씨와 화씨로 온도를 읽고 결과를 직렬 모니터에 인쇄합니다.
/*
* Rui Santos
* Complete Project Details https://randomnerdtutorials.com
*/
// Include the libraries we need
#include <OneWire.h>
#include <DallasTemperature.h>
// 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의 전송 속도로 열면 비슷한 화면이 표시됩니다.
코드 작동 방식
먼저 필요한 라이브러리를 포함하세요:
#include <OneWire.h>
#include <DallasTemperature.h>
// Data wire is connected to ESP32 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);
DS18B20 센서용 Dallas 온도 라이브러리를 시작합니다.
sensors.begin();
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();
}
sensors.requestTemperatures(); // 온도를 가져오는 명령을 보냅니다.
그런 다음 센서 주소를 사용하여 온도를 요청할 수 있습니다.
- sensors.getTempC(SENSOR_ADDRESS) – 섭씨로 온도를 요청합니다.
- sensors.getTempF(SENSOR_ADDRESS) – 화씨로 온도를 요청합니다.
예를 들어 센서 1의 섭씨 온도를 요청하려면 다음을 사용합니다.
sensors.getTempC(sensor1)
여기서 sensor1은 첫 번째 센서의 주소를 보관하는 변수입니다.
이것은 ESP32를 사용하여 여러 DS18B20 센서에서 온도를 가져오는 방법을 보여주는 간단한 스케치 예입니다. 이 코드는 ESP8266 및 Arduino 보드와도 호환됩니다.
더 나아가기
여러 DS18B20 온도 센서에서 온도를 얻는 것은 모니터링 및 온도 제어 프로젝트와 데이터 로깅에 특히 유용합니다. 수집된 데이터를 microSD 카드에 로깅하는 방법을 알아보세요.
MQTT를 통해 Node-RED에 판독값을 게시하고 차트에 데이터를 표시할 수도 있습니다. 아래 링크에서 해당 주제에 대한 튜토리얼을 볼 수 있습니다.
ESP32 MQTT – Arduino IDE로 게시 및 구독
이 튜토리얼이 도움이 되었기를 바랍니다. ESP32를 좋아하고 더 자세히 알고 싶다면 Arduino IDE로 ESP32 배우기 과정에 등록하는 것이 좋습니다.
읽어주셔서 감사합니다. 배움을 멈추지 마세요.
'ESP32' 카테고리의 다른 글
ESP32 ADC 읽기 Arduino IDE (2) | 2024.12.24 |
---|---|
ESP32 PWM 아날로그 출력 Arduino IDE (3) | 2024.12.23 |
ESP32 디지털 입력 및 디지털 출력(Arduino IDE) (2) | 2024.12.20 |
ESP32 Pinout 참조: 어떤 GPIO 핀을 사용해야 합니까? (1) | 2024.12.19 |
ESP32 DS18B20 온도 센서(단일, 다중, 웹 서버) (1) | 2024.12.14 |
ESP-Now 통신 프로토콜을 사용하여 ESP32로 LED를 제어하는 방법 (1) | 2024.12.12 |
VS Code와 PlatformIO에서 ESP32, ESP8266 개발 환경 (2) | 2024.12.10 |
PlatformIO란 무엇인가요? (0) | 2024.12.06 |
더욱 좋은 정보를 제공하겠습니다.~ ^^