Mục lục:
- Bước 1: Yêu cầu phần cứng
- Bước 2: Kết nối phần cứng
- Bước 3: Mã lập lịch tác vụ
- Bước 4: Mã để đọc các giá trị nhiệt độ và độ ẩm
- Bước 5: Mã để lưu trữ một máy chủ trang web
- Bước 6: Mã để đăng dữ liệu cần nói
- Bước 7: Mã tổng thể
Video: Ứng dụng web thời tiết sử dụng Esp8266: 7 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:32
SHT 31 là Cảm biến Nhiệt độ và Độ ẩm do Sensirion sản xuất. SHT31 cung cấp độ chính xác cao khoảng ± 2% RH. Phạm vi độ ẩm của nó là từ 0 đến 100% và phạm vi nhiệt độ là từ -40 đến 125 ° C. Nó đáng tin cậy và nhanh hơn nhiều với thời gian phản hồi của Cảm biến 8 giây. Chức năng của nó bao gồm xử lý tín hiệu nâng cao và khả năng tương thích I2C. Nó có các chế độ hoạt động khác nhau giúp tiết kiệm năng lượng.
Trong hướng dẫn này, chúng tôi đã giao tiếp SHT 31 với bảng Adafruit Huzzah. Để đọc các giá trị Nhiệt độ và Độ ẩm, chúng tôi đã sử dụng tấm chắn I2C ESP8266. Bộ điều hợp này giúp người dùng có thể truy cập tất cả các chân và cung cấp môi trường I2C thân thiện với người dùng.
Bước 1: Yêu cầu phần cứng
Phần cứng được sử dụng để hoàn thành tác vụ này:
1. SHT31
2. Adafruit Huzzah ESP8266
3. Bộ chuyển đổi I2C ESP8266
4. Cáp I2C
Bước 2: Kết nối phần cứng
Bước này bao gồm hướng dẫn kết nối phần cứng. Phần này giải thích về cơ bản các kết nối dây cần thiết giữa cảm biến và ESP8266. Các kết nối như sau.
- SHT31 hoạt động trên I2C. Hình ảnh trên minh họa kết nối giữa mô-đun ESP8266 và SHT31. Chúng tôi đang sử dụng cáp I2C cho nó hoặc chúng tôi có thể sử dụng 4 dây nối F đến F.
- một dây được sử dụng cho Vcc, dây thứ hai cho GND và hai dây khác tương ứng cho SDA và SCL.
- Theo bộ điều hợp I2C, chân 2 và chân 14 của bảng ESP8266 được sử dụng làm SDA và SCL tương ứng
Bước 3: Mã lập lịch tác vụ
Trong hướng dẫn này, chúng tôi đang thực hiện ba hoạt động
- Đọc dữ liệu từ SHT11 bằng giao thức I2C
- lưu trữ máy chủ web và đăng kết quả đọc cảm biến lên trang web
- đăng các bài đọc cảm biến lên API ThingSpeak
Để đạt được điều này, chúng tôi sử dụng thư viện TaskScheduler. Chúng tôi đã lên lịch cho ba nhiệm vụ khác nhau đề cập đến ba hoạt động kiểm soát khác nhau. Điều này được thực hiện như sau
- Nhiệm vụ 1 là để đọc giá trị cảm biến, nhiệm vụ này chạy trong 1 giây cho đến khi hết thời gian chờ 10 giây.
- Khi Task1 hết thời gian chờ, Task 2 được bật và Task1 bị tắt.
- Chúng tôi kết nối với AP trong lần gọi lại này, Hai biến boolean được thực hiện để xử lý việc chuyển đổi giữa STA và AP
- Trong Tác vụ 2, chúng tôi đang lưu trữ một máy chủ web tại 192.168.1.4. Tác vụ này chạy cứ sau 5 giây cho đến khi hết thời gian chờ là 50 giây
- Khi Nhiệm vụ 2 hết thời gian chờ, Nhiệm vụ 3 được bật và Tác vụ 2 bị vô hiệu hóa.
- Chúng tôi kết nối với STA (IP cục bộ) trong cuộc gọi lại này
- Trong Nhiệm vụ 3, chúng tôi sẽ đăng việc đọc cảm biến lên API ThingSpeak trên đám mây
- Tác vụ 3 chạy cứ sau năm giây cho đến khi hết thời gian chờ, tức là 50 giây
- Khi Task3 hết thời gian chờ, Task 1 được bật lại và Task3 bị vô hiệu hóa.
- Khi không có cuộc gọi lại nào hoặc thiết bị không hoạt động, nó sẽ chuyển sang chế độ Ngủ sáng để tiết kiệm điện năng.
Bộ lập lịch ts;
// Nhiệm vụ cho i2c, lưu trữ máy chủ web và đăng trên thingspeak
Tác vụ tI2C (1 * TASK_SECOND, TASK_FOREVER, & taskI2CCallback, & ts, false, NULL, & taskI2CDisable); Task tAP (5 * TASK_SECOND, TASK_FOREVER, & taskAPCallback, & ts, false, NULL, & taskAPDisable); Tác vụ tWiFi (5 * TASK_SECOND, TASK_FOREVER, & taskWiFiCallback, & ts, false, NULL, & taskWiFiDisable); // thời gian chờ cho các tác vụ tI2C.setTimeout (10 * TASK_SECOND); tAP.setTimeout (50 * TASK_SECOND); tWiFi.setTimeout (50 * TASK_SECOND); // kích hoạt tác vụ I2C tI2C.enable ();
Bước 4: Mã để đọc các giá trị nhiệt độ và độ ẩm
Chúng tôi đang sử dụng thư viện Wire.h để đọc các giá trị nhiệt độ và độ ẩm. Thư viện này hỗ trợ giao tiếp i2c giữa cảm biến và thiết bị chính. 0x44 là địa chỉ I2C cho SHT31.
SHT31 hoạt động ở một phương thức hoạt động khác. Bạn có thể tham khảo biểu dữ liệu cho điều đó.
Chúng tôi đang sử dụng 0x2C và 0x06 làm MSB và LSB tương ứng cho hoạt động chụp một lần.
// Gọi lại nhiệm vụ I2C void taskI2CCallback ()
{Serial.println ("taskI2CStarted"); unsigned int root [6]; // bắt đầu truyền từ 0x44; Wire.beginTransmission (Addr); // để truyền một lần với độ lặp lại cao, chúng tôi sử dụng 0x2C (MSB) và 0x06 (LSB) Wire.write (0x2C); Wire.write (0x06); // kết thúc truyền Wire.endTransmission (); // yêu cầu byte từ 0x44 Wire.beginTransmission (Addr); Wire.endTransmission (); Wire.requestFrom (Addr, 6); if (Wire.available () == 6) {// data [0] và data [1] chứa 16 bit nhiệt độ. root [0] = Wire.read (); root [1] = Wire.read (); // data [2] chứa 8 bit gốc CRC [2] = Wire.read (); // data [3] và data [4] chứa 16 bit gốc độ ẩm [3] = Wire.read (); root [4] = Wire.read (); // data [5] gồm 8 bit CRC root [5] = Wire.read (); } int temp = (root [0] * 256) + root [1]; // shift MSB 8 bit thêm LSB float cTemp = -45.0 + (175.0 * temp / 65535.0); float fTemp = (cTemp * 1.8) + 32.0; // dịch chuyển MSB 8 bit thêm LSB vào nó bằng độ phân giải đầy đủ và * 100 cho độ ẩm phần trăm float = (100.0 * ((root [3] * 256.0) + root [4])) / 65535.0;
tempC = cTemp;
tempF = fTemp; ẩm = độ ẩm; Serial.print ("Nhiệt độ tính bằng C: / t"); Serial.println (String (cTemp, 1)); Serial.print ("Nhiệt độ tính bằng F: / t"); Serial.println (String (fTemp, 1)); Serial.print ("Độ ẩm: / t"); Serial.println (Chuỗi (độ ẩm, 1)); }
Bước 5: Mã để lưu trữ một máy chủ trang web
Chúng tôi đã lưu trữ một máy chủ web từ thiết bị của mình trên một IP tĩnh.
- Thư viện ESP8266WebServer được sử dụng để lưu trữ máy chủ web
- Đầu tiên chúng ta cần khai báo địa chỉ IP, Gateway và mặt nạ mạng con để tạo IP tĩnh của chúng ta
- Bây giờ hãy khai báo ssid và mật khẩu cho Điểm truy cập của bạn.
- kết nối với Điểm truy cập từ bất kỳ thiết bị STA nào
- lưu trữ máy chủ trên cổng 80 là cổng mặc định cho giao thức truyền thông internet, Giao thức truyền siêu văn bản (HTTP)
- nhập 192.168.1.4 trên trình duyệt web của bạn cho trang web giới thiệu và 192.168.1.4/Value cho trang web đọc cảm biến
// Ip tĩnh cho AP
IPAddress ap_local_IP (192, 168, 1, 4);
IPAddress ap_gateway (192, 168, 1, 254);
IPAddress ap_subnet (255, 255, 255, 0); // ssid và AP cho WiFi cục bộ ở chế độ STA
const char WiFissid = "*********";
const char WiFipass = "*********";
// ssid và chuyển cho AP
const char APssid = "********";
const char APpass = "********";
Máy chủ ESP8266WebServer (80);
thiết lập vô hiệu {
server.on ("/", onHandleDataRoot);
server.on ("/ Giá trị", onHandleDataFeed);
server.onNotFound (onHandleNotFound);
}
void taskAPCallback () {
Serial.println ("taskAP đã bắt đầu");
server.handleClient ();
}
void onHandleDataRoot () {server.send (200, "text / html", PAGE1); }
void onHandleDataFeed () {
server.send (200, "text / html", PAGE2); }
void onHandleNotFound () {
String message = "Không tìm thấy tệp / n / n";
tin nhắn + = "URI:";
message + = server.uri ();
tin nhắn + = "\ nMethod:";
message + = (server.method () == HTTP_GET)? "GET": "POST";
message + = "\ nĐối số:";
message + = server.args ();
tin nhắn + = "\ n";
server.send (404, "văn bản / đồng bằng", thông báo);}
void kết nối lạiAPWiFi () {
WiFi.mode (WIFI_AP_STA);
chậm trễ (100);
WiFi.disconnect ();
trạng thái boolean = WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);
if (status == true) {
Serial.print ("Đặt soft-AP…");
boolean ap = WiFi.softAP (APssid, APpass);
if (ap == true) {
Serial.print ("được kết nối với: / t");
// IPAddress myIP = WiFi.softAPIP ();
Serial.println (WiFi.softAPIP ());
}
server.begin ();
}
}
Bước 6: Mã để đăng dữ liệu cần nói
Ở đây chúng tôi đăng các bài đọc cảm biến lên Thing Speak. các bước sau là cần thiết để hoàn thành nhiệm vụ này-
- Tạo tài khoản của bạn bằng cách nói
- Tạo các kênh và trường để lưu trữ dữ liệu cảm biến của bạn
- chúng ta có thể lấy và đăng dữ liệu từ ESP lên thingSpeak và ngược lại bằng cách sử dụng các yêu cầu GET và POST tới api.
- chúng ta có thể đăng dữ liệu của mình lên ThingSpeak như sau
void taskWiFiCallback () {
WiFiClient wifiClient; if (wifiClient.connect (hostId, 80)) {String postStr = apiKey; postStr + = "& field1 ="; postStr + = String (ẩm); postStr + = "& field2 ="; postStr + = String (tempC); postStr + = "& field3 ="; postStr + = String (tempF); postStr + = "\ r / n / r / n"; wifiClient.print ("ĐĂNG / cập nhật HTTP / 1.1 / n"); wifiClient.print ("Máy chủ: api.thingspeak.com / n"); wifiClient.print ("Kết nối: close / n"); wifiClient.print ("X-THINGSPEAKAPIKEY:" + apiKey + "\ n"); wifiClient.print ("Loại-Nội dung: application / x-www-form-urlencoded / n"); wifiClient.print ("Nội dung-Độ dài:"); wifiClient.print (postStr.length ()); wifiClient.print ("\ n / n"); wifiClient.print (postStr); } wifiClient.stop (); }
Bước 7: Mã tổng thể
Mã tổng thể có sẵn trong kho lưu trữ github của tôi
Tín dụng:
- Arduino JSON: ArduinoJson
- ESP826WebServer
- Bảng kế hoạch
- SHT 31
- Quét I2C
- HIH6130 hướng dẫn có sẵn
- Dây Arduino
- NCD.io
Đề xuất:
Trạm thời tiết NaTaLia: Trạm thời tiết sử dụng năng lượng mặt trời Arduino Đã thực hiện đúng cách: 8 bước (có hình ảnh)
Trạm thời tiết NaTaLia: Trạm thời tiết sử dụng năng lượng mặt trời Arduino Đã hoàn thành đúng cách: Sau 1 năm hoạt động thành công trên 2 địa điểm khác nhau, tôi đang chia sẻ kế hoạch dự án trạm thời tiết sử dụng năng lượng mặt trời của mình và giải thích cách nó phát triển thành một hệ thống thực sự có thể tồn tại trong thời gian dài thời kỳ từ năng lượng mặt trời. Nếu bạn theo dõi
Trạm thời tiết IoT sử dụng ứng dụng Blynk: 5 bước
Trạm thời tiết IoT sử dụng ứng dụng Blynk: Dự án này liên quan đến các bước ban đầu trong thế giới IoT, ở đây chúng tôi sẽ giao diện cảm biến DHT11 / DHT22 với NodeMCU hoặc bảng dựa trên ESP8266 khác và nhận dữ liệu trên internet, chúng tôi sẽ sử dụng ứng dụng Blynk, sử dụng hướng dẫn sau liên kết nếu bạn là
Nến thời tiết - Xem nhanh thời tiết và nhiệt độ: 8 bước
Nến thời tiết - Xem nhanh thời tiết và nhiệt độ: Sử dụng ngọn nến kỳ diệu này, bạn có thể cho biết nhiệt độ hiện tại và điều kiện bên ngoài ngay lập tức
Thời tiết RPi với trang web đáp ứng: 5 bước
RPi thời tiết với trang web đáp ứng: Đối với một dự án trường học, chúng tôi phải tạo một thiết bị IoT với trang web để hiển thị thông tin thu thập được một cách tốt đẹp. Tôi đã chọn tạo thời tiết được hỗ trợ bởi Raspberry Pi 3 chạy Flask cho trang web đáp ứng, MySQL (MariaDB) cho dữ liệu của tôi
Acurite 5 trong 1 Trạm thời tiết sử dụng Raspberry Pi và Weewx (các trạm thời tiết khác tương thích): 5 bước (có Hình ảnh)
Trạm thời tiết Acurite 5 trong 1 Sử dụng Raspberry Pi và Weewx (các Trạm thời tiết khác Tương thích): Khi tôi mua trạm thời tiết Acurite 5 trong 1, tôi muốn có thể kiểm tra thời tiết tại nhà của mình khi tôi đi vắng. Khi tôi về nhà và thiết lập nó, tôi nhận ra rằng tôi phải có màn hình kết nối với máy tính hoặc mua trung tâm thông minh của họ,