{"id":374,"date":"2026-01-12T23:41:10","date_gmt":"2026-01-12T15:41:10","guid":{"rendered":"http:\/\/114.55.133.236\/?p=374"},"modified":"2026-03-13T20:34:39","modified_gmt":"2026-03-13T12:34:39","slug":"esp32%e6%99%ba%e8%83%bd%e5%b0%8f%e5%86%b0%e7%ae%b1%e5%8f%8a%e9%85%8d%e5%a5%97%e5%ae%89%e5%8d%93app%e9%a1%b9%e7%9b%ae","status":"publish","type":"post","link":"http:\/\/qianmo.icu\/index.php\/2026\/01\/12\/esp32%e6%99%ba%e8%83%bd%e5%b0%8f%e5%86%b0%e7%ae%b1%e5%8f%8a%e9%85%8d%e5%a5%97%e5%ae%89%e5%8d%93app%e9%a1%b9%e7%9b%ae\/","title":{"rendered":"ESP32\u667a\u80fd\u5c0f\u51b0\u7bb1\u53ca\u914d\u5957\u5b89\u5353app\u9879\u76ee"},"content":{"rendered":"\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u60f3\u4e86\u89e3\u66f4\u591a\u9879\u76ee\u8bf7\u641c\u7d22\u201c\u9879\u76ee\u201d\u6807\u7b7e\u6216\u8005\u8bbf\u95ee\u6211\u7684github\u4ed3\u5e93\u3002<br>\u4ed3\u5e93\u5730\u5740\uff1a<a href=\"https:\/\/github.com\/QianmoNai?tab=repositories\">QianmoNai&#8217;s Repositories<\/a><\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">\u57fa\u4e8eAndroid Studio\u548cArduino\u7684ESP32\u667a\u80fd\u5c0f\u51b0\u7bb1\u548c\u914d\u5957\u5b89\u5353app\u5236\u4f5c\u9879\u76ee\uff08\u505c\u6b62\u7ef4\u62a4\uff09<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">1. \u9879\u76ee\u80cc\u666f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u5927\u4e00\u65f6\u53c2\u52a0\u6821\u79d1\u6280\u8282\u505a\u7684\uff0c\u57fa\u4e8eESP32-wroom\u5f00\u53d1\u677f\uff0c\u4f7f\u7528\u7684\u662farduino\u6846\u67b6\uff0cArduino IDE\u8f6f\u4ef6\u3002\u540e\u9762\u7684\u5b89\u5353app\u5f00\u53d1\u90e8\u5206\u4f7f\u7528\u4e86Android Studio\u8f6f\u4ef6\uff0cJava\u8bed\u8a00\u5f00\u53d1\u3002\u6700\u540e\u4e5f\u662f\u5f97\u5230\u4e86\u6821\u4e8c\u7b49\u5956\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. \u9879\u76ee\u4ecb\u7ecd<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u90e8\u5206\u89c6\u9891\u5c55\u793a\uff1a<a href=\"https:\/\/www.bilibili.com\/video\/BV1fUoUYXEfC\/?spm_id_from=333.1387.homepage.video_card.click&amp;vd_source=87d06c8a30725ef270253f6a6038e128\">\u57fa\u4e8eesp32\u7684\u591a\u7528\u6e29\u63a7\u5c0f\u51b0\u7bb1_\u54d4\u54e9\u54d4\u54e9_bilibili<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2460\u672c\u4f53\u4ee3\u7801\u90e8\u5206\uff1a<\/h3>\n\n\n\n<details class=\"wp-block-details has-pale-pink-color has-text-color has-link-color wp-elements-b2abb4ad712005be411037376176161c is-layout-flow wp-block-details-is-layout-flow\"><summary>arduino\u6846\u67b6\u4ee3\u7801\uff08\u70b9\u6211\uff09<\/summary>\n<pre class=\"wp-block-code\"><code>#include &lt;Arduino.h&gt; \/\/\u57fa\u7840\u5934\u6587\u4ef6\n#include &lt;WiFi.h&gt; \/\/WiFi\u76f8\u5173\u5e93\n#include &lt;NTPClient.h&gt; \/\/\u7f51\u7edc\u76f8\u5173\u5e93\n#include &lt;U8g2lib.h&gt; \/\/oied\u663e\u793a\u76f8\u5173\u5e93\n#include &lt;TimeLib.h&gt;  \/\/ \u5f15\u5165\u65f6\u95f4\u5e93\uff0c\u7528\u4e8e\u5904\u7406\u65f6\u95f4\u76f8\u5173\u64cd\u4f5c\n#include &lt;ArduinoJson.h&gt; \/\/JSON \u6570\u636e\u89e3\u6790\u5e93\n#include &lt;HTTPClient.h&gt; \/\/HTTP \u8bf7\u6c42\u53d1\u9001\u5e93\n#include &lt;DHT.h&gt; \/\/DHT\u4f20\u611f\u5668\u5e93\n#include &lt;WiFiClient.h&gt;\n\n\/\/\u9700\u8981\u81ea\u5df1\u6309\u60c5\u51b5\u4fee\u6539\u7684\u5730\u65b9\nconst char* ssid = \"***\";  \/\/ \u66ff\u6362\u4e3a\u4f60\u7684WiFi\u540d\u79f0\nconst char* password = \"***\";  \/\/ \u66ff\u6362\u4e3a\u4f60\u7684WiFi\u5bc6\u7801\nconst int serverPort = 5000;\nuint8_t  sign_in_hour=21,sign_in_minute=30;\/\/\u8bbe\u7f6e\u665a\u70b9\u540d\u65f6\u95f4\nuint8_t  turn_off_hour=22,turn_off_minute=30;\/\/\u8bbe\u7f6e\u665a\u7184\u706f\u65f6\u95f4\nfloat  set_highest_temperature=15.0;\/\/\u51b0\u7bb1\u6700\u9ad8\u6e29\u5ea6\nfloat  set_lowest_temperature=10.0;\/\/\u51b0\u7bb1\u6700\u4f4e\u6e29\u5ea6\n\n\/\/\u5929\u6c14\u76f8\u5173\u53c2\u6570\uff08\u6839\u636e\u81ea\u5df1\u60c5\u51b5\u4fee\u6539\uff09\nconst String API = \"SaAuI-lU7Me2bnYOz\";\nString WeatherURL = \"\";\nconst String CITY = \"\u798f\u5dde\";\nString url_xinzhi = \"\";\nlong sum = 0;\nuint8_t weather_flag=2;\nuint8_t fridge_contral_flag=0;\n\nString day1_day_weather;\nString day1_night_weather;\nString day1_high_temperature;\nString day1_low_temperature;\nString day1_humidity;\nString day1_precip;\nString day1_rainfall;\nString day1_wind_direction;\nString day1_wind_speed;\nString day1_wind_scale;\n\nString day2_day_weather;\nString day2_night_weather;\nString day2_high_temperature;\nString day2_low_temperature;\nString day2_humidity;\nString day2_precip;\nString day2_rainfall;\nString day2_wind_direction;\nString day2_wind_speed;\nString day2_wind_scale;\n\nString day3_day_weather;\nString day3_night_weather;\nString day3_high_temperature;\nString day3_low_temperature;\nString day3_humidity;\nString day3_precip;\nString day3_rainfall;\nString day3_wind_direction;\nString day3_wind_speed;\nString day3_wind_scale;\n\n\/\/ \u6839\u636e\u5b9e\u9645\u8fde\u63a5\u7684OLED\u5f15\u811a\u5b9a\u4e49SCL\u548cSDA\u5f15\u811a\n#define SCL 22\n#define SDA 21\n#define DHTPIN 2  \/\/ \u5b9a\u4e49DHT11\u8fde\u63a5\u7684\u5f15\u811a\n#define DHTTYPE DHT11  \/\/ \u4f7f\u7528DHT 11\n\nconst int buzzerPin = 23; \/\/ \u8702\u9e23\u5668\u4fe1\u53f7\u7ebf\u8fde\u63a5\u7684\u5f15\u7ebf \nconst int buttonPin = 13; \/\/ \u6309\u94ae\u4e2d\u65ad\u8fde\u63a5\u7684\u5f15\u7ebf\nconst int fridgePin = 12;  \/\/ \u51b0\u7bb1\u4fe1\u53f7\u7ebf\u8fde\u63a5\u7684\u5f15\u811a\n\n\/\/\u5b9a\u4e49\u5168\u5c40\u53d8\u91cf\nuint8_t now_hour=0;  \/\/ \u7528\u4e8e\u5b58\u50a8\u5c0f\u65f6\u7684\u53d8\u91cf\nuint8_t now_minute=0;  \/\/ \u7528\u4e8e\u5b58\u50a8\u5206\u949f\u7684\u53d8\u91cf\nchar dateStr&#91;20];\nchar weekStr&#91;10];\nuint8_t flag=1;  \/\/\u665a\u70b9\u540d\u6807\u5fd7\u53d8\u91cf\nuint8_t flag1=1; \/\/\u665a\u7184\u706f\u6807\u5fd7\u53d8\u91cf\nuint8_t page=1; \/\/\u9875\u7801\nchar receivedChar;\nfloat now_Humidity=0.0;\nfloat now_Temperature=0.0;\n\nWiFiServer server(serverPort);\n\n\/\/ \u4f7f\u7528U8g2\u5e93\u521d\u59cb\u5316OLED\u5bf9\u8c61\uff0c\u8fd9\u91cc\u5047\u8bbe\u662fSSD1306 128x64\u7684OLED\uff0c\u8f6f\u4ef6I2C\u901a\u4fe1\uff0c\u65e0\u590d\u4f4d\u5f15\u811a\u8fde\u63a5\nU8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, \/* clock=*\/ SCL, \/* data=*\/ SDA, \/* reset=*\/ U8X8_PIN_NONE);\n\n\/\/ \u521b\u5efaHardwareSerial\u5bf9\u8c61\uff0c\u8fd9\u91cc\u4f7f\u7528UART0\uff0c\u5bf9\u5e94\u9ed8\u8ba4\u7684RXD\u548cTXD\u5f15\u811a\nHardwareSerial SerialPort(0); \/\/\u4e32\u53e3\u76d1\u6d4b\u5668\u7684\u4e32\u53e3\u901a\u4fe1\n\n\/\/ \u521b\u5efa\u4f20\u611f\u5668\u5bf9\u8c61\nDHT dht(DHTPIN, DHTTYPE);\n\n\/\/UDP \u7f51\u7edc\u901a\u4fe1\u521d\u59cb\u5316\nWiFiUDP ntpUDP;\n\n\/\/ \u8fd9\u91cc\u4f7f\u7528\u4e2d\u56fd\u56fd\u5bb6\u6388\u65f6\u4e2d\u5fc3\u7684\u670d\u52a1\u5668\u5730\u5740\uff0c\u4e5f\u53ef\u66ff\u6362\u4e3a\u5176\u4ed6\u53ef\u9760\u7684NTP\u670d\u52a1\u5668\nNTPClient timeClient(ntpUDP, \"ntp.ntsc.ac.cn\", 60 * 60 * 8, 30 * 60 * 1000); \n\n\/* \u521b\u5efa\u5b9e\u4f8b *\/\n \nHTTPClient http;\n \nString GitURL(String api,String city)\n{\n  url_xinzhi =  \"https:\/\/api.seniverse.com\/v3\/weather\/daily.json?key=\";\n  url_xinzhi += api;\n  url_xinzhi += \"&amp;location=\";\n  url_xinzhi += city;\n  url_xinzhi += \"&amp;language=zh-Hans&amp;unit=c&amp;start=-1&amp;days=5\";\n  \/\/https:\/\/api.seniverse.com\/v3\/weather\/daily.json?key=your_api_key&amp;location=beijing&amp;language=zh-Hans&amp;unit=c&amp;start=-1&amp;days=5\n  return url_xinzhi;\n}\n\nvoid ParseWeather(String url)\n{  \n  DynamicJsonDocument doc(2048); \/\/\u521b\u5efa\u4e00\u4e2a\u52a8\u6001\u7684 JSON \u6587\u6863\u5bf9\u8c61doc\uff0c\u5e76\u5206\u914d 2048 \u5b57\u8282\u7684\u5185\u5b58\u7a7a\u95f4\u3002\n  http.begin(url);\/\/\u521d\u59cb\u5316HTTPClient\u5bf9\u8c61http\uff0c\u5e76\u4f20\u5165\u8981\u8bf7\u6c42\u7684 URL\u3002\n \n  int httpGet = http.GET();\/\/\u5bf9\u8c61\u53d1\u9001\u4e00\u4e2a HTTP GET \u8bf7\u6c42\u5230\u6307\u5b9a\u7684 URL\uff0c\u5e76\u83b7\u53d6\u670d\u52a1\u5668\u8fd4\u56de\u7684\u54cd\u5e94\u72b6\u6001\u7801\u3002\n  if(httpGet &gt; 0)\n  {\n    Serial.printf(\"HTTPGET is %d\",httpGet);\/\/\u6253\u5370\u51fa\u54cd\u5e94\u72b6\u6001\u7801\n    \n    if(httpGet == HTTP_CODE_OK)\n    {\n      String json = http.getString();\/\/\u83b7\u53d6\u670d\u52a1\u5668\u8fd4\u56de\u7684 JSON \u683c\u5f0f\u7684\u5b57\u7b26\u4e32\u6570\u636e\n      Serial.println(json);\/\/\u6253\u5370\u670d\u52a1\u5668\u8fd4\u56de\u7684 JSON \u683c\u5f0f\u7684\u5b57\u7b26\u4e32\u6570\u636e\n      \n      deserializeJson(doc, json);\/\/\u5c06\u83b7\u53d6\u5230\u7684 JSON \u5b57\u7b26\u4e32\u89e3\u6790\u5230\u4e4b\u524d\u521b\u5efa\u7684doc\u5bf9\u8c61\u4e2d\n      \n      day1_day_weather=doc&#91;\"results\"]&#91;0]&#91;\"daily\"]&#91;0]&#91;\"text_day\"].as&lt;String&gt;();\n      day1_night_weather=doc&#91;\"results\"]&#91;0]&#91;\"daily\"]&#91;0]&#91;\"text_night\"].as&lt;String&gt;();\n      day1_high_temperature=doc&#91;\"results\"]&#91;0]&#91;\"daily\"]&#91;0]&#91;\"high\"].as&lt;String&gt;();\n      day1_low_temperature=doc&#91;\"results\"]&#91;0]&#91;\"daily\"]&#91;0]&#91;\"low\"].as&lt;String&gt;();\n      day1_humidity=doc&#91;\"results\"]&#91;0]&#91;\"daily\"]&#91;0]&#91;\"humidity\"].as&lt;String&gt;();\n      day1_precip=doc&#91;\"results\"]&#91;0]&#91;\"daily\"]&#91;0]&#91;\"precip\"].as&lt;String&gt;();\n      day1_rainfall=doc&#91;\"results\"]&#91;0]&#91;\"daily\"]&#91;0]&#91;\"rainfall\"].as&lt;String&gt;();\n      day1_wind_direction=doc&#91;\"results\"]&#91;0]&#91;\"daily\"]&#91;0]&#91;\"wind_direction\"].as&lt;String&gt;();\n      day1_wind_speed=doc&#91;\"results\"]&#91;0]&#91;\"daily\"]&#91;0]&#91;\"wind_speed\"].as&lt;String&gt;();\n      day1_wind_scale=doc&#91;\"results\"]&#91;0]&#91;\"daily\"]&#91;0]&#91;\"wind_scale\"].as&lt;String&gt;();\n\n      day2_day_weather=doc&#91;\"results\"]&#91;0]&#91;\"daily\"]&#91;1]&#91;\"text_day\"].as&lt;String&gt;();\n      day2_night_weather=doc&#91;\"results\"]&#91;0]&#91;\"daily\"]&#91;1]&#91;\"text_night\"].as&lt;String&gt;();\n      day2_high_temperature=doc&#91;\"results\"]&#91;0]&#91;\"daily\"]&#91;1]&#91;\"high\"].as&lt;String&gt;();\n      day2_low_temperature=doc&#91;\"results\"]&#91;0]&#91;\"daily\"]&#91;1]&#91;\"low\"].as&lt;String&gt;();\n      day2_humidity=doc&#91;\"results\"]&#91;0]&#91;\"daily\"]&#91;1]&#91;\"humidity\"].as&lt;String&gt;();\n      day2_precip=doc&#91;\"results\"]&#91;0]&#91;\"daily\"]&#91;1]&#91;\"precip\"].as&lt;String&gt;();\n      day2_rainfall=doc&#91;\"results\"]&#91;0]&#91;\"daily\"]&#91;1]&#91;\"rainfall\"].as&lt;String&gt;();\n      day2_wind_direction=doc&#91;\"results\"]&#91;0]&#91;\"daily\"]&#91;1]&#91;\"wind_direction\"].as&lt;String&gt;();\n      day2_wind_speed=doc&#91;\"results\"]&#91;0]&#91;\"daily\"]&#91;1]&#91;\"wind_speed\"].as&lt;String&gt;();\n      day2_wind_scale=doc&#91;\"results\"]&#91;0]&#91;\"daily\"]&#91;1]&#91;\"wind_scale\"].as&lt;String&gt;();\n\n      day3_day_weather=doc&#91;\"results\"]&#91;0]&#91;\"daily\"]&#91;2]&#91;\"text_day\"].as&lt;String&gt;();\n      day3_night_weather=doc&#91;\"results\"]&#91;0]&#91;\"daily\"]&#91;2]&#91;\"text_night\"].as&lt;String&gt;();\n      day3_high_temperature=doc&#91;\"results\"]&#91;0]&#91;\"daily\"]&#91;2]&#91;\"high\"].as&lt;String&gt;();\n      day3_low_temperature=doc&#91;\"results\"]&#91;0]&#91;\"daily\"]&#91;2]&#91;\"low\"].as&lt;String&gt;();\n      day3_humidity=doc&#91;\"results\"]&#91;0]&#91;\"daily\"]&#91;2]&#91;\"humidity\"].as&lt;String&gt;();\n      day3_precip=doc&#91;\"results\"]&#91;0]&#91;\"daily\"]&#91;2]&#91;\"precip\"].as&lt;String&gt;();\n      day3_rainfall=doc&#91;\"results\"]&#91;0]&#91;\"daily\"]&#91;2]&#91;\"rainfall\"].as&lt;String&gt;();\n      day3_wind_direction=doc&#91;\"results\"]&#91;0]&#91;\"daily\"]&#91;2]&#91;\"wind_direction\"].as&lt;String&gt;();\n      day3_wind_speed=doc&#91;\"results\"]&#91;0]&#91;\"daily\"]&#91;2]&#91;\"wind_speed\"].as&lt;String&gt;();\n      day3_wind_scale=doc&#91;\"results\"]&#91;0]&#91;\"daily\"]&#91;2]&#91;\"wind_scale\"].as&lt;String&gt;();\n\n\n      Serial.println(day1_day_weather);\n      Serial.println(day1_night_weather);\n      Serial.println(day1_high_temperature);\n      Serial.println(day1_low_temperature);\n      Serial.println(day1_humidity);\n      Serial.println(day1_precip);\n      Serial.println(day1_rainfall);\n      Serial.println(day1_wind_direction);\n      Serial.println(day1_wind_speed);\n      Serial.println(day1_wind_scale);\n\n\n    }\n    else\n    {\n      Serial.printf(\"ERROR1!!\");\n    }\n  }\n  else\n  {\n    Serial.printf(\"ERROR2!!\");\n  }\n  http.end();\n}\n\n\/\/\u6309\u952e\u89e6\u53d1\u5916\u90e8\u4e2d\u65ad\u51fd\u6570\nvoid callBack(void)\n{\n  if(page!=4)\n  {page++;}\n  else\n  {page=1;}\n  Serial.printf(\"\u5f53\u524d\u9875\u6570:%d\\n\",page);\n}\n\n\/\/\u521d\u59cb\u5316\u51fd\u6570\nvoid setup() {\n\n  \/\/ \u5c06\u51b0\u7bb1\u5f15\u811a\u8bbe\u7f6e\u4e3a\u8f93\u51fa\u6a21\u5f0f\n  pinMode(fridgePin, OUTPUT);\n  \/\/ \u5c06\u51b0\u7bb1\u5f15\u811a\u7535\u5e73\u8bbe\u7f6e\u4e3a\u4f4e\u7535\u5e73\n  digitalWrite(fridgePin, LOW);\n\n  \/\/ \u5c06\u5f15\u811a23\u8bbe\u7f6e\u4e3a\u8f93\u51fa\u6a21\u5f0f\uff0c\u7528\u4e8e\u63a7\u5236\u8702\u9e23\u5668\n  pinMode(buzzerPin, OUTPUT);  \n  digitalWrite(buzzerPin, HIGH);\n\n  \/\/\u4e2d\u65ad\u5f15\u811a\n  pinMode(buttonPin,OUTPUT);    \/\/GPIO_13,\u8f93\u51fa\u6a21\u5f0f\n  attachInterrupt(buttonPin, callBack, FALLING);  \/\/\u5f53\u7535\u5e73\u53d1\u751f\u53d8\u5316\u65f6\uff0c\u89e6\u53d1\u4e2d\u65ad\n\n  \/\/\u542f\u7528\u4f20\u611f\u5668\n  dht.begin();\n\n  \/\/\u521d\u59cb\u5316\u5c4f\u5e55\n  u8g2.begin();\/\/\u542f\u52a8\u5c4f\u5e55\n  u8g2.enableUTF8Print();\/\/\u4f7f\u7528 u8g2 \u5e93\n  \n  \/\/\u521d\u59cb\u5316\u4e32\u53e3\n  Serial.begin(115200);\/\/ \u521d\u59cb\u5316\u7528\u4e8e\u8f93\u51fa\u8c03\u8bd5\u4fe1\u606f\u7684\u4e32\u53e3\n\n  \/\/\u521d\u59cb\u5316WiFi\u8fde\u63a5\u90e8\u5206\n  Serial.println();\n  Serial.print(\"Connecting to \");\n  Serial.println(ssid);\n  WiFi.begin(ssid, password);\/\/\u5f00\u59cb\u8fde\u63a5WiFi\n  while (WiFi.status()!= WL_CONNECTED) \/\/\u68c0\u6d4b\u662f\u5426\u6210\u529f\u8fde\u63a5WiFi\n  {\n    u8g2.clearBuffer();\n    u8g2.setFont(u8g2_font_ncenB08_tr);  \/\/ \u8bbe\u7f6e\u5b57\u4f53\n    u8g2.drawStr(10, 30, \"Connecting to WiFi\"); \/\/\u5c4f\u5e55\u663e\u793a\u6b63\u5728\u8fde\u63a5WiFi\n    u8g2.sendBuffer();\n    delay(500);\n    Serial.print(\".\");\n  }\n  u8g2.clearBuffer();\n  u8g2.setFont(u8g2_font_ncenB08_tr);  \/\/ \u8bbe\u7f6e\u5b57\u4f53\n  u8g2.drawStr(15, 30, \"WiFi connected!\");\/\/\u663e\u793a\u6210\u529f\u8fde\u63a5Wifi\n  u8g2.sendBuffer();\n  delay(500);\n  Serial.println(\"\");\n  Serial.println(\"WiFi connected.\");\n  Serial.println(\"IP address: \");\n  Serial.println(WiFi.localIP());\n\n  \/\/ \u521d\u59cb\u5316NTP\u5ba2\u6237\u7aef\n  timeClient.begin(); \n\n  server.begin();\n\n  \/\/\u6784\u5efa\u4e00\u4e2a\u5b8c\u6574\u7684 URL \u5b57\u7b26\u4e32\n  WeatherURL = GitURL(API,CITY);\n}\n\n\n\/\/\u5faa\u73af\u8fd0\u884c\u51fd\u6570\nvoid loop()\n{\n\n  \/\/\u83b7\u53d6\u6700\u65b0\u65f6\u95f4\n  timeClient.update();  \n  \n  \/\/\u5904\u7406\u65f6\u95f4\u51fd\u6570\n  tackle_time();\/\/\n\n  \/\/\u83b7\u5f97\u5c0f\u65f6\u548c\u5206\u949f\u53d8\u91cf\u6570\u636e\n  get_hour_minet();\n\n  \/\/\u83b7\u53d6\u5929\u6c14\n  get_weather();\n\n  \/\/\u51b0\u7bb1\u63a7\u5236\n  fridge_control();\n  \n  \/\/\u5c4f\u5e55\u663e\u793a\u90e8\u5206\n  chose_page_display();\/\/\n  \n  \/\/\u665a\u70b9\u7b7e\u5230\u63d0\u9192\u529f\u80fd\uff08\u5f85\u5904\u7406\uff09\n  remind_sign_in();\n\n  \/\/\u665a\u7184\u706f\u63d0\u9192\u529f\u80fd\uff08\u5f85\u5904\u7406\uff09\n  remind_turn_off();\n\n  app_connect_contral();\n\n\n  \/\/\u4ece\u4e32\u53e3\u76d1\u89c6\u5668\u63a5\u6536\u5b57\u7b26(\u6682\u65f6\u4e0d\u7528)\n  \/\/receive_char();\n}\n\n\/\/\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\n\nvoid app_connect_contral()\n{\n  WiFiClient client = server.available();\n  if (client) {\n    Serial.println(\"Client connected!\");\n\n    static unsigned long lastSensorSend = 0;\n    static unsigned long lastKeepalive = 0;\n\n    while (client.connected()) {\n        if (client.available()) {\n        String command = client.readStringUntil('\\n');\n        command.trim();\n        Serial.println(command);\n\n        int startPos_flag = command.indexOf(\"high\");\n        if (startPos_flag != -1) {\n        String numberStr = command.substring(startPos_flag + 4); \/\/ \u4ece\u7b2c5\u4e2a\u5b57\u7b26\u5f00\u59cb\u622a\u53d6\uff08\u7d22\u5f15\u4ece0\u5f00\u59cb\uff09\n        set_highest_temperature = atof(numberStr.c_str());\n        Serial.println(\"Extracted number: \" + String(set_highest_temperature));\n        }\n        startPos_flag = command.indexOf(\"low\");\n        if (startPos_flag != -1) {\n        String numberStr = command.substring(startPos_flag + 3); \/\/ \u4ece\u7b2c4\u4e2a\u5b57\u7b26\u5f00\u59cb\u622a\u53d6\uff08\u7d22\u5f15\u4ece0\u5f00\u59cb\uff09\n        set_lowest_temperature = atof(numberStr.c_str());\n        Serial.println(\"Extracted number: \" + String(set_lowest_temperature));\n        }\n        startPos_flag = command.indexOf(\"wdm\");\n        if (startPos_flag != -1) {\n          int prefixLength = 3;\n          int colonPos = command.indexOf(\":\");\n          if (colonPos != -1) {\n          String part1Str = command.substring(prefixLength, colonPos);\n          String part2Str = command.substring(colonPos + 1);\n          Serial.println(\"Extracted number: \" + String(part1Str));\n          Serial.println(\"Extracted number: \" + String(part2Str));\n          sign_in_hour = part1Str.toInt();\n          sign_in_minute = part2Str.toInt();\n          }\n        }\n        startPos_flag = command.indexOf(\"wxd\");\n        if (startPos_flag != -1) {\n          int prefixLength = 3;\n          int colonPos = command.indexOf(\":\");\n          if (colonPos != -1) {\n          String part1Str = command.substring(prefixLength, colonPos);\n          String part2Str = command.substring(colonPos + 1);\n          Serial.println(\"Extracted number: \" + String(part1Str));\n          Serial.println(\"Extracted number: \" + String(part2Str));\n          turn_off_hour = part1Str.toInt();\n          turn_off_minute = part2Str.toInt();\n          }\n        }\n\n\n\n        \/\/sign_in_hour=21,sign_in_minute=30;\/\/\u8bbe\u7f6e\u665a\u70b9\u540d\u65f6\u95f4\n        \/\/turn_off_hour=22,turn_off_minute=30;\/\/\u8bbe\u7f6e\u665a\u7184\u706f\u65f6\u95f4\n        if (command.equals(\"ON\")) {\n          fridge_contral_flag=1;\n        } else if (command.equals(\"OFF\")) {\n          fridge_contral_flag=0;\n        }\n\n        client.println(\"HUMIDITY:\" + String(now_Humidity));\n        client.println(\"TEMPERATURE:\" + String(now_Temperature));\n        \/\/ \u6539\u8fdb\u6821\u9a8c\u65b9\u5f0f\n        int checksum = static_cast&lt;int&gt;(round(now_Humidity * 100)) + static_cast&lt;int&gt;(round(now_Temperature));\n        client.println(\"CHECKSUM:\" + String(checksum));\n        client.println(\"KEEPALIVE\");\n        client.flush();\n\n        if (command.equals (\"GET_DATA\")) {\n        float a1 = set_highest_temperature;  \n        float a2 = set_lowest_temperature;\n        client.print(\"A1=\");\n        client.println(a1, 2);\n        client.flush();\n        client.print(\"A2=\");\n        client.println(a2, 2);\n        client.flush();\n        client.print(\"A3=\");\n        if(sign_in_hour&lt;10)\n        {\n          client.print(\"0\");\n          client.print(sign_in_hour);\n        }\n        else{client.print(sign_in_hour);}\n        client.print(\":\");\n        if(sign_in_minute&lt;10)\n        {\n          client.print(\"0\");\n          client.println(sign_in_minute);\n        }\n        else{client.println(sign_in_minute);}\n        client.flush();\n        client.print(\"A4=\");\n        if(turn_off_hour&lt;10)\n        {\n          client.print(\"0\");\n          client.print(turn_off_hour);\n        }\n        else{client.print(turn_off_hour);}\n        client.print(\":\");\n        if(turn_off_minute&lt;10)\n        {\n          client.print(\"0\");\n          client.println(turn_off_minute);\n        }\n        else{client.println(turn_off_minute);}\n        client.flush();\n        \/\/sign_in_hour=21,sign_in_minute=30;\/\/\u8bbe\u7f6e\u665a\u70b9\u540d\u65f6\u95f4\n        \/\/turn_off_hour=22,turn_off_minute=30;\/\/\u8bbe\u7f6e\u665a\u7184\u706f\u65f6\u95f4\n        Serial.print(\"A3=\");\n        if(sign_in_hour&lt;10)\n        {\n          Serial.print(\"0\");\n          Serial.print(sign_in_hour);\n        }\n        else{Serial.print(sign_in_hour);}\n        Serial.print(\":\");\n        if(sign_in_minute&lt;10)\n        {\n          Serial.print(\"0\");\n          Serial.println(sign_in_minute);\n        }\n        else{Serial.println(sign_in_minute);}\n        Serial.print(\"A4=\");\n        if(turn_off_hour&lt;10)\n        {\n          Serial.print(\"0\");\n          Serial.print(turn_off_hour);\n        }\n        else{Serial.print(turn_off_hour);}\n        Serial.print(\":\");\n        if(turn_off_minute&lt;10)\n        {\n          Serial.print(\"0\");\n          Serial.println(turn_off_minute);\n        }\n        else{Serial.println(turn_off_minute);}\n        }\n      }\n\n      \/\/ \u6bcf\u79d2\u53d1\u9001\u4e00\u6b21\u6570\u636e\n      if (millis() - lastSensorSend &gt; 1000) { \n        now_Humidity = dht.readHumidity();\n        now_Temperature = dht.readTemperature();\n        client.println(\"HUMIDITY:\" + String(now_Humidity));\n        client.println(\"TEMPERATURE:\" + String(now_Temperature));\n        \/\/ \u6539\u8fdb\u6821\u9a8c\u65b9\u5f0f\n        int checksum = static_cast&lt;int&gt;(round(now_Humidity * 100)) + static_cast&lt;int&gt;(round(now_Temperature));\n        client.println(\"CHECKSUM:\" + String(checksum));\n        client.println(\"KEEPALIVE\");\n        client.flush();\n\n        lastSensorSend = millis();\n      }\n\n      \/\/ \u5fc3\u8df3\u5305\u4fdd\u6d3b\uff0810\u79d2\u95f4\u9694\uff09\n      if (millis() - lastKeepalive &gt; 10000) {\n        client.println(\"KEEPALIVE\");\n        client.flush();\n        lastKeepalive = millis();\n      }\n\n      fridge_control();\n\n      timeClient.update();  \n  \n      tackle_time();\n\n      get_hour_minet();\n\n      remind_sign_in();\n\n      remind_turn_off();\n\n    }\n    client.stop();\n    Serial.println(\"Client disconnected!\");\n  }\n}\n\n\/\/\u65f6\u95f4\u5904\u7406\u51fd\u6570\nvoid tackle_time()\n{\n  \/\/ \u83b7\u53d6\u65f6\u95f4\u76f8\u5173\u4fe1\u606f\n  time_t rawtime = timeClient.getEpochTime();\n  struct tm *ptm = gmtime(&amp;rawtime);\n\n  \/\/ \u683c\u5f0f\u5316\u65e5\u671f\u5b57\u7b26\u4e32\n  sprintf(dateStr, \"%02d-%02d\", ptm-&gt;tm_mon + 1, ptm-&gt;tm_mday);\n  \n  \/\/ \u6839\u636e\u661f\u671f\u6570\u5b57\u83b7\u53d6\u661f\u671f\u5b57\u7b26\u4e32\n  switch (ptm-&gt;tm_wday) \n  {\n    case 0:\n      sprintf(weekStr, \"Sun\");\n      break;\n    case 1:\n      sprintf(weekStr, \"Mon\");\n      break;\n    case 2:\n      sprintf(weekStr, \"Tue\");\n      break;\n    case 3:\n      sprintf(weekStr, \"Wed\");\n      break;\n    case 4:\n      sprintf(weekStr, \"Thu\");\n      break;\n    case 5:\n      sprintf(weekStr, \"Fri\");\n      break;\n    case 6:\n      sprintf(weekStr, \"Sat\");\n      break;\n  }\n}\n\nvoid chose_page_display()\n{\n  switch(page)\n  {\n    case 1:oled_page1_display();break;\n    case 2:oled_page2_display();break;\n    case 3:oled_page3_display();break;\n    case 4:oled_page4_display();break;\n  }\n}\n\n\n\n\/\/\u83b7\u53d6\u5c0f\u65f6\u548c\u5206\u949f\u6574\u578b\u53d8\u91cf\u51fd\u6570\nvoid get_hour_minet()\n{\n  String formattedTime = timeClient.getFormattedTime();\n  \/\/ \u63d0\u53d6\u5c0f\u65f6\u5e76\u8d4b\u503c\u7ed9now_hour\u53d8\u91cf\n  now_hour= formattedTime.substring(0, 2).toInt();\n  \/\/ \u63d0\u53d6\u5206\u949f\u5e76\u8d4b\u503c\u7ed9now_minute\u53d8\u91cf\n  now_minute= formattedTime.substring(3, 5).toInt();\n}\n\n\/\/\u5929\u6c14\u83b7\u53d6\u51fd\u6570\nvoid get_weather()\/\/\u5927\u7ea6\u534a\u4e2a\u5c0f\u65f6\u66f4\u65b0\u4e00\u6b21\n{\n  if(sum!=3600)\n  {sum++;}\n  else\n  {sum=0;}\n  if(weather_flag==2 || sum==5000)\n  {\n    ParseWeather(WeatherURL);\n    weather_flag=0;\n  }\n}\n\nvoid receive_char()\n{\n  if (Serial.available() &gt; 0) \/\/ \u5224\u65ad\u4e32\u53e3\u662f\u5426\u6709\u53ef\u7528\u6570\u636e\n  {  \n    char receivedChar = Serial.read();  \/\/ \u8bfb\u53d6\u4e00\u4e2a\u5b57\u7b26\n    Serial.print(\"Received character: \");\n    Serial.println(receivedChar);  \/\/ \u5c06\u63a5\u6536\u5230\u7684\u5b57\u7b26\u663e\u793a\u5728\u4e32\u53e3\u76d1\u89c6\u5668\u4e0a\n    if (receivedChar == 'f') \n    {\n      digitalWrite(buzzerPin, LOW);\n      delay(1000);\n      digitalWrite(buzzerPin, HIGH);\n    }\n    else if(receivedChar == 'g')\n    {\n      digitalWrite(fridgePin, LOW);\n    }\n    else if(receivedChar == 'k')\n    {\n      digitalWrite(fridgePin, HIGH);\n    }\n  }\n}\n\/\/\u83b7\u5f97\u6e29\u6e7f\u5ea6\u6570\u636e\u51fd\u6570\nvoid get_dht_data()\n{\n  \/\/DH11\u6e29\u6e7f\u5ea6\u6a21\u5757\u83b7\u5f97\u6570\u636e\n  now_Humidity=dht.readHumidity();\n  now_Temperature=dht.readTemperature();\n}\n\/\/\u5c0f\u51b0\u7bb1\u63a7\u5236\u51fd\u6570\nvoid fridge_control()\n{\n  get_dht_data();\n  if(fridge_contral_flag)\n  {\n    if(now_Temperature&gt;set_highest_temperature)\n    {\n      \/\/ \u5c06\u51b0\u7bb1\u5f15\u811a\u7535\u5e73\u8bbe\u7f6e\u4e3a\u9ad8\u7535\u5e73(\u5f00\u542f)\n      digitalWrite(fridgePin, HIGH);\n    }\n    else if(now_Temperature&lt;set_lowest_temperature)\n    {\n      \/\/ \u5c06\u51b0\u7bb1\u5f15\u811a\u7535\u5e73\u8bbe\u7f6e\u4e3a\u4f4e\u7535\u5e73\uff08\u5173\u95ed\uff09\n      digitalWrite(fridgePin, LOW);\n    }\n  }\n  else{digitalWrite(fridgePin, LOW);}\n}\n\n\/\/\u665a\u70b9\u540d\u7b7e\u5230\u63d0\u9192\u51fd\u6570\uff08\u5f85\u5904\u7406\uff09\nvoid remind_sign_in()\n{\n  if(now_minute!=sign_in_minute)\n  {flag=1;}\n  if(now_hour==sign_in_hour &amp;&amp; now_minute==sign_in_minute &amp;&amp; flag==1)\/\/\u5230\u70b9\u89e6\u53d1\n  {\n    digitalWrite(buzzerPin, LOW);\n    delay(1000);\n    digitalWrite(buzzerPin, HIGH);\n    Serial.println(\"send WDM\");\n    flag=0;\n  }\n}\n\n\/\/\u665a\u7184\u706f\u63d0\u9192\u51fd\u6570\uff08\u5f85\u5904\u7406\uff09\nvoid remind_turn_off()\n{\n  if(now_minute!=turn_off_minute)\n  {flag1=1;}\n  if(now_hour==turn_off_hour &amp;&amp; now_minute==turn_off_minute &amp;&amp; flag1==1)\/\/\u5230\u70b9\u89e6\u53d1\n  {\n    digitalWrite(buzzerPin, LOW);\n    delay(1000);\n    digitalWrite(buzzerPin, HIGH);\n    Serial.println(\"send WXD\");\n    flag1=0;\n  }\n}\n\n\n\n\n\/\/oled\u5c4f\u5e55\u663e\u793a\u9875\u65701\u51fd\u6570\nvoid oled_page1_display()\n{ \n  \/\/Serial.print(\"Humidity: \");\n  \/\/Serial.print(now_Humidity);\n  \/\/Serial.print(\"%  Temperature: \");\n  \/\/Serial.print(now_Temperature);\n  \/\/Serial.println(\"\u00b0C\");\n  int i=0;\n  while(i!=5 &amp;&amp; page==1)\n  {\n    if(i==0)\n    {\n      u8g2.clearBuffer();\n      u8g2.setFont(u8g2_font_9x15_tf);\n      u8g2.setCursor(20, 10);  \/\/ \u663e\u793a\u65e5\u671f\n      u8g2.print(dateStr);\n      u8g2.setCursor(83, 10); \/\/ \u663e\u793a\u661f\u671f\n      u8g2.print(weekStr); \n      u8g2.setCursor(30, 28);  \/\/ \u663e\u793a\u65f6\u95f4\n      u8g2.print(timeClient.getFormattedTime());\n      u8g2.setFont(u8g2_font_wqy12_t_gb2312a);  \n      u8g2.setCursor(20, 45);\/\/ \u663e\u793a\u6e29\u5ea6\n      u8g2.print(\"\u5ba4\u5185\u6e29\u5ea6: \");\n      u8g2.print(now_Temperature);\n      u8g2.print(\"\u2103\");\n      u8g2.setCursor(20, 60);\/\/ \u663e\u793a\u6e7f\u5ea6\n      u8g2.print(\"\u5ba4\u5185\u6e7f\u5ea6: \");\n      u8g2.print(now_Humidity);\n      u8g2.print(\"%\");\n\n      u8g2.sendBuffer();\n    }\n    i++;\n    delay(100);\n  }\n\/\/day1_day_weather\n\/\/day1_night_weather\n\/\/day1_high_temperature\n\/\/day1_low_temperature\n\/\/day1_humidity\n\/\/day1_precip\n\/\/day1_rainfall\n}\n\n\/\/oled\u5c4f\u5e55\u663e\u793a\u9875\u65702\u51fd\u6570\nvoid oled_page2_display()\n{\n  int i=0;\n  while(i!=30 &amp;&amp; page==2)\n  {\n    if(i==0)\n    {\n      u8g2.clearBuffer();\n      u8g2.setFont(u8g2_font_wqy12_t_gb2312a);\n      u8g2.setCursor(5,10);\/\/ \u5f53\u524d\u65e5\u671f\n      u8g2.print(\"\u4eca\u5929:\");\n      u8g2.setCursor(30,30);\/\/ \u663e\u793a\u767d\u5929\u5929\u6c14\n      u8g2.print(\"\u767d\u5929\u5929\u6c14: \");\n      u8g2.print(day1_day_weather);\n      u8g2.setCursor(30,45);\/\/ \u663e\u793a\u665a\u4e0a\u5929\u6c14\n      u8g2.print(\"\u665a\u4e0a\u5929\u6c14: \");\n      u8g2.print(day1_night_weather);\n      u8g2.setCursor(30,60);\/\/ \u663e\u793a\u6e29\u5ea6\u8303\u56f4\n      u8g2.print(\"\u6e29\u5ea6: \");\n      u8g2.print(day1_low_temperature);\n      u8g2.print(\"~\");\n      u8g2.print(day1_high_temperature);\n      u8g2.print(\"\u2103\");\n      u8g2.sendBuffer();\n    }\n    i++;\n    delay(100);\n  }\n  i=0;\n\n  while(i!=30 &amp;&amp; page==2)\n  {\n    if(i==0)\n    {\n      u8g2.clearBuffer();\n      u8g2.setCursor(5,10);\/\/ \u5f53\u524d\u65e5\u671f\n      u8g2.print(\"\u4eca\u5929:\");\n      u8g2.setCursor(30,30);\/\/ \u663e\u793a\u6e7f\u5ea6\n      u8g2.print(\"\u6e7f\u5ea6: \");\n      u8g2.print(day1_humidity);\n      u8g2.print(\"%\");\n      u8g2.setCursor(30,45);\/\/ \u663e\u793a\u964d\u6c34\u6982\u7387\n      u8g2.print(\"\u964d\u6c34\u6982\u7387: \");\n      u8g2.print(day1_precip);\n      u8g2.print(\"%\");\n      u8g2.setCursor(30,60);\/\/ \u663e\u793a\u964d\u6c34\u91cf\n      u8g2.print(\"\u964d\u96e8\u91cf: \");\n      u8g2.print(day1_rainfall);\n      u8g2.print(\"mm\");\n      u8g2.sendBuffer();\n    }\n    i++;\n    delay(100);\n  }\n  i=0;\n\n  while(i!=30 &amp;&amp; page==2)\n  {\n    if(i==0)\n    {\n      u8g2.clearBuffer();\n      u8g2.setCursor(5,10);\/\/ \u5f53\u524d\u65e5\u671f\n      u8g2.print(\"\u4eca\u5929:\");\n      u8g2.setCursor(30,30);\/\/ \u663e\u793a\u98ce\u5411\n      u8g2.print(\"\u98ce\u5411: \");\n      u8g2.print(day1_wind_direction);\n      u8g2.setCursor(30,45);\/\/ \u663e\u793a\u98ce\u901f\n      u8g2.print(\"\u98ce\u901f: \");\n      u8g2.print(day1_wind_speed);\n      u8g2.print(\"km\/h\");\n      u8g2.setCursor(30,60);\/\/ \u663e\u793a\u98ce\u529b\u7b49\u7ea7\n      u8g2.print(\"\u98ce\u529b\u7b49\u7ea7: \");\n      u8g2.print(day1_wind_scale);\n      u8g2.sendBuffer();\n    }\n    i++;\n    delay(100);\n  }\n}\n\n\/\/oled\u5c4f\u5e55\u663e\u793a\u9875\u65703\u51fd\u6570\nvoid oled_page3_display()\n{\n  int i=0;\n  while(i!=30 &amp;&amp; page==3)\n  {\n    if(i==0)\n    {\n      u8g2.clearBuffer();\n      u8g2.setFont(u8g2_font_wqy12_t_gb2312a);\n      u8g2.setCursor(5,10);\/\/ \u5f53\u524d\u65e5\u671f\n      u8g2.print(\"\u660e\u5929:\");\n      u8g2.setCursor(30,30);\/\/ \u663e\u793a\u767d\u5929\u5929\u6c14\n      u8g2.print(\"\u767d\u5929\u5929\u6c14: \");\n      u8g2.print(day2_day_weather);\n      u8g2.setCursor(30,45);\/\/ \u663e\u793a\u665a\u4e0a\u5929\u6c14\n      u8g2.print(\"\u665a\u4e0a\u5929\u6c14: \");\n      u8g2.print(day2_night_weather);\n      u8g2.setCursor(30,60);\/\/ \u663e\u793a\u6e29\u5ea6\u8303\u56f4\n      u8g2.print(\"\u6e29\u5ea6: \");\n      u8g2.print(day2_low_temperature);\n      u8g2.print(\"~\");\n      u8g2.print(day2_high_temperature);\n      u8g2.print(\"\u2103\");\n      u8g2.sendBuffer();\n    }\n    i++;\n    delay(100);\n  }\n  i=0;\n\n  while(i!=30 &amp;&amp; page==3)\n  {\n    if(i==0)\n    {\n      u8g2.clearBuffer();\n      u8g2.setCursor(5,10);\/\/ \u5f53\u524d\u65e5\u671f\n      u8g2.print(\"\u660e\u5929:\");\n      u8g2.setCursor(30,30);\/\/ \u663e\u793a\u6e7f\u5ea6\n      u8g2.print(\"\u6e7f\u5ea6: \");\n      u8g2.print(day2_humidity);\n      u8g2.print(\"%\");\n      u8g2.setCursor(30,45);\/\/ \u663e\u793a\u964d\u6c34\u6982\u7387\n      u8g2.print(\"\u964d\u6c34\u6982\u7387: \");\n      u8g2.print(day2_precip);\n      u8g2.print(\"%\");\n      u8g2.setCursor(30,60);\/\/ \u663e\u793a\u964d\u6c34\u91cf\n      u8g2.print(\"\u964d\u96e8\u91cf: \");\n      u8g2.print(day2_rainfall);\n      u8g2.print(\"mm\");\n      u8g2.sendBuffer();\n    }\n    i++;\n    delay(100);\n  }\n  i=0;\n\n  while(i!=30 &amp;&amp; page==3)\n  {\n    if(i==0)\n    {\n      u8g2.clearBuffer();\n      u8g2.setCursor(5,10);\/\/ \u5f53\u524d\u65e5\u671f\n      u8g2.print(\"\u660e\u5929:\");\n      u8g2.setCursor(30,30);\/\/ \u663e\u793a\u98ce\u5411\n      u8g2.print(\"\u98ce\u5411: \");\n      u8g2.print(day2_wind_direction);\n      u8g2.setCursor(30,45);\/\/ \u663e\u793a\u98ce\u901f\n      u8g2.print(\"\u98ce\u901f: \");\n      u8g2.print(day2_wind_speed);\n      u8g2.print(\"km\/h\");\n      u8g2.setCursor(30,60);\/\/ \u663e\u793a\u98ce\u529b\u7b49\u7ea7\n      u8g2.print(\"\u98ce\u529b\u7b49\u7ea7: \");\n      u8g2.print(day2_wind_scale);\n      u8g2.sendBuffer();\n    }\n    i++;\n    delay(100);\n  }\n}\n\n\/\/oled\u5c4f\u5e55\u663e\u793a\u9875\u65704\u51fd\u6570\nvoid oled_page4_display()\n{\n  int i=0;\n  while(i!=30 &amp;&amp; page==4)\n  {\n    if(i==0)\n    {\n      u8g2.clearBuffer();\n      u8g2.setFont(u8g2_font_wqy12_t_gb2312a);\n      u8g2.setCursor(5,10);\/\/ \u5f53\u524d\u65e5\u671f\n      u8g2.print(\"\u540e\u5929:\");\n      u8g2.setCursor(30,30);\/\/ \u663e\u793a\u767d\u5929\u5929\u6c14\n      u8g2.print(\"\u767d\u5929\u5929\u6c14: \");\n      u8g2.print(day3_day_weather);\n      u8g2.setCursor(30,45);\/\/ \u663e\u793a\u665a\u4e0a\u5929\u6c14\n      u8g2.print(\"\u665a\u4e0a\u5929\u6c14: \");\n      u8g2.print(day3_night_weather);\n      u8g2.setCursor(30,60);\/\/ \u663e\u793a\u6e29\u5ea6\u8303\u56f4\n      u8g2.print(\"\u6e29\u5ea6: \");\n      u8g2.print(day3_low_temperature);\n      u8g2.print(\"~\");\n      u8g2.print(day3_high_temperature);\n      u8g2.print(\"\u2103\");\n      u8g2.sendBuffer();\n    }\n    i++;\n    delay(100);\n  }\n  i=0;\n\n  while(i!=30 &amp;&amp; page==4)\n  {\n    if(i==0)\n    {\n      u8g2.clearBuffer();\n      u8g2.setCursor(5,10);\/\/ \u5f53\u524d\u65e5\u671f\n      u8g2.print(\"\u540e\u5929:\");\n      u8g2.setCursor(30,30);\/\/ \u663e\u793a\u6e7f\u5ea6\n      u8g2.print(\"\u6e7f\u5ea6: \");\n      u8g2.print(day3_humidity);\n      u8g2.print(\"%\");\n      u8g2.setCursor(30,45);\/\/ \u663e\u793a\u964d\u6c34\u6982\u7387\n      u8g2.print(\"\u964d\u6c34\u6982\u7387: \");\n      u8g2.print(day3_precip);\n      u8g2.print(\"%\");\n      u8g2.setCursor(30,60);\/\/ \u663e\u793a\u964d\u6c34\u91cf\n      u8g2.print(\"\u964d\u96e8\u91cf: \");\n      u8g2.print(day3_rainfall);\n      u8g2.print(\"mm\");\n      u8g2.sendBuffer();\n    }\n    i++;\n    delay(100);\n  }\n  i=0;\n\n  while(i!=30 &amp;&amp; page==4)\n  {\n    if(i==0)\n    {\n      u8g2.clearBuffer();\n      u8g2.setCursor(5,10);\/\/ \u5f53\u524d\u65e5\u671f\n      u8g2.print(\"\u540e\u5929:\");\n      u8g2.setCursor(30,30);\/\/ \u663e\u793a\u98ce\u5411\n      u8g2.print(\"\u98ce\u5411: \");\n      u8g2.print(day3_wind_direction);\n      u8g2.setCursor(30,45);\/\/ \u663e\u793a\u98ce\u901f\n      u8g2.print(\"\u98ce\u901f: \");\n      u8g2.print(day3_wind_speed);\n      u8g2.print(\"km\/h\");\n      u8g2.setCursor(30,60);\/\/ \u663e\u793a\u98ce\u529b\u7b49\u7ea7\n      u8g2.print(\"\u98ce\u529b\u7b49\u7ea7: \");\n      u8g2.print(day3_wind_scale);\n      u8g2.sendBuffer();\n    }\n    i++;\n    delay(100);\n  }\n}<\/code><\/pre>\n<\/details>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2461\u5b89\u5353app\u90e8\u5206\uff1a<\/h3>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/114.55.133.236\/wp-content\/uploads\/2026\/01\/Screenshot_20260112_231541-461x1024.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"461\" height=\"1024\" data-original=\"http:\/\/114.55.133.236\/wp-content\/uploads\/2026\/01\/Screenshot_20260112_231541-461x1024.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-375\" style=\"width:461px;height:auto\"  sizes=\"auto, (max-width: 461px) 100vw, 461px\" \/><\/div><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/114.55.133.236\/wp-content\/uploads\/2026\/01\/Screenshot_2026_0112_233846-1024x638.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"638\" data-original=\"http:\/\/114.55.133.236\/wp-content\/uploads\/2026\/01\/Screenshot_2026_0112_233846-1024x638.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-377\"  sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u901a\u8fc7\u7f51\u76d8\u5206\u4eab\u7684\u6587\u4ef6\uff1aesp32_control_app.zip<br>\u94fe\u63a5: <a href=\"https:\/\/pan.baidu.com\/s\/1le9LSpFz3Zl2tUaHhI8E5A?pwd=2kiw\">https:\/\/pan.baidu.com\/s\/1le9LSpFz3Zl2tUaHhI8E5A?pwd=2kiw<\/a> \u63d0\u53d6\u7801: 2kiw<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3.\u9879\u76ee\u91cd\u70b9\u5185\u5bb9<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u2460ESP32\u5b9e\u73b0\u548c\u624b\u673a\u4e4b\u95f4\u7684\u901a\u4fe1\uff0c\u501f\u52a9\u5b89\u5353app\u5b9e\u73b0\u4e92\u76f8\u8f6c\u53d1\u6570\u636e\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2461\u5b89\u5353app\u754c\u9762\u8bbe\u8ba1\uff0c\u4ea4\u4e92\u6a21\u5757\u4e4b\u95f4\u7684\u63a7\u5236\u5173\u7cfb\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2462\u591a\u7528\u6e29\u63a7\u5c0f\u51b0\u7bb1\u7684\u8054\u7f51\u5929\u6c14\u65f6\u949f\uff0c\u786c\u4ef6\u8bbe\u5907\u63a7\u5236\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u60f3\u4e86\u89e3\u66f4\u591a\u9879\u76ee\u8bf7\u641c\u7d22\u201c\u9879\u76ee\u201d\u6807\u7b7e\u6216\u8005\u8bbf\u95ee\u6211\u7684github\u4ed3\u5e93\u3002\u4ed3\u5e93\u5730\u5740\uff1aQianmoNai&#8217;s R [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":377,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[27,18,17],"class_list":["post-374","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-article","tag-app","tag-esp32","tag-17"],"_links":{"self":[{"href":"http:\/\/qianmo.icu\/index.php\/wp-json\/wp\/v2\/posts\/374","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/qianmo.icu\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/qianmo.icu\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/qianmo.icu\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/qianmo.icu\/index.php\/wp-json\/wp\/v2\/comments?post=374"}],"version-history":[{"count":3,"href":"http:\/\/qianmo.icu\/index.php\/wp-json\/wp\/v2\/posts\/374\/revisions"}],"predecessor-version":[{"id":417,"href":"http:\/\/qianmo.icu\/index.php\/wp-json\/wp\/v2\/posts\/374\/revisions\/417"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/qianmo.icu\/index.php\/wp-json\/wp\/v2\/media\/377"}],"wp:attachment":[{"href":"http:\/\/qianmo.icu\/index.php\/wp-json\/wp\/v2\/media?parent=374"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/qianmo.icu\/index.php\/wp-json\/wp\/v2\/categories?post=374"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/qianmo.icu\/index.php\/wp-json\/wp\/v2\/tags?post=374"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}