Mục lục:
- Bước 1: Đặc điểm kỹ thuật phần cứng và phần mềm
- Bước 2: Lưu trữ thông tin đăng nhập của người dùng
- Bước 3: Thiết lập biểu mẫu web của bạn trong SPIFFS
- Bước 4: Lập lịch tác vụ
- Bước 5: Đọc các giá trị nhiệt độ và độ ẩm từ SHT25
- Bước 6: Xuất bản giá trị cho ThingSpeak bằng API ThingSpeak MQTT
- Bước 7: Thông báo qua email của Báo cáo thời tiết
- Bước 8: Mã tổng thể
Video: Báo cáo thời tiết bằng ứng dụng ThingSpeak MQTT và IFTTT: 8 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:33
Giới thiệu
Một ứng dụng thời tiết dựa trên đám mây cung cấp báo cáo thời tiết hàng ngày dưới dạng thông báo qua email. Ứng dụng web này đo Nhiệt độ và Độ ẩm bằng SHT25 và Adafruit Huzzah ESP8266. Nó cung cấp cho chúng tôi dữ liệu Nhiệt độ và Độ ẩm theo thời gian thực và phân tích hàng giờ. Dữ liệu được gửi bằng ThingSpeak MQTT API và sau đó, chúng tôi sẽ cung cấp thông báo qua email cho người dùng bất cứ khi nào nhiệt độ đạt đến ngưỡng được chỉ định bằng giao thức IFTTT. SHT25 là cảm biến nhiệt độ và độ ẩm do Sensirion sản xuất. SHT25 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.
Đặc trưng
- Cung cấp cho bạn số liệu thống kê và phân tích thời gian thực bằng cách sử dụng Thing Speak MQTT API
- Thông báo qua email được cung cấp cho người dùng vào thời điểm được chỉ định bằng IFTTT
- Bộ lập lịch tác vụ được sử dụng để Lập lịch tác vụ như tìm nạp dữ liệu từ các cảm biến, Xuất bản các bài đọc của bộ cảm biến, Đăng ký chủ đề MQTT
- Nó sử dụng giao thức I2C để tìm nạp chỉ số cảm biến chính xác hơn, có thể mở rộng và có thể mở rộng
- chế độ ngủ khi thiết bị không hoạt động hoặc không có lệnh gọi lại tác vụ nào được gọi.
- lập lịch tác vụ hiệu quả cung cấp cách sử dụng không rắc rối
- Một trang web riêng biệt được lưu trữ trong đó người dùng phải cung cấp thông tin đăng nhập người dùng của mình để tránh thiết bị của bạn nhấp nháy mỗi khi tiếp cận với các mạng Wi-Fi khác
- SPIFFS được sử dụng để lưu trữ trang web của chúng tôi để làm cho mã của chúng tôi có thể đọc được và ít vụng về hơn
Bước 1: Đặc điểm kỹ thuật phần cứng và phần mềm
Đặc điểm kỹ thuật phần cứng
- Adafruit esp8266 Hội đồng quản trị Huzzah
- Huzzah Board Shield
- Mô-đun cảm biến SHT25
- Cáp I2C
Đặc điểm kỹ thuật phần mềm
- Arduino IDE
- IFTTT Thing Nói
- API MQTT
Bước 2: Lưu trữ thông tin đăng nhập của người dùng
Ở đây chúng tôi đang sử dụng cảm biến SHT25 I2C để đọc giá trị thời gian thực của Nhiệt độ và Độ ẩm tương đối và đăng các giá trị này lên đám mây. Để cập nhật giá trị cảm biến theo thời gian và đăng các cập nhật này đồng thời, chúng tôi đang sử dụng Thư viện lập lịch tác vụ của Arduino. Đối với các hoạt động trên đám mây, chúng tôi đang sử dụng API ThingSpeak MQTT. Sau đó, chúng tôi sẽ cung cấp báo cáo thời tiết theo thời gian thực cho người dùng bằng các ứng dụng IFTTT. Bạn có thể làm theo các bước sau để tạo trạm thời tiết của riêng mình. Vì vậy, hãy tự làm.
Trước khi tiếp tục. Chúng tôi cần lưu thông tin đăng nhập của người dùng. Vì mục đích này, chúng tôi đang lưu trữ một máy chủ web tại 192.169.1.4. Chúng tôi đã lưu trữ biểu mẫu web của mình trong SPIFFS. Khi thiết bị khởi động, nó sẽ lưu trữ một máy chủ web trong 60 giây. Người dùng nên làm theo các bước sau.
- Kết nối với AP ESPuser, Điều này được liệt kê trong danh sách mạng wifi khả dụng của bạn. Kết nối với AP này và nhập mật khẩu "*******"
- Khi nó được kết nối, hãy vào trình duyệt của bạn, nhập IP 192.168.1.4.
- Nhập SSID và mật khẩu của WiFi cục bộ của bạn vào các trường đầu vào và nhập SUBMIT
- Thông tin đăng nhập này sẽ được lưu trong EEPROM
- Sau 60 giây Thiết bị sẽ tự động ngắt kết nối khỏi AP
- Lần tới khi bạn bật thiết bị, Người dùng không phải làm theo quy trình này, Thiết bị sẽ tự động lấy thông tin đăng nhập của người dùng từ EEPROM và tiếp tục nhận các bài đọc cảm biến từ Giao diện I2C và đăng nó lên đám mây
// --------- Cấu hình AP ------------ // IPAddress ap_local_IP (192, 168, 1, 4); IPAddress ap_gateway (192, 168, 1, 254); IPAddress ap_subnet (255, 255, 255, 0);
Serial.print ("Đang định cấu hình điểm truy cập…");
WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);
Serial.print ("Thiết lập thông tin đăng nhập của người dùng");
WiFi.softAP (ssidAP, passAP);
server.on ("/", handleRoot);
server.onNotFound (onHandleNotFound);
server.begin ();
APTimer = millis ();
while (millis () - APTimer <APInterval) {
server.handleClient ();
}
// **************************** XỬ LÝ ROOT ****************** ********* // void xử lý () {
if (server.hasArg ("ssid") && server.hasArg ("mật khẩu"))
{
// Nếu tất cả các trường biểu mẫu đều chứa lệnh gọi dữ liệu
handelSubmit ()
handleSubmit (); }
khác {
// Hiển thị lại biểu mẫu
// đọc tệp chứa trong spiffs
Tệp tin = SPIFFS.open ("/ webform.html", "r");
server.streamFile (tệp, "text / html");
// đừng quên đóng tệp
file.close ();
}}
// Kiểm tra trạng thái rằng nó có các đối số ssid và mật khẩu
// Sau đó ghi thông tin đăng nhập vào ROM
ROMwrite (Chuỗi (server.arg ("ssid")), Chuỗi (server.arg ("mật khẩu")))
Bước 3: Thiết lập biểu mẫu web của bạn trong SPIFFS
SPIFFS
Hệ thống tệp Flash giao diện ngoại vi nối tiếp, gọi tắt là SPIFFS. Đó là một hệ thống tệp trọng lượng nhẹ dành cho bộ vi điều khiển với chip flash SPI. Chip flash tích hợp của ESP8266 có nhiều dung lượng cho các trang web của bạn, đặc biệt nếu bạn có phiên bản 1MB, 2MB hoặc 4MB. Chúng tôi cũng đã lưu trữ trang web của mình trong Hệ thống Flash. Chúng tôi cần làm theo một số bước để tải dữ liệu lên mức tăng đột biến
- Tải xuống công cụ:
- Trong thư mục sổ phác thảo Arduino của bạn, hãy tạo thư mục công cụ nếu nó chưa tồn tại
- Giải nén công cụ vào thư mục công cụ (đường dẫn sẽ giống như /Arduino/tools/ESP8266FS/tool/esp8266fs.jar)
- Khởi động lại Arduino IDE
- Mở một bản phác thảo (hoặc tạo một bản phác thảo mới và lưu nó)
- Đi tới thư mục phác thảo (chọn Sketch> Show Sketch Folder)
- Tạo một thư mục có tên dữ liệu và bất kỳ tệp nào bạn muốn trong hệ thống tệp ở đó. Chúng tôi đã tải lên trang HTML của mình với tên webform.html
- Đảm bảo rằng bạn đã chọn bo mạch, cổng và màn hình nối tiếp đã đóng
- Chọn Công cụ> Tải lên dữ liệu phác thảo ESP8266. Thao tác này sẽ bắt đầu tải các tệp lên hệ thống tệp flash ESP8266. Khi hoàn tất, thanh trạng thái IDE sẽ hiển thị thông báo SPIFFS Image Uploaded.
Tệp tin = SPIFFS.open ("/ webform.html", "r");
server.streamFile (tệp, "text / html");
// đừng quên đóng tệp
file.close ();
Bước 4: Lập lịch tác vụ
Trong hướng dẫn này, chúng tôi đang thực hiện hai thao tác:
- Đọc dữ liệu từ SHT25 bằng giao thức I2C
- Đăng dữ liệu cập nhật lên đám mây bằng ThingSpeak MQTT API
Để đạ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 hai nhiệm vụ khác nhau đề cập đến hai 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ờ Chúng tôi đang kết nối với Wifi cục bộ và nhà môi giới MQTT.
- Bây giờ Nhiệm vụ 2 đã được bật và chúng tôi đang tắt Nhiệm vụ 1 Nhiệm vụ 2 là để xuất bản dữ liệu cảm biến tới nhà môi giới Thing Speak MQTT, tác vụ này sẽ chạy trong 20 giây cho đến khi hết thời gian chờ 20 giây
- Khi Task2 hết thời gian chờ, Task 1 được bật lại và Task2 bị vô hiệu hóa. ở đây một lần nữa, chúng tôi đang nhận được giá trị cập nhật và quá trình tiếp tục
- Khi không có cuộc gọi lại nào được gọi hoặc thiết bị không hoạt động, nó sẽ chuyển sang chế độ Ngủ sáng, do đó tiết kiệm điện năng.
// --------- nguyên mẫu cho lệnh gọi lại tác vụ ------------ //
void taskI2CCallback ();
void taskI2CDisable ();
void taskWiFiCallback ();
void taskWiFiDisable ();
// --------- Nhiệm vụ ------------ //
Tác vụ tI2C (2 * TASK_SECOND, TASK_FOREVER, & taskI2CCallback, & ts, false, NULL, & taskI2CDisable);
Tác vụ tWiFi (20 * TASK_SECOND, TASK_FOREVER, & taskWiFiCallback, & ts, false, NULL, & taskWiFiDisable);
// cho phép tI2C tI2C.enable ();
Bước 5: Đọc các giá trị nhiệt độ và độ ẩm từ SHT25
I2C là giao diện hai dây chỉ sử dụng hai dây để giao tiếp với thiết bị chính. Một là SCL (Serial Clock) và một là SDA (Serial Data). Mỗi thiết bị nô lệ có một địa chỉ duy nhất. SHT 25 cũng có địa chỉ 8 bit và có thể được truy cập bằng địa chỉ 0x44. nó có địa chỉ 8bits trong đó 7 bit là địa chỉ thực và trong khi LSB bit 0 ở ngoài cùng bên phải được sử dụng để báo hiệu việc đọc hoặc ghi vào thiết bị. Nếu bit 0 được đặt thành 1 thì thiết bị chủ sẽ đọc từ thiết bị I2C phụ. I2C đáng tin cậy hơn, có thể mở rộng và nhanh chóng và thậm chí nó còn có nhiều chế độ hoạt động giúp tiết kiệm năng lượng hơn nhiều
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 SHT25. SHT25 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 bắn một lần
Bước 6: Xuất bản giá trị cho ThingSpeak bằng API ThingSpeak MQTT
Để đăng các giá trị nhiệt độ và độ ẩm của chúng tôi lên đám mây, chúng tôi đang sử dụng ThingSpeak MQTT API. ThingSpeak là một nền tảng IoT. ThingSpeak là một dịch vụ web miễn phí cho phép bạn thu thập và lưu trữ dữ liệu cảm biến trên đám mây. MQTT là một giao thức phổ biến được sử dụng trong các hệ thống IoT để kết nối các thiết bị và cảm biến cấp thấp. MQTT được sử dụng để chuyển các tin nhắn ngắn đến và đi từ một nhà môi giới. ThingSpeak gần đây đã thêm một nhà môi giới MQTT để các thiết bị có thể gửi tin nhắn đến ThingSpeak. Bạn có thể làm theo quy trình để thiết lập Kênh ThingSpeak từ bài đăng này
ThingSpeak MQTT
MQTT là một kiến trúc xuất bản / đăng ký được phát triển chủ yếu để kết nối băng thông và các thiết bị hạn chế năng lượng qua mạng không dây. Nó là một giao thức đơn giản và nhẹ, chạy qua các ổ cắm TCP / IP hoặc WebSockets. MQTT qua WebSockets có thể được bảo mật bằng SSL. Kiến trúc xuất bản / đăng ký cho phép thông báo được đẩy đến các thiết bị khách mà thiết bị không cần phải liên tục thăm dò máy chủ. Ứng dụng khách là bất kỳ thiết bị nào kết nối với nhà môi giới và có thể xuất bản hoặc đăng ký các chủ đề để truy cập thông tin. Một chủ đề chứa thông tin định tuyến cho nhà môi giới. Mỗi khách hàng muốn gửi tin nhắn sẽ xuất bản chúng theo một chủ đề nhất định và mỗi khách hàng muốn nhận tin nhắn đăng ký một chủ đề nhất định
Xuất bản và Đăng ký bằng ThingSpeak MQTT
- Xuất bản lên các kênh nguồn cấp dữ liệu kênh / xuất bản /
- Xuất bản lên một kênh trường cụ thể / xuất bản / các lĩnh vực / lĩnh vực /
- Đăng ký kênh trường kênh / subscribe //
- Đăng ký kênh nguồn cấp dữ liệu kênh riêng // subscribe / fields / field /
- Đăng ký tất cả các lĩnh vực của kênh. các kênh // subscribe / fields / feild /
void taskWiFiCallback ()
{
Serial.println ("taskWiFiCallbackStarted");
Serial.print ("thời gian chờ cho tác vụ này: / t");
Serial.println (tWiFi.getTimeout ());
if (! mqttCli.connected ())
{
Serial.println ("Máy khách không được kết nối");
kết nối lạiMQTT ();
}
String topicString = "channel /" + String (channelID) + "/ Publishing /" + String (writeAPIKey);
int topicLength = topicString.length () + 1;
char topicBuffer [topicLength];
topicString.toCharArray (topicBuffer, topicLength + 1);
Serial.println (topicBuffer);
Chuỗi dataString = String ("field1 =" + String (tempC, 1) + "& field2 =" + String (tempF, 1) + "& field3 =" + String (ẩm, 1));
int dataLength = dataString.length () + 1;
byte dataBuffer [dataLength];
dataString.getBytes (dataBuffer, dataLength);
mqttCli.beginPublish (topicBuffer, dataLength, false);
Serial.println (mqttCli.write (dataBuffer, dataLength)? "Publishers": "đã xuất bản không thành công");
mqttCli.endPublish ();
//mqttCli.loop ();
}
Bước 7: Thông báo qua email của Báo cáo thời tiết
Chúng tôi đang sử dụng các ứng dụng IFTTT để cung cấp thông báo qua email cho báo cáo thời tiết theo thời gian thực cho người dùng. Vì vậy, chúng tôi đã triển khai nó thông qua ThingSpeak. Chúng tôi đang tính trung bình các giá trị 5 ngày của nhiệt độ và độ ẩm. Bất cứ khi nào giá trị của mục nhập cuối cùng lớn hơn giá trị trung bình. Nó sẽ kích hoạt một thông báo qua email "đó là một ngày nóng". và khi nó nhỏ hơn giá trị trung bình. Nó sẽ kích hoạt một email thông báo "Thật là một ngày đẹp trời". Hàng ngày, vào khoảng 10:00 sáng (IST), chúng tôi sẽ nhận được thông báo qua email
channelID = ******;
iftttURL = 'https://maker.ifttt.com/**************';
MoistData = thingSpeakRead (channelID, 'Fields', 3, 'NumDays', 5); tempData = thingSpeakRead (channelID, 'Trường', 1, 'NumDays', 5);
perHumid = max (Dữ liệu độ ẩm) -min (Dữ liệu độ ẩm);
MoistValue = 0,1 * perHumid + phút (Dữ liệu độ ẩm);
perTemp = max (tempData) -min (tempData);
tempValue = 0,1 * perTemp + min (tempData);
urlTemp = strcat ('https://api.thingspeak.com/channels/', string (channelID), '/fields/1/last.txt');
urlHumid = strcat ('https://api.thingspeak.com/channels/', string (channelID), '/fields/3/last.txt'); lastTempValue = str2num (webread (urlTemp)); lastHumidValue = str2num (webread (urlHumid));
if (lastTempValue
if (lastTempValue> tempValue || lastHumidValue> wetValue)
plantMessage = 'Hôm nay trời nóng quá.'; webwrite (iftttURL, 'value1', plantMessage, 'value2', lastTempValue, 'value3', lastHumidValue); kết thúc
Bước 8: Mã tổng thể
Mã tổng thể
Mã tổng thể có sẵn trong kho lưu trữ GitHub này
Hạn chế
- Có một số vấn đề với việc xuất bản dữ liệu bằng cách sử dụng phương thức xuất bản cho phần lớn dữ liệu. Để giải quyết vấn đề này, chúng tôi đang sử dụng hàm write ()
- SPIFFS phải được định dạng trước khi tải dữ liệu mới lên SPIFFS.
- Bạn không được sử dụng hàm delay (). delay () cản trở hoạt động nền. Thay vào đó, chỉ tạo độ trễ bằng cách sử dụng millis () nếu cần thiết
Tín dụng
- ESP826WebServer
- Bảng kế hoạch
- SHT 25
- API ThingSpeak MQTT
- IFTTT
- PubSubClient
Đề 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
Ứng dụng web thời tiết sử dụng Esp8266: 7 bước
Ứng dụng web thời tiết sử dụng Esp8266: 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 chóng hơn nhiều vớ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à
Đồng hồ dự báo thời tiết sử dụng báo thức cũ và Arduino: 13 bước (có hình ảnh)
Đồng hồ dự báo thời tiết sử dụng đồng hồ báo thức cũ và Arduino: Tôi đã tìm thấy một chiếc đồng hồ báo thức bị hỏng nằm xung quanh và nảy ra ý tưởng chuyển nó thành đồng hồ và trạm dự báo thời tiết. Đối với dự án này, bạn sẽ cần: Mô-đun cảm biến Arduino Nano BME280 cũ ( nhiệt độ, độ ẩm, áp suất) Màn hình LCD
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ọ,