{"id":11891,"date":"2023-11-12T20:32:56","date_gmt":"2023-11-12T12:32:56","guid":{"rendered":"https:\/\/blog.iyatt.com\/?p=11891"},"modified":"2024-05-05T12:31:31","modified_gmt":"2024-05-05T04:31:31","slug":"esp32-%e8%81%94%e7%bd%91%ef%bc%88%e7%bc%96%e8%be%91%e4%b8%ad%ef%bc%89","status":"publish","type":"post","link":"https:\/\/blog.iyatt.com\/?p=11891","title":{"rendered":"ESP32 WiFi \u5f00\u53d1"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 ez-toc-wrap-center counter-hierarchy ez-toc-counter ez-toc-light-blue ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title ez-toc-toggle\" style=\"cursor:pointer\">\u76ee\u5f55<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/blog.iyatt.com\/?p=11891\/#1_%E5%89%8D%E8%A8%80\" >1 \u524d\u8a00<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/blog.iyatt.com\/?p=11891\/#2_%E6%B5%8B%E8%AF%95%E7%8E%AF%E5%A2%83\" >2 \u6d4b\u8bd5\u73af\u5883<\/a><ul class='ez-toc-list-level-2' ><li class='ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/blog.iyatt.com\/?p=11891\/#21_%E7%A1%AC%E4%BB%B6\" >2.1 \u786c\u4ef6<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/blog.iyatt.com\/?p=11891\/#22_%E8%BD%AF%E4%BB%B6\" >2.2 \u8f6f\u4ef6<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/blog.iyatt.com\/?p=11891\/#3_%E6%8E%A2%E7%B4%A2\" >3 \u63a2\u7d22<\/a><ul class='ez-toc-list-level-2' ><li class='ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/blog.iyatt.com\/?p=11891\/#31_WiFi_%E8%BF%9E%E6%8E%A5\" >3.1 WiFi \u8fde\u63a5<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/blog.iyatt.com\/?p=11891\/#32_GET_%E8%AF%B7%E6%B1%82\" >3.2 GET \u8bf7\u6c42<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/blog.iyatt.com\/?p=11891\/#33_NTP_%E6%97%B6%E9%97%B4%E5%90%8C%E6%AD%A5\" >3.3 NTP \u65f6\u95f4\u540c\u6b65<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/blog.iyatt.com\/?p=11891\/#331_%E7%AC%AC%E4%B8%89%E6%96%B9%E5%BA%93\" >3.3.1 \u7b2c\u4e09\u65b9\u5e93<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/blog.iyatt.com\/?p=11891\/#332_%E5%AE%98%E6%96%B9_API\" >3.3.2 \u5b98\u65b9 API<\/a><\/li><\/ul><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h1><span class=\"ez-toc-section\" id=\"1_%E5%89%8D%E8%A8%80\"><\/span>1 \u524d\u8a00<span class=\"ez-toc-section-end\"><\/span><\/h1>\n<p>ESP32 \u4e70\u4e86\u5feb\u4e09\u4e2a\u6708\u4e86\uff0c\u5f53\u65f6\u7528 Arduino IDE \u914d\u7f6e\u597d\u4e86<a href=\"https:\/\/blog.iyatt.com\/?p=11021\">\u5f00\u53d1\u73af\u5883<\/a>\uff0c\u4e4b\u540e\u5c31\u5f00\u59cb\u5403\u7070\u3002\u6700\u8fd1\u60f3\u8d77\u6765\uff0c\u6253\u7b97\u505a\u4e2a\u53ef\u4ee5\u8054\u7f51\u5bf9\u65f6\u7684\u65f6\u949f\uff0c\u6240\u4ee5\u5f00\u59cb\u5b66\u4e60\u63a2\u7d22\u4e86\u3002<\/p>\n<h1><span class=\"ez-toc-section\" id=\"2_%E6%B5%8B%E8%AF%95%E7%8E%AF%E5%A2%83\"><\/span>2 \u6d4b\u8bd5\u73af\u5883<span class=\"ez-toc-section-end\"><\/span><\/h1>\n<h2><span class=\"ez-toc-section\" id=\"21_%E7%A1%AC%E4%BB%B6\"><\/span>2.1 \u786c\u4ef6<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ul>\n<li>ESP32-WROOM-32\uff08\u53ea\u652f\u6301 2.4GHz \u9891\u6bb5 WiFi\uff09<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"22_%E8%BD%AF%E4%BB%B6\"><\/span>2.2 \u8f6f\u4ef6<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ul>\n<li>Arduino IDE 2.2.1<\/li>\n<li>esp32 2.0.14\uff08\u5f00\u53d1\u677f\uff09<\/li>\n<li>NTP 1.7.0\uff08NTP \u65f6\u95f4\u540c\u6b65\uff09\uff1a<a href=\"https:\/\/github.com\/sstaub\/NTP\">https:\/\/github.com\/sstaub\/NTP<\/a><\/li>\n<\/ul>\n<h1><span class=\"ez-toc-section\" id=\"3_%E6%8E%A2%E7%B4%A2\"><\/span>3 \u63a2\u7d22<span class=\"ez-toc-section-end\"><\/span><\/h1>\n<h2><span class=\"ez-toc-section\" id=\"31_WiFi_%E8%BF%9E%E6%8E%A5\"><\/span>3.1 WiFi \u8fde\u63a5<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<pre><code class=\"language-cpp\">\/**\n * WiFi \u8fde\u63a5\u7a0b\u5e8f\n * \u542f\u52a8\u540e\u81ea\u52a8\u5c1d\u8bd5\u8fde\u63a5\u8bbe\u7f6e\u7684 WiFi\n * \u5982\u679c\u8fde\u63a5\u5931\u8d25\uff0c\u6700\u591a\u5c1d\u8bd5 20 \u6b21\n * \u8fde\u63a5\u6210\u529f\u540e\u53ef\u4ee5\u77ed\u63a5 GND \u548c D15 \u5f15\u811a\u4f7f WiFi \u8fde\u63a5\u65ad\u5f00\n *\/\n#include &lt;WiFi.h&gt;\n\nconst char* ssid = &quot;IYATT-yx_2.4GHz&quot;; \/\/ WiFi \u540d\nconst char* password = &quot;esp32test&quot;; \/\/ \u5bc6\u7801\n\nint pin = 15; \/\/ D15 \u5f15\u811a\u7528\u4e8e\u63a7\u5236\u65ad\u5f00 WiFi\nint state = false; \/\/ \u5f15\u811a\u72b6\u6001\n\nvoid setup()\n{\n    Serial.begin(115200);\n    delay(500);\n\n    pinMode(pin, INPUT_PULLUP);\n\n    Serial.println();\n    Serial.print(&quot;[WiFi] \u5c1d\u8bd5\u8fde\u63a5\u5230 &quot;);\n    Serial.println(ssid);\n\n    WiFi.begin(ssid, password);\n\n    \/\/ \u5931\u8d25\u5c1d\u8bd5\u91cd\u8fde\n    int try_delay = 1000; \/\/ \u5c1d\u8bd5\u95f4\u9694\u5ef6\u65f6\n    int number_of_tries = 20; \/\/ \u5c1d\u8bd5\u6b21\u6570\n\n    while (true)\n    {\n        \/\/ \u68c0\u67e5 WiFi \u8fde\u63a5\u72b6\u6001\n        switch(WiFi.status())\n        {\n            case WL_NO_SSID_AVAIL:\n            {\n                Serial.println(&quot;[WiFi] \u6ca1\u6709\u627e\u5230 SSID&quot;);\n                break;\n            }\n            case WL_CONNECT_FAILED:\n            {\n                Serial.print(&quot;[WiFi] \u5931\u8d25 - WiFi \u672a\u8fde\u63a5! \u539f\u56e0\uff1a&quot;);\n                return;\n            }\n            case WL_CONNECTION_LOST:\n            {\n                Serial.println(&quot;[WiFi] \u8fde\u63a5\u4e22\u5931&quot;);\n                break;\n            }\n            case WL_SCAN_COMPLETED:\n            {\n                Serial.println(&quot;[WiFi] \u626b\u63cf\u5df2\u5b8c\u6210&quot;);\n                break;\n            }\n            case WL_CONNECTED:\n            {\n                Serial.println(&quot;[WiFi] \u5df2\u8fde\u63a5\uff01&quot;);\n                Serial.print(&quot;[WiFi] IP \u5730\u5740\uff1a&quot;);\n                Serial.println(WiFi.localIP());\n                return;\n            }\n            case WL_DISCONNECTED:\n            {\n                Serial.println(&quot;[WiFi] \u8fde\u63a5\u5df2\u65ad\u5f00&quot;);\n                break;\n            }\n            default:\n            {\n                Serial.print(&quot;[WiFi] WiFi \u72b6\u6001\uff1a&quot;);\n                Serial.println(WiFi.status());\n                break;\n            }\n        }\n        delay(try_delay);\n\n        if(number_of_tries &lt;= 0)\n        {\n            Serial.print(&quot;[WiFi] \u8fde\u63a5 WiFi \u5931\u8d25\uff01&quot;);\n            WiFi.disconnect();\n            return;\n        }\n        else\n        {\n            --number_of_tries;\n        }\n    }\n}\n\nvoid loop()\n{\n    state = digitalRead(pin);\n\n    if (state == LOW)\n    {\n        Serial.println(&quot;[WiFi] \u6b63\u5728\u65ad\u5f00\u8fde\u63a5\uff01&quot;);\n        if(WiFi.disconnect(true, false))\n        {\n        Serial.println(&quot;[WiFi] \u5df2\u65ad\u5f00\u8fde\u63a5&quot;);\n        }\n        delay(1000);\n    }\n}<\/code><\/pre>\n<p><img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/11\/image-1699792179134.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 387px; --smush-placeholder-aspect-ratio: 387\/138;\" \/><\/p>\n<p><img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/11\/image-1699792194713.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 280px; --smush-placeholder-aspect-ratio: 280\/49;\" \/><\/p>\n<h2><span class=\"ez-toc-section\" id=\"32_GET_%E8%AF%B7%E6%B1%82\"><\/span>3.2 GET \u8bf7\u6c42<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u8fd9\u91cc\u65b9\u4fbf\u6d4b\u8bd5\u6211\u5c31\u4f7f\u7528\u7535\u8111\u4e0a\u7684 Python \u8fd0\u884c http \u6a21\u5757\u4f5c\u4e3a\u670d\u52a1\u5668\u7aef\uff0c\u4e0b\u9762\u662f\u4e00\u4e2a\u7b80\u6613\u7684 html \u7f51\u9875<\/p>\n<pre><code class=\"language-html\">&lt;!DOCTYPE html&gt;\n&lt;html lang=&quot;zh-CN&quot;&gt;\n&lt;head&gt;\n    &lt;meta charset=&quot;UTF-8&quot;&gt;\n    &lt;title&gt;hello&lt;\/title&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n    &lt;h1&gt;\u4f60\u597d\uff0c\u4e16\u754c\uff01&lt;\/h1&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<p>\u547d\u540d\u4fdd\u5b58\u4e3a index.html \u6587\u4ef6<\/p>\n<p>\u7136\u540e\u5728\u8fd9\u4e2a\u6587\u4ef6\u6240\u5728\u7684\u8def\u5f84\u8fd0\u884c http \u670d\u52a1\uff088080 \u7aef\u53e3\uff09<\/p>\n<pre><code class=\"language-bash\">python -m http.server 8080<\/code><\/pre>\n<p><img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/11\/image-1699799306393.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 687px; --smush-placeholder-aspect-ratio: 687\/341;\" \/><\/p>\n<p>\u540c\u4e00\u5c40\u57df\u7f51\u4e0b\u7684\u624b\u673a\u53ef\u4ee5\u8bbf\u95ee\u8fd9\u4e2a\u7f51\u9875\uff08<strong>\u7535\u8111IP:8080<\/strong> \uff09\uff0c\u670d\u52a1\u5668\u8fd9\u8fb9\u5c31\u6ca1\u5565\u95ee\u9898\u4e86<br \/>\n<img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/11\/image-1699799226995.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 360px; --smush-placeholder-aspect-ratio: 360\/172;\" \/><\/p>\n<p>\u7136\u540e\u662f ESP32 \u7684\u4ee3\u7801<\/p>\n<pre><code class=\"language-cpp\">\/**\n * GET \u8bf7\u6c42\u5b9e\u73b0\n *\/\n#include &lt;WiFi.h&gt;\n#include &lt;WiFiMulti.h&gt;\n\nWiFiMulti WiFiMulti; \/\/ \u521b\u5efa\u4e00\u4e2a\u591a WiFi \u5b9e\u4f8b\uff0c\u53ef\u4ee5\u8fde\u63a5\u591a\u4e2a WiFi\n\nvoid setup()\n{\n    Serial.begin(115200);\n    delay(10);\n\n    WiFiMulti.addAP(&quot;IYATT-yx_2.4GHz&quot;, &quot;esp32test&quot;); \/\/ \u9996\u5148\u8fde\u63a5\u5230\u4e00\u4e2a WiFi\uff0c\u5206\u522b\u662f\u540d\u5b57\u548c\u5bc6\u7801\n\n    Serial.println();\n    Serial.println();\n    Serial.print(&quot;\u7b49\u5f85 WiFi \u8fde\u63a5...... &quot;);\n\n    while(WiFiMulti.run() != WL_CONNECTED) \/\/ \u8fde\u63a5\u5931\u8d25\u65f6\u91cd\u8bd5\n    {\n        Serial.print(&quot;.&quot;);\n        delay(1000);\n    }\n\n    Serial.println(&quot;&quot;);\n    Serial.println(&quot;WiFi \u5df2\u8fde\u63a5&quot;);\n    Serial.println(&quot;IP \u5730\u5740: &quot;);\n    Serial.println(WiFi.localIP());\n\n    delay(500);\n}\n\nvoid loop()\n{\n    const char * host = &quot;192.168.1.249&quot;; \/\/  \u670d\u52a1\u5668\u5730\u5740\n    const uint16_t port = 8080; \/\/ \u670d\u52a1\u5668\u7aef\u53e3\n\n    Serial.print(&quot;\u6b63\u5728\u8fde\u63a5\u5230 &quot;);\n    Serial.println(host);\n\n    WiFiClient client; \/\/ \u7528\u4e8e\u521b\u5efa TCP \u8fde\u63a5\n\n    if (!client.connect(host, port)) \/\/ \u8fde\u63a5\u670d\u52a1\u5668\n    {\n        Serial.println(&quot;\u8fde\u63a5\u5931\u8d25\uff01&quot;);\n        Serial.println(&quot;5 \u79d2\u540e\u91cd\u8bd5......&quot;);\n        delay(5000);\n        return;\n    }\n\n    client.print(&quot;GET \/index.html HTTP\/1.1\\n\\n&quot;); \/\/ \u53d1\u9001 GET \u8bf7\u6c42\uff0c\u83b7\u53d6 index.html \u6587\u4ef6\n\n    int maxloops = 0;\n\n    \/\/ \u7b49\u5f85\u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e\n    while (!client.available() &amp;&amp; maxloops &lt; 1000)\n    {\n        ++maxloops;\n        delay(1);\n    }\n\n    if (client.available() &gt; 0) \/\/ \u5982\u679c\u6709\u6570\u636e\u8fd4\u56de\n    {\n        String response = client.readString();\n        Serial.println(&quot;\u670d\u52a1\u5668\u8fd4\u56de\u7684\u5185\u5bb9\uff1a&quot;);\n        Serial.println(response);\n    }\n    else\n    {\n        Serial.println(&quot;\u8fde\u63a5\u8d85\u65f6&quot;);\n    }\n\n    Serial.println(&quot;\u6b63\u5728\u5173\u95ed\u8fde\u63a5\u3002&quot;);\n    client.stop();\n\n    Serial.println(&quot;\u7b49\u5f85 5 \u79d2\u540e\u91cd\u8bd5......&quot;);\n    delay(5000);\n}<\/code><\/pre>\n<p>\u8fd0\u884c\u540e\u53ef\u4ee5\u770b\u5230\u4e32\u53e3\u8f93\u51fa\u4e86\u8bf7\u6c42\u5230\u7684\u5185\u5bb9<br \/>\n<img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/11\/image-1699800288952.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 437px; --smush-placeholder-aspect-ratio: 437\/434;\" \/><\/p>\n<p>Python \u8fd9\u8fb9\u4e5f\u4f1a\u663e\u793a ESP32 \u7684\u8bf7\u6c42\u8bb0\u5f55<br \/>\n<img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/11\/image-1699800351110.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 757px; --smush-placeholder-aspect-ratio: 757\/369;\" \/><\/p>\n<h2><span class=\"ez-toc-section\" id=\"33_NTP_%E6%97%B6%E9%97%B4%E5%90%8C%E6%AD%A5\"><\/span>3.3 NTP \u65f6\u95f4\u540c\u6b65<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"331_%E7%AC%AC%E4%B8%89%E6%96%B9%E5%BA%93\"><\/span>3.3.1 \u7b2c\u4e09\u65b9\u5e93<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u6e90\u7801<\/p>\n<pre><code class=\"language-cpp\">#include &lt;WiFi.h&gt;\n#include &lt;NTP.h&gt;\n\nconst char * ssid = &quot;IYATT-yx_2.4GHz&quot;;\nconst char * password = &quot;esp32test&quot;;\n\nWiFiUDP wifi_udp;\nNTP ntp(wifi_udp);\n\nvoid setup()\n{\n    const char * ntp_server = &quot;ntp.aliyun.com&quot;; \/\/ NTP \u670d\u52a1\u5668\uff0c\u9ed8\u8ba4\u7684\u611f\u89c9\u5e94\u8be5\u4e0d\u5982\u56fd\u5185\u7684\u7a33\u5b9a\n\n    Serial.begin(115200);\n    delay(100);\n\n    WiFi.begin(ssid, password);\n    while (WiFi.status() != WL_CONNECTED)\n    {\n        Serial.println(&quot;\u6b63\u5728\u5c1d\u8bd5\u8fde\u63a5 WiFi ......&quot;);\n        delay(1000);\n    }\n    Serial.println(&quot;WiFi \u5df2\u8fde\u63a5&quot;);\n\n    ntp.isDST(false); \/\/ \u7981\u6b62\u590f\u4ee4\u65f6\n    ntp.timeZone(8); \/\/ \u5317\u4eac\u65f6\u95f4\n    ntp.begin(ntp_server);\n    Serial.println(&quot;\u5f00\u59cb\u540c\u6b65\u65f6\u95f4\uff1a&quot;);\n}\n\nvoid loop()\n{\n    ntp.update();\n    Serial.println(ntp.formattedTime(&quot;%Y.%m.%d %A %T&quot;)); \/\/ \u683c\u5f0f\u5316\u89c4\u5219\u540c strftime\n    delay(1000);\n}<\/code><\/pre>\n<p><img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/11\/image-1699858072942.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 312px; --smush-placeholder-aspect-ratio: 312\/205;\" \/><\/p>\n<h3><span class=\"ez-toc-section\" id=\"332_%E5%AE%98%E6%96%B9_API\"><\/span>3.3.2 \u5b98\u65b9 API<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u524d\u9762\u63a2\u7d22 NTP \u65f6\u95f4\u540c\u6b65\u7684\u65f6\u5019\u4e0d\u77e5\u9053 ESP32 \u5185\u90e8\u6709\u7cfb\u7edf\u65f6\u95f4\uff0c\u4e5f\u4e0d\u77e5\u9053\u5b98\u65b9\u6709\u63d0\u4f9b\u65f6\u95f4\u540c\u6b65\u529f\u80fd\u3002\u672c\u6765\u7684\u8ba1\u5212\u662f ESP32 \u8fd8\u8981\u5916\u63a5\u4e00\u4e2a\u5b9e\u65f6\u65f6\u949f\u6a21\u5757\uff0c\u7ed3\u679c\u5728\u67e5\u9605\u8d44\u6599\u7684\u65f6\u5019\u53d1\u73b0\u5b98\u65b9\u6587\u6863\u8bf4\u5185\u90e8\u6709\u7cfb\u7edf\u65f6\u95f4\uff0c\u90a3\u5c31\u5927\u5927\u5730\u7b80\u5316\u4e86\u3002\u4e0d\u8fc7\u56e0\u4e3a\u6ca1\u6709\u72ec\u7acb\u7535\u6e90\u4f9b\u7535\uff0c\u4e00\u65e6\u5916\u63a5\u7535\u6e90\u65ad\u5f00\u65f6\u949f\u5c31\u4f1a\u4e22\u5931\uff0c\u800c\u5b9e\u65f6\u65f6\u949f\u6a21\u5757\u81ea\u8eab\u662f\u53ef\u4ee5\u4f7f\u7528\u5916\u90e8\u7535\u6c60\u4f9b\u7535\u7ef4\u6301\u8d70\u65f6\u3002<\/p>\n<pre><code class=\"language-cpp\">#include &lt;WiFi.h&gt;\n\nvoid setup()\n{\n    const char * ssid = &quot;IYATT-yx_2.4GHz&quot;;\n    const char * password = &quot;esp32test&quot;;\n    const char * ntp_server = &quot;ntp.aliyun.com&quot;; \/\/ NTP \u670d\u52a1\u5668\n    const int gmt_offset = 8 * 60 * 60; \/\/ UTC\/GMT+8\uff0c\u4e1c 8 \u65f6\u533a\u504f\u79fb\u91cf\uff0c\u5355\u4f4d\u79d2\n    const int daylight_offset = 0; \/\/ \u590f\u4ee4\u65f6\u504f\u79fb\u503c\uff0c\u5355\u4f4d\u79d2\n\n    Serial.begin(115200);\n    delay(1000);\n\n    \/\/ \u8bbe\u7f6e\u65f6\u533a\n    setenv(&quot;TZ&quot;, &quot;CST-8&quot;, 1); \/\/ TZ \u662f\u65f6\u533a\u73af\u5883\u53d8\u91cf\uff0cCST-8 \u662f\u4e2d\u56fd\u6807\u51c6\u65f6\u95f4\uff0c1 \u8868\u793a\u8986\u76d6\u65e7\u503c\n    tzset(); \/\/ \u4f5c\u7528\u65f6\u533a\u53d8\u91cf\n\n    \/\/ \u8fde\u63a5 WiFi\n    WiFi.begin(ssid, password);\n    while (WiFi.status() != WL_CONNECTED)\n    {\n        Serial.println(&quot;\u6b63\u5728\u5c1d\u8bd5\u8fde\u63a5 WiFi ......&quot;);\n        delay(1000);\n    }\n    Serial.println(&quot;WiFi \u5df2\u8fde\u63a5&quot;);\n    delay(1000);\n\n    \/\/ \u540c\u6b65\u65f6\u95f4\n    configTime(gmt_offset, daylight_offset, ntp_server);\n    Serial.println(&quot;\u5b8c\u6210\u65f6\u95f4\u540c\u6b65&quot;);\n    delay(2000);\n}\n\nvoid loop()\n{\n    time_t now = 0;\n    struct tm time_info;\n    char strftime_buf[64] = {&#039;\\0&#039;};\n\n    time(&amp;now);\n    localtime_r(&amp;now, &amp;time_info);\n    strftime(strftime_buf, sizeof(strftime_buf), &quot;%Y.%m.%d %A %T&quot;, &amp;time_info);\n    Serial.println(strftime_buf);\n    delay(1000);\n}<\/code><\/pre>\n<p><img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/11\/image-1699876725304.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 325px; --smush-placeholder-aspect-ratio: 325\/309;\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>1 \u524d\u8a00 ESP32 \u4e70\u4e86\u5feb\u4e09\u4e2a\u6708\u4e86\uff0c\u5f53\u65f6\u7528 Arduino IDE \u914d\u7f6e\u597d\u4e86\u5f00\u53d1\u73af\u5883\uff0c\u4e4b\u540e\u5c31\u5f00\u59cb\u5403\u7070\u3002\u6700\u8fd1\u60f3 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"zakra_page_container_layout":"customizer","zakra_page_sidebar_layout":"customizer","zakra_remove_content_margin":false,"zakra_sidebar":"customizer","zakra_transparent_header":"customizer","zakra_logo":0,"zakra_main_header_style":"default","zakra_menu_item_color":"","zakra_menu_item_hover_color":"","zakra_menu_item_active_color":"","zakra_menu_active_style":"","zakra_page_header":true,"_lmt_disableupdate":"no","_lmt_disable":"no","footnotes":""},"categories":[1,604],"tags":[],"class_list":["post-11891","post","type-post","status-publish","format-standard","hentry","category-all","category-esp32"],"modified_by":"IYATT-yx","_links":{"self":[{"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=\/wp\/v2\/posts\/11891","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=11891"}],"version-history":[{"count":0,"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=\/wp\/v2\/posts\/11891\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=11891"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=11891"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=11891"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}