{"id":1692,"date":"2025-05-29T08:01:33","date_gmt":"2025-05-29T00:01:33","guid":{"rendered":"https:\/\/www.640629.xyz\/?p=1692"},"modified":"2025-06-27T11:02:58","modified_gmt":"2025-06-27T03:02:58","slug":"wifi%e7%b7%b4%e7%bf%92-%e5%8f%96%e5%be%97openweathermap%e8%b3%87%e6%96%99","status":"publish","type":"post","link":"https:\/\/www.640629.xyz\/?p=1692","title":{"rendered":"WiFi\u7df4\u7fd2\uff1a\u5de5\u4f5c\u7ad9\u6a21\u5f0f\u2014\u53d6\u5f97OpenWeatherMap\u5929\u6c23\u8cc7\u6599"},"content":{"rendered":"\n<p><strong><a href=\"https:\/\/openweathermap.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">OpenWeatherMap<\/a><\/strong> \u662f\u4e00\u500b\u63d0\u4f9b\u5168\u7403\u6c23\u8c61\u8cc7\u6599\u7684\u7dda\u4e0a\u5e73\u53f0\uff0c\u53ef\u900f\u904e <strong>API (Application Programming Interface)<\/strong> \u53d6\u5f97\u5373\u6642\u5929\u6c23\u3001\u9810\u5831\u3001\u6b77\u53f2\u5929\u6c23\u3001\u7a7a\u6c23\u54c1\u8cea\u7b49\u8cc7\u6599\uff0c\u5ee3\u6cdb\u61c9\u7528\u65bc\u7db2\u7ad9\u3001APP\u3001IoT(\u7269\u806f\u7db2)\u8207\u5b78\u8853\u7814\u7a76\u3002\u4f7f\u7528 API \u524d\u9700\u8a3b\u518a\u5e33\u865f\uff0c\u4e26\u53d6\u5f97 <strong>API \u91d1\u9470<\/strong>\uff0c\u8cc7\u6599\u70ba JSON \u683c\u5f0f\uff0c\u5229\u7528 JSON \u51fd\u5f0f\u5eab\u89e3\u6790\u5f8c\u5373\u53ef\u9032\u4e00\u6b65\u61c9\u7528\u3002<\/p>\n\n\n\n<p>\u8a72\u7db2\u7ad9\u53ef\u4f7f\u7528\u7684\u514d\u8cbb\u9805\u76ee\uff1a<strong><a href=\"https:\/\/openweathermap.org\/current\" target=\"_blank\" rel=\"noreferrer noopener\">Current weather and forecasts<\/a><\/strong>\uff0c\u57fa\u672c\u8a9e\u6cd5\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre title=\"\u57fa\u672c\u8a9e\u6cd51\" class=\"wp-block-code\"><code lang=\"C++\" class=\"language-C++\">https:\/\/api.openweathermap.org\/data\/2.5\/weather?lat=\u7def\u5ea6&amp;lon=\u7d93\u5ea6&amp;units=metric&amp;appid=API\u91d1\u9470<\/code><\/pre>\n\n\n\n<pre title=\"\u6307\u4ee4\" class=\"wp-block-code\"><code lang=\"C++\" class=\"language-C++\">https:\/\/api.openweathermap.org\/data\/2.5\/weather?lat=25.03&amp;lon=121.54&amp;units=metric&amp;appid=API\u91d1\u9470<\/code><\/pre>\n\n\n\n<pre title=\"\u50b3\u56de\u7d50\u679c\" class=\"wp-block-code\"><code lang=\"json\" class=\"language-json\">{\"coord\":{\"lon\":121.54,\"lat\":25.03},\"weather\":[{\"id\":803,\"main\":\"Clouds\",\"description\":\"broken clouds\",\"icon\":\"04d\"}],\"base\":\"stations\",\"main\":{\"temp\":33.38,\"feels_like\":40.38,\"temp_min\":31.68,\"temp_max\":33.83,\"pressure\":1003,\"humidity\":62,\"sea_level\":1003,\"grnd_level\":985},\"visibility\":10000,\"wind\":{\"speed\":2.24,\"deg\":300,\"gust\":8.49},\"clouds\":{\"all\":75},\"dt\":1747985425,\"sys\":{\"type\":2,\"id\":266033,\"country\":\"TW\",\"sunrise\":1747947985,\"sunset\":1747996502},\"timezone\":28800,\"id\":1675720,\"name\":\"Xianeibu\",\"cod\":200}<\/code><\/pre>\n\n\n\n<pre title=\"\u683c\u5f0f\u5316JSON\" class=\"wp-block-code\"><code lang=\"json\" class=\"language-json\">{\n    \"coord\": {\n        \"lon\": 121.54, \n        \"lat\": 25.03\n    }, \n    \"weather\": [\n        {\n            \"id\": 803, \n            \"main\": \"Clouds\", \n            \"description\": \"broken clouds\", \n            \"icon\": \"04d\"\n        }\n    ], \n    \"base\": \"stations\", \n    \"main\": {\n        \"temp\": 33.38, \n        \"feels_like\": 40.38, \n        \"temp_min\": 31.68, \n        \"temp_max\": 33.83, \n        \"pressure\": 1003, \n        \"humidity\": 62, \n        \"sea_level\": 1003, \n        \"grnd_level\": 985\n    }, \n    \"visibility\": 10000, \n    \"wind\": {\n        \"speed\": 2.24, \n        \"deg\": 300, \n        \"gust\": 8.49\n    }, \n    \"clouds\": {\n        \"all\": 75\n    }, \n    \"dt\": 1747985425, \n    \"sys\": {\n        \"type\": 2, \n        \"id\": 266033, \n        \"country\": \"TW\", \n        \"sunrise\": 1747947985, \n        \"sunset\": 1747996502\n    }, \n    \"timezone\": 28800, \n    \"id\": 1675720, \n    \"name\": \"Xianeibu\", \n    \"cod\": 200\n}<\/code><\/pre>\n\n\n\n<pre title=\"\u57fa\u672c\u8a9e\u6cd52\" class=\"wp-block-code\"><code lang=\"C++\" class=\"language-C++\">https:\/\/api.openweathermap.org\/data\/2.5\/weather?q=\u57ce\u5e02,\u570b\u5bb6\u6216\u5730\u5340&amp;units=metric&amp;appid=API\u91d1\u9470<\/code><\/pre>\n\n\n\n<pre title=\"\u6307\u4ee4\" class=\"wp-block-code\"><code lang=\"C++\" class=\"language-C++\">https:\/\/api.openweathermap.org\/data\/2.5\/weather?q=Taipei,TW&amp;units=metric&amp;appid=API\u91d1\u9470<\/code><\/pre>\n\n\n\n<p><a href=\"https:\/\/www.iso.org\/obp\/ui\/#iso:code:3166:TW\" target=\"_blank\" rel=\"noreferrer noopener\"><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">\u81fa\u7063\u57ce\u5e02\u82f1\u6587\u5c0d\u61c9\u540d\u7a31<\/mark><\/strong><\/a><\/p>\n\n\n\n<pre title=\"\u50b3\u56de\u7d50\u679c\" class=\"wp-block-code\"><code lang=\"json\" class=\"language-json\">{\"coord\":{\"lon\":121.5319,\"lat\":25.0478},\"weather\":[{\"id\":803,\"main\":\"Clouds\",\"description\":\"broken clouds\",\"icon\":\"04d\"}],\"base\":\"stations\",\"main\":{\"temp\":33.42,\"feels_like\":40.42,\"temp_min\":31.7,\"temp_max\":33.84,\"pressure\":1002,\"humidity\":62,\"sea_level\":1002,\"grnd_level\":985},\"visibility\":10000,\"wind\":{\"speed\":1.54,\"deg\":100},\"clouds\":{\"all\":75},\"dt\":1747984953,\"sys\":{\"type\":2,\"id\":266033,\"country\":\"TW\",\"sunrise\":1747947985,\"sunset\":1747996506},\"timezone\":28800,\"id\":1668341,\"name\":\"Taipei\",\"cod\":200}<\/code><\/pre>\n\n\n\n<pre title=\"\u683c\u5f0f\u5316JSON\" class=\"wp-block-code\"><code lang=\"json\" class=\"language-json\">{\n    \"coord\": {\n        \"lon\": 121.5319, \n        \"lat\": 25.0478\n    }, \n    \"weather\": [\n        {\n            \"id\": 803, \n            \"main\": \"Clouds\", \n            \"description\": \"broken clouds\", \n            \"icon\": \"04d\"\n        }\n    ], \n    \"base\": \"stations\", \n    \"main\": {\n        \"temp\": 33.42, \n        \"feels_like\": 40.42, \n        \"temp_min\": 31.7, \n        \"temp_max\": 33.84, \n        \"pressure\": 1002, \n        \"humidity\": 62, \n        \"sea_level\": 1002, \n        \"grnd_level\": 985\n    }, \n    \"visibility\": 10000, \n    \"wind\": {\n        \"speed\": 1.54, \n        \"deg\": 100\n    }, \n    \"clouds\": {\n        \"all\": 75\n    }, \n    \"dt\": 1747984953, \n    \"sys\": {\n        \"type\": 2, \n        \"id\": 266033, \n        \"country\": \"TW\", \n        \"sunrise\": 1747947985, \n        \"sunset\": 1747996506\n    }, \n    \"timezone\": 28800, \n    \"id\": 1668341, \n    \"name\": \"Taipei\", \n    \"cod\": 200\n}<\/code><\/pre>\n\n\n\n<p>JSON\u5167\u5bb9\u6709\u7d93\u7def\u5ea6\u5ea7\u6a19\u3001\u5929\u6c23\u6982\u6cc1\u3001\u6eab\u5ea6\u3001\u6ebc\u5ea6\u3001\u5927\u6c23\u58d3\u529b\u3001\u98a8\u901f\u7b49\u8cc7\u6599\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">HTTP\u8acb\u6c42\u53d6\u5f97\u7db2\u7ad9\u8cc7\u6599<\/h2>\n\n\n\n<p>ESP32\u53ef\u900f\u904eHTTPClient\u51fd\u5f0f\u5eab\u53d6\u5f97OpenWeatherMap\u7db2\u7ad9\u7684\u8cc7\u6599\uff0c\u65b9\u6cd5\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"cpp\" class=\"language-cpp\">\/\/---------------------------------------------------------------\n#include &lt;WiFi.h&gt;\nconst char *ssid = \"SSID\";       \/\/ \u9023\u4e0a\u7121\u7dda\u57fa\u5730\u81fa\u7684SSID\nconst char *password = \"\u5bc6\u78bc\";   \/\/ \u9023\u4e0a\u7121\u7dda\u57fa\u5730\u81fa\u7684\u5bc6\u78bc\n\/\/---------------------------------------------------------------\nvoid connect_to_wifi()\n{\n  WiFi.begin(ssid, password);           \/\/ \u555f\u52d5WiFi\u9023\u7dda\n  Serial.printf(\"Connecting to %s \", ssid);\n  while(WiFi.status() != WL_CONNECTED)  \/\/ \u53ea\u8981WiFi\u9023\u7dda\u72c0\u614b\u4e0d\u6b63\u5e38\n  {\n    delay(500);                         \/\/ \u6bcf0.5\u79d2\u5370\u51fa\u4e00\u500b\u9ede\n    Serial.print(\".\");\n  }\n  Serial.println(\" CONNECTED!\");\n  Serial.print(\"SSID: \");\n  Serial.println(WiFi.SSID());          \/\/ \u5370\u51faSSID\n  Serial.print(\"IP: \");\n  Serial.println(WiFi.localIP());       \/\/ \u5370\u51faIP\n  Serial.print(\"Subnet Mask IP: \");\n  Serial.println(WiFi.subnetMask());    \/\/ \u5370\u51fa\u5b50\u7db2\u8def\u906e\u7f69\n  Serial.print(\"Gateway IP: \");\n  Serial.println(WiFi.gatewayIP());     \/\/ \u5370\u51fa\u9598\u9053IP\n  Serial.print(\"DNS IP: \");\n  Serial.println(WiFi.dnsIP());         \/\/ \u5370\u51faDNS IP  \n}\n\/\/---------------------------------------------------------------\n#include &lt;HTTPClient.h&gt;                  \/\/ \u767c\u9001http\u8acb\u6c42\uff0c\u53d6\u5f97\u7db2\u7ad9\u8cc7\u6599\nHTTPClient http;\nString url = \"https:\/\/api.openweathermap.org\/data\/2.5\/weather?q=Taipei,TW&amp;units=metric&amp;appid=API\u91d1\u9470\"; \/\/ \u7db2\u5740\n\/\/---------------------------------------------------------------\n\nvoid setup()\n{\n  \/\/------------------------------------------------------------------------------\n  Serial.begin(9600);                   \/\/ \u555f\u7528\u4e32\u5217\u57e0\u76e3\u770b\u8996\u7a97\n  \/\/------------------------------------------------------------------------------\n  connect_to_wifi();                    \/\/ \u9023\u7dda\u5230WiFi\n  \/\/------------------------------------------------------------------------------\n  http.begin(url);                      \/\/ \u958b\u59cb\u9023\u63a5\u7db2\u9801\n  int httpCode = http.GET();            \/\/ \u57f7\u884cGET\u8acb\u6c42\uff0c\u56de\u50b3\u78bc\u5132\u5b58\u65bchttpCode\n\n  if (httpCode == HTTP_CODE_OK)         \/\/ \u5982\u679c\u9023\u7dda\u6b63\u5e38\n  {\n    String payload = http.getString();  \/\/ \u50b3\u56de\u7684\u7db2\u9801\u5167\u5bb9\u5132\u5b58\u65bc\u5b57\u4e32\u8b8a\u6578payload(\u627f\u8f09\u91cf)\n    Serial.println(payload);            \/\/ \u5370\u51fa\u50b3\u56de\u7684\u7db2\u9801\u5167\u5bb9\n  }\n  else\n  {\n    Serial.print(\"HTTP GET failed, error code: \");      \/\/ \u5370\u51fa\u932f\u8aa4\u8a0a\u606f\n    Serial.println(httpCode);\n  }   \n  http.end();                           \/\/ \u7d50\u675f\u9023\u7dda\n  \/\/------------------------------------------------------------------------------\n}\n\nvoid loop()\n{\n}<\/code><\/pre>\n\n\n\n<p>\u50b3\u56de\u7d50\u679c\u8207\u700f\u89bd\u5668\u76f8\u540c\uff0c\u53ea\u8981\u518d\u7d93\u904eJSON\u89e3\u6790\u4e4b\u5f8c\uff0c\u5373\u53ef\u5c07\u5404\u9805\u8cc7\u6599\u9032\u4e00\u6b65\u904b\u7528\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>JSON\u683c\u5f0f\u89e3\u6790<\/strong><\/h2>\n\n\n\n<p>ESP32\u53ef\u900f\u904eArduinoJson\u51fd\u5f0f\u5eab\u89e3\u6790\u7db2\u7ad9\u7684JSON\u8cc7\u6599\uff0c\u65b9\u6cd5\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"cpp\" class=\"language-cpp\">\/\/---------------------------------------------------------------\n#include &lt;WiFi.h&gt;\nconst char *ssid = \"SSID\";              \/\/ \u9023\u4e0a\u7121\u7dda\u57fa\u5730\u81fa\u7684SSID\nconst char *password = \"\u5bc6\u78bc\";          \/\/ \u9023\u4e0a\u7121\u7dda\u57fa\u5730\u81fa\u7684\u5bc6\u78bc\n\/\/---------------------------------------------------------------\nvoid connect_to_wifi()\n{\n  WiFi.begin(ssid, password);           \/\/ \u555f\u52d5WiFi\u9023\u7dda\n  Serial.printf(\"Connecting to %s \", ssid);\n  while(WiFi.status() != WL_CONNECTED)  \/\/ \u53ea\u8981WiFi\u9023\u7dda\u72c0\u614b\u4e0d\u6b63\u5e38\n  {\n    delay(500);                         \/\/ \u6bcf0.5\u79d2\u5370\u51fa\u4e00\u500b\u9ede\n    Serial.print(\".\");\n  }\n  Serial.println(\" CONNECTED!\");\n  Serial.print(\"SSID: \");\n  Serial.println(WiFi.SSID());          \/\/ \u5370\u51faSSID\n  Serial.print(\"IP: \");\n  Serial.println(WiFi.localIP());       \/\/ \u5370\u51faIP\n  Serial.print(\"Subnet Mask IP: \");\n  Serial.println(WiFi.subnetMask());    \/\/ \u5370\u51fa\u5b50\u7db2\u8def\u906e\u7f69\n  Serial.print(\"Gateway IP: \");\n  Serial.println(WiFi.gatewayIP());     \/\/ \u5370\u51fa\u9598\u9053IP\n  Serial.print(\"DNS IP: \");\n  Serial.println(WiFi.dnsIP());         \/\/ \u5370\u51faDNS IP  \n}\n\/\/---------------------------------------------------------------\n#include &lt;HTTPClient.h&gt;                 \/\/ \u767c\u9001http\u8acb\u6c42\uff0c\u53d6\u5f97\u7db2\u7ad9\u8cc7\u6599\nHTTPClient http;\n\/\/ String url = \"https:\/\/api.openweathermap.org\/data\/2.5\/weather?q=Taipei,TW&amp;units=metric&amp;appid=API\u91d1\u9470\";   \/\/ \u7db2\u5740\n\n\/\/ \u5c07\u7db2\u5740\u4e2d\u7684\u57ce\u5e02\u3001\u5730\u5340\u3001API\u91d1\u9470\u8a2d\u5b9a\u70ba\u8b8a\u6578\uff0c\u4ee5\u65b9\u4fbf\u5f8c\u7e8c\u7a0b\u5f0f\u64cd\u63a7\nString city = \"Taipei\";\nString countryCode = \"TW\";\nString ApiKey = \"API\u91d1\u9470\";\nString url = \"https:\/\/api.openweathermap.org\/data\/2.5\/weather?q=\" + city + \",\" + countryCode + \"&amp;units=metric&amp;appid=\" + ApiKey; \/\/ \u7db2\u5740\n\/\/---------------------------------------------------------------\n#include &lt;ArduinoJson.h&gt;                \/\/ \u89e3\u6790JSON\u8cc7\u6599\nString weatherDescription;              \/\/ \u5929\u6c23\u6982\u6cc1\nString temp;                            \/\/ \u6eab\u5ea6\nString pressure;                        \/\/ \u5927\u6c23\u58d3\u529b\nString humidity;                        \/\/ \u6ebc\u5ea6\n\/\/---------------------------------------------------------------\nvoid get_weather_data()\n{\n  http.begin(url);                      \/\/ \u958b\u59cb\u9023\u63a5\u7db2\u9801\n  int httpCode = http.GET();            \/\/ \u57f7\u884cGET\u8acb\u6c42\uff0c\u56de\u50b3\u78bc\u5132\u5b58\u65bchttpCode\n\n  if (httpCode == HTTP_CODE_OK)         \/\/ \u5982\u679c\u9023\u7dda\u6b63\u5e38\n  {\n    String payload = http.getString();  \/\/ \u50b3\u56de\u7684\u7db2\u9801\u5167\u5bb9\u5132\u5b58\u65bc\u5b57\u4e32\u8b8a\u6578payload(\u627f\u8f09\u91cf)\n    \/\/ Serial.println(payload);         \/\/ \u5370\u51fa\u50b3\u56de\u7684\u7db2\u9801\u5167\u5bb9\n    \n    \/\/ -------------------------------------------------------------\n    \/\/ OpenWeatherMap JSON\u683c\u5f0f\u89e3\u6790\n    \/\/ -------------------------------------------------------------\n    DynamicJsonDocument WeatherJson(payload.length() * 2);    \/\/ \u5ba3\u544a\u4e00\u500bJson\u6587\u4ef6\uff0c\u540d\u7a31\u70baWeatherJson\uff08\u9663\u5217\u683c\u5f0f\uff09\n    deserializeJson(WeatherJson, payload);                    \/\/ \u89e3\u6790payload\u70baJSON Array\u683c\u5f0f\n\n    weatherDescription = WeatherJson[\"weather\"][0][\"description\"].as&lt;String&gt;();   \/\/ \u53d6\u5f97\u5929\u6c23\u6982\u6cc1\uff0cweather\u662f\u9663\u5217\uff0c[0]\u662f\u7d22\u5f15\u503c\n    temp = WeatherJson[\"main\"][\"temp\"].as&lt;String&gt;();          \/\/ \u53d6\u5f97\u6eab\u5ea6\n    pressure = WeatherJson[\"main\"][\"pressure\"].as&lt;String&gt;();  \/\/ \u53d6\u5f97\u6c23\u58d3\n    humidity = WeatherJson[\"main\"][\"humidity\"].as&lt;String&gt;();  \/\/ \u53d6\u5f97\u6ebc\u5ea6\n    Serial.println(\"----------------------------------\");\n    Serial.print(\"Weather description: \");\n    Serial.println(weatherDescription);\n    Serial.print(\"Temp: \");\n    Serial.print(temp);\n    Serial.println(\" \u00b0C\");\n    Serial.print(\"Pressure: \");\n    Serial.print(pressure);\n    Serial.println(\" hPa\");\n    Serial.print(\"Humidity: \");\n    Serial.print(humidity);\n    Serial.println(\" %\");\n    Serial.println(\"----------------------------------\");\n  }\n  else\n  {\n    Serial.print(\"HTTP GET failed, error code: \");      \/\/ \u5370\u51fa\u932f\u8aa4\u8a0a\u606f\n    Serial.println(httpCode);\n  } \n  \n  http.end();                           \/\/ \u7d50\u675f\u9023\u7dda\n}\n\nvoid setup()\n{\n  \/\/-------------------------------------------\n  Serial.begin(9600);     \/\/ \u555f\u7528\u4e32\u5217\u57e0\u76e3\u770b\u8996\u7a97\n  \/\/-------------------------------------------\n  connect_to_wifi();      \/\/ \u9023\u7dda\u5230WiFi\n  \/\/-------------------------------------------\n  get_weather_data();     \/\/ \u53d6\u5f97\u5929\u6c23\u8cc7\u6599\n  \/\/-------------------------------------------\n}\n\nvoid loop()\n{\n}<\/code><\/pre>\n\n\n\n<p>\u4f5c\u696d\u7df4\u7fd21\uff1a\u8acb\u5229\u7528ESP32\u53d6\u5f97\u6642\u9593(\u6bcf\u79d21\u6b21)\u3001\u5929\u6c23\u8cc7\u6599(\u6bcf10\u79d21\u6b21)\uff0c\u5c07\u7d50\u679c\u986f\u793a\u5728\u76e3\u770b\u8996\u7a97\u4e0a\u3002<\/p>\n\n\n\n<p>\u4f5c\u696d\u7df4\u7fd22\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8acb\u5229\u7528ESP32\u7684WiFi\u529f\u80fd\uff0c\u9023\u4e0a\u7db2\u8def\u53d6\u5f97NTP\u6642\u9593\u8cc7\u6599\u53caOpenWeatherMap\u5929\u6c23\u8cc7\u6599\uff0c\u5229\u7528\u7d05\u5916\u7dda\u9059\u63a7\u5668\u3001\u7d05\u5916\u7dda\u63a5\u6536\u5668\uff0c\u53ef\u9078\u64c7\u81fa\u7063\u4e0d\u540c\u7684\u57ce\u5e02\uff0c\u5c07\u6642\u9593\u3001\u5929\u6c23\u6982\u6cc1\u3001\u6eab\u5ea6\u3001\u6ebc\u5ea6\u3001\u5927\u6c23\u58d3\u529b\u7b49\u8a0a\u606f\u5448\u73fe\u5728LCD\u4e0a\u3002<\/li>\n\n\n\n<li>\u57fa\u672c\u529f\u80fd\uff1a\n<ul class=\"wp-block-list\">\n<li>\u8acb\u81ea\u884c\u5b9a\u7fa910\u500b\u57ce\u5e02\u3002<\/li>\n\n\n\n<li>\u6309\u4e0b0-9\u6578\u5b57\u9375\uff0c\u53ef\u5c0d\u61c9\u5b9a\u7fa9\u7684\u57ce\u5e02\uff0c\u4e26\u986f\u793a\u6642\u9593\u53ca\u5929\u6c23\u8a0a\u606f\u5728LCD\u4e0a\uff0c\u4e00\u500b\u9801\u9762\u4e0d\u5920\u986f\u793a\u6642\uff0c\u53ef\u7528\u4e8c\u500b\u9801\u9762\u4ea4\u66ff\u986f\u793a\u3002<\/li>\n\n\n\n<li>\u6309\u4e0bPREV\u3001NEXT\u9375\uff0c\u53ef\u5207\u63db\u524d\u4e00\u500b\u6216\u4e0b\u4e00\u500b\u57ce\u5e02\uff0c\u53ef\u5728\u57ce\u5e020~9\u4e4b\u9593\u5faa\u74b0\u5207\u63db\u3002<\/li>\n\n\n\n<li>\u6309\u4e0bVOL+\u3001VOL-\u9375\uff0c\u53ef\u5207\u63db\u7576\u524d\u57ce\u5e02\u7684\u6642\u9593\u53ca\u5929\u6c23\u8a0a\u606f\u3002<\/li>\n\n\n\n<li>\u6309\u4e0bEQ\u9375\uff0c\u53ef\u986f\u793a\u7576\u4e0b\u65e5\u671f\u6642\u9593\uff0c\u6642\u9593\u6bcf\u79d2\u66f4\u65b0\u4e00\u6b21\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u9032\u968e\u529f\u80fd\u53ef\u81ea\u884c\u88dc\u5145\uff0c\u4f8b\u5982\uff1a\n<ul class=\"wp-block-list\">\n<li>\u8d85\u904e10\u500b\u4ee5\u4e0a\u7684\u57ce\u5e02\u3002<\/li>\n\n\n\n<li>\u4e0d\u540c\u5929\u6c23\uff0c\u53ef\u5728RGB LED\u71c8\u4e0a\u986f\u793a\u4e0d\u540c\u7684\u984f\u8272\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u8acb\u62cd\u7167\u3001\u9304\u5f71\uff0c\u4e26\u5b8c\u6210\u5be6\u7fd2\u5831\u544a\uff0c\u4e0a\u50b3Google Classroom\u4f5c\u696d\u3002<\/li>\n\n\n\n<li>\u5be6\u7fd2\u5831\u544a\u9808\u5305\u542b\u4e0b\u5217\u5167\u5bb9\uff1a(1)\u6458\u8981 (2)\u52d5\u6a5f (3)\u4e3b\u984c (4)\u5be6\u4f5c\u6b65\u9a5f (5)\u5be6\u4f5c\u7d50\u679c (6)\u5fc3\u5f97\u8207\u8a0e\u8ad6 (7)\u53c3\u8003\u8cc7\u6599\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u6210\u679c\u5f71\u7247\uff1a<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"WiFi\u9023\u7db2 + \u53d6\u5f97\u6642\u9593\u3001\u5929\u6c23\u8cc7\u6599 + \u7d05\u5916\u7dda\u9059\u63a7 + I2C LCD\" width=\"640\" height=\"360\" src=\"https:\/\/www.youtube.com\/embed\/eumela3At0M?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">\u63a7\u5236115\u4e59 \u9ec3\u90c1\u5584<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"2025\u5e746\u670812\u65e5\" width=\"640\" height=\"360\" src=\"https:\/\/www.youtube.com\/embed\/CZRCtNWdbP8?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">\u63a7\u5236115\u4e59 \u5b8b\u5141\u5347<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"\u63a7\u4e8c\u7532 \u738b\u627f\u921e \u591a\u5de5\u80fd\u6c23\u8c61\u6642\u9418ESP32+\u7d05\u5916\u7dda\u9059\u63a7\u61c9\u7528\" width=\"640\" height=\"360\" src=\"https:\/\/www.youtube.com\/embed\/LNX9O-8bPb8?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">\u63a7115\u7532 \u738b\u627f\u921e<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"\u7a0b\u5f0f\u8a2d\u8a08\u5be6\u7fd2-\u5929\u6c23 by \u63a7\u4e8c\u7532 \u6881\u5bb8\u5609\" width=\"640\" height=\"360\" src=\"https:\/\/www.youtube.com\/embed\/onY885yxSOE?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">\u63a7115\u7532 \u6881\u5bb8\u5609<\/figcaption><\/figure>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>OpenWeatherMap \u662f\u4e00\u500b\u63d0\u4f9b\u5168\u7403\u6c23\u8c61\u8cc7\u6599\u7684\u7dda\u4e0a\u5e73\u53f0\uff0c\u53ef\u900f\u904e API (Application Pr<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-1692","post","type-post","status-publish","format-standard","hentry","category-programming"],"_links":{"self":[{"href":"https:\/\/www.640629.xyz\/index.php?rest_route=\/wp\/v2\/posts\/1692","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.640629.xyz\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.640629.xyz\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.640629.xyz\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.640629.xyz\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1692"}],"version-history":[{"count":80,"href":"https:\/\/www.640629.xyz\/index.php?rest_route=\/wp\/v2\/posts\/1692\/revisions"}],"predecessor-version":[{"id":1904,"href":"https:\/\/www.640629.xyz\/index.php?rest_route=\/wp\/v2\/posts\/1692\/revisions\/1904"}],"wp:attachment":[{"href":"https:\/\/www.640629.xyz\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1692"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.640629.xyz\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1692"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.640629.xyz\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1692"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}