Mục lục:

(Dự án IOT) Nhận dữ liệu thời tiết bằng API ESP8266 và Openweather: 5 bước
(Dự án IOT) Nhận dữ liệu thời tiết bằng API ESP8266 và Openweather: 5 bước

Video: (Dự án IOT) Nhận dữ liệu thời tiết bằng API ESP8266 và Openweather: 5 bước

Video: (Dự án IOT) Nhận dữ liệu thời tiết bằng API ESP8266 và Openweather: 5 bước
Video: Lấy dữ liệu thời tiết từ INTERNET - Ngôi Nhà IoT 2024, Tháng mười một
Anonim
(Dự án IOT) Nhận dữ liệu thời tiết bằng API ESP8266 và Openweather
(Dự án IOT) Nhận dữ liệu thời tiết bằng API ESP8266 và Openweather

Trong hướng dẫn này, chúng ta sẽ xây dựng một dự án IOT đơn giản, trong đó lấy dữ liệu thời tiết của thành phố của chúng ta từ openweather.com/api và hiển thị nó bằng phần mềm Xử lý.

Quân nhu:

  1. Arduino
  2. ESP8266 hoặc bất kỳ mô-đun esp nào khác
  3. Arduino IDE
  4. Xử lý phần mềm
  5. Breadboard
  6. Nhảy cầu nam với nam và nam với nữ

Bước 1: Lấy Khóa API và URL từ Openweather.org

Lấy khóa API và URL từ Openweather.org
Lấy khóa API và URL từ Openweather.org
Lấy khóa API và URL từ Openweather.org
Lấy khóa API và URL từ Openweather.org
Nhận Khóa API và URL từ Openweather.org
Nhận Khóa API và URL từ Openweather.org
  1. Tạo tài khoản trong https://openweathermap.org (Hình ảnh 1)
  2. Sau khi bạn đăng nhập, hãy chuyển đến các khóa API và bạn sẽ nhận được khóa API như được hiển thị trong hình ảnh. (Hình ảnh 2)
  3. Sao chép khóa API và lưu vào tệp notepad. (Hình 3)
  4. Chuyển đến tùy chọn API (Hình ảnh 4)
  5. Chuyển đến tùy chọn tài liệu API như được hiển thị trong hình ảnh (Hình ảnh 5)
  6. Sao chép url từ và được hiển thị và lưu nó trong tệp notepad (Hình 6)

Bước 2: Sơ đồ kết nối

Sơ đồ kết nối
Sơ đồ kết nối

Bước 3: Mã Arduino

Trước khi sao chép mã này vào Arduino, hãy đảm bảo rằng bạn đã tải xuống board ESP8266 vào arduino Ide bằng cách sử dụng Boards manager.

#bao gồm

#include #include #include const char * ssid = "SSID của bạn"; const char * password = "Your SSID PASSWORD"; // Tên miền của bạn với đường dẫn URL hoặc địa chỉ IP với đường dẫn String openWeatherMapApiKey = "Dán khóa API của bạn vào đây"; // Thay thế bằng mã quốc gia và thành phố của bạn String city = "Mumbai"; String countryCode = "IN"; Dữ liệu chuỗi [16]; // HẸN GIỜ DEFAULT ĐƯỢC ĐẶT THÀNH 10 GIÂY CHO MỤC ĐÍCH KIỂM TRA // Đối với ứng dụng cuối cùng, hãy kiểm tra giới hạn lệnh gọi API mỗi giờ / phút để tránh bị chặn / bị cấm không ký lâu lastTime = 0; // Hẹn giờ được đặt thành 10 phút (600000) // timer dài không dấuDelay = 600000; // Đặt hẹn giờ thành 10 giây (10000) dài không dấu timerDelay = 10000; Chuỗi jsonBuffer; void setup () {Serial.begin (115200); WiFi.begin (ssid, mật khẩu); //Serial.println("Connecting "); while (WiFi.status ()! = WL_CONNECTED) {delay (500); // Serial.print ("."); } // Serial.println (""); // Serial.print ("Đã kết nối với mạng WiFi bằng Địa chỉ IP:"); // Serial.println (WiFi.localIP ()); // // Serial.println ("Bộ hẹn giờ được đặt thành 10 giây (biến timerDelay), sẽ mất 10 giây trước khi xuất bản lần đọc đầu tiên."); } void loop () {// Gửi yêu cầu HTTP GET if ((millis () - lastTime)> timerDelay) {// Kiểm tra trạng thái kết nối WiFi if (WiFi.status () == WL_CONNECTED) {String serverPath = "https://api.openweathermap.org/data/2.5/weather?q= "+ city +", "+ countryCode +" & APPID = "+" d5b56fd07988143ae141503ed9d81742 "+" & units = metric "; jsonBuffer = httpGETRequest (serverPath.c_str ()); //Serial.println(jsonBuffer); JSONVar myObject = JSON.parse (jsonBuffer); // JSON.typeof (jsonVar) có thể được sử dụng để lấy kiểu var if (JSON.typeof (myObject) == "undefined") {//Serial.println("Parsing input fail! "); trở lại; } // Serial.print ("Đối tượng JSON ="); // Serial.println (myObject); // Serial.print ("Nhiệt độ:"); // Serial.println (myObject ["main"] ["temp"]); // Serial.print ("Áp suất:"); // Serial.println (myObject ["main"] ["pressure"]); // Serial.print ("Độ ẩm:"); // Serial.println (myObject ["chính"] ["độ ẩm"]); // Serial.print ("Tốc độ gió:"); // Serial.println (myObject ["wind"] ["speed"]); int temp = myObject ["main"] ["temp"]; long pres = myObject ["main"] ["áp lực"]; int ẩm = myObject ["main"] ["độ ẩm"]; int wind = myObject ["wind"] ["speed"]; String country = JSON.stringify (myObject ["sys"] ["country"]); String city1 = JSON.stringify (myObject ["name"]); String weather = JSON.stringify (myObject ["weather"] [0] ["description"]); String icon = JSON.stringify (myObject ["weather"] [0] ["icon"]); data [0] = String (tạm thời); dữ liệu [1] = "/"; data [2] = String (pres); dữ liệu [3] = "/"; data [4] = String (ẩm); dữ liệu [5] = "/"; data [6] = String (gió); dữ liệu [7] = "/"; data [8] = quốc gia; dữ liệu [9] = "/"; data [10] = city1; dữ liệu [11] = "/"; data [12] = thời tiết; dữ liệu [13] = "/"; data [14] = biểu tượng; dữ liệu [15] = "\ n"; for (int i = 0; i0) {// Serial.print ("Mã phản hồi HTTP:"); // Serial.println (httpResponseCode); payload = http.getString (); } else {Serial.print ("Mã lỗi:"); Serial.println (httpResponseCode); } // Tài nguyên miễn phí http.end (); trả lại trọng tải; }

Bước 4: Mã xử lý

Mã xử lý
Mã xử lý
Mã xử lý
Mã xử lý
Mã xử lý
Mã xử lý

Trước khi chạy mã này, hãy tải xuống các hình ảnh biểu tượng đã cho sẽ được sử dụng để hiển thị thời tiết. Và giữ các hình ảnh và mã trong cùng một thư mục.

nhập xử lý.serial. *;

Nối tiếp myPort; PImage img; PImage img2; PImage img3; PImage img4; PImage img5; PImage img6; PImage img7; PImage img8; PImage img9; PImage img10; PImage img11; PImage img12; PImage img13; PImage img14; PImage img15; PImage img16; PImage img17; PImage img18; int tạm thời; int trước; int ẩm ướt; int gió; Chuỗi thành phố = ""; Chuỗi quốc gia = ""; String thời tiết = ""; Biểu tượng chuỗi = ""; void setup () {size (500, 500); myPort = new Serial (this, "COM3", 115200); img = loadImage ("01d.png"); img2 = loadImage ("01n.png"); img3 = loadImage ("02d.png"); img4 = loadImage ("02n.png"); img5 = loadImage ("03d.png"); img6 = loadImage ("03n.png"); img7 = loadImage ("04d.png"); img8 = loadImage ("04n.png"); img9 = loadImage ("09d.png"); img10 = loadImage ("09n.png"); img11 = loadImage ("10d.png"); img12 = loadImage ("10n.png"); img13 = loadImage ("11d.png"); img14 = loadImage ("11n.png"); img15 = loadImage ("13d.png"); img16 = loadImage ("13n.png"); img17 = loadImage ("50d.png"); img18 = loadImage ("50n.png"); } void draw () {background (72, 209, 204); textSize (22); điền (54, 69, 79); text ("Nhiệt độ:", 25, 100); text (temp + "° C", 200, 100); text ("Áp suất:", 25, 150); text (pres + "hpa", 200, 150); text ("Độ ẩm:", 25, 200); text (ẩm + "%", 200, 200); text ("Gió:", 25, 250); văn bản (gió + "m / s", 200, 250); text ("Quốc gia / Thành phố:", 25, 300); text (country + "-" + city, 200, 300); text ("Thời tiết:", 25, 350); văn bản (thời tiết, 200, 350); if (icon.contains ("01d")) {image (img, 380, 15); } else if (icon.contains ("01n")) {image (img2, 380, 15); } else if (icon.contains ("02d")) {image (img3, 380, 15); } else if (icon.contains ("02n")) {image (img4, 380, 15); } else if (icon.contains ("03d")) {image (img5, 380, 15); } else if (icon.contains ("03n")) {image (img6, 380, 15); } else if (icon.contains ("04d")) {image (img7, 380, 15); } else if (icon.contains ("04n")) {image (img8, 380, 15); } else if (icon.contains ("09d")) {image (img9, 380, 15); } else if (icon.contains ("09n")) {image (img10, 380, 15); } else if (icon.contains ("10d")) {image (img11, 380, 15); } else if (icon.contains ("10n")) {image (img12, 380, 15); } else if (icon.contains ("11d")) {image (img13, 380, 15); } else if (icon.contains ("11n")) {image (img14, 380, 15); } else if (icon == "13d") {image (img15, 380, 15); } else if (icon.contains ("13n")) {image (img16, 380, 15); } else if (icon.contains ("50d")) {image (img17, 380, 15); } else if (icon.contains ("50n")) {image (img18, 380, 15); }} void serialEvent (Serial myPort) {if (myPort.available ()> 0) {String data = myPort.readStringUntil ('\ n'); if (data! = null) {data = trim (data); Các mục chuỗi = split (dữ liệu, '/'); if (items.length> 1) {temp = int (items [0]); pres = int (items [1]); ẩm = int (items [2]); wind = int (items [3]); city = items [4].replace ("\" "," "); country = items [5].replace (" / "", ""); weather = items [6].replace ("\" "," "); icon = items [7].replace (" / "", ""); }}}}

Đề xuất: