{"id":1625,"date":"2025-05-29T08:01:00","date_gmt":"2025-05-29T00:01:00","guid":{"rendered":"https:\/\/www.640629.xyz\/?p=1625"},"modified":"2025-10-15T11:28:48","modified_gmt":"2025-10-15T03:28:48","slug":"wifi%e7%b0%a1%e4%bb%8b-client%e7%ab%af","status":"publish","type":"post","link":"https:\/\/www.640629.xyz\/?p=1625","title":{"rendered":"WiFi\u7c21\u4ecb\uff1a\u5de5\u4f5c\u7ad9\u6a21\u5f0f\u2014\u53d6\u5f97NTP\u6642\u9593\u8cc7\u6599"},"content":{"rendered":"\n<p>ESP32\u4f7f\u7528WiFi\u529f\u80fd\u6642\uff0c\u9700\u8981\u5f15\u7528\u5167\u5efa\u7684WiFi\u51fd\u5f0f\u5eab<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"cpp\" class=\"language-cpp\">#include &lt;WiFi.h&gt;<\/code><\/pre>\n\n\n\n<p>\u53ef\u4ee5\u900f\u904e WiFi.mode() \u8a2d\u5b9a\u4e0d\u540c\u7684\u5de5\u4f5c\u6a21\u5f0f\uff1a\uff08<strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">\u9810\u8a2d\u70baSTA\u6a21\u5f0f<\/mark><\/strong>\uff09<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>WIFI_STA\uff0c\u5de5\u4f5c\u7ad9\u6a21\u5f0f(Station)\uff1a\u7576\u4f5c\u666e\u901a\u8a2d\u5099\uff0c\u9023\u63a5\u5916\u90e8\u7121\u7dda\u7db2\u8def(\u5982\u8def\u7531\u5668)\u3002<\/li>\n\n\n\n<li>WIFI_AP\uff0c\u71b1\u9ede\u6a21\u5f0f(Access Point)\uff1a\u7576\u4f5c\u71b1\u9ede\u4f9b\u5176\u4ed6\u8a2d\u5099\u9023\u63a5(\u5982\u624b\u6a5f\u3001\u96fb\u8166)\u3002<\/li>\n\n\n\n<li>WIFI_AP_STA\uff0c\u6df7\u5408\u6a21\u5f0f(AP + Station)\uff1a\u80fd\u9023\u63a5\u5916\u90e8\u7121\u7dda\u7db2\u8def\uff0c\u4e5f\u80fd\u7576\u4f5c\u71b1\u9ede\u4f9b\u5176\u4ed6\u8a2d\u5099\u9023\u63a5\u3002<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">\u6383\u63cfWiFi\u57fa\u5730\u81fa<\/h2>\n\n\n\n<p>\u5efa\u7acbWiFi\u9023\u7dda\u524d\uff0c\u53ef\u5148\u6383\u7784\u7db2\u8def\uff0c\u627e\u5230SSID\u540d\u7a31\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"cpp\" class=\"language-cpp\">#include \"WiFi.h\"      \/\/ \u5f15\u7528 ESP32\u7684WiFi\u51fd\u5f0f\u5eab\n\nvoid setup()\n{\n  \/\/ --------------------------------------------------\n  Serial.begin(9600);           \/\/ \u555f\u7528\u4e32\u5217\u57e0\u76e3\u770b\u8996\u7a97\n  \/\/ --------------------------------------------------\n  WiFi.mode(WIFI_STA);          \/\/ \u8a2d\u70ba\u5de5\u4f5c\u7ad9\u6a21\u5f0f\n  WiFi.disconnect();            \/\/ \u65b7\u958b\u4e4b\u524d\u53ef\u80fd\u4fdd\u5b58\u7684WiFi\n  delay(100);                   \/\/ \u7b49\u5f85100ms\n  Serial.println(\"Setup done\"); \/\/ \u986f\u793a\u521d\u59cb\u5316\u5b8c\u6210\n  \/\/ --------------------------------------------------\n}\n\nvoid loop()\n{\n  Serial.println(\"scan start\"); \/\/ \u63d0\u793a\u958b\u59cb\u6383\u63cf\u7db2\u8def\n  int n = WiFi.scanNetworks();  \/\/ \u6383\u63cf\u9644\u8fd1WiFi\u7db2\u8def\uff0c\u627e\u5230\u7684\u7db2\u8def\u6578\u91cf\u5132\u5b58\u70ba n\n  Serial.println(\"scan done\");  \/\/ \u6383\u63cf\u5b8c\u6210\u63d0\u793a\n\n  if (n == 0) \/\/ \u5982\u679c\u6c92\u6709\u627e\u5230\u4efb\u4f55\u7db2\u8def\n  {                 \n    Serial.println(\"no networks found\");\n  }\n  else        \/\/ \u627e\u5230\u7db2\u8def\u6642\n  {\n    \/\/ \u986f\u793a\u627e\u5230\u7684\u7db2\u8def\u6578\u91cf\n    Serial.print(n);\n    Serial.println(\" networks found\");\n\n    \/\/ \u986f\u793a\u6240\u6709\u627e\u5230\u7684\u7db2\u8def\u8cc7\u8a0a\n    for (int i = 0; i &lt; n; ++i)\n    {\n      Serial.print(i + 1);        \/\/ \u986f\u793a\u5e8f\u865f\n      Serial.print(\": \");\n      Serial.print(WiFi.SSID(i)); \/\/ \u986f\u793a\u7db2\u8def\u540d\u7a31(SSID)\n      Serial.print(\" (\");\n      Serial.print(WiFi.RSSI(i)); \/\/ \u986f\u793a\u4fe1\u865f\u5f37\u5ea6(\u55ae\u4f4ddBm\uff0c\u6578\u503c\u8d8a\u63a5\u8fd10\u8d8a\u5f37)\n      Serial.print(\")\");\n\n      \/\/ \u5224\u65b7\u52a0\u5bc6\u985e\u578b\uff1a\u958b\u653e\u7db2\u8def\u986f\u793a\u7a7a\u683c\uff0c\u52a0\u5bc6\u7db2\u8def\u986f\u793a*\n      Serial.println((WiFi.encryptionType(i) == WIFI_AUTH_OPEN) ? \" \" : \"*\");\n\n      delay(10);      \/\/ \u77ed\u66ab\u5ef6\u9072\u9632\u6b62\u786c\u9ad4\u8655\u7406\u904e\u8f09\n    }\n  }\n  Serial.println(\"\"); \/\/ \u8f38\u51fa\u7a7a\u884c\u5206\u9694\u6bcf\u6b21\u6383\u63cf\u7d50\u679c\n\n  delay(5000);  \/\/ 5\u79d2\u5f8c\u91cd\u65b0\u6383\u63cf\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u9023\u7dda\u5230WiFi\u57fa\u5730\u81fa<\/h2>\n\n\n\n<p>\u900f\u904e\u4e0b\u5217\u65b9\u5f0f\uff0c\u5728\u8a2d\u5b9a\u597d\u7121\u7dda\u57fa\u5730\u81faSSID\u53ca\u5bc6\u78bc\u5f8c\uff0c\u5373\u53ef\u9023\u63a5\u4e0a\u5916\u90e8\u7121\u7dda\u7db2\u8def\uff0c\u4e26\u50b3\u56de\u9023\u7dda\u72c0\u614b\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"cpp\" class=\"language-cpp\">#include &lt;WiFi.h&gt;\nconst char *ssid = \"SSID\";       \/\/ \u9023\u4e0a\u7121\u7dda\u57fa\u5730\u81fa\u7684SSID\nconst char *password = \"\u5bc6\u78bc\";   \/\/ \u9023\u4e0a\u7121\u7dda\u57fa\u5730\u81fa\u7684\u5bc6\u78bc\n\nvoid setup() {\n  \/\/----------------------------------------------------------\n  Serial.begin(9600);                   \/\/ \u555f\u7528\u4e32\u5217\u57e0\u76e3\u770b\u8996\u7a97\n  \/\/----------------------------------------------------------\n  WiFi.begin(ssid, password);           \/\/ \u555f\u52d5WiFi\u9023\u7dda\n  Serial.printf(\"Connecting to %s \", ssid);\n  while(WiFi.status() != WL_CONNECTED)  \/\/ \u53ea\u8981WiFi\u9023\u7dda\u72c0\u614b\u4e0d\u6b63\u5e38\n  {\n    delay(500);                         \/\/ \u6bcf0.5\u79d2\u5370\u51fa\u4e00\u500b\u9ede\n    Serial.print(\".\");\n  }\n  Serial.println(\" CONNECTED!\");\n  Serial.print(\"SSID: \");\n  Serial.println(WiFi.SSID());          \/\/ \u5370\u51faSSID\n  Serial.print(\"IP: \");\n  Serial.println(WiFi.localIP());       \/\/ \u5370\u51faIP\n  Serial.print(\"Subnet Mask IP: \");\n  Serial.println(WiFi.subnetMask());    \/\/ \u5370\u51fa\u5b50\u7db2\u8def\u906e\u7f69\n  Serial.print(\"Gateway IP: \");\n  Serial.println(WiFi.gatewayIP());     \/\/ \u5370\u51fa\u9598\u9053IP\n  Serial.print(\"DNS IP: \");\n  Serial.println(WiFi.dnsIP());         \/\/ \u5370\u51faDNS IP \n  \/\/----------------------------------------------------------\n}\n\nvoid loop() {\n}<\/code><\/pre>\n\n\n\n<pre title=\"\u57f7\u884c\u7d50\u679c\" class=\"wp-block-code\"><code lang=\"cpp\" class=\"language-cpp\">Connecting to iPhone ... CONNECTED!\nSSID: iPhone\nIP: 172.20.10.2\nSubnet Mask IP: 255.255.255.240\nGateway IP: 172.20.10.1\nDNS IP: 172.20.10.1<\/code><\/pre>\n\n\n\n<p>\u7bc4\u4f8b\uff1a\u9023\u63a5\u5230 NTP ( Network Time Protocol ) \u4f3a\u670d\u5668\uff0c\u53d6\u5f97\u6642\u9593\u8cc7\u6599\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"cpp\" class=\"language-cpp\">\/\/---------------------------------------------------------------\n#include &lt;WiFi.h&gt;\nconst char *ssid = \"SSID\";       \/\/ \u9023\u4e0a\u7121\u7dda\u57fa\u5730\u81fa\u7684SSID\nconst char *password = \"\u5bc6\u78bc\";   \/\/ \u9023\u4e0a\u7121\u7dda\u57fa\u5730\u81fa\u7684\u5bc6\u78bc\n\/\/---------------------------------------------------------------\n#include \"time.h\"\n#include \"sntp.h\"\nconst char* ntpServer1 = \"pool.ntp.org\";        \/\/ NTP\u4f3a\u670d\u5668\u7db2\u57401\nconst char* ntpServer2 = \"time.nist.gov\";       \/\/ NTP\u4f3a\u670d\u5668\u7db2\u57402\nconst char* ntpServer3 = \"time.stdtime.gov.tw\"; \/\/ NTP\u4f3a\u670d\u5668\u7db2\u57403\nconst long  gmtOffset_sec = 28800;        \/\/ GMT+8\uff0c28800\u79d2=8\u5c0f\u6642\nconst int   daylightOffset_sec = 0;       \/\/ \u65e5\u5149\u7bc0\u7d04\u6642\u9593\n\/\/---------------------------------------------------------------\nvoid printLocalTime()\n{\n  struct tm timeinfo;           \/\/\u5efa\u7acb\u4e00\u500b\u6642\u9593\u7d50\u69cb\uff0c\u540d\u7a31\u70ba timeinfo\n  if(!getLocalTime(&amp;timeinfo))  \/\/ \u5411NTP\u4f3a\u670d\u5668\u53d6\u5f97\u6642\u9593\u8cc7\u6599\uff0c\u82e5\u672a\u53d6\u5f97\u6642\u9593\u8cc7\u6599\uff0c\u5247\u8fd4\u56de\n  {   \n    Serial.println(\"No time available (yet)\");   \n    return;\n  }\n  Serial.println(&amp;timeinfo, \"%A, %B %d %Y %H:%M:%S\");   \/\/ \u5370\u51fa\u6642\u9593\u8cc7\u6599(\u683c\u5f0f\u53c3\u6578)\n  Serial.println(&amp;timeinfo, \"%F, %r\");   \/\/ \u5370\u51fa\u6642\u9593\u8cc7\u6599(\u683c\u5f0f\u53c3\u6578)\n}\n\/\/---------------------------------------------------------------\n\nvoid setup()\n{\n  \/\/----------------------------------------------------------\n  Serial.begin(9600);                   \/\/ \u555f\u7528\u4e32\u5217\u57e0\u76e3\u770b\u8996\u7a97\n  \/\/----------------------------------------------------------\n  WiFi.begin(ssid, password);           \/\/ \u555f\u52d5WiFi\u9023\u7dda\n  Serial.printf(\"Connecting to %s \", ssid);\n  while(WiFi.status() != WL_CONNECTED)  \/\/ \u53ea\u8981WiFi\u9023\u7dda\u72c0\u614b\u4e0d\u6b63\u5e38\n  {\n    delay(500);                         \/\/ \u6bcf0.5\u79d2\u5370\u51fa\u4e00\u500b\u9ede\n    Serial.print(\".\");\n  }\n  Serial.println(\" CONNECTED!\");\n  Serial.print(\"SSID: \");\n  Serial.println(WiFi.SSID());          \/\/ \u5370\u51faSSID\n  Serial.print(\"IP: \");\n  Serial.println(WiFi.localIP());       \/\/ \u5370\u51faIP\n  Serial.print(\"Subnet Mask IP: \");\n  Serial.println(WiFi.subnetMask());    \/\/ \u5370\u51fa\u5b50\u7db2\u8def\u906e\u7f69\n  Serial.print(\"Gateway IP: \");\n  Serial.println(WiFi.gatewayIP());     \/\/ \u5370\u51fa\u9598\u9053IP\n  Serial.print(\"DNS IP: \");\n  Serial.println(WiFi.dnsIP());         \/\/ \u5370\u51faDNS IP \n  \/\/----------------------------------------------------------  \n  \/\/ \u8a2d\u5b9aNTP\u4f3a\u670d\u5668\u53ca\u53c3\u6578\n  \/\/ configTime(GMT\u504f\u79fb\u79d2\u6578, \u65e5\u5149\u7bc0\u7d04\u504f\u79fb\u79d2\u6578, \u4f3a\u670d\u5668\u7db2\u5740)\n  \/\/----------------------------------------------------------\n  configTime(gmtOffset_sec, daylightOffset_sec, ntpServer1, ntpServer2, ntpServer3);\n  \/\/----------------------------------------------------------\n}\n\nvoid loop()\n{\n  printLocalTime();     \/\/ \u5370\u51fa\u6642\u9593\u8cc7\u6599\n  delay(5000);\n}\n<\/code><\/pre>\n\n\n\n<pre title=\"\u57f7\u884c\u7d50\u679c\" class=\"wp-block-code\"><code lang=\"C++\" class=\"language-C++\">Connecting to iPhone ... CONNECTED!\nSSID: iPhone\nIP: 172.20.10.2\nSubnet Mask IP: 255.255.255.240\nGateway IP: 172.20.10.1\nDNS IP: 172.20.10.1\nThursday, May 22 2025 15:17:35  \u2190\u2014 \u7b2c1\u7a2e\u8cc7\u6599\u683c\u5f0f\n2025-05-22, 03:17:35 PM  \u2190\u2014 \u7b2c2\u7a2e\u8cc7\u6599\u683c\u5f0f<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>ESP32\u4f7f\u7528WiFi\u529f\u80fd\u6642\uff0c\u9700\u8981\u5f15\u7528\u5167\u5efa\u7684WiFi\u51fd\u5f0f\u5eab \u53ef\u4ee5\u900f\u904e WiFi.mode() \u8a2d\u5b9a\u4e0d\u540c\u7684\u5de5\u4f5c\u6a21<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-1625","post","type-post","status-publish","format-standard","hentry","category-programming"],"_links":{"self":[{"href":"https:\/\/www.640629.xyz\/index.php?rest_route=\/wp\/v2\/posts\/1625","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.640629.xyz\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.640629.xyz\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.640629.xyz\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.640629.xyz\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1625"}],"version-history":[{"count":38,"href":"https:\/\/www.640629.xyz\/index.php?rest_route=\/wp\/v2\/posts\/1625\/revisions"}],"predecessor-version":[{"id":2146,"href":"https:\/\/www.640629.xyz\/index.php?rest_route=\/wp\/v2\/posts\/1625\/revisions\/2146"}],"wp:attachment":[{"href":"https:\/\/www.640629.xyz\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1625"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.640629.xyz\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1625"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.640629.xyz\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1625"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}