Tạo Trạm Thời tiết Dựa trên Web Sử dụng ESP32

Trong thế kỷ hiện tại, mọi thứ đang được chuyển sang WiFi. Có rất nhiều trạm Thời tiết có sẵn trên thị trường có thể hoạt động trên WiFi và có thể được sử dụng trong gia đình. Những trạm thời tiết được kết nối với internet và chúng bao gồm một số cảm biến. Các trạm đó cảm nhận nhiệt độ, độ ẩm hoặc áp suất và hiển thị chúng trên màn hình đã có trong tiện ích và gửi dữ liệu đến một ứng dụng di động thông qua WiFi. Những Cảm biến này rất đắt tiền do đó hầu hết mọi người không thể mua được. Chúng tôi sẽ làm một trạm thời tiết ở nhà cũng sẽ hiệu quả và tiết kiệm. Nó rất dễ dàng để làm nó ở nhà bằng cách sử dụng các linh kiện dễ dàng có sẵn trên thị trường.

Trong bài viết này, chúng ta sẽ tạo một trạm thời tiết bằng cách sử dụng ESP32BME280 cảm biến. Cảm biến sẽ cảm nhận thông số tương ứng và gửi nó đến một trang web thông qua kết nối WiFi cục bộ. Đối với điều này, chúng tôi sẽ viết mã và ghi nó trên bảng vi điều khiển.

Làm thế nào để tạo một trạm thời tiết bằng cách sử dụng ESP32 và BME280?

Như bây giờ chúng ta đã biết phần tóm tắt của dự án, chúng ta hãy tiếp tục và thu thập thêm thông tin để bắt đầu làm việc với dự án.

Bước 1: Thu thập các thành phần

Cách tiếp cận tốt nhất để bắt đầu bất kỳ dự án nào là lập danh sách các thành phần và nghiên cứu ngắn gọn về các thành phần này bởi vì sẽ không ai muốn dính vào giữa một dự án chỉ vì thiếu một thành phần. Dưới đây là danh sách các thành phần mà chúng tôi sẽ sử dụng trong dự án này:

Bước 2: Tạo bảng trong HTML

Bây giờ, hãy xem cách một bảng được tạo bằng Ngôn ngữ đánh dấu siêu văn bản (HTML) và được hiển thị trong trình duyệt web. HTML là một ngôn ngữ được sử dụng để tạo cấu trúc của các trang web. Nó bao gồm một loạt các phần tử cho trình duyệt biết cách hiển thị các thứ trên trang. Các yếu tố này được thể hiện bằng các thẻ. Trình duyệt đọc mã được viết bằng HTML và hiển thị nội dung trên màn hình mà không hiển thị các thẻ.

Để tạo một bảng trong trình duyệt, chúng tôi sẽ sử dụng

nhãn. Để tạo các hàng trong đó, chúng tôi sẽ sử dụng thẻ có nghĩa là hàng của bảng. Để cung cấp các tiêu đề trong bảng, chúng tôi sẽ sử dụng thẻ có nghĩa là tiêu đề bảng. Để xác định từng ô trong bảng, chúng ta sẽ sử dụng nhãn. Mã để lập bảng yêu cầu, hãy xem mã được cung cấp bên dưới.

đại lượng mà chúng tôi đang đo giá trị. 
ĐO ĐẠC GIÁ TRỊ
Nhiệt độ Độ C --- * C
Nhiệt độ độ F --- * F
Sức ép --- hPa
Khoảng Độ cao --- mét
Độ ẩm --- %

Trong đoạn mã trên, hai ô của cột đầu tiên được đặt tên là Đo lường và Giá trị. Dưới đây, sáu hàng được tạo và mỗi hàng dành cho số lượng khác nhau sẽ được đo. Viết mã này trên notepad. Bấm vào Tập tin ở góc trên bên trái của màn hình. Bấm vào Lưu thành và đặt tên tệp của bạn với phần mở rộng là .html.Bây giờ hãy thay đổi Save As Type thành TẤT CẢ.Bấm vào nút lưu để lưu tệp. Một trình duyệt sẽ được tạo trong thư mục chứa tệp văn bản đó. Nhấp vào tệp đó để xem bảng của bạn trong trình duyệt.

Khi bạn mở tệp trong trình duyệt, nó sẽ giống như hình sau. Trong bảng này, các kiểu không được bao gồm. Nếu bạn muốn thêm đường viền để tạo một bảng phong cách theo ý mình, bạn sẽ phải thêm CSS vào đó. Để thêm CSS, hãy nhấp vào đây.

Bước 3: Lắp ráp các thành phần

Bây giờ chúng ta hãy tiếp tục và kết nối cảm biến với ESP32 bảng. Trước khi thực hiện các kết nối này, tốt hơn là bạn nên tìm hiểu sơ qua về cấu hình của các chân của Cảm biến.

A BME280 cảm biến có bảy chân trên đó. Một chân là chân Vcc được sử dụng để cấp nguồn cho cảm biến và chân thứ hai là chân nối đất. Nguồn cung cấp đầu vào được áp dụng cho chân Vcc phải nằm trong khoảng 1,8V đến 3,6V. Cái tôi2C Truyền dữ liệu nối tiếp (hai chiều) có thể đạt được nhờ SDASCL ghim. SCK được sử dụng cho dòng đồng hồ trong quá trình truyền. SDO pin được sử dụng cho dữ liệu đến từ cảm biến BME280. SDI pin được sử dụng cho dữ liệu đi ra khỏi cảm biến BME280. Chip hoạt động ở mức thấp được chọn là CS ghim.

Giao thức mà chúng tôi sẽ sử dụng trong dự án này là giao tiếp 12C với mô-đun cảm biến BME280. Với mục đích này, chúng tôi sẽ sử dụng SDASCL chân của cảm biến. Kết nối chân 21 của ESP32 được kết nối với chân SDA của cảm biến và chân 22 của ESP32 được kết nối với SCL f của cảm biến.

Khi tất cả các kết nối được thực hiện, hãy kết nối bo mạch vi điều khiển với máy tính và ghi mã vào đó. Nhấn nút Bật để bắt đầu. Các kết nối của sơ đồ sẽ giống như sau:

Bước 4: Bắt đầu với ESP32

Nếu bạn chưa làm việc trên Arduino IDE trước đây, đừng lo lắng vì từng bước thiết lập Arduino IDE được hiển thị bên dưới.

  1. Tải xuống phiên bản Arduino IDE mới nhất từ ​​Arduino.
  2. Kết nối bảng Arduino của bạn với PC và mở Bảng điều khiển. Bấm vào Phần cứng và Âm thanh.Bây giờ mở Thiết bị và Máy in và tìm cổng mà bo mạch của bạn được kết nối. Trong trường hợp của tôi, nó là COM14nhưng nó khác nhau trong các máy tính khác nhau.
  3. Bấm vào Tệp và sau đó bấm vào Tùy chọn. Sao chép liên kết sau trong URL của Người quản lý Hội đồng Quản trị bổ sung. “https://dl.espressif.com/dl/package_esp32_index.json ”
  4. Bây giờ, để sử dụng ESP32 với Arduino IDE, chúng ta cần nhập các thư viện đặc biệt cho phép chúng ta ghi mã trên ESP32 và sử dụng nó. hai thư viện này được đính kèm trong liên kết dưới đây. Để bao gồm thư viện, goto Phác thảo> Bao gồm Thư viện> Thêm Thư viện ZIP. Một hộp sẽ xuất hiện. Tìm thư mục ZIP trên máy tính của bạn và nhấp vào OK để bao gồm các thư mục. Thư viện này được đính kèm cùng với mã trong liên kết bên dưới.
  5. Bây giờ goto Phác thảo> Bao gồm Thư viện> Quản lý Thư viện.
  6. Một Menu sẽ được mở. Trong thanh Tìm kiếm, nhập adafruit bme280. Gói này sẽ được sử dụng để tích hợp BME280 cảm biến và đọc các kết quả từ nó. Gói sẽ xuất hiện trên màn hình. Cài đặt gói bằng cách nhấp vào nút cài đặt.
  7. Trong cùng một Trình quản lý Thư viện, hãy tìm kiếm Cảm biến hợp nhất Adafruit.Thư viện này cũng giúp cảm biến BME280 được sử dụng với ESP32. Một danh sách sẽ xuất hiện trong hộp. Đi đến cuối danh sách và chọn thư viện được hiển thị trong hình dưới đây. Bấm vào nút cài đặt để cài đặt thư viện.
  8. Một Menu sẽ mở ra. Trong thanh tìm kiếm, hãy nhập Arduino JSON.Một danh sách sẽ xuất hiện. Tải về Arduino JSON của Benoit Blanchon.
  9. Bây giờ hãy nhấp vào Công cụ.Một menu thả xuống sẽ xuất hiện. Đặt bảng thành Mô-đun nhà phát triển ESP.
  10. Nhấp lại vào menu Công cụ và đặt cổng mà bạn đã quan sát trong bảng điều khiển trước đó.
  11. Bây giờ Tải lên mã được đính kèm trong liên kết bên dưới và nhấp vào nút tải lên để ghi mã trên vi điều khiển ESP32.

Vì vậy, bây giờ khi bạn tải lên mã, một lỗi có thể xảy ra. Đây là lỗi phổ biến nhất có thể xảy ra nếu bạn đang sử dụng phiên bản mới của Arduino IDE và Arduino JSON. Sau đây là những lỗi mà bạn có thể thấy trên màn hình.

Trong tệp được bao gồm từ C: \ Users \ Pro \ Documents \ Arduino \ thư viện \ IOXhop_FirebaseESP32-master / IOXhop_FirebaseESP32.h: 8: 0, từ C: \ Users \ Pro \ Desktop \ smartHome \ code \ code.ino: 2: C : \ Users \ Pro \ Documents \ Arduino \ library \ IOXhop_FirebaseESP32-master / IOXhop_FirebaseStream.h: 14: 11: error: StaticJsonBuffer là một lớp từ ArduinoJson 5. Vui lòng xem arduinojson.org/upgrade để tìm hiểu cách nâng cấp chương trình của bạn lên ArduinoJson phiên bản 6 StaticJsonBuffer jsonBuffer; ^ Trong tệp được bao gồm từ C: \ Users \ Pro \ Documents \ Arduino \ architects \ IOXhop_FirebaseESP32-master / IOXhop_FirebaseESP32.h: 8: 0, từ C: \ Users \ Pro \ Desktop \ smartHome \ code \ code.ino: 2: C: \ Users \ Pro \ Documents \ Arduino \ library \ IOXhop_FirebaseESP32-master / IOXhop_FirebaseStream.h: 65: 11: error: StaticJsonBuffer là một lớp từ ArduinoJson 5. Vui lòng xem arduinojson.org/upgrade để tìm hiểu cách nâng cấp chương trình của bạn lên ArduinoJson phiên bản 6 trả về StaticJsonBuffer() .parseObject (_data); ^ Đã tìm thấy nhiều thư viện cho "WiFi.h" Đã sử dụng: C: \ Users \ Pro \ AppData \ Local \ Arduino15 \ package \ esp32 \ hardware \ esp32 \ 1.0.2 \ thư viện \ WiFi Không được sử dụng: C: \ Program Files ( x86) \ Arduino \ thư viện \ WiFi Sử dụng thư viện WiFi tại phiên bản 1.0 trong thư mục: C: \ Users \ Pro \ AppData \ Local \ Arduino15 \ package \ esp32 \ hardware \ esp32 \ 1.0.2 \ thư viện \ WiFi Sử dụng thư viện IOXhop_FirebaseESP32-master trong thư mục: C: \ Users \ Pro \ Documents \ Arduino \ thư viện \ IOXhop_FirebaseESP32-master (kế thừa) Sử dụng thư viện HTTPClient tại phiên bản 1.2 trong thư mục: C: \ Users \ Pro \ AppData \ Local \ Arduino15 \ package \ esp32 \ hardware \ esp32 \ 1.0.2 \ thư viện \ HTTPClient Sử dụng thư viện WiFiClientSecure tại phiên bản 1.0 trong thư mục: C: \ Users \ Pro \ AppData \ Local \ Arduino15 \ package \ esp32 \ hardware \ esp32 \ 1.0.2 \ Library \ WiFiClientSecure Sử dụng thư viện ArduinoJson tại phiên bản 6.12.0 trong thư mục: C: \ Users \ Pro \ Documents \ Arduino \ architects \ ArduinoJson trạng thái thoát 1 Lỗi biên dịch cho bảng ESP32 Dev Module.

Không có gì phải lo lắng vì chúng ta có thể loại bỏ những lỗi này bằng một số bước đơn giản. Những lỗi này đang phát sinh do phiên bản mới của Arduino JSON có một lớp khác thay vì StaticJsonBuffer.Đây là lớp của JSON 5. Vì vậy, chúng ta có thể đơn giản loại bỏ lỗi này bằng cách hạ cấp phiên bản Arduino JSON của Arduino IDE của chúng ta. Đơn giản chỉ cần đi đến Phác thảo> Bao gồm Thư viện> Quản lý Thư viện.Tìm kiếmArduino JSON của Benoit Blanchonmà bạn đã cài đặt trước đó. Gỡ cài đặt nó trước và sau đó đặt phiên bản của nó thành 5.13.5. Bây giờ khi chúng ta đã thiết lập phiên bản Arduino JSON cũ, hãy cài đặt lại nó và biên dịch lại mã. Lần này, mã của bạn sẽ được biên dịch thành công.

Để tải xuống mã, bấm vào đây.

Bước 5: Tìm hiểu Quy tắc

Mã của dự án này rất đơn giản và được nhận xét tốt. Tuy nhiên, mã được giải thích ngắn gọn bên dưới.

1. Ban đầu, các thư viện được bao gồm để bo mạch ESP32 có thể được kết nối với kết nối WiFi cục bộ trong nhà hoặc văn phòng. Các thư viện giúp ESP32 tích hợp cảm biến BME280 với nó, cũng được bao gồm. Sau đó, tên và mật khẩu của kết nối wifi cục bộ của bạn được xác định để ESP32 có thể được kết nối với Wifi.

// Tải thư viện Wi-Fi #include             // libray để sử dụng wifi #include  #include  // thư viện sử dụng cảm biến BME280 #include  // thư viện sử dụng cảm biến BME280

2. Sau đó, một số dòng được bình luận. Các dòng này sẽ được sử dụng nếu bạn đang sử dụng giao thức SPI cho giao tiếp của cảm biến. Chúng tôi sẽ giữ cho họ nhận xét vì chúng tôi đang sử dụng giao thức 12C.

/ * # bao gồm  # xác định BME_SCK 18 # xác định BME_MISO 19 # xác định BME_MOSI 23 # xác định BME_CS 5 * /

3. Một biến được tạo ra để lưu giá trị của áp suất mực nước biển tính bằng hectopascal. 1 hectopascal tương đương với một milibar. Độ cao của áp suất đã cho được ước tính và sau đó biến này so sánh nó với áp suất mực nước biển. Sau đây, bmelà một đối tượng được tạo ra để sử dụng thêm.

#define SEALEVELPRESSURE_HPA (1013,25) // biến để so sánh áp suất tìm được với mực nước biển Adafruit_BME280 bme; // I2C

4. Sau đó, tên của kết nối WiFi của bạn và nguồn của nó được bao gồm trong mã, để ESP32 có thể được kết nối với WiFi. Sau đó, số cổng được đặt để giao tiếp với máy chủ web và một biến được khai báo để lưu trữ yêu cầu HTTP.

const char * ssid = "SSID CỦA BẠN"; // Tên kết nối wifi cục bộ của bạn const char * password = "MẬT KHẨU CỦA BẠN"; // Mật khẩu của máy chủ WiFiServer kết nối wifi cục bộ của bạn (80); // Đặt số cổng máy chủ web thành 80 String header; // Biến để lưu trữ yêu cầu HTTP

5. void setup ()là một hàm trong đó chúng ta khởi tạo các chân INPUT hoặc OUTPUT. Chức năng này cũng đặt tốc độ truyền bằng cách sử dụng Serial.begin () chỉ huy. Tốc độ Baud là tốc độ truyền thông của vi điều khiển. Một số dòng mã được thêm vào đây để kết nối ESP32 với kết nối wifi cục bộ. Bo mạch thử kết nối wifi cục bộ và sẽ in "Kết nối." trong màn hình nối tiếp. Nó sẽ in “Đã kết nối” khi kết nối được thiết lập. Vì vậy, để theo dõi điều này, tốt hơn là bạn nên mở màn hình nối tiếp và kiểm tra sao của nó ở đó.

void setup () {Serial.begin (115200); // thiết lập trạng thái bool tốc độ baud; // cài đặt mặc định // (bạn cũng có thể chuyển vào đối tượng thư viện Wire như & Wire2) // status = bme.begin (); if (! bme.begin (0x76)) {// kiểm tra xem cảm biến có phải không fouund Serial.println ("Không thể tìm thấy cảm biến BME280 hợp lệ, hãy kiểm tra hệ thống dây điện!"); trong khi (1); } // Kết nối với mạng Wi-Fi bằng SSID và mật khẩu Serial.print ("Đang kết nối với"); Serial.println (ssid); WiFi.begin (ssid, mật khẩu); while (WiFi.status ()! = WL_CONNECTED) {delay (500); Serial.print ("."); } // In địa chỉ IP cục bộ và khởi động máy chủ web Serial.println (""); Serial.println ("Đã kết nối WiFi."); Serial.println ("Địa chỉ IP:"); // in địa chỉ ip trên màn hình nối tiếp Serial.println (WiFi.localIP ()); server.begin (); }

6. void loop ()là một hàm chạy lặp đi lặp lại trong một vòng lặp. Trong vòng lặp này, chúng tôi viết một đoạn mã cho bảng vi điều khiển biết những công việc cần thực hiện và cách thức thực hiện. Trong đoạn mã này, đầu tiên, một kết nối được thiết lập với một máy khách mới. Nếu kết nối được thiết lập, trang web sẽ hiển thị trên trình duyệt. Sau đó, bảng được tạo và các số đọc cảm biến được điền vào bảng đó. Khi bảng được lấp đầy, kết nối sẽ bị đóng.

void loop () {WiFiClient client = server.available (); // Lắng nghe các máy khách đến if (client) {// Nếu một máy khách mới kết nối, Serial.println ("New Client."); // in thông báo ra cổng nối tiếp String currentLine = ""; // tạo một Chuỗi để giữ dữ liệu đến từ máy khách trong khi (client.connected ()) {// lặp lại trong khi máy khách được kết nối if (client.available ()) {// nếu có byte để đọc từ máy khách, char c = client.read (); // đọc một byte, sau đó Serial.write (c); // in nó ra tiêu đề màn hình nối tiếp + = c; if (c == '\ n') {// nếu byte là ký tự dòng mới // nếu dòng hiện tại trống, bạn có hai ký tự dòng mới liên tiếp. // đó là phần cuối của yêu cầu HTTP của ứng dụng khách, vì vậy hãy gửi phản hồi: if (currentLine.length () == 0) {// Tiêu đề HTTP luôn bắt đầu bằng mã phản hồi (ví dụ: HTTP / 1.1 200 OK) // và a content-type để khách hàng biết điều gì sắp xảy ra, sau đó là một dòng trống: client.println ("HTTP / 1.1 200 OK"); client.println ("Kiểu nội dung: text / html"); client.println ("Kết nối: đóng"); client.println (); // Hiển thị trang web HTML client.println (""); client.println (""); client.println (""); // CSS để tạo kiểu bảng client.println ("

ESP32 với BME280

"); client.println (""); client.println (""); client.println (""); client.println (""); client.println (""); client.println (""); client.println ("
ĐO ĐẠCGIÁ TRỊ
Nhiệt độ Độ C"); client.println (bme.readTempeosystem ()); client.println (" * C
Nhiệt độ độ F"); client.println (1,8 * bme.readTempe Heat () + 32); client.println (" * F
Sức ép"); client.println (bme.readPressure () / 100.0F); client.println (" hPa
Khoảng Độ cao"); client.println (bme.readAltitude (SEALEVELPRESSURE_HPA)); client.println (" m
Độ ẩm"); client.println (bme.readHumidity ()); client.println ("%
"); // Phản hồi HTTP kết thúc bằng một dòng trống khác client.println (); // Thoát khỏi ngắt vòng lặp while;} else {// nếu bạn có dòng mới, hãy xóa currentLine currentLine =" ";}} else if (c! = '\ r') {// nếu bạn có bất kỳ thứ gì khác ngoài ký tự xuống dòng, currentLine + = c; // thêm nó vào cuối dòng currentLine}}} // Xóa tiêu đề của biến tiêu đề = ""; // Đóng kết nối client.stop (); Serial.println ("Máy khách đã ngắt kết nối."); Serial.println ("");}}

Đây là toàn bộ quy trình về cách tạo một trạm thời tiết bằng ESP32, bây giờ sau khi thu thập các thành phần phần cứng từ thị trường và bắt đầu tự chế tạo. Chúc may mắn!

Facebook Twitter Google Plus Pinterest