{"id":678,"date":"2025-05-18T13:23:08","date_gmt":"2025-05-18T05:23:08","guid":{"rendered":"\/?p=678"},"modified":"2025-06-14T10:00:34","modified_gmt":"2025-06-14T02:00:34","slug":"esp8266%e5%ae%9e%e4%be%8b","status":"publish","type":"post","link":"\/?p=678","title":{"rendered":"ESP8266\u5b9e\u4f8b"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">arduino\u5e93\u6307\u4ee4\u96c6<\/h2>\n\n\n\n<p><a href=\"https:\/\/docs.arduino.cc\/programming\">https:\/\/docs.arduino.cc\/programming<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">HTTP\u901a\u8baf<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;ESP8266WiFi.h&gt;\n#include &lt;ESP8266WebServer.h&gt;\n#include &lt;ArduinoJson.h&gt;\n#include \"index.h\"\n#define AP_ssid   \"TaichiMaker_WIFI\" \/\/\u8fd9\u91cc\u6539\u6210\u4f60\u7684\u8bbe\u5907\u5f53\u524d\u73af\u5883\u4e0b\u63a5\u5165\u70b9\u540d\u5b57\n#define password  \"12345678\"         \/\/\u8fd9\u91cc\u6539\u6210\u4f60\u7684\u8bbe\u5907\u5f53\u524d\u73af\u5883\u4e0b\u63a5\u5165\u70b9\u5bc6\u7801\n\n#define wifi_name1 \"socket\"\n#define wifi_password1 \"f71796316\"\n\n#define pinA D0\n#define pinB D1\n\n\nbool status = false;\n\nESP8266WebServer Server(80);\/\/\u542f\u52a880\u7aef\u53e3\uff0c\u5b9e\u4f8b\u5316ESP8266WebServer\n\n\/\/\u4f20\u9012\u51fd\u6570\nvoid homepage() {\n  \/\/ \u901a\u8fc7FPSTR\u95ea\u5b58\u6587\u4ef6\u53d1\u9001\"text\/html\"\u7c7b\u578b\u7684\u6570\u636e\u5230\u7f51\u9875\n  Server.send(200,\"text\/html\",FPSTR(indexHtml));\n  Serial.print(\"\u7f51\u7ad9\u63a5\u5165\u6210\u529f\");\n\n}\n\nvoid contral(){\n  String jsonData =\"\";\n  Server.sendHeader(\"Access-Control-Allow-Origin\", \"*\");\n  String jsonStr = Server.arg(\"plain\");  \/\/ \u83b7\u53d6\u539f\u59cb JSON \u5b57\u7b26\u4e32\n  StaticJsonDocument&lt;200&gt; doc;\n  deserializeJson(doc, jsonStr);\n  \n  String cod = doc&#91;\"cod\"];      \/\/ \u63d0\u53d6\u5b57\u6bb5\n  String text = doc&#91;\"text\"];\n  \n  if(text==\"up\"){\n    jsonData = \"{\\\"status\\\":\\\"ok\\\"}\";\n    status = 0;\n\n  }\n  else{\n    jsonData = \"{\\\"status\\\":\\\"no\\\"}\";\n    status = 1;\n  }\n  Server.send(200, \"application\/json\", jsonData); \n}\n\n\n\/\/\u6309\u952e\u63a7\u5236\u706f\n\n\n\nvoid Button(){\n  if(digitalRead(pinB)==0){\n    delay(20);\n    while(digitalRead(pinB)==0);\n    delay(20);\n    status = !status;\n  }\n}\n\nvoid setup() {\n  \/\/ \u542f\u52a8\u4e32\u53e3\u901a\u8baf\n  Serial.begin(9600); \n  pinMode(pinA,OUTPUT);\n  pinMode(pinB,INPUT_PULLUP);\n  digitalWrite(pinA,LOW);\n  Serial.println();\n  \/\/\u914d\u7f6e\u63a5\u5165\u70b9\u4fe1\u606f\n  WiFi.mode(WIFI_AP_STA);\n  \/\/\u542f\u52a8\u63a5\u5165\u70b9\u6a21\u5f0f\uff0c\u5e76\u8bbe\u7f6e\u8d26\u53f7\u548c\u5bc6\u7801\n  Serial.print(\"\u8bbe\u7f6e\u63a5\u5165\u70b9\u4e2d ... \");\n  \/\/\u542f\u52a8\u6821\u9a8c\u5f0f\u7f51\u7edc\uff08\u9700\u8981\u8f93\u5165\u8d26\u53f7\u5bc6\u7801\u7684\u7f51\u7edc\uff09,\u901a\u9053\u4e3a3\uff0cwifi\u9690\u85cf\uff0c\u6700\u5927\u8fde\u63a5\u6570=4\n  WiFi.softAP(AP_ssid, password,3);\n\n  Serial.println(\"\");              \/\/ \u901a\u8fc7\u4e32\u53e3\u76d1\u89c6\u5668\u8f93\u51fa\u4fe1\u606f\n  Serial.print(\"\u5f53\u524d\u5de5\u4f5c\u6a21\u5f0f:\");     \/\/ \u544a\u77e5\u7528\u6237\u8bbe\u5907\u5f53\u524d\u5de5\u4f5c\u6a21\u5f0f\n  Serial.println(WiFi.getMode());\n  Serial.print(\"\u63a5\u5165\u70b9\u540d\u5b57:\");    \n  Serial.println(AP_ssid);         \/\/ \u544a\u77e5\u7528\u6237\u5efa\u7acb\u7684\u63a5\u5165\u70b9WiFi\u540d\n  Serial.print(\"\u63a5\u5165\u70b9\u5bc6\u7801:\");        \n  Serial.println(password);        \/\/ \u544a\u77e5\u7528\u6237\u5efa\u7acb\u7684\u63a5\u5165\u70b9WiFi\u5bc6\u7801\n\n  Serial.println(\"AP\u521b\u5efa\u5b8c\u6210\u6b63\u5728\u8fde\u63a5wifi\");\n  WiFi.begin(wifi_name1,wifi_password1);\n  while(WiFi.status() != WL_CONNECTED){\n    delay(500);\n    Serial.print(\".\");\n  }\n  Serial.print(\" \");\n  Serial.print(\"wifi\u63a5\u5165\u6210\u529f\");\n  Serial.print(WiFi.localIP());\n\n\/\/\u6bcf\u5f53\u6709\u5ba2\u6237\u7aef\u5411\u670d\u52a1\u5668\u53d1\u9001HTTP\u8bf7\u6c42\u65f6\uff0c\u6211\u4eec\u53ef\u4ee5\u5229\u7528on\u51fd\u6570\u6765\u8bbe\u7f6eHTTP\u8bf7\u6c42\u56de\u8c03\u51fd\u6570\u3002\n  Server.on(\"\/\",homepage);\n  Server.on(\"\/submit\",HTTP_POST,contral);\n  Server.begin();\n  Serial.println(\"\");\n}\n\n\nvoid loop() {\n  Button();\n  Server.handleClient();\n  digitalWrite(pinA,status);\n}<\/code><\/pre>\n\n\n\n<p>MQTT\u901a\u8baf<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;Arduino.h>\n#include &lt;ESP8266WiFi.h>\n#include &lt;PubSubClient.h>\n#include &lt;regex>\n#include &lt;exception>\n#include &lt;String>\n\/\/  wifi\u540d\u3001\u5bc6\u7801\nconst char* WifiName = \"ESP8266\";\nconst char* WifiPassword = \"12345678\";\n\n\/\/ MQTT\nconst char* MqttServer = \"175.24.227.142\";\nunsigned int MqttPort = 1883;\n\n\/\/AP  Wifi\nconst char* GetWifiName = \"socket\";\nconst char* GetWifiPassword = \"f71796316\";\n\n\/\/ \u5168\u5c40\u5b9a\u4e49\u52a8\u6001\u6570\u7ec4\u548c\u957f\u5ea6\u8bb0\u5f55\nchar* mqttPayload = nullptr;      \/\/ \u5b57\u8282\u6570\u7ec4\u6307\u9488\u8981\u4fee\u6539\u52a8\u6001\u6570\u7ec4\u53ea\u80fd\u5199nullptr\nunsigned int payloadLength = 0;   \/\/ \u5b58\u50a8\u5b9e\u9645\u6570\u636e\u957f\u5ea6\nuint16_t flag = 0; \/\/\u56de\u8c03\u51fd\u6570\u6807\u5fd7\u4f4d\nint rgbValues&#91;3] = {0, 0, 0}; \/\/ \u521d\u59cb\u5316\u4e3a {R, G, B}\n\nconst int pwmPinR = D0;  \/\/ GPIO14\nconst int pwmPinG = D1;  \/\/ GPIO14\nconst int pwmPinB = D2;  \/\/ GPIO14\nint pwmValue = 0;\n\n\nWiFiClient espClient;\nPubSubClient client(espClient);\n\n\/\/\u63d0\u53d6\u6570\u5b57\nvoid GetNumber(void){\n  uint32_t i=0;\n  std::string text = mqttPayload;\n  std::regex pattern(\"\\\\d+\");\n  std::smatch matches;\n  \/\/regex_search\u6267\u884c\u4e00\u904d\u4f1a\u7528\u6b63\u5219\u627e\u5230\u4e00\u4e2a\u6570\u76f4\u8fbe\u627e\u4e0d\u5230\u4e3a\u6b62\uff0c\u627e\u5230\u7684\u6570\u4f1a\u5b58\u5165matches\u4e2d\n  while(std::regex_search(text,matches,pattern)){\n    Serial.println();\n    rgbValues&#91;i] =std::stoi(matches&#91;0].str().c_str());\n    \/\/suffix()\u4f1a\u83b7\u53d6\u5339\u914d\u540e\u5269\u4f59\u90e8\u5206\u518d\u6b21\u8fdb\u5165\u5faa\u73af\n    text = matches.suffix().str();\n    i++;\n  }\n  Serial.print(rgbValues&#91;0]);\n  Serial.print(\"-\");\n  Serial.print(rgbValues&#91;1]);\n  Serial.print(\"-\");\n  Serial.print(rgbValues&#91;2]);\n}\n\n\n\/\/\u901a\u8fc7MQtt\u5b9e\u73b0RGB\nvoid RGBInit(void){\n  GetNumber();\n  analogWrite(pwmPinR, 255-rgbValues&#91;0]);\n  analogWrite(pwmPinG, 255-rgbValues&#91;1]);\n  analogWrite(pwmPinB, 255-rgbValues&#91;2]);\n}\n\n\/\/\u56de\u8c03\u51fd\u6570\nvoid callback(char* topic, byte* payload, unsigned int length) {\n    \/\/ \u91ca\u653e\u65e7\u5185\u5b58\uff08\u907f\u514d\u5185\u5b58\u6cc4\u6f0f\uff09\n  delete&#91;] mqttPayload;\n    \/\/ \u52a8\u6001\u5206\u914d\u65b0\u5185\u5b58\n  mqttPayload = new char&#91;length];  \/\/ \u521b\u5efa\u7cbe\u786e\u957f\u5ea6\u7684\u6570\u7ec4&#91;6,8](@ref)\n\n  for (unsigned int i = 0; i &lt; length; i++) {\n    Serial.print((char)payload&#91;i]);\n    mqttPayload&#91;i] = payload&#91;i];\n  }\n  payloadLength = length;\n  Serial.println();\n  \/\/\u7f6e\u6807\u5fd7\u4f4d\u63d0\u9192\u6536\u5230\u6570\u636e\u8fdb\u5165GetNumber\u51fd\u6570\n  flag = 1;\n}\n\n\n\/\/MQTT\u521d\u59cb\u5316\nvoid MQTTInit(){\n  client.setServer(MqttServer, MqttPort);\n  client.setCallback(callback);\n}\n\n\/\/WIFI\u521d\u59cb\u5316\nvoid WifiInit(){\n  WiFi.mode(WIFI_AP_STA);\n  WiFi.softAP(WifiName,WifiPassword,3);\n  Serial.println(\" \");\n  Serial.println(\"Wifi\u540d\u5b57: \"+String(WifiName));\n  Serial.println(\"Wifi\u540d\u5b57: \"+String(WifiPassword));\n\n  WiFi.begin(GetWifiName,GetWifiPassword);\n  while(WiFi.status()!=WL_CONNECTED){\n    delay(500);\n    Serial.print(\".\");\n  }\n  Serial.println(\" \");\n  Serial.println(\"\u8fde\u63a5\u6210\u529f\");\n  Serial.println(WiFi.localIP());\n}\n\nvoid reconnect(){\n  \/\/ Loop until we're reconnected\n  while (!client.connected()) {\n    Serial.print(\"Attempting MQTT connection...\");\n    \/\/ Create a random client ID\n    String clientId = \"ESP8266Client-\";\n    clientId += String(random(0xffff), HEX);\n    \/\/ Attempt to connect\n    if (client.connect(clientId.c_str())) {\n      Serial.println(\"connected\");\n      \/\/ Once connected, publish an announcement...\n      client.publish(\"outTopic\", \"hello world\");\n      \/\/ ... and resubscribe\n      client.subscribe(\"inTopic\");\n    } else {\n      Serial.print(\"failed, rc=\");\n      Serial.print(client.state());\n      Serial.println(\" try again in 5 seconds\");\n      \/\/ Wait 5 seconds before retrying\n      delay(5000);\n    }\n  }\n}\n\n\n\nvoid setup() {\n  Serial.begin(115200);\n  pinMode(pwmPinR,OUTPUT);\n  pinMode(pwmPinG, OUTPUT);\n  pinMode(pwmPinB, OUTPUT);\n\n  WifiInit();\n  MQTTInit();\n}\n\nvoid loop() {\n  if (!client.connected()) {\n    reconnect();\n  }\n  client.loop();\n  if(flag==1){\n      RGBInit();\n      flag = 0;\n  }\n\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>arduino\u5e93\u6307\u4ee4\u96c6 https:\/\/docs.arduino.cc\/programming HTTP\u901a\u8baf  [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[33],"tags":[],"class_list":["post-678","post","type-post","status-publish","format-standard","hentry","category-esp8266"],"_links":{"self":[{"href":"\/index.php?rest_route=\/wp\/v2\/posts\/678"}],"collection":[{"href":"\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=678"}],"version-history":[{"count":5,"href":"\/index.php?rest_route=\/wp\/v2\/posts\/678\/revisions"}],"predecessor-version":[{"id":702,"href":"\/index.php?rest_route=\/wp\/v2\/posts\/678\/revisions\/702"}],"wp:attachment":[{"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=678"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=678"},{"taxonomy":"post_tag","embeddable":true,"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=678"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}