1. Trang chủ
  2. » Công Nghệ Thông Tin

Cảm biến nhiệt độ ESP8266 DS18B20 với Arduino IDE (Máy chủ Web, Đơn, Nhiều)

26 42 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Cảm Biến Nhiệt Độ Esp8266 Ds18b20 Với Arduino Ide (Máy Chủ Web, Đơn, Nhiều)
Trường học Trường Đại Học Công Nghệ Thông Tin
Chuyên ngành Công Nghệ Thông Tin
Thể loại Hướng Dẫn
Thành phố Hà Nội
Định dạng
Số trang 26
Dung lượng 910,23 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Đây là hướng dẫn chuyên sâu về cảm biến nhiệt độ DS18B20 với ESP8266 sử dụng Arduino IDE. Chúng tôi sẽ đề cập đến cách nối dây cảm biến, cài đặt các thư viện cần thiết và viết mã để đọc cảm biến từ một và nhiều cảm biến. Cuối cùng, chúng ta sẽ xây dựng một máy chủ web đơn giản để hiển thị các chỉ số cảm biến.Trong suốt hướng dẫn này, chúng tôi sẽ đề cập đến các chủ đề sau:1. Đọc nhiệt độ từ một cảm biến nhiệt độ DS18B20;2. Đọc nhiệt độ từ nhiều cảm biến nhiệt độ DS18B20;3. Hiển thị số đọc cảm biến DS18B20 trên máy chủ web

Trang 1

Cảm biến nhiệt độ ESP8266 DS18B20 với Arduino IDE

(Máy chủ Web, Đơn, Nhiều)

Đây là hướng dẫn chuyên sâu về cảm biến nhiệt độ DS18B20 với ESP8266 sử dụng

Arduino IDE Chúng tôi sẽ đề cập đến cách nối dây cảm biến, cài đặt các thư viện cần

thiết và viết mã để đọc cảm biến từ một và nhiều cảm biến Cuối cùng, chúng ta sẽ xây

dựng một máy chủ web đơn giản để hiển thị các chỉ số cảm biến.

Trong suốt hướng dẫn này, chúng tôi sẽ đề cập đến các chủ đề sau:

1 Đọc nhiệt độ từ một cảm biến nhiệt độ DS18B20;

2 Đọc nhiệt độ từ nhiều cảm biến nhiệt độ DS18B20;

3 Hiển thị số đọc cảm biến DS18B20 trên máy chủ web.

Bạn cũng có thể thích đọc các hướng dẫn DS18B20 khác:

Tìm hiểu thêm về ESP8266 với khóa học của chúng tôi: Tự động hóa gia đình bằng

ESP8266.

Giới thiệu cảm biến nhiệt độ DS18B20

Cảm biến nhiệt độ DS18B20 là cảm biến nhiệt độ kỹ thuật số một dây Điều này có nghĩa

là nó chỉ yêu cầu một dòng dữ liệu (và GND) để giao tiếp với ESP8266 của bạn.

Trang 2

Nó có thể được cung cấp năng lượng bởi nguồn điện bên ngoài hoặc nó có thể lấy năng lượng từ đường dữ liệu (được gọi là "chế độ ký sinh trùng"), giúp loại bỏ sự cần thiết của nguồn điện bên ngoài.

Mỗi cảm biến nhiệt độ DS18B20 có một mã sê-ri 64-bit duy nhất Điều này cho phép bạn nối nhiều cảm biến vào cùng một dây dữ liệu Vì vậy, bạn có thể nhận nhiệt độ từ nhiều cảm biến chỉ bằng một GPIO.

Cảm biến nhiệt độ DS18B20 cũng có sẵn trong phiên bản chống thấm nước.

Trang 3

Dưới đây là tóm tắt các thông số kỹ thuật phù hợp nhất của cảm biến nhiệt độ DS18B20: Giao tiếp qua bus một dây

Để hoàn thành hướng dẫn này, bạn cần các thành phần sau:

ESP8266 - đọc Bảng phát triển Wi-Fi ESP8266 tốt nhất

Cảm biến nhiệt độ DS18B20 (một hoặc nhiều cảm biến) – phiên bản chống thấm

nước

Điện trở 4.7k Ohm

Breadboard

Dây nhảy

ESP8266 với sơ đồ DS18B20

Như đã đề cập trước đây, cảm biến nhiệt độ DS18B20 có thể được cấp nguồn thông qua

chân VDD (chế độ bình thường) hoặc nó có thể lấy sức mạnh từ đường dữ liệu (chế độ

ký sinh trùng) Bạn có thể chọn một trong hai chế độ.

Chế độ ký sinh trùng

Trang 5

Lưu ý: trong hướng dẫn này, chúng tôi đang kết nối đường dữ liệu DS18B20 với GPIO

4, nhưng bạn có thể sử dụng bất kỳ GPIO phù hợp nào khác.

Đọc Hướng dẫn tham khảo GPIO ESP8266 của chúng tôi để tìm hiểu thêm về các GPIO ESP8266.

Lưu ý: nếu bạn đang sử dụng ESP-01, GPIO 2 là chân phù hợp nhất để kết nối với chân

dữ liệu DS18B20.

Chuẩn bị Arduino IDE của bạn

Trang 6

Chúng tôi sẽ lập trình ESP8266 bằng Arduino IDE, vì vậy hãy đảm bảo bạn đã cài đặt

tiện ích bổ sung ESP8266 trước khi tiếp tục:

Cài đặt bảng ESP8266 trong Arduino IDE (hướng dẫn Windows, Mac OS X và

Linux)

Cài đặt thư viện cho DS18B20

Để giao tiếp với cảm biến nhiệt độ DS18B20, bạn cần cài đặt thư viện One Wire của Paul Stoffregen và thư viện Nhiệt độ Dallas Làm theo các bước tiếp theo để cài đặt các thư

viện đó.

1 Mở Arduino IDE của bạn và đi tới Sketch > Include Library > Manage Libraries.

Trình quản lý thư viện sẽ mở.

2 Nhập "onewire" vào hộp tìm kiếm và cài đặt thư viện OneWire của Paul Stoffregen.

3 Sau đó, tìm kiếm "Dallas" và cài đặt thư viện Nhiệt độ Dallas của Miles Burton.

Trang 7

Sau khi cài đặt các thư viện, hãy khởi động lại Arduino IDE của bạn.

Mã (Đơn DS18B20)

Sau khi cài đặt các thư viện cần thiết, bạn có thể tải mã sau lên ESP8266 Mã đọc nhiệt

độ từ cảm biến nhiệt độ DS18B20 và hiển thị số đọc trên Màn hình nối tiếp Arduino IDE.

Trang 8

// GPIO where the DS18B20 is connected to

const int oneWireBus = 4;

// Setup a oneWire instance to communicate with any OneWire devices

float temperatureC = sensors.getTempCByIndex(0);

float temperatureF = sensors.getTempFByIndex(0);

Trang 9

Mã hoạt động như thế nào

Bắt đầu bằng cách bao gồm các thư viện OneWire và DallasTemperature.

#include <OneWire.h>

#include <DallasTemperature.h>

Tạo các phiên bản cần thiết cho cảm biến nhiệt độ Cảm biến nhiệt độ được kết nối với

GPIO 4.

// GPIO where the DS18B20 is connected to

const int oneWireBus = 4;

// Setup a oneWire instance to communicate with any OneWire devices

Sau đó, lấy nhiệt độ tính bằng Celsius bằng cách sử dụng phương thức

getTempCByIndex() như hình dưới đây:

float temperatureC = sensors.getTempCByIndex(0);

Trang 10

Hoặc sử dụng getTempFByIndex() để lấy nhiệt độ tính bằng Fahrenheit.

float temperatureF = sensors.getTempFByIndex(0);

Các phương thức getTempCByIndex() và getTempFByIndex() chấp nhận chỉ số của cảm biến nhiệt độ Bởi vì chúng tôi chỉ sử dụng một cảm biến, chỉ số của nó là 0 Nếu bạn

muốn đọc nhiều cảm biến, bạn sử dụng chỉ số 0 cho một cảm biến, chỉ mục 1 cho cảm

Trang 11

Lấy nhiệt độ từ nhiều cảm biến nhiệt độ DS18B20

Cảm biến nhiệt độ DS18B20 giao tiếp bằng giao thức một dây và mỗi cảm biến có một

mã sê-ri 64 bit duy nhất, vì vậy bạn có thể đọc nhiệt độ từ nhiều cảm biến chỉ bằng một

chân kỹ thuật số duy nhất.

Để đọc nhiệt độ từ nhiều cảm biến, bạn chỉ cần nối tất cả các dòng dữ liệu lại với nhau

như thể hiện trong sơ đồ tiếp theo:

Trang 12

Mã (Nhiều DS18B20)

Sau đó, tải lên mã sau Nó quét tất cả các thiết bị trên GPIO 4 và in nhiệt độ cho từng

thiết bị Bản phác thảo này dựa trên ví dụ được cung cấp bởi thư viện

DallasTemperature.

Trang 13

// Setup a oneWire instance to communicate with any OneWire devices (not just

Maxim/Dallas temperature ICs)

// Loop through each device, print out address

for(int i=0;i<numberOfDevices; i++){

// Search the wire for address

Trang 14

void loop(){

sensors.requestTemperatures(); // Send the command to get temperatures

// Loop through each device, print out temperature data

for(int i=0;i<numberOfDevices; i++){

// Search the wire for address

if(sensors.getAddress(tempDeviceAddress, i)){

// Output the device ID

Serial.print("Temperature for device: ");

Serial.println(i,DEC);

// Print the data

float tempC = sensors.getTempC(tempDeviceAddress);

// function to print a device address

void printAddress(DeviceAddress deviceAddress) {

for (uint8_t i = 0; i < 8; i++){

Mã sử dụng một số phương pháp hữu ích để xử lý nhiều cảm biến DS18B20.

Bạn sử dụng phương thức getDeviceCount() để lấy số lượng cảm biến DS18B20 trên

dòng dữ liệu.

numberOfDevices = sensors.getDeviceCount();

Trang 15

Để có được nhiệt độ ở độ Fahrenheit, bạn có thể sử dụng getTemF() Ngoài ra, bạn có

thể chuyển đổi nhiệt độ tính bằng C sang Fahrenheit như sau:

DallasTemperature::toFahrenheit(tempC)

Cuộc biểu tình

Sau khi tải mã lên, hãy mở Màn hình nối tiếp của bạn với tốc độ truyền là 115200 Bạn sẽ nhận được tất cả các bài đọc cảm biến của bạn được hiển thị như hình dưới đây:

Hiển thị chỉ số nhiệt độ DS18B20 trong máy chủ web

Để xây dựng máy chủ web, chúng tôi sẽ sử dụng thư viện ESPAsyncWebServer cung

cấp một cách dễ dàng để xây dựng một máy chủ web không đồng bộ Xây dựng một máy chủ web không đồng bộ có một số lợi thế Chúng tôi khuyên bạn nên xem nhanh tài liệu thư viện trên trang GitHub của nó.

Cài đặt thư viện ESPAsyncWebServer

Thư viện ESPAsyncWebServer không có sẵn để cài đặt trong Trình quản lý thư viện

Arduino IDE Vì vậy, bạn cần cài đặt nó bằng tay.

Làm theo các bước tiếp theo để cài đặt thư viện ESPAsyncWebServer:

1 Bấm vào đây để tải xuống thư viện ESPAsyncWebServer Bạn sẽ có một thư mục zip trong thư mục Tải xuống của mình

2 Giải nén thư mục zip và bạn sẽ nhận được thư mục ESPAsyncWebServer-master

Trang 16

3 Đổi tên thư mục của bạn từ ESPAsyncWebServer-master thành

ESPAsyncWebServer

4 Di chuyển thư mục ESPAsyncWebServer vào thư mục thư viện cài đặt Arduino IDE

của bạn

Cài đặt Thư viện TCP ESPAsync

Thư viện ESPAsyncWebServer yêu cầu thư viện ESPAsyncTCP hoạt động Làm theo

các bước tiếp theo để cài đặt thư viện đó:

1 Bấm vào đây để tải xuống thư viện ESPAsyncTCP Bạn sẽ có một thư mục zip

trong thư mục Tải xuống của mình

2 Giải nén thư mục zip và bạn sẽ nhận được thư mục ESPAsyncTCP-master

3 Đổi tên thư mục của bạn từ ESPAsyncTCP-master thành ESPAsyncTCP

4 Di chuyển thư mục ESPAsyncTCP vào thư mục thư viện cài đặt Arduino IDE của

bạn

5 Cuối cùng, mở lại Arduino IDE của bạn

Mã (DS18B20 Máy chủ Web không đồng bộ)

Mở Arduino IDE của bạn và sao chép mã sau.

Trang 17

unsigned long lastTime = 0;

unsigned long timerDelay = 30000;

// Replace with your network credentials

const char* ssid = "REPLACE_WITH_YOUR_SSID";

const char* password = "REPLACE_WITH_YOUR_PASSWORD";

// Create AsyncWebServer object on port 80

AsyncWebServer server(80);

String readDSTemperatureC() {

// Call sensors.requestTemperatures() to issue a global temperature and Requests

to all devices on the bus

Trang 18

return String(tempC);

}

String readDSTemperatureF() {

// Call sensors.requestTemperatures() to issue a global temperature and Requests

to all devices on the bus

Trang 19

// Replaces placeholder with DS18B20 values

String processor(const String& var){

Trang 20

}

Serial.println();

// Print ESP Local IP Address

Serial.println(WiFi.localIP());

// Route for root / web page

server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){

request->send_P(200, "text/html", index_html, processor);

});

server.on("/temperaturec", HTTP_GET, [](AsyncWebServerRequest *request){

request->send_P(200, "text/plain", temperatureC.c_str());

});

server.on("/temperaturef", HTTP_GET, [](AsyncWebServerRequest *request){

request->send_P(200, "text/plain", temperatureF.c_str());

const char* ssid = "REPLACE_WITH_YOUR_SSID";

const char* password = "REPLACE_WITH_YOUR_PASSWORD";

Mã hoạt động như thế nào

Trong các đoạn sau, chúng tôi sẽ giải thích cách mã hoạt động Hãy tiếp tục đọc nếu bạn muốn tìm hiểu thêm hoặc chuyển đến phần "Trình diễn" để xem kết quả cuối cùng.

Nhập thư viện

Trang 21

Xác định GPIO mà chân dữ liệu DS18B20 được kết nối Trong trường hợp này, nó được kết nối với GPIO 4 (D1).

#define ONE_WIRE_BUS 4

Khởi tạo các phiên bản cần thiết để khởi tạo cảm biến:

// Setup a oneWire instance to communicate with any OneWire devices

Chúng tôi sẽ nhận được số đọc cảm biến mới cứ sau 30 giây Bạn có thể thay đổi điều

đó trong biến timerDelay.

unsigned long lastTime = 0;

unsigned long timerDelay = 30000;

Đặt thông tin đăng nhập mạng của bạn

Chèn thông tin đăng nhập mạng của bạn vào các biến sau, để ESP8266 có thể kết nối

với mạng cục bộ của bạn.

const char* ssid = "REPLACE_WITH_YOUR_SSID";

const char* password = "REPLACE_WITH_YOUR_PASSWORD";

Tạo một đối tượng AsyncWebServer trên cổng 80.

AsyncWebServer server(80);

Đọc hàm nhiệt độ

Sau đó, chúng tôi tạo hai hàm để đọc nhiệt độ.

Hàm readDSTemperatureC() trả về số đọc theo độ C.

Trang 22

String readDSTemperatureC() {

// Call sensors.requestTemperatures() to issue a global temperature and Requests

to all devices on the bus

Xây dựng trang Web

Bước tiếp theo là xây dựng trang web HTML và CSS cần thiết để xây dựng trang web

được lưu trên biến index_html.

Trong văn bản HTML, chúng ta có TEMPERATUREC và TEMPERATUREF giữa % dấu.

Đây là trình giữ chỗ cho các giá trị nhiệt độ.

Điều này có nghĩa là văn bản %TEMPERATUREC% này giống như một biến sẽ được

Trang 23

Bây giờ, chúng ta cần tạo hàm processor(), hàm này sẽ thay thế các trình giữ chỗ trong văn bản HTML của chúng ta bằng các giá trị nhiệt độ thực tế.

// Replaces placeholder with DS18B20 values

String processor(const String& var){

Trang 24

Cuối cùng, thêm các dòng mã tiếp theo để xử lý máy chủ web.

server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){

request->send_P(200, "text/html", index_html, processor);

});

server.on("/temperaturec", HTTP_GET, [](AsyncWebServerRequest *request){

request->send_P(200, "text/plain", temperatureC.c_str());

});

server.on("/temperaturef", HTTP_GET, [](AsyncWebServerRequest *request){

request->send_P(200, "text/plain", temperatureF.c_str());

});

Khi chúng tôi thực hiện một yêu cầu trên URL gốc, chúng tôi gửi văn bản HTML được lưu trữ trong biến index_html Chúng ta cũng cần vượt qua chức năng bộ xử lý, chức năng

này sẽ thay thế tất cả các trình giữ chỗ bằng các giá trị phù hợp.

server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){

request->send_P(200, "text/html", index_html, processor);

});

Chúng tôi cần thêm hai trình xử lý bổ sung để cập nhật chỉ số nhiệt độ Khi chúng tôi

nhận được yêu cầu trên URL / temperaturec, chúng tôi chỉ cần gửi giá trị nhiệt độ được

cập nhật Nó là văn bản thuần túy và nó nên được gửi dưới dạng ký tự, vì vậy, chúng ta

sử dụng phương thức c_str().

server.on("/temperaturec", HTTP_GET, [](AsyncWebServerRequest *request){

request->send_P(200, "text/plain", temperatureC.c_str());

});

Quá trình tương tự được lặp lại cho nhiệt độ tính bằng Fahrenheit.

Trang 25

Sau khi tải mã lên, hãy mở Màn hình nối tiếp Arduino IDE với tốc độ truyền là 115200.

Sau vài giây, địa chỉ IP của bạn sẽ hiển thị.

Trong mạng cục bộ của bạn, mở trình duyệt và nhập địa chỉ IP ESP8266.

Bây giờ bạn có thể thấy nhiệt độ tính bằng C và Fahrenheit trong máy chủ web của mình Các chỉ số cảm biến tự động cập nhật mà không cần phải làm mới trang web.

Tổng kết

Đây là hướng dẫn chuyên sâu về cách sử dụng cảm biến nhiệt độ DS18B20 với

ESP8266 và hiển thị số đọc trên máy chủ web.

DS18B20 giao tiếp thông qua giao thức một dây và mỗi cảm biến có một mã sê-ri 64 bit duy nhất, có nghĩa là bạn có thể đọc nhiều cảm biến trên cùng một chân dữ liệu.

Trang 26

Chúng tôi hy vọng bạn thấy hướng dẫn này hữu ích Chúng tôi có các hướng dẫn khác

với ESP8266 mà bạn cũng có thể thích:

ESP8266 với BME280 sử dụng Arduino IDE (Áp suất, Nhiệt độ, Độ ẩm)

ESP8266: Chỉ số nhiệt độ và độ ẩm DHT trong màn hình OLED

Màn hình OLED ESP8266 0.96 inch với Arduino IDE

ESP8266 DHT11 / DHT22 Nhiệt độ và Độ ẩm Máy chủ Web với Arduino IDE

Cảm ơn bạn đã đọc.

Ngày đăng: 09/04/2023, 18:43

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w