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

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

19 6 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 đề Esp8266 với Bme280 Sử Dụng Arduino Ide (Áp Suất, Nhiệt Độ, Độ Ẩm)
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
Định dạng
Số trang 19
Dung lượng 696,84 KB

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

Nội dung

Hướng dẫn này chỉ ra cách sử dụng môđun cảm biến BME280 với ESP8266 để đọc áp suất, nhiệt độ, độ ẩm và ước tính độ cao bằng Arduino IDE. Cảm biến BME280 sử dụng giao thức truyền thông I2C hoặc SPI để trao đổi dữ liệu với vi điều khiển.

Trang 1

ESP8266 với BME280 sử dụng Arduino IDE (Áp suất,

Nhiệt độ, Độ ẩm)

Hướng dẫn này chỉ ra cách sử dụng mô-đun cảm biến BME280 với ESP8266 để đọc áp suất, nhiệt độ, độ ẩm và ước tính độ cao bằng Arduino IDE Cảm biến BME280 sử dụng giao thức truyền thông I2C hoặc SPI để trao đổi dữ liệu với vi điều khiển.

Chúng tôi sẽ chỉ cho bạn cách nối cảm biến với ESP8266, cài đặt các thư viện cần thiết

và viết một bản phác thảo đơn giản hiển thị các chỉ số cảm biến Chúng tôi cũng sẽ xây dựng một ví dụ về máy chủ web để hiển thị các bài đọc áp suất, nhiệt độ và độ ẩm mới

nhất.

Trước khi tiếp tục với hướng dẫn này, bạn nên cài đặt tiện ích bổ sung ESP8266 trong

Arduino IDE của mình.

Cài đặt bảng ESP8266 trong Arduino IDE

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

Giới thiệu mô-đun cảm biến BME280

Mô-đun cảm biến BME280 đọc áp suất khí quyển, nhiệt độ và độ ẩm Vì áp suất thay đổi theo độ cao, bạn cũng có thể ước tính độ cao Có một số phiên bản của mô-đun cảm

biến này Chúng tôi đang sử dụng mô-đun được minh họa trong hình bên dưới.

Trang 2

Cảm biến này giao tiếp bằng giao thức truyền thông I2C, vì vậy hệ thống dây điện rất

đơn giản Bạn có thể sử dụng chân ESP8266 I2C mặc định như thể hiện trong bảng sau:

BME280 ESP8266

Có các phiên bản khác của cảm biến này có thể sử dụng giao thức truyền thông SPI

hoặc I2C, như mô-đun được hiển thị trong hình tiếp theo:

Trang 3

Nếu bạn đang sử dụng một trong những cảm biến này, để sử dụng giao thức truyền

thông I2C, hãy sử dụng các chân sau:

SCK (Ghim SCL) GPIO 5

SDI (chân SDA) GPIO 4

Nếu bạn sử dụng giao thức truyền thông SPI, bạn cần sử dụng các chân sau:

SCK (Đồng hồ SPI) GPIO 14

SDO (MISO) GPIO 12

SDI (MOSI) GPIO 13

CS (Lựa chọn chip) GPIO 15

Các bộ phận cần thiết

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

Mô-đun cảm biến BME280

ESP8266 (đọc bảng phát triển ESP8266 tốt nhất)

Breadboard

Dây nhảy

Sơ đồ - ESP8266 với BME280 sử dụng I2C

Trang 4

Chúng ta sẽ sử dụng giao tiếp I2C với mô-đun cảm biến BME280 Để làm được điều đó, hãy nối cảm biến với các chân ESP8266 SDA và SCL, như thể hiện trong sơ đồ sau.

Đề xuất đọc: Hướng dẫn tham khảo sơ đồ chân ESP8266

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

Để đọc từ mô-đun cảm biến BME280, bạn cần sử dụng thư viện Adafruit_BME280 Làm theo các bước tiếp theo để cài đặt thư viện trong Arduino IDE của bạn:

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ở.

Tìm kiếm "adafruit bme280" trên hộp Tìm kiếm và cài đặt thư viện.

Trang 5

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

Để sử dụng thư viện BME280, bạn cũng cần cài đặt thư viện Adafruit_Sensor Làm theo các bước tiếp theo để cài đặt thư viện trong Arduino IDE của bạn:

Truy cập Sketch > Include Library > Manage Libraries và nhập "Adafruit Unified

Sensor" vào hộp tìm kiếm Cuộn xuống để tìm thư viện và cài đặt nó.

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

Áp suất đọc, nhiệt độ và độ ẩm

Trang 6

Để đọc áp suất, nhiệt độ và độ ẩm, chúng tôi sẽ sử dụng một ví dụ phác thảo từ thư viện.

Sau khi cài đặt thư viện BME280 và thư viện Adafruit_Sensor, hãy mở Arduino IDE và đi

tới Tệp > Ví dụ > thư viện Adafruit BME280 > kiểm tra bme280.

Trang 7

/*********

Complete project details at https://randomnerdtutorials.com

*********/

#include <Wire.h>

#include <Adafruit_Sensor.h>

#include <Adafruit_BME280.h>

/*#include <SPI.h>

#define BME_SCK 14

#define BME_MISO 12

#define BME_MOSI 13

#define BME_CS 15*/

#define SEALEVELPRESSURE_HPA (1013.25)

Adafruit_BME280 bme; // I2C

//Adafruit_BME280 bme(BME_CS); // hardware SPI

//Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI

unsigned long delayTime;

void setup() {

Serial.begin(9600);

Serial.println(F("BME280 test"));

bool status;

// default settings

// (you can also pass in a Wire library object like &Wire2)

status = bme.begin(0x76);

if (!status) {

Serial.println("Could not find a valid BME280 sensor, check wiring!");

while (1);

}

Serial.println(" Default Test ");

delayTime = 1000;

Serial.println();

}

void loop() {

printValues();

delay(delayTime);

}

void printValues() {

Serial.print("Temperature = ");

Serial.print(bme.readTemperature());

Serial.println(" *C");

// Convert temperature to Fahrenheit

/*Serial.print("Temperature = ");

Serial.print(1.8 * bme.readTemperature() + 32);

Serial.println(" *F");*/

Trang 8

Serial.print("Pressure = ");

Serial.print(bme.readPressure() / 100.0F);

Serial.println(" hPa");

Serial.print("Approx Altitude = ");

Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));

Serial.println(" m");

Serial.print("Humidity = ");

Serial.print(bme.readHumidity());

Serial.println(" %");

Serial.println();

}

Xem mã thô

Chúng tôi đã thực hiện một vài sửa đổi đối với bản phác thảo để làm cho nó hoàn toàn

tương thích với ESP8266.

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

Tiếp tục đọc phần này để tìm hiểu cách mã hoạt động hoặc chuyển đến phần "Trình

diễn".

Thư viện

Mã bắt đầu bằng cách bao gồm các thư viện cần thiết: thư viện dây để sử dụng I2C và

các thư viện Adafruit_Sensor và Adafruit_BME280 để giao tiếp với cảm biến BME280.

#include <Wire.h>

#include <Adafruit_Sensor.h>

#include <Adafruit_BME280.h>

Truyền thông SPI

Khi chúng ta sẽ sử dụng giao tiếp I2C, các dòng sau xác định các chân SPI được nhận

xét:

/*#include <SPI.h>

#define BME_SCK 14

#define BME_MISO 12

#define BME_MOSI 13

#define BME_CS 15*/

Lưu ý: nếu bạn đang sử dụng giao tiếp SPI, hãy sử dụng chân SPI mặc định ESP8266:

GPIO 13 GPIO 12 GPIO 14 GPIO 15

Trang 9

Áp lực mực nước biển

Một biến gọi là SEALEVELPRESSURE_HPA được tạo ra.

#define SEALEVELPRESSURE_HPA (1013.25)

Biến này tiết kiệm áp suất ở mực nước biển tính bằng hectopascal (tương đương với

milibar) Biến này được sử dụng để ước tính độ cao cho một áp suất nhất định bằng cách

so sánh nó với áp suất mực nước biển Ví dụ này sử dụng giá trị mặc định, nhưng để có kết quả chính xác hơn, hãy thay thế giá trị bằng áp suất mực nước biển hiện tại tại vị trí của bạn.

I2C

Ví dụ này sử dụng giao thức truyền thông I2C theo mặc định Như bạn có thể thấy, bạn chỉ cần tạo một đối tượng Adafruit_BME280 gọi là bme.

Adafruit_BME280 bme; // I2C

Để sử dụng SPI, bạn cần nhận xét dòng trước này và bỏ ghi chú một trong các dòng sau.

//Adafruit_BME280 bme(BME_CS); // hardware SPI

//Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI

Thiết lập()

Trong setup(), bắt đầu giao tiếp nối tiếp:

Serial.begin(9600);

Và khởi tạo cảm biến:

status = bme.begin(0x76);

if (!status) {

Serial.println("Could not find a valid BME280 sensor, check wiring!");

while (1);

}

Chúng tôi khởi tạo cảm biến với địa chỉ 0x76 Trong trường hợp bạn không nhận được

chỉ số cảm biến, hãy kiểm tra địa chỉ I2C của cảm biến Với cảm biến BME280 có dây với ESP8266 của bạn, hãy chạy bản phác thảo máy quét I2C này để kiểm tra địa chỉ cảm

biến của bạn Sau đó, thay đổi địa chỉ nếu cần.

Giá trị in

Trong loop(), hàm printValues() đọc các giá trị từ BME280 và in kết quả trong Serial

Monitor.

void loop() {

printValues();

delay(delayTime);

}

Trang 10

Đọc nhiệt độ, độ ẩm, áp suất và độ cao ước tính cũng đơn giản như sử dụng các

phương pháp sau trên đối tượng bme:

bme.readTemperature () - đọc nhiệt độ tính bằng độ C;

bme.readHumidity() – đọc độ ẩm tuyệt đối;

bme.readPressure() – đọc áp suất tính bằng hPa (hectoPascal = millibar);

bme.readAltitude (SEALEVELPRESSURE_HPA) - ước tính độ cao tính bằng mét

dựa trên áp suất ở mực nước biển.

Cuộc biểu tình

Tải mã lên ESP8266 của bạn và mở Màn hình nối tiếp với tốc độ truyền 9600 Nhấn nút RST trên bo mạch để chạy mã Bạn sẽ thấy các bài đọc được hiển thị trên Màn hình nối tiếp.

Máy chủ web ESP8266 với cảm biến BME280

Cảm biến BME280 đo nhiệt độ, độ ẩm và áp suất Vì vậy, bạn có thể dễ dàng xây dựng

một trạm thời tiết nhỏ gọn và theo dõi các phép đo bằng máy chủ web được xây dựng

với ESP8266 - đó là những gì chúng ta sẽ làm trong phần này

Trang 11

Sao chép mã sau vào Arduino IDE của bạn Chưa tải nó lên Trước tiên, bạn cần bao

gồm SSID và mật khẩu của mình.

Trang 12

/*********

Rui Santos

Complete project details at https://randomnerdtutorials.com

*********/

// Load Wi-Fi library

#include <ESP8266WiFi.h>

#include <Wire.h>

#include <Adafruit_BME280.h>

#include <Adafruit_Sensor.h>

//uncomment the following lines if you're using SPI

/*#include <SPI.h>

#define BME_SCK 14

#define BME_MISO 12

#define BME_MOSI 13

#define BME_CS 15*/

#define SEALEVELPRESSURE_HPA (1013.25)

Adafruit_BME280 bme; // I2C

//Adafruit_BME280 bme(BME_CS); // hardware SPI

//Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI

// Replace with your network credentials

const char* ssid = "REPLACE_WITH_YOUR_SSID";

const char* password = "REPLACE_WITH_YOUR_PASSWORD";

// Set web server port number to 80

WiFiServer server(80);

// Variable to store the HTTP request

String header;

void setup() {

Serial.begin(115200);

bool status;

// default settings

// (you can also pass in a Wire library object like &Wire2)

//status = bme.begin();

if (!bme.begin(0x76)) {

Serial.println("Could not find a valid BME280 sensor, check wiring!");

while (1);

}

// Connect to Wi-Fi network with SSID and password

Serial.print("Connecting to ");

Serial.println(ssid);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {

delay(500);

Serial.print(".");

}

// Print local IP address and start web server

Serial.println("");

Trang 13

Serial.println("WiFi connected.");

Serial.println("IP address: ");

Serial.println(WiFi.localIP());

server.begin();

}

void loop(){

WiFiClient client = server.available(); // Listen for incoming clients

if (client) { // If a new client connects,

Serial.println("New Client."); // print a message out in the serial port

String currentLine = ""; // make a String to hold incoming data from the client

while (client.connected()) { // loop while the client's connected

if (client.available()) { // if there's bytes to read from the client,

char c = client.read(); // read a byte, then

Serial.write(c); // print it out the serial monitor

header += c;

if (c == '\n') { // if the byte is a newline character // if the current line is blank, you got two newline characters in a

row

// that's the end of the client HTTP request, so send a response:

if (currentLine.length() == 0) {

// HTTP headers always start with a response code (e.g HTTP/1.1 200 OK)

// and a content-type so the client knows what's coming, then a blank line:

client.println("HTTP/1.1 200 OK");

client.println("Content-type:text/html");

client.println("Connection: close");

client.println();

// Display the HTML web page

client.println("<!DOCTYPE html><html>");

client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");

client.println("<link rel=\"icon\" href=\"data:,\">");

// CSS to style the table

client.println("<style>body { text-align: center; font-family:

\"Trebuchet MS\", Arial;}");

client.println("table { border-collapse: collapse; width:35%; margin-left:auto; margin-right:auto; }");

client.println("th { padding: 12px; background-color: #0043af; color: white; }");

client.println("tr { border: 1px solid #ddd; padding: 12px; }");

client.println("tr:hover { background-color: #bcbcbc; }");

client.println("td { border: none; padding: 12px; }");

client.println(".sensor { color:white; font-weight: bold; background-color: #bcbcbc; padding: 1px; }");

// Web Page Heading

client.println("</style></head><body><h1>ESP8266 with BME280</h1>");

client.println("<table><tr><th>MEASUREMENT</th><th>VALUE</th></tr>"); client.println("<tr><td>Temp Celsius</td><td><span

Trang 14

class=\"sensor\">");

client.println(bme.readTemperature());

client.println(" *C</span></td></tr>");

client.println("<tr><td>Temp Fahrenheit</td><td><span

class=\"sensor\">");

client.println(1.8 * bme.readTemperature() + 32);

client.println(" *F</span></td></tr>");

client.println("<tr><td>Pressure</td><td><span class=\"sensor\">");

client.println(bme.readPressure() / 100.0F);

client.println(" hPa</span></td></tr>");

client.println("<tr><td>Approx Altitude</td><td><span

class=\"sensor\">");

client.println(bme.readAltitude(SEALEVELPRESSURE_HPA));

client.println(" m</span></td></tr>");

client.println("<tr><td>Humidity</td><td><span class=\"sensor\">");

client.println(bme.readHumidity());

client.println(" %</span></td></tr>");

client.println("</body></html>");

// The HTTP response ends with another blank line

client.println();

// Break out of the while loop

break;

} else { // if you got a newline, then clear currentLine

currentLine = "";

}

} else if (c != '\r') { // if you got anything else but a carriage return character,

currentLine += c; // add it to the end of the currentLine

}

}

}

// Clear the header variable

header = "";

// Close the connection

client.stop();

Serial.println("Client disconnected.");

Serial.println("");

}

}

Xem mã thô

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

Tiếp tục đọc phần này để tìm hiểu cách mã hoạt động hoặc chuyển sang phần "Trình

diễn".

Bản phác thảo này rất giống với bản phác thảo được sử dụng trong Hướng dẫn Máy chủ Web ESP8266 Đầu tiên, bạn bao gồm thư viện ESP8266WiFi và các thư viện cần thiết

để đọc từ cảm biến BME280.

Trang 15

// Load Wi-Fi library

#include <ESP8266WiFi.h>

#include <Wire.h>

#include <Adafruit_BME280.h>

#include <Adafruit_Sensor.h>

Dòng tiếp theo xác định một biến để tiết kiệm áp suất ở mực nước biển Để ước tính độ cao chính xác hơn, hãy thay thế giá trị bằng áp suất mực nước biển hiện tại tại vị trí của bạn.

#define SEALEVELPRESSURE_HPA (1013.25)

Trong dòng tiếp theo, bạn tạo một đối tượng Adafruit_BME280 gọi là bme mà theo mặc định thiết lập giao tiếp với cảm biến bằng I2C.

Adafruit_BME280 bme; // I2C

Như đã đề cập trước đây, bạn cần chèn ssid và mật khẩu của mình vào các dòng sau

bên trong dấu ngoặc kép.

const char* ssid = "";

const char* password = "";

Sau đó, bạn đặt máy chủ web của mình thành cổng 80.

// Set web server port number to 80

WiFiServer server(80);

Dòng sau tạo một biến để lưu trữ tiêu đề của yêu cầu HTTP:

String header;

Thiết lập()

Trong setup(), chúng ta bắt đầu giao tiếp nối tiếp với tốc độ truyền 115200 cho mục đích

gỡ lỗi.

Serial.begin(115200);

Bạn kiểm tra xem cảm biến BME280 đã được khởi tạo thành công.

if (!bme.begin(0x76)) {

Serial.println("Could not find a valid BME280 sensor, check wiring!");

while (1);

Các dòng sau bắt đầu kết nối Wi-Fi với WiFi.begin(ssid, mật khẩu), đợi kết nối thành

công và in địa chỉ IP ESP trong Màn hình nối tiếp.

Ngày đăng: 09/04/2023, 19:59

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