{"id":543,"date":"2026-03-24T16:49:14","date_gmt":"2026-03-24T08:49:14","guid":{"rendered":"https:\/\/weilai-future.top\/?p=543"},"modified":"2026-03-24T16:54:01","modified_gmt":"2026-03-24T08:54:01","slug":"esp8266%e7%94%b5%e5%ad%90%e6%97%b6%e9%92%9f","status":"publish","type":"post","link":"https:\/\/weilai-future.top\/index.php\/2026\/03\/24\/esp8266%e7%94%b5%e5%ad%90%e6%97%b6%e9%92%9f\/","title":{"rendered":"ESP8266\u7535\u5b50\u65f6\u949f"},"content":{"rendered":"\n<div class=\"wp-block-media-text is-stacked-on-mobile\" style=\"grid-template-columns:54% auto\"><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"1706\" height=\"1279\" src=\"https:\/\/weilai-future.top\/wp-content\/uploads\/2026\/03\/0712775687be844535c8c8367888f4a8.jpg\" alt=\"\" class=\"wp-image-544 size-full\" srcset=\"https:\/\/weilai-future.top\/wp-content\/uploads\/2026\/03\/0712775687be844535c8c8367888f4a8.jpg 1706w, https:\/\/weilai-future.top\/wp-content\/uploads\/2026\/03\/0712775687be844535c8c8367888f4a8-300x225.jpg 300w, https:\/\/weilai-future.top\/wp-content\/uploads\/2026\/03\/0712775687be844535c8c8367888f4a8-1024x768.jpg 1024w, https:\/\/weilai-future.top\/wp-content\/uploads\/2026\/03\/0712775687be844535c8c8367888f4a8-768x576.jpg 768w, https:\/\/weilai-future.top\/wp-content\/uploads\/2026\/03\/0712775687be844535c8c8367888f4a8-1536x1152.jpg 1536w\" sizes=\"auto, (max-width: 1706px) 100vw, 1706px\" \/><\/figure><div class=\"wp-block-media-text__content\">\n<p>ESP8266\u7535\u5b50\u65f6\u949f<\/p>\n\n\n\n<p>\u529f\u80fd:\u81ea\u5b9a\u4e49API\u8bbf\u95ee<br>\u663e\u793a\u5929\u6c14<br>\u663e\u793a\u65f6\u95f4<\/p>\n<\/div><\/div>\n\n\n\n<details class=\"wp-block-details has-x-large-font-size is-layout-flow wp-block-details-is-layout-flow\"><summary><strong>\u6750\u6599<\/strong><\/summary>\n<ul class=\"wp-block-list\">\n<li class=\"has-large-font-size\">\u4e00\u5757\u5927\u5c0f\u4e0d\u7b26\u5408\u7684\u9762\u5305\u677f<\/li>\n\n\n\n<li class=\"has-large-font-size\">NodeMCU ESP-12E\uff08ESP8266 WiFi \u5f00\u53d1\u677f\uff09<\/li>\n\n\n\n<li class=\"has-large-font-size\">0.96 \u5bf8 I2C \u63a5\u53e3 SSD1306 OLED \u663e\u793a\u5c4f<\/li>\n\n\n\n<li class=\"has-large-font-size\">\u6709\u6e90\u8702\u9e23\u5668<\/li>\n\n\n\n<li class=\"has-large-font-size\">\u51e0\u6839\u675c\u90a6\u7ebf<\/li>\n<\/ul>\n<\/details>\n\n\n\n<details class=\"wp-block-details has-x-large-font-size is-layout-flow wp-block-details-is-layout-flow\"><summary>arduino \u4ee3\u7801<\/summary>\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-disabled padding-bottom-disabled\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" style=\"color:#24292e;display:none\" aria-label=\"\u590d\u5236\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>#include &lt;U8g2lib.h>\n#include &lt;Wire.h>\n#include &lt;ESP8266WiFi.h>\n#include &lt;ESP8266HTTPClient.h>\n#include &lt;ArduinoJson.h>\n\n\/\/ ==================== OLED\u914d\u7f6e ====================\nU8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, \/* reset=*\/ U8X8_PIN_NONE, \/* clock=*\/ 5, \/* data=*\/ 4);\n\/\/ ==================== \u8702\u9e23\u5668\u914d\u7f6e ====================\n#define BUZZER_PIN 0  \/\/ D3 (GPIO0)\n\n\n\/\/ ==================== WiFi\u914d\u7f6e ====================\nconst char* ssid = \"N\/A\";\nconst char* password = \"N\/A\";\n\n\/\/ ==================== API\u914d\u7f6e ====================\nconst char* timeUrl = \"N\/A\";\nconst char* serverUrl = \"N\/A\";\n\n\/\/ \u5fc3\u77e5\u5929\u6c14\u914d\u7f6e\uff08\u514d\u8d39\u6ce8\u518c\uff1ahttps:\/\/www.seniverse.com\/\uff09\nconst char* xinzhiKey = \"N\/A\";\nconst char* city = \"N\/A\";\nconst char* weatherUrl = \"https:\/\/api.seniverse.com\/v3\/weather\/now.json\";\n\nWiFiClientSecure client;\n\n\/\/ ==================== \u5168\u5c40\u53d8\u91cf ====================\nint currentHour = 0;\nint currentMinute = 0;\nint currentSecond = 0;\nint currentWeekday = 0;\nString currentDateFormatted = \"\";\n\n\/\/ \u5929\u6c14\nString weatherText = \"\";\nString weatherTemp = \"\";\n\n\/\/ \u901a\u77e5\nString notifications&#091;30&#093;;\nint notificationCount = 0;\nint currentNotificationIndex = 0;\n\n\/\/ \u5b9a\u65f6\nunsigned long lastTimeUpdate = 0;\nunsigned long lastWeatherUpdate = 0;\nunsigned long lastDataUpdate = 0;\nunsigned long lastModeSwitch = 0;\n\nint displayMode = 0;  \/\/ 0:\u65f6\u95f4\u754c\u9762, 1:\u901a\u77e5\u754c\u9762\nbool notificationJustShown = false;\n\n\/\/ ==================== \u8f85\u52a9\u51fd\u6570 ====================\nString getWeekdayCN(int w) {\n  String weekdays[] = {\"\u5468\u4e00\", \"\u5468\u4e8c\", \"\u5468\u4e09\", \"\u5468\u56db\", \"\u5468\u4e94\", \"\u5468\u516d\", \"\u5468\u65e5\"};\n  if (w >= 0 &amp;&amp; w &lt;= 6) return weekdays&#091;w&#093;;\n  return \"\u5468\u4e00\";\n}\n\nString getWeatherCN(String weather) {\n  if (weather.indexOf(\"Clear\") >= 0) return \"\u6674\";\n  if (weather.indexOf(\"Cloud\") >= 0) return \"\u591a\u4e91\";\n  if (weather.indexOf(\"Overcast\") >= 0) return \"\u9634\";\n  if (weather.indexOf(\"Light Rain\") >= 0) return \"\u5c0f\u96e8\";\n  if (weather.indexOf(\"Moderate Rain\") >= 0) return \"\u4e2d\u96e8\";\n  if (weather.indexOf(\"Heavy Rain\") >= 0) return \"\u5927\u96e8\";\n  if (weather.indexOf(\"Rain\") >= 0) return \"\u96e8\";\n  if (weather.indexOf(\"Snow\") >= 0) return \"\u96ea\";\n  if (weather.indexOf(\"Fog\") >= 0) return \"\u96fe\";\n  return weather;\n}\n\nvoid beepLight() {\n  digitalWrite(BUZZER_PIN, LOW);\n  delay(80);\n  digitalWrite(BUZZER_PIN, HIGH);\n}\n\n\/\/ ==================== \u83b7\u53d6\u6570\u636e ====================\nvoid updateTime() {\n  if (WiFi.status() != WL_CONNECTED) return;\n  \n  HTTPClient https;\n  client.setInsecure();\n  https.setTimeout(5000);\n  \n  if (!https.begin(client, timeUrl)) return;\n  \n  int httpCode = https.GET();\n  if (httpCode == HTTP_CODE_OK) {\n    String payload = https.getString();\n    \n    DynamicJsonDocument doc(512);\n    deserializeJson(doc, payload);\n    \n    currentHour = doc&#091;\"hour\"&#093;;\n    currentMinute = doc&#091;\"minute\"&#093;;\n    currentWeekday = doc&#091;\"weekday\"&#093;;\n    \n    String timeStr = doc&#091;\"time\"&#093;.as&lt;String>();\n    if (timeStr.length() >= 19) {\n      currentSecond = timeStr.substring(17, 19).toInt();\n    }\n    \n    String dateStr = doc&#091;\"date\"&#093;.as&lt;String>();\n    if (dateStr.length() >= 10) {\n      String month = dateStr.substring(5, 7);\n      String day = dateStr.substring(8, 10);\n      currentDateFormatted = month + \"\u6708\" + day + \"\u65e5\";\n    }\n  }\n  https.end();\n}\n\nvoid updateWeather() {\n  if (WiFi.status() != WL_CONNECTED) return;\n  if (String(xinzhiKey).length() == 0) return;\n  \n  String url = String(weatherUrl) + \"?key=\" + xinzhiKey + \"&amp;location=\" + city + \"&amp;language=en&amp;unit=c\";\n  \n  HTTPClient https;\n  client.setInsecure();\n  https.setTimeout(5000);\n  \n  if (!https.begin(client, url)) return;\n  \n  int httpCode = https.GET();\n  if (httpCode == HTTP_CODE_OK) {\n    String payload = https.getString();\n    \n    DynamicJsonDocument doc(1024);\n    deserializeJson(doc, payload);\n    \n    if (doc.containsKey(\"results\")) {\n      JsonObject now = doc&#091;\"results\"&#093;&#091;0&#093;&#091;\"now\"&#093;;\n      weatherText = now&#091;\"text\"&#093;.as&lt;String>();\n      float temp = now&#091;\"temperature\"&#093;;\n      weatherTemp = String(temp, 0);\n    }\n  }\n  https.end();\n}\n\nvoid fetchNotifications() {\n  if (WiFi.status() != WL_CONNECTED) return;\n  \n  HTTPClient https;\n  client.setInsecure();\n  https.setTimeout(10000);\n  \n  if (!https.begin(client, serverUrl)) return;\n  \n  int httpCode = https.GET();\n  if (httpCode == HTTP_CODE_OK) {\n    String payload = https.getString();\n    \n    DynamicJsonDocument doc(4096);\n    deserializeJson(doc, payload);\n    \n    if (doc&#091;\"status\"&#093; == \"success\") {\n      notificationCount = 0;\n      JsonArray notificationsArr = doc&#091;\"notifications\"&#093;;\n      for (JsonObject n : notificationsArr) {\n        if (notificationCount &lt; 30) {\n          notifications&#091;notificationCount&#093; = n&#091;\"content\"&#093;.as&lt;String>();\n          notificationCount++;\n        }\n      }\n    }\n  }\n  https.end();\n}\n\n\/\/ ==================== \u624b\u8868\u754c\u9762 ====================\nvoid displayWatchFace() {\n  u8g2.firstPage();\n  do {\n    \/\/ ========== \u9876\u90e8\u533a\u57df ==========\n    u8g2.setFont(u8g2_font_wqy12_t_chinese3);\n    u8g2.drawHLine(0, 15, 128);  \/\/ \u9876\u90e8\u5206\u5272\u7ebf\n    \n    \/\/ \u65e5\u671f\uff08\u5de6\u4e0a\u89d2\uff09\n    u8g2.setCursor(5, 12);\n    if (currentDateFormatted.length() > 0) {\n      u8g2.print(currentDateFormatted);\n    } else {\n      u8g2.print(\"03\u670824\u65e5\");\n    }\n    \n    \/\/ \u661f\u671f\uff08\u53f3\u4e0a\u89d2\uff09\n    u8g2.setCursor(95, 12);\n    u8g2.print(getWeekdayCN(currentWeekday));\n    \n    \/\/ ========== \u4e2d\u95f4\u65f6\u95f4\u533a\u57df ==========\n    \/\/ \u65f6\u95f4\u5f80\u4e0b\u79fb\uff08\u4ecey=42\u79fb\u5230y=48\uff09\n    u8g2.setFont(u8g2_font_logisoso24_tf);\n    u8g2.setCursor(25, 48);\n    char timeBuf&#091;6&#093;;\n    sprintf(timeBuf, \"%02d:%02d\", currentHour, currentMinute);\n    u8g2.print(timeBuf);\n    \n    \/\/ \u79d2\u6570\uff08\u653e\u5728\u65f6\u95f4\u53f3\u4fa7\uff09\n    u8g2.setFont(u8g2_font_helvB08_tf);\n    u8g2.setCursor(105, 38);\n    char secBuf&#091;3&#093;;\n    sprintf(secBuf, \"%02d\", currentSecond);\n    u8g2.print(secBuf);\n    \n    \/\/ ========== \u5e95\u90e8\u533a\u57df ==========\n    \n    \/\/ \u5e95\u90e8\u6587\u5b57\uff08\u653e\u5728\u7ebf\u4e0b\u65b9\uff0cy=63\uff09\n    u8g2.setCursor(10, 63);\n    if (weatherText.length() > 0 &amp;&amp; weatherTemp.length() > 0) {\n      u8g2.print(getWeatherCN(weatherText));\n      u8g2.print(\" \");\n      u8g2.print(weatherTemp);\n      u8g2.print(\"\u00b0C\");\n    } else if (String(xinzhiKey).length() > 0) {\n      u8g2.print(\"\u5929\u6c14\u52a0\u8f7d\u4e2d\");\n    } else {\n      u8g2.print(\"WiFi:\");\n      u8g2.print(WiFi.RSSI());\n      u8g2.print(\"dBm\");\n    }\n    \n    \/\/ \u901a\u77e5\u6570\u91cf\uff08\u53f3\u4fa7\uff09\n    if (notificationCount > 0) {\n      u8g2.setCursor(100, 63);\n      u8g2.print(\"&#091;\");\n      u8g2.print(notificationCount);\n      u8g2.print(\"&#093;\");\n    }\n    \n  } while (u8g2.nextPage());\n}\n\n\/\/ ==================== \u901a\u77e5\u754c\u9762 ====================\nvoid displayNotification() {\n  u8g2.firstPage();\n  do {\n    u8g2.setFont(u8g2_font_wqy12_t_chinese3);\n    \n    u8g2.drawHLine(0, 15, 128);\n    u8g2.setCursor(45, 12);\n    u8g2.print(\"\u901a \u77e5\");\n    u8g2.drawHLine(0, 22, 128);\n    \n    if (notificationCount > 0 &amp;&amp; currentNotificationIndex &lt; notificationCount) {\n      String content = notifications&#091;currentNotificationIndex&#093;;\n      \n      int lineHeight = 12;\n      int startPos = 0;\n      int lines = 0;\n      \n      while (startPos &lt; content.length() &amp;&amp; lines &lt; 3) {\n        int endPos = startPos + 18;\n        if (endPos > content.length()) endPos = content.length();\n        \n        u8g2.setCursor(5, 32 + lines * lineHeight);\n        u8g2.print(content.substring(startPos, endPos));\n        \n        startPos = endPos;\n        lines++;\n      }\n      \n      u8g2.setCursor(100, 63);\n      u8g2.print(currentNotificationIndex + 1);\n      u8g2.print(\"\/\");\n      u8g2.print(notificationCount);\n      \n    } else {\n      u8g2.setCursor(35, 40);\n      u8g2.print(\"\u6682\u65e0\u901a\u77e5\");\n    }\n    \n    \n  } while (u8g2.nextPage());\n}\n\n\/\/ ==================== \u521d\u59cb\u5316 ====================\nvoid setup() {\n  Serial.begin(115200);\n  delay(100);\n  \n  pinMode(BUZZER_PIN, OUTPUT);\n  digitalWrite(BUZZER_PIN, HIGH);\n  \n  u8g2.begin();\n  u8g2.enableUTF8Print();\n  u8g2.setFont(u8g2_font_wqy12_t_chinese3);\n  \n  u8g2.firstPage();\n  do {\n    u8g2.setCursor(35, 30);\n    u8g2.print(\"\u8fde\u63a5WiFi\");\n  } while (u8g2.nextPage());\n  \n  WiFi.begin(ssid, password);\n  int attempts = 0;\n  while (WiFi.status() != WL_CONNECTED &amp;&amp; attempts &lt; 25) {\n    delay(500);\n    Serial.print(\".\");\n    attempts++;\n  }\n  \n  if (WiFi.status() == WL_CONNECTED) {\n    Serial.println(\"\\nWiFi\u5df2\u8fde\u63a5\");\n    u8g2.firstPage();\n    do {\n      u8g2.setCursor(40, 30);\n      u8g2.print(\"WiFi\u5df2\u8fde\");\n    } while (u8g2.nextPage());\n    delay(1000);\n  }\n  \n  client.setInsecure();\n  \n  updateTime();\n  updateWeather();\n  fetchNotifications();\n  \n  beepLight();\n}\n\n\/\/ ==================== \u4e3b\u5faa\u73af ====================\nvoid loop() {\n  unsigned long now = millis();\n  \n  if (now - lastTimeUpdate >= 1000) {\n    updateTime();\n    lastTimeUpdate = now;\n  }\n  \n  if (now - lastWeatherUpdate >= 300000) {\n    updateWeather();\n    lastWeatherUpdate = now;\n  }\n  \n  \/\/ \u6bcf15\u5206\u949f\u68c0\u67e5\u901a\u77e5\n  if (now - lastDataUpdate >= 900000) {\n    fetchNotifications();\n    lastDataUpdate = now;\n    \n    if (notificationCount > 0) {\n      displayMode = 1;\n      lastModeSwitch = now;\n      currentNotificationIndex = 0;\n      notificationJustShown = true;\n      beepLight();\n    }\n  }\n  \n  \/\/ \u901a\u77e5\u754c\u9762\u663e\u793a10\u79d2\u540e\u5207\u56de\n  if (displayMode == 1 &amp;&amp; notificationJustShown) {\n    if (now - lastModeSwitch >= 10000) {\n      displayMode = 0;\n      notificationJustShown = false;\n      lastModeSwitch = now;\n    }\n  }\n  \n  \/\/ \u901a\u77e5\u754c\u9762\u81ea\u52a8\u7ffb\u9875\n  if (displayMode == 1 &amp;&amp; notificationCount > 0 &amp;&amp; notificationJustShown) {\n    static unsigned long lastNotiSwitch = 0;\n    if (now - lastNotiSwitch >= 3000) {\n      currentNotificationIndex = (currentNotificationIndex + 1) % notificationCount;\n      lastNotiSwitch = now;\n    }\n  }\n  \n  if (displayMode == 0) {\n    displayWatchFace();\n  } else {\n    displayNotification();\n  }\n  \n  delay(50);\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-light\" style=\"background-color: #fff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D73A49\">#include<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&lt;U8g2lib.h&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">#include<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&lt;Wire.h&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">#include<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&lt;ESP8266WiFi.h&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">#include<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&lt;ESP8266HTTPClient.h&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">#include<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&lt;ArduinoJson.h&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\">\/\/ ==================== OLED\u914d\u7f6e ====================<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6F42C1\">U8G2_SSD1306_128X64_NONAME_F_HW_I2C<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">u8g2<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #6F42C1\">U8G2_R0<\/span><span style=\"color: #24292E\">,<\/span><span style=\"color: #6A737D\"> \/* reset=*\/<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">U8X8_PIN_NONE<\/span><span style=\"color: #24292E\">,<\/span><span style=\"color: #6A737D\"> \/* clock=*\/<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">5<\/span><span style=\"color: #24292E\">,<\/span><span style=\"color: #6A737D\"> \/* data=*\/<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">4<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\">\/\/ ==================== \u8702\u9e23\u5668\u914d\u7f6e ====================<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">#define<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">BUZZER_PIN<\/span><span style=\"color: #24292E\"> 0  \/\/ D3 (GPIO0)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\">\/\/ ==================== WiFi\u914d\u7f6e ====================<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">const<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">char*<\/span><span style=\"color: #24292E\"> ssid <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&quot;N\/A&quot;<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">const<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">char*<\/span><span style=\"color: #24292E\"> password <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&quot;N\/A&quot;<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\">\/\/ ==================== API\u914d\u7f6e ====================<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">const<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">char*<\/span><span style=\"color: #24292E\"> timeUrl <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&quot;N\/A&quot;<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">const<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">char*<\/span><span style=\"color: #24292E\"> serverUrl <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&quot;N\/A&quot;<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\">\/\/ \u5fc3\u77e5\u5929\u6c14\u914d\u7f6e\uff08\u514d\u8d39\u6ce8\u518c\uff1ahttps:\/\/www.seniverse.com\/\uff09<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">const<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">char*<\/span><span style=\"color: #24292E\"> xinzhiKey <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&quot;N\/A&quot;<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">const<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">char*<\/span><span style=\"color: #24292E\"> city <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&quot;N\/A&quot;<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">const<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">char*<\/span><span style=\"color: #24292E\"> weatherUrl <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&quot;https:\/\/api.seniverse.com\/v3\/weather\/now.json&quot;<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">WiFiClientSecure client;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\">\/\/ ==================== \u5168\u5c40\u53d8\u91cf ====================<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">int<\/span><span style=\"color: #24292E\"> currentHour <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">int<\/span><span style=\"color: #24292E\"> currentMinute <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">int<\/span><span style=\"color: #24292E\"> currentSecond <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">int<\/span><span style=\"color: #24292E\"> currentWeekday <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">String currentDateFormatted <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&quot;&quot;<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\">\/\/ \u5929\u6c14<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">String weatherText <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&quot;&quot;<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">String weatherTemp <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&quot;&quot;<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\">\/\/ \u901a\u77e5<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">String notifications&#091;<\/span><span style=\"color: #005CC5\">30<\/span><span style=\"color: #24292E\">&#093;;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">int<\/span><span style=\"color: #24292E\"> notificationCount <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">int<\/span><span style=\"color: #24292E\"> currentNotificationIndex <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\">\/\/ \u5b9a\u65f6<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">unsigned<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">long<\/span><span style=\"color: #24292E\"> lastTimeUpdate <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">unsigned<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">long<\/span><span style=\"color: #24292E\"> lastWeatherUpdate <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">unsigned<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">long<\/span><span style=\"color: #24292E\"> lastDataUpdate <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">unsigned<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">long<\/span><span style=\"color: #24292E\"> lastModeSwitch <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">int<\/span><span style=\"color: #24292E\"> displayMode <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\">;<\/span><span style=\"color: #6A737D\">  \/\/ 0:\u65f6\u95f4\u754c\u9762, 1:\u901a\u77e5\u754c\u9762<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">bool<\/span><span style=\"color: #24292E\"> notificationJustShown <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">false<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\">\/\/ ==================== \u8f85\u52a9\u51fd\u6570 ====================<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">getWeekdayCN<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #D73A49\">int<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #E36209\">w<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  String weekdays[] <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> {<\/span><span style=\"color: #032F62\">&quot;\u5468\u4e00&quot;<\/span><span style=\"color: #24292E\">, <\/span><span style=\"color: #032F62\">&quot;\u5468\u4e8c&quot;<\/span><span style=\"color: #24292E\">, <\/span><span style=\"color: #032F62\">&quot;\u5468\u4e09&quot;<\/span><span style=\"color: #24292E\">, <\/span><span style=\"color: #032F62\">&quot;\u5468\u56db&quot;<\/span><span style=\"color: #24292E\">, <\/span><span style=\"color: #032F62\">&quot;\u5468\u4e94&quot;<\/span><span style=\"color: #24292E\">, <\/span><span style=\"color: #032F62\">&quot;\u5468\u516d&quot;<\/span><span style=\"color: #24292E\">, <\/span><span style=\"color: #032F62\">&quot;\u5468\u65e5&quot;<\/span><span style=\"color: #24292E\">};<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (w <\/span><span style=\"color: #D73A49\">&gt;=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">&amp;&amp;<\/span><span style=\"color: #24292E\"> w <\/span><span style=\"color: #D73A49\">&lt;=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">6<\/span><span style=\"color: #24292E\">) <\/span><span style=\"color: #D73A49\">return<\/span><span style=\"color: #24292E\"> weekdays&#091;w&#093;;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">return<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&quot;\u5468\u4e00&quot;<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">getWeatherCN<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #E36209\">weather<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (weather.<\/span><span style=\"color: #6F42C1\">indexOf<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;Clear&quot;<\/span><span style=\"color: #24292E\">) <\/span><span style=\"color: #D73A49\">&gt;=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\">) <\/span><span style=\"color: #D73A49\">return<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&quot;\u6674&quot;<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (weather.<\/span><span style=\"color: #6F42C1\">indexOf<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;Cloud&quot;<\/span><span style=\"color: #24292E\">) <\/span><span style=\"color: #D73A49\">&gt;=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\">) <\/span><span style=\"color: #D73A49\">return<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&quot;\u591a\u4e91&quot;<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (weather.<\/span><span style=\"color: #6F42C1\">indexOf<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;Overcast&quot;<\/span><span style=\"color: #24292E\">) <\/span><span style=\"color: #D73A49\">&gt;=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\">) <\/span><span style=\"color: #D73A49\">return<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&quot;\u9634&quot;<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (weather.<\/span><span style=\"color: #6F42C1\">indexOf<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;Light Rain&quot;<\/span><span style=\"color: #24292E\">) <\/span><span style=\"color: #D73A49\">&gt;=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\">) <\/span><span style=\"color: #D73A49\">return<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&quot;\u5c0f\u96e8&quot;<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (weather.<\/span><span style=\"color: #6F42C1\">indexOf<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;Moderate Rain&quot;<\/span><span style=\"color: #24292E\">) <\/span><span style=\"color: #D73A49\">&gt;=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\">) <\/span><span style=\"color: #D73A49\">return<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&quot;\u4e2d\u96e8&quot;<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (weather.<\/span><span style=\"color: #6F42C1\">indexOf<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;Heavy Rain&quot;<\/span><span style=\"color: #24292E\">) <\/span><span style=\"color: #D73A49\">&gt;=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\">) <\/span><span style=\"color: #D73A49\">return<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&quot;\u5927\u96e8&quot;<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (weather.<\/span><span style=\"color: #6F42C1\">indexOf<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;Rain&quot;<\/span><span style=\"color: #24292E\">) <\/span><span style=\"color: #D73A49\">&gt;=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\">) <\/span><span style=\"color: #D73A49\">return<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&quot;\u96e8&quot;<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (weather.<\/span><span style=\"color: #6F42C1\">indexOf<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;Snow&quot;<\/span><span style=\"color: #24292E\">) <\/span><span style=\"color: #D73A49\">&gt;=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\">) <\/span><span style=\"color: #D73A49\">return<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&quot;\u96ea&quot;<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (weather.<\/span><span style=\"color: #6F42C1\">indexOf<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;Fog&quot;<\/span><span style=\"color: #24292E\">) <\/span><span style=\"color: #D73A49\">&gt;=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\">) <\/span><span style=\"color: #D73A49\">return<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&quot;\u96fe&quot;<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">return<\/span><span style=\"color: #24292E\"> weather;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">void<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">beepLight<\/span><span style=\"color: #24292E\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #6F42C1\">digitalWrite<\/span><span style=\"color: #24292E\">(BUZZER_PIN, LOW);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #6F42C1\">delay<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">80<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #6F42C1\">digitalWrite<\/span><span style=\"color: #24292E\">(BUZZER_PIN, HIGH);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\">\/\/ ==================== \u83b7\u53d6\u6570\u636e ====================<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">void<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">updateTime<\/span><span style=\"color: #24292E\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (WiFi.<\/span><span style=\"color: #6F42C1\">status<\/span><span style=\"color: #24292E\">() <\/span><span style=\"color: #D73A49\">!=<\/span><span style=\"color: #24292E\"> WL_CONNECTED) <\/span><span style=\"color: #D73A49\">return<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  HTTPClient https;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  client.<\/span><span style=\"color: #6F42C1\">setInsecure<\/span><span style=\"color: #24292E\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  https.<\/span><span style=\"color: #6F42C1\">setTimeout<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">5000<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (<\/span><span style=\"color: #D73A49\">!<\/span><span style=\"color: #24292E\">https.<\/span><span style=\"color: #6F42C1\">begin<\/span><span style=\"color: #24292E\">(client, timeUrl)) <\/span><span style=\"color: #D73A49\">return<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">int<\/span><span style=\"color: #24292E\"> httpCode <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> https.<\/span><span style=\"color: #6F42C1\">GET<\/span><span style=\"color: #24292E\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (httpCode <\/span><span style=\"color: #D73A49\">==<\/span><span style=\"color: #24292E\"> HTTP_CODE_OK) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    String payload <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> https.<\/span><span style=\"color: #6F42C1\">getString<\/span><span style=\"color: #24292E\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    DynamicJsonDocument <\/span><span style=\"color: #6F42C1\">doc<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">512<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">deserializeJson<\/span><span style=\"color: #24292E\">(doc, payload);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    currentHour <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> doc&#091;<\/span><span style=\"color: #032F62\">&quot;hour&quot;<\/span><span style=\"color: #24292E\">&#093;;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    currentMinute <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> doc&#091;<\/span><span style=\"color: #032F62\">&quot;minute&quot;<\/span><span style=\"color: #24292E\">&#093;;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    currentWeekday <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> doc&#091;<\/span><span style=\"color: #032F62\">&quot;weekday&quot;<\/span><span style=\"color: #24292E\">&#093;;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    String timeStr <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> doc&#091;<\/span><span style=\"color: #032F62\">&quot;time&quot;<\/span><span style=\"color: #24292E\">&#093;.as<\/span><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\">String<\/span><span style=\"color: #D73A49\">&gt;<\/span><span style=\"color: #24292E\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (timeStr.<\/span><span style=\"color: #6F42C1\">length<\/span><span style=\"color: #24292E\">() <\/span><span style=\"color: #D73A49\">&gt;=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">19<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      currentSecond <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> timeStr.<\/span><span style=\"color: #6F42C1\">substring<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">17<\/span><span style=\"color: #24292E\">, <\/span><span style=\"color: #005CC5\">19<\/span><span style=\"color: #24292E\">).<\/span><span style=\"color: #6F42C1\">toInt<\/span><span style=\"color: #24292E\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    String dateStr <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> doc&#091;<\/span><span style=\"color: #032F62\">&quot;date&quot;<\/span><span style=\"color: #24292E\">&#093;.as<\/span><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\">String<\/span><span style=\"color: #D73A49\">&gt;<\/span><span style=\"color: #24292E\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (dateStr.<\/span><span style=\"color: #6F42C1\">length<\/span><span style=\"color: #24292E\">() <\/span><span style=\"color: #D73A49\">&gt;=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">10<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      String month <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> dateStr.<\/span><span style=\"color: #6F42C1\">substring<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">5<\/span><span style=\"color: #24292E\">, <\/span><span style=\"color: #005CC5\">7<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      String day <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> dateStr.<\/span><span style=\"color: #6F42C1\">substring<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">8<\/span><span style=\"color: #24292E\">, <\/span><span style=\"color: #005CC5\">10<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      currentDateFormatted <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> month <\/span><span style=\"color: #D73A49\">+<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&quot;\u6708&quot;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">+<\/span><span style=\"color: #24292E\"> day <\/span><span style=\"color: #D73A49\">+<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&quot;\u65e5&quot;<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  https.<\/span><span style=\"color: #6F42C1\">end<\/span><span style=\"color: #24292E\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">void<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">updateWeather<\/span><span style=\"color: #24292E\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (WiFi.<\/span><span style=\"color: #6F42C1\">status<\/span><span style=\"color: #24292E\">() <\/span><span style=\"color: #D73A49\">!=<\/span><span style=\"color: #24292E\"> WL_CONNECTED) <\/span><span style=\"color: #D73A49\">return<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (<\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\">(xinzhiKey).<\/span><span style=\"color: #6F42C1\">length<\/span><span style=\"color: #24292E\">() <\/span><span style=\"color: #D73A49\">==<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\">) <\/span><span style=\"color: #D73A49\">return<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  String url <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\">(weatherUrl) <\/span><span style=\"color: #D73A49\">+<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&quot;?key=&quot;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">+<\/span><span style=\"color: #24292E\"> xinzhiKey <\/span><span style=\"color: #D73A49\">+<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&quot;&amp;location=&quot;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">+<\/span><span style=\"color: #24292E\"> city <\/span><span style=\"color: #D73A49\">+<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&quot;&amp;language=en&amp;unit=c&quot;<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  HTTPClient https;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  client.<\/span><span style=\"color: #6F42C1\">setInsecure<\/span><span style=\"color: #24292E\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  https.<\/span><span style=\"color: #6F42C1\">setTimeout<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">5000<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (<\/span><span style=\"color: #D73A49\">!<\/span><span style=\"color: #24292E\">https.<\/span><span style=\"color: #6F42C1\">begin<\/span><span style=\"color: #24292E\">(client, url)) <\/span><span style=\"color: #D73A49\">return<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">int<\/span><span style=\"color: #24292E\"> httpCode <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> https.<\/span><span style=\"color: #6F42C1\">GET<\/span><span style=\"color: #24292E\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (httpCode <\/span><span style=\"color: #D73A49\">==<\/span><span style=\"color: #24292E\"> HTTP_CODE_OK) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    String payload <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> https.<\/span><span style=\"color: #6F42C1\">getString<\/span><span style=\"color: #24292E\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    DynamicJsonDocument <\/span><span style=\"color: #6F42C1\">doc<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">1024<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">deserializeJson<\/span><span style=\"color: #24292E\">(doc, payload);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (doc.<\/span><span style=\"color: #6F42C1\">containsKey<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;results&quot;<\/span><span style=\"color: #24292E\">)) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      JsonObject now <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> doc&#091;<\/span><span style=\"color: #032F62\">&quot;results&quot;<\/span><span style=\"color: #24292E\">&#093;&#091;<\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\">&#093;&#091;<\/span><span style=\"color: #032F62\">&quot;now&quot;<\/span><span style=\"color: #24292E\">&#093;;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      weatherText <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> now&#091;<\/span><span style=\"color: #032F62\">&quot;text&quot;<\/span><span style=\"color: #24292E\">&#093;.as<\/span><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\">String<\/span><span style=\"color: #D73A49\">&gt;<\/span><span style=\"color: #24292E\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      <\/span><span style=\"color: #D73A49\">float<\/span><span style=\"color: #24292E\"> temp <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> now&#091;<\/span><span style=\"color: #032F62\">&quot;temperature&quot;<\/span><span style=\"color: #24292E\">&#093;;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      weatherTemp <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\">(temp, <\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  https.<\/span><span style=\"color: #6F42C1\">end<\/span><span style=\"color: #24292E\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">void<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">fetchNotifications<\/span><span style=\"color: #24292E\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (WiFi.<\/span><span style=\"color: #6F42C1\">status<\/span><span style=\"color: #24292E\">() <\/span><span style=\"color: #D73A49\">!=<\/span><span style=\"color: #24292E\"> WL_CONNECTED) <\/span><span style=\"color: #D73A49\">return<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  HTTPClient https;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  client.<\/span><span style=\"color: #6F42C1\">setInsecure<\/span><span style=\"color: #24292E\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  https.<\/span><span style=\"color: #6F42C1\">setTimeout<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">10000<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (<\/span><span style=\"color: #D73A49\">!<\/span><span style=\"color: #24292E\">https.<\/span><span style=\"color: #6F42C1\">begin<\/span><span style=\"color: #24292E\">(client, serverUrl)) <\/span><span style=\"color: #D73A49\">return<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">int<\/span><span style=\"color: #24292E\"> httpCode <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> https.<\/span><span style=\"color: #6F42C1\">GET<\/span><span style=\"color: #24292E\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (httpCode <\/span><span style=\"color: #D73A49\">==<\/span><span style=\"color: #24292E\"> HTTP_CODE_OK) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    String payload <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> https.<\/span><span style=\"color: #6F42C1\">getString<\/span><span style=\"color: #24292E\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    DynamicJsonDocument <\/span><span style=\"color: #6F42C1\">doc<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">4096<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">deserializeJson<\/span><span style=\"color: #24292E\">(doc, payload);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (doc&#091;<\/span><span style=\"color: #032F62\">&quot;status&quot;<\/span><span style=\"color: #24292E\">&#093; <\/span><span style=\"color: #D73A49\">==<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #032F62\">&quot;success&quot;<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      notificationCount <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      JsonArray notificationsArr <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> doc&#091;<\/span><span style=\"color: #032F62\">&quot;notifications&quot;<\/span><span style=\"color: #24292E\">&#093;;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      <\/span><span style=\"color: #D73A49\">for<\/span><span style=\"color: #24292E\"> (JsonObject n : notificationsArr) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (notificationCount <\/span><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">30<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">          notifications&#091;notificationCount&#093; <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> n&#091;<\/span><span style=\"color: #032F62\">&quot;content&quot;<\/span><span style=\"color: #24292E\">&#093;.as<\/span><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\">String<\/span><span style=\"color: #D73A49\">&gt;<\/span><span style=\"color: #24292E\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">          notificationCount<\/span><span style=\"color: #D73A49\">++<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  https.<\/span><span style=\"color: #6F42C1\">end<\/span><span style=\"color: #24292E\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\">\/\/ ==================== \u624b\u8868\u754c\u9762 ====================<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">void<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">displayWatchFace<\/span><span style=\"color: #24292E\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  u8g2.<\/span><span style=\"color: #6F42C1\">firstPage<\/span><span style=\"color: #24292E\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">do<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6A737D\">\/\/ ========== \u9876\u90e8\u533a\u57df ==========<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    u8g2.<\/span><span style=\"color: #6F42C1\">setFont<\/span><span style=\"color: #24292E\">(u8g2_font_wqy12_t_chinese3);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    u8g2.<\/span><span style=\"color: #6F42C1\">drawHLine<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\">, <\/span><span style=\"color: #005CC5\">15<\/span><span style=\"color: #24292E\">, <\/span><span style=\"color: #005CC5\">128<\/span><span style=\"color: #24292E\">);<\/span><span style=\"color: #6A737D\">  \/\/ \u9876\u90e8\u5206\u5272\u7ebf<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\">    \/\/ \u65e5\u671f\uff08\u5de6\u4e0a\u89d2\uff09<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    u8g2.<\/span><span style=\"color: #6F42C1\">setCursor<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">5<\/span><span style=\"color: #24292E\">, <\/span><span style=\"color: #005CC5\">12<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (currentDateFormatted.<\/span><span style=\"color: #6F42C1\">length<\/span><span style=\"color: #24292E\">() <\/span><span style=\"color: #D73A49\">&gt;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      u8g2.<\/span><span style=\"color: #6F42C1\">print<\/span><span style=\"color: #24292E\">(currentDateFormatted);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    } <\/span><span style=\"color: #D73A49\">else<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      u8g2.<\/span><span style=\"color: #6F42C1\">print<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;03\u670824\u65e5&quot;<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\">    \/\/ \u661f\u671f\uff08\u53f3\u4e0a\u89d2\uff09<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    u8g2.<\/span><span style=\"color: #6F42C1\">setCursor<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">95<\/span><span style=\"color: #24292E\">, <\/span><span style=\"color: #005CC5\">12<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    u8g2.<\/span><span style=\"color: #6F42C1\">print<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #6F42C1\">getWeekdayCN<\/span><span style=\"color: #24292E\">(currentWeekday));<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6A737D\">\/\/ ========== \u4e2d\u95f4\u65f6\u95f4\u533a\u57df ==========<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\">    \/\/ \u65f6\u95f4\u5f80\u4e0b\u79fb\uff08\u4ecey=42\u79fb\u5230y=48\uff09<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    u8g2.<\/span><span style=\"color: #6F42C1\">setFont<\/span><span style=\"color: #24292E\">(u8g2_font_logisoso24_tf);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    u8g2.<\/span><span style=\"color: #6F42C1\">setCursor<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">25<\/span><span style=\"color: #24292E\">, <\/span><span style=\"color: #005CC5\">48<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">char<\/span><span style=\"color: #24292E\"> timeBuf&#091;<\/span><span style=\"color: #005CC5\">6<\/span><span style=\"color: #24292E\">&#093;;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">sprintf<\/span><span style=\"color: #24292E\">(timeBuf, <\/span><span style=\"color: #032F62\">&quot;<\/span><span style=\"color: #005CC5\">%02d<\/span><span style=\"color: #032F62\">:<\/span><span style=\"color: #005CC5\">%02d<\/span><span style=\"color: #032F62\">&quot;<\/span><span style=\"color: #24292E\">, currentHour, currentMinute);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    u8g2.<\/span><span style=\"color: #6F42C1\">print<\/span><span style=\"color: #24292E\">(timeBuf);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\">    \/\/ \u79d2\u6570\uff08\u653e\u5728\u65f6\u95f4\u53f3\u4fa7\uff09<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    u8g2.<\/span><span style=\"color: #6F42C1\">setFont<\/span><span style=\"color: #24292E\">(u8g2_font_helvB08_tf);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    u8g2.<\/span><span style=\"color: #6F42C1\">setCursor<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">105<\/span><span style=\"color: #24292E\">, <\/span><span style=\"color: #005CC5\">38<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">char<\/span><span style=\"color: #24292E\"> secBuf&#091;<\/span><span style=\"color: #005CC5\">3<\/span><span style=\"color: #24292E\">&#093;;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">sprintf<\/span><span style=\"color: #24292E\">(secBuf, <\/span><span style=\"color: #032F62\">&quot;<\/span><span style=\"color: #005CC5\">%02d<\/span><span style=\"color: #032F62\">&quot;<\/span><span style=\"color: #24292E\">, currentSecond);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    u8g2.<\/span><span style=\"color: #6F42C1\">print<\/span><span style=\"color: #24292E\">(secBuf);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6A737D\">\/\/ ========== \u5e95\u90e8\u533a\u57df ==========<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\">    \/\/ \u5e95\u90e8\u6587\u5b57\uff08\u653e\u5728\u7ebf\u4e0b\u65b9\uff0cy=63\uff09<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    u8g2.<\/span><span style=\"color: #6F42C1\">setCursor<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">10<\/span><span style=\"color: #24292E\">, <\/span><span style=\"color: #005CC5\">63<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (weatherText.<\/span><span style=\"color: #6F42C1\">length<\/span><span style=\"color: #24292E\">() <\/span><span style=\"color: #D73A49\">&gt;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">&amp;&amp;<\/span><span style=\"color: #24292E\"> weatherTemp.<\/span><span style=\"color: #6F42C1\">length<\/span><span style=\"color: #24292E\">() <\/span><span style=\"color: #D73A49\">&gt;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      u8g2.<\/span><span style=\"color: #6F42C1\">print<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #6F42C1\">getWeatherCN<\/span><span style=\"color: #24292E\">(weatherText));<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      u8g2.<\/span><span style=\"color: #6F42C1\">print<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot; &quot;<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      u8g2.<\/span><span style=\"color: #6F42C1\">print<\/span><span style=\"color: #24292E\">(weatherTemp);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      u8g2.<\/span><span style=\"color: #6F42C1\">print<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;\u00b0C&quot;<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    } <\/span><span style=\"color: #D73A49\">else<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (<\/span><span style=\"color: #6F42C1\">String<\/span><span style=\"color: #24292E\">(xinzhiKey).<\/span><span style=\"color: #6F42C1\">length<\/span><span style=\"color: #24292E\">() <\/span><span style=\"color: #D73A49\">&gt;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      u8g2.<\/span><span style=\"color: #6F42C1\">print<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;\u5929\u6c14\u52a0\u8f7d\u4e2d&quot;<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    } <\/span><span style=\"color: #D73A49\">else<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      u8g2.<\/span><span style=\"color: #6F42C1\">print<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;WiFi:&quot;<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      u8g2.<\/span><span style=\"color: #6F42C1\">print<\/span><span style=\"color: #24292E\">(WiFi.<\/span><span style=\"color: #6F42C1\">RSSI<\/span><span style=\"color: #24292E\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      u8g2.<\/span><span style=\"color: #6F42C1\">print<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;dBm&quot;<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\">    \/\/ \u901a\u77e5\u6570\u91cf\uff08\u53f3\u4fa7\uff09<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (notificationCount <\/span><span style=\"color: #D73A49\">&gt;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      u8g2.<\/span><span style=\"color: #6F42C1\">setCursor<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">100<\/span><span style=\"color: #24292E\">, <\/span><span style=\"color: #005CC5\">63<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      u8g2.<\/span><span style=\"color: #6F42C1\">print<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;&#091;&quot;<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      u8g2.<\/span><span style=\"color: #6F42C1\">print<\/span><span style=\"color: #24292E\">(notificationCount);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      u8g2.<\/span><span style=\"color: #6F42C1\">print<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;&#093;&quot;<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  } <\/span><span style=\"color: #D73A49\">while<\/span><span style=\"color: #24292E\"> (u8g2.<\/span><span style=\"color: #6F42C1\">nextPage<\/span><span style=\"color: #24292E\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\">\/\/ ==================== \u901a\u77e5\u754c\u9762 ====================<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">void<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">displayNotification<\/span><span style=\"color: #24292E\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  u8g2.<\/span><span style=\"color: #6F42C1\">firstPage<\/span><span style=\"color: #24292E\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">do<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    u8g2.<\/span><span style=\"color: #6F42C1\">setFont<\/span><span style=\"color: #24292E\">(u8g2_font_wqy12_t_chinese3);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    u8g2.<\/span><span style=\"color: #6F42C1\">drawHLine<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\">, <\/span><span style=\"color: #005CC5\">15<\/span><span style=\"color: #24292E\">, <\/span><span style=\"color: #005CC5\">128<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    u8g2.<\/span><span style=\"color: #6F42C1\">setCursor<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">45<\/span><span style=\"color: #24292E\">, <\/span><span style=\"color: #005CC5\">12<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    u8g2.<\/span><span style=\"color: #6F42C1\">print<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;\u901a \u77e5&quot;<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    u8g2.<\/span><span style=\"color: #6F42C1\">drawHLine<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\">, <\/span><span style=\"color: #005CC5\">22<\/span><span style=\"color: #24292E\">, <\/span><span style=\"color: #005CC5\">128<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (notificationCount <\/span><span style=\"color: #D73A49\">&gt;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">&amp;&amp;<\/span><span style=\"color: #24292E\"> currentNotificationIndex <\/span><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\"> notificationCount) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      String content <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> notifications&#091;currentNotificationIndex&#093;;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      <\/span><span style=\"color: #D73A49\">int<\/span><span style=\"color: #24292E\"> lineHeight <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">12<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      <\/span><span style=\"color: #D73A49\">int<\/span><span style=\"color: #24292E\"> startPos <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      <\/span><span style=\"color: #D73A49\">int<\/span><span style=\"color: #24292E\"> lines <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      <\/span><span style=\"color: #D73A49\">while<\/span><span style=\"color: #24292E\"> (startPos <\/span><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\"> content.<\/span><span style=\"color: #6F42C1\">length<\/span><span style=\"color: #24292E\">() <\/span><span style=\"color: #D73A49\">&amp;&amp;<\/span><span style=\"color: #24292E\"> lines <\/span><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">3<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #D73A49\">int<\/span><span style=\"color: #24292E\"> endPos <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> startPos <\/span><span style=\"color: #D73A49\">+<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">18<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (endPos <\/span><span style=\"color: #D73A49\">&gt;<\/span><span style=\"color: #24292E\"> content.<\/span><span style=\"color: #6F42C1\">length<\/span><span style=\"color: #24292E\">()) endPos <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> content.<\/span><span style=\"color: #6F42C1\">length<\/span><span style=\"color: #24292E\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        u8g2.<\/span><span style=\"color: #6F42C1\">setCursor<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">5<\/span><span style=\"color: #24292E\">, <\/span><span style=\"color: #005CC5\">32<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">+<\/span><span style=\"color: #24292E\"> lines <\/span><span style=\"color: #D73A49\">*<\/span><span style=\"color: #24292E\"> lineHeight);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        u8g2.<\/span><span style=\"color: #6F42C1\">print<\/span><span style=\"color: #24292E\">(content.<\/span><span style=\"color: #6F42C1\">substring<\/span><span style=\"color: #24292E\">(startPos, endPos));<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        startPos <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> endPos;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">        lines<\/span><span style=\"color: #D73A49\">++<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      u8g2.<\/span><span style=\"color: #6F42C1\">setCursor<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">100<\/span><span style=\"color: #24292E\">, <\/span><span style=\"color: #005CC5\">63<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      u8g2.<\/span><span style=\"color: #6F42C1\">print<\/span><span style=\"color: #24292E\">(currentNotificationIndex <\/span><span style=\"color: #D73A49\">+<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">1<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      u8g2.<\/span><span style=\"color: #6F42C1\">print<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;\/&quot;<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      u8g2.<\/span><span style=\"color: #6F42C1\">print<\/span><span style=\"color: #24292E\">(notificationCount);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    } <\/span><span style=\"color: #D73A49\">else<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      u8g2.<\/span><span style=\"color: #6F42C1\">setCursor<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">35<\/span><span style=\"color: #24292E\">, <\/span><span style=\"color: #005CC5\">40<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      u8g2.<\/span><span style=\"color: #6F42C1\">print<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;\u6682\u65e0\u901a\u77e5&quot;<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  } <\/span><span style=\"color: #D73A49\">while<\/span><span style=\"color: #24292E\"> (u8g2.<\/span><span style=\"color: #6F42C1\">nextPage<\/span><span style=\"color: #24292E\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\">\/\/ ==================== \u521d\u59cb\u5316 ====================<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">void<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">setup<\/span><span style=\"color: #24292E\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  Serial.<\/span><span style=\"color: #6F42C1\">begin<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">115200<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #6F42C1\">delay<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">100<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #6F42C1\">pinMode<\/span><span style=\"color: #24292E\">(BUZZER_PIN, OUTPUT);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #6F42C1\">digitalWrite<\/span><span style=\"color: #24292E\">(BUZZER_PIN, HIGH);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  u8g2.<\/span><span style=\"color: #6F42C1\">begin<\/span><span style=\"color: #24292E\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  u8g2.<\/span><span style=\"color: #6F42C1\">enableUTF8Print<\/span><span style=\"color: #24292E\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  u8g2.<\/span><span style=\"color: #6F42C1\">setFont<\/span><span style=\"color: #24292E\">(u8g2_font_wqy12_t_chinese3);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  u8g2.<\/span><span style=\"color: #6F42C1\">firstPage<\/span><span style=\"color: #24292E\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">do<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    u8g2.<\/span><span style=\"color: #6F42C1\">setCursor<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">35<\/span><span style=\"color: #24292E\">, <\/span><span style=\"color: #005CC5\">30<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    u8g2.<\/span><span style=\"color: #6F42C1\">print<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;\u8fde\u63a5WiFi&quot;<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  } <\/span><span style=\"color: #D73A49\">while<\/span><span style=\"color: #24292E\"> (u8g2.<\/span><span style=\"color: #6F42C1\">nextPage<\/span><span style=\"color: #24292E\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  WiFi.<\/span><span style=\"color: #6F42C1\">begin<\/span><span style=\"color: #24292E\">(ssid, password);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">int<\/span><span style=\"color: #24292E\"> attempts <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">while<\/span><span style=\"color: #24292E\"> (WiFi.<\/span><span style=\"color: #6F42C1\">status<\/span><span style=\"color: #24292E\">() <\/span><span style=\"color: #D73A49\">!=<\/span><span style=\"color: #24292E\"> WL_CONNECTED <\/span><span style=\"color: #D73A49\">&amp;&amp;<\/span><span style=\"color: #24292E\"> attempts <\/span><span style=\"color: #D73A49\">&lt;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">25<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">delay<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">500<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    Serial.<\/span><span style=\"color: #6F42C1\">print<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;.&quot;<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    attempts<\/span><span style=\"color: #D73A49\">++<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (WiFi.<\/span><span style=\"color: #6F42C1\">status<\/span><span style=\"color: #24292E\">() <\/span><span style=\"color: #D73A49\">==<\/span><span style=\"color: #24292E\"> WL_CONNECTED) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    Serial.<\/span><span style=\"color: #6F42C1\">println<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;<\/span><span style=\"color: #005CC5\">\\n<\/span><span style=\"color: #032F62\">WiFi\u5df2\u8fde\u63a5&quot;<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    u8g2.<\/span><span style=\"color: #6F42C1\">firstPage<\/span><span style=\"color: #24292E\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">do<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      u8g2.<\/span><span style=\"color: #6F42C1\">setCursor<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">40<\/span><span style=\"color: #24292E\">, <\/span><span style=\"color: #005CC5\">30<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      u8g2.<\/span><span style=\"color: #6F42C1\">print<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #032F62\">&quot;WiFi\u5df2\u8fde&quot;<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    } <\/span><span style=\"color: #D73A49\">while<\/span><span style=\"color: #24292E\"> (u8g2.<\/span><span style=\"color: #6F42C1\">nextPage<\/span><span style=\"color: #24292E\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">delay<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">1000<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  client.<\/span><span style=\"color: #6F42C1\">setInsecure<\/span><span style=\"color: #24292E\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #6F42C1\">updateTime<\/span><span style=\"color: #24292E\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #6F42C1\">updateWeather<\/span><span style=\"color: #24292E\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #6F42C1\">fetchNotifications<\/span><span style=\"color: #24292E\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #6F42C1\">beepLight<\/span><span style=\"color: #24292E\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\">\/\/ ==================== \u4e3b\u5faa\u73af ====================<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D73A49\">void<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">loop<\/span><span style=\"color: #24292E\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">unsigned<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">long<\/span><span style=\"color: #24292E\"> now <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #6F42C1\">millis<\/span><span style=\"color: #24292E\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (now <\/span><span style=\"color: #D73A49\">-<\/span><span style=\"color: #24292E\"> lastTimeUpdate <\/span><span style=\"color: #D73A49\">&gt;=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">1000<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">updateTime<\/span><span style=\"color: #24292E\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    lastTimeUpdate <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> now;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (now <\/span><span style=\"color: #D73A49\">-<\/span><span style=\"color: #24292E\"> lastWeatherUpdate <\/span><span style=\"color: #D73A49\">&gt;=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">300000<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">updateWeather<\/span><span style=\"color: #24292E\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    lastWeatherUpdate <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> now;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\">  \/\/ \u6bcf15\u5206\u949f\u68c0\u67e5\u901a\u77e5<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (now <\/span><span style=\"color: #D73A49\">-<\/span><span style=\"color: #24292E\"> lastDataUpdate <\/span><span style=\"color: #D73A49\">&gt;=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">900000<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">fetchNotifications<\/span><span style=\"color: #24292E\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    lastDataUpdate <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> now;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (notificationCount <\/span><span style=\"color: #D73A49\">&gt;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      displayMode <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">1<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      lastModeSwitch <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> now;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      currentNotificationIndex <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      notificationJustShown <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">true<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      <\/span><span style=\"color: #6F42C1\">beepLight<\/span><span style=\"color: #24292E\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\">  \/\/ \u901a\u77e5\u754c\u9762\u663e\u793a10\u79d2\u540e\u5207\u56de<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (displayMode <\/span><span style=\"color: #D73A49\">==<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">1<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">&amp;&amp;<\/span><span style=\"color: #24292E\"> notificationJustShown) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (now <\/span><span style=\"color: #D73A49\">-<\/span><span style=\"color: #24292E\"> lastModeSwitch <\/span><span style=\"color: #D73A49\">&gt;=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">10000<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      displayMode <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      notificationJustShown <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">false<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      lastModeSwitch <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> now;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\">  \/\/ \u901a\u77e5\u754c\u9762\u81ea\u52a8\u7ffb\u9875<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (displayMode <\/span><span style=\"color: #D73A49\">==<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">1<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">&amp;&amp;<\/span><span style=\"color: #24292E\"> notificationCount <\/span><span style=\"color: #D73A49\">&gt;<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">&amp;&amp;<\/span><span style=\"color: #24292E\"> notificationJustShown) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">static<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">unsigned<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #D73A49\">long<\/span><span style=\"color: #24292E\"> lastNotiSwitch <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (now <\/span><span style=\"color: #D73A49\">-<\/span><span style=\"color: #24292E\"> lastNotiSwitch <\/span><span style=\"color: #D73A49\">&gt;=<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">3000<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      currentNotificationIndex <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> (currentNotificationIndex <\/span><span style=\"color: #D73A49\">+<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">1<\/span><span style=\"color: #24292E\">) <\/span><span style=\"color: #D73A49\">%<\/span><span style=\"color: #24292E\"> notificationCount;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">      lastNotiSwitch <\/span><span style=\"color: #D73A49\">=<\/span><span style=\"color: #24292E\"> now;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #D73A49\">if<\/span><span style=\"color: #24292E\"> (displayMode <\/span><span style=\"color: #D73A49\">==<\/span><span style=\"color: #24292E\"> <\/span><span style=\"color: #005CC5\">0<\/span><span style=\"color: #24292E\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">displayWatchFace<\/span><span style=\"color: #24292E\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  } <\/span><span style=\"color: #D73A49\">else<\/span><span style=\"color: #24292E\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">    <\/span><span style=\"color: #6F42C1\">displayNotification<\/span><span style=\"color: #24292E\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">  <\/span><span style=\"color: #6F42C1\">delay<\/span><span style=\"color: #24292E\">(<\/span><span style=\"color: #005CC5\">50<\/span><span style=\"color: #24292E\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #24292E\">}<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px 0 0 0;width:100%;justify-content:flex-end;background-color:#fff;color:#2f363c;font-size:12px;line-height:1;position:relative\">C++<\/span><\/div>\n<\/details>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"has-large-font-size\"><strong><em>\u201c\u8bb0\u4f4f\u4ed6\u4eba\u540d\u5b57\u5e26\u7ed9\u4ed6\u4eba\u88ab\u8bb0\u4f4f\u7684\u611f\u89c9\u662f\u8fd9\u4e2a\u65f6\u4ee3\u6240\u7a00\u7f3a\u7684\uff0c\u56e0\u4e3a\u6548\u7387\u81f3\u4e0a\u7684\u65f6\u4ee3\uff0c\u6bcf\u4e2a\u4eba\u90fd\u5ffd\u89c6\u4e86\u5f7c\u6b64\u5305\u62ec\u81ea\u5df1\u201d<\/em><\/strong><\/p>\n\n\n\n<p>&#8211;<\/p>\n\n\n\n<p>&#8220;<strong><em>Making someone feel remembered just by knowing their name\u2014that\u2019s something rare in today\u2019s world. In an era that prioritizes efficiency, people often neglect others, and even themselves.<\/em><\/strong>&#8220;<\/p>\n<\/blockquote>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<iframe frameborder=\"no\" border=\"0\" marginwidth=\"0\" marginheight=\"0\" width=330 height=450 src=\"\/\/music.163.com\/outchain\/player?type=4&#038;id=1487791018&#038;auto=1&#038;height=430\"><\/iframe>\n<\/div>\n<\/div>\n\n\n<div class=\"random-quote span-3-columns\" style=\"padding: 30px; margin: 20px 0; background: #f8f9fa; border-left: 4px solid #0073aa; border-radius: 8px; grid-column: span 3; min-height: 200px; display: flex; flex-direction: column; justify-content: center;\"><p style=\"margin: 0 0 20px 0; font-size: 18px; line-height: 1.6; color: #2c3e50; font-style: italic; font-family: 'Georgia', serif;\">It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want of a wife.<\/p><p style=\"margin: 0 0 25px 0; font-size: 16px; line-height: 1.6; color: #34495e; border-left: 2px solid #bdc3c7; padding-left: 15px;\">\u8fd9\u662f\u4e00\u4e2a\u4e3e\u4e16\u516c\u8ba4\u7684\u771f\u7406\uff1a\u4e00\u4e2a\u62e5\u6709\u5de8\u989d\u8d22\u4ea7\u7684\u5355\u8eab\u7537\u5b50\uff0c\u5fc5\u5b9a\u9700\u8981\u4e00\u4f4d\u59bb\u5b50\u3002<\/p><div style=\"text-align: right; font-size: 14px; color: #7f8c8d; font-weight: bold; border-top: 1px solid #ecf0f1; padding-top: 10px;\">\u2014\u2014 \u300a\u50b2\u6162\u4e0e\u504f\u89c1\u300b\u7b80\u00b7\u5965\u65af\u6c40<\/div><\/div>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>ESP8266\u7535\u5b50\u65f6\u949f \u529f\u80fd:\u81ea\u5b9a\u4e49API\u8bbf\u95ee\u663e\u793a\u5929\u6c14\u663e\u793a\u65f6\u95f4 \u201c\u8bb0\u4f4f\u4ed6\u4eba\u540d\u5b57\u5e26\u7ed9\u4ed6\u4eba\u88ab\u8bb0\u4f4f\u7684\u611f\u89c9\u662f\u8fd9\u4e2a\u65f6\u4ee3\u6240 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[38],"tags":[],"class_list":["post-543","post","type-post","status-publish","format-standard","hentry","category-38"],"_links":{"self":[{"href":"https:\/\/weilai-future.top\/index.php\/wp-json\/wp\/v2\/posts\/543","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/weilai-future.top\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/weilai-future.top\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/weilai-future.top\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/weilai-future.top\/index.php\/wp-json\/wp\/v2\/comments?post=543"}],"version-history":[{"count":4,"href":"https:\/\/weilai-future.top\/index.php\/wp-json\/wp\/v2\/posts\/543\/revisions"}],"predecessor-version":[{"id":548,"href":"https:\/\/weilai-future.top\/index.php\/wp-json\/wp\/v2\/posts\/543\/revisions\/548"}],"wp:attachment":[{"href":"https:\/\/weilai-future.top\/index.php\/wp-json\/wp\/v2\/media?parent=543"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/weilai-future.top\/index.php\/wp-json\/wp\/v2\/categories?post=543"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/weilai-future.top\/index.php\/wp-json\/wp\/v2\/tags?post=543"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}