{"id":2973,"date":"2022-05-12T15:27:15","date_gmt":"2022-05-12T07:27:15","guid":{"rendered":"https:\/\/www.block.tw\/blog\/?p=2973"},"modified":"2022-12-20T18:49:18","modified_gmt":"2022-12-20T10:49:18","slug":"esp-12f-ircontrolbyphone","status":"publish","type":"post","link":"https:\/\/www.block.tw\/blog\/esp-12f-ircontrolbyphone\/","title":{"rendered":"ESP-12F \u624b\u6a5f\u96f2\u7aef\u7d05\u5916\u7dda\u63a7\u5236"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">\u8a2d\u5099\u8207\u6750\u6599<\/h2>\n\n\n\n<p>\u500b\u4eba\u96fb\u8166 \u00d7 1<br>\u624b\u6a5f\u00d7 1<br>ESP12F \u00d7 1<br>\u9eb5\u5305\u677f \u00d7 1<br>\u7d05\u5916\u7dda\u767c\u5c04\u5668 \u6a21\u7d44  \u00d7 1<br>\u96fb\u6676\u9ad4 \u00d7 1<br>\u96fb\u963b 22\u03a9\u00d7 1<br>\u96fb\u963b 100\u03a9\u00d7 1<br>\u9023\u63a5\u7dda \u82e5\u5e72<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u5be6\u9ad4\u63a5\u7dda\u5716<\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/www.block.tw\/blog\/wp-content\/uploads\/arduino\/esp12fIRcontrol\/esp12fIRcontrolbyphone.svg\" alt=\"\"\/><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\"><br>PWM \u76f8\u95dc\u51fd\u5f0f<\/h2>\n\n\n\n<p><span style=\"color: #cf2e2e;\" class=\"stk-highlight\">PWM\u53ef\u7528\u63a5\u8173\uff1a<\/span>ESP-12F \u53ef\u4ee5PWM\u8f38\u51fa\u7684\u63a5\u8173 <span style=\"color: #0693e3;\" class=\"stk-highlight\">D2<\/span>(GPIO 4)\u3001<span style=\"color: #0693e3;\" class=\"stk-highlight\">D5<\/span>(GPIO 14)\u3001<span style=\"color: #0693e3;\" class=\"stk-highlight\">D6<\/span>(GPIO 12)\u3001 <span style=\"color: #0693e3;\" class=\"stk-highlight\">D8<\/span>(GPIO 15) <br><br><strong><span style=\"color: #cf2e2e;\" class=\"stk-highlight\">analogWriteFreq(new_frequency)\uff1a<\/span>\u6539\u8b8a PWM \u983b\u7387\uff0c\u9891\u7387\u7bc4\u570d100Hz-40KHz<\/strong><br>      \u4f8b\uff1aanalogWriteFreq(38000);       \/\/\u8a2d\u5b9a PWM \u983b\u7387 38kHz \u5f9e\u793a\u6ce2\u5668\u6e2c\u91cf\u7d0438.4kHz<br><br><strong><span style=\"color: #cf2e2e;\" class=\"stk-highlight\">analogWrite(pin,val)<\/span><\/strong><span style=\"color: #cf2e2e;\" class=\"stk-highlight\">\uff1a&nbsp;<\/span>pin\u63a5\u8173PWM\u8f38\u51fa\uff0c\u5de5\u4f5c\u9031\u671f val\/255 <br>      \u4f8b\uff1aanalogWrite(D6,127);           \/\/D6\u63a5\u8173 PWM\u8f38\u51fa \u5de5\u4f5c\u9031\u671f 127\/255<br><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u624b\u6a5f\u8a2d\u5b9a<\/h2>\n\n\n\n<p>\u9019\u500b\u5c08\u984c\u662f\u624b\u6a5f\u7528 MQTT\u5354\u5b9a\u4f86\u63a7\u5236 ESP-12F\uff0c\u5fc5\u9700\u6709\u624b\u6a5f\u7aef\u7684\u7a0b\u5f0f\uff0c \u53ef\u4ee5\u5148\u53c3\u8003 <a href=\"https:\/\/www.block.tw\/blog\/esp12f-iot-plug-mqtt\/\">ESP12F \u7db2\u8def\u667a\u6167\u958b\u95dc(MQTT)<\/a> \u4e2d\u7684\u624b\u6a5f\u8a2d\u5b9a\uff0c\u4e0b\u8f09\u5b89\u88dd\u7a0b\u5f0f\u4e26\u958b\u555f\uff0c\u5de6\u4e0a\u529f\u80fd\u9078\u55ae\u53ef\u4ee5\u9032\u5165MQTT connections \u9023\u7dda\u8a2d\u5b9a\u3002\u6309 <span style=\"color: #0693e3;\" class=\"stk-highlight\">+<\/span> \u53ef\u4ee5\u65b0\u589e\u63a7\u5236\u9762\u677f\uff0c\u8f38\u5165<span style=\"color: #0693e3;\" class=\"stk-highlight\"> Name<\/span>(\u540d\u7a31) \u53ca <span style=\"color: #0693e3;\" class=\"stk-highlight\">Description<\/span>(\u63cf\u8ff0) \u6309\u5de6\u4e0a\u65b9 <span style=\"color: #0693e3;\" class=\"stk-highlight\">\u2713<\/span> \u5c31\u53ef\u4ee5\u65b0\u589e\u6211\u5011\u7684\u63a7\u5236\u9762\u677f\u3002<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/www.block.tw\/blog\/wp-content\/uploads\/arduino\/esp12fIRcontrol\/phonemqtt1.jpg\" alt=\"\"\/><\/figure>\n<\/div>\n\n\n<p>\u9ede\u9032\u53bb\uff0c\u6309 <span style=\"color: #0693e3;\" class=\"stk-highlight\">+<\/span> \u5c31\u53ef\u4ee5\u65b0\u589e\u63a7\u5236\u5143\u4ef6\u4e86(\u5982\u4e0b\u5de6\u5716)\uff0c\u9078\u64c7 \u201c<span style=\"color: #0693e3;\" class=\"stk-highlight\">Button<\/span>\u201d \u5f62\u5f0f\u7684\u63a7\u5236\u5143\u4ef6\uff0c\u8f38\u5165 <span style=\"color: #0693e3;\" class=\"stk-highlight\">Nam<\/span>e \u4e26\u958b\u555f MQTT enable\u3002<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/www.block.tw\/blog\/wp-content\/uploads\/arduino\/esp12fIRcontrol\/phonemqtt2.jpg\" alt=\"\"\/><\/figure>\n<\/div>\n\n\n<p>\u9078\u64c7\u8981\u9023\u7dda\u5230\u4e4b\u524d\u8a2d\u5b9a\u7684\u90a3\u500b\u4f3a\u670d\u5668\uff0c\u5728 \u201c<span style=\"color: #0693e3;\" class=\"stk-highlight\">Topic for publish<\/span>\u201d \u8f38\u5165\u4f60\u5728 ESP12F \u7a0b\u5f0f\u5167\u8a02\u95b1\u7684\u4e3b\u984c(a1b2c3d4e5f6\/IRControl\/set)\uff0c\u5982\u679c\u7a0b\u5f0f\u6709\u8b8a\u52d5\uff0c\u9019\u88e1\u4e5f\u8981\u8b8a\u52d5\u3002\u6309 &#8220;<span style=\"color: #0693e3;\" class=\"stk-highlight\">Button<\/span>&#8221;  \u5728 &#8220;<span style=\"color: #0693e3;\" class=\"stk-highlight\">Payload<\/span>&#8221; \u6b04\u4f4d\u8f38\u5165 P\uff0c\u8868\u793a\u9019\u500b\u6309\u9019\u500b\u6309\u9215\uff0c\u7a0b\u5f0f\u6703\u767c\u4f48 &#8220;P&#8221; \u9019\u500b\u5167\u5bb9\u5230 a1b2c3d4e5f6\/IRControl\/set \u9019\u500b\u4e3b\u984c\u5167\u3002\u6309&#8221;<span style=\"color: #0693e3;\" class=\"stk-highlight\">Icon<\/span>&#8220;\u53ef\u4ee5\u66f4\u6539Icon\u5716\u6a23\uff0c\u6309\u5de6\u4e0a\u65b9 <span style=\"color: #0693e3;\" class=\"stk-highlight\">\u2713 <\/span>\u5c31\u53ef\u4ee5\u65b0\u589e\u6211\u5011\u7684\u63a7\u5236\u5143\u4ef6\u3002\u4f60\u81ea\u5df1\u8981\u518d\u65b0\u589e &#8220;\u9396\u5b9a&#8221;\u3001&#8221;\u9ed1\u87a2\u5e55&#8221;\u7b49\u6309\u9215\u3002\u8a18\u5f97 &#8220;<span style=\"color: #0693e3;\" class=\"stk-highlight\">Button<\/span>&#8221;  \u7684 &#8220;<span style=\"color: #0693e3;\" class=\"stk-highlight\">Payload<\/span>&#8221; \u6b04\u4f4d\u5206\u5225\u662f F \u8207 M\u3002(\u6309\u53f3\u4e0a\u96d9\u6846ICON \u53ef\u4ee5\u8abf\u6574\u4f4d\u7f6e)<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/www.block.tw\/blog\/wp-content\/uploads\/arduino\/esp12fIRcontrol\/phonemqtt3.jpg\" alt=\"\"\/><\/figure>\n<\/div>\n\n\n<p>\u8a2d\u5b9a\u597d\uff0c\u5c31\u53ef\u4ee5\u7528\u624b\u6a5f\u9060\u7aef\u9059\u63a7\u6295\u5f71\u6a5f\u4e86\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u7bc4\u4f8b\u7a0b\u5f0f<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>\/*\n *  \u624b\u6a5f\u96f2\u7aef\u7d05\u5916\u7dda\u63a7\u5236\n *  \u958b\u767c\u5de5\u5177 Arduino IDE \u5fc5\u9700\u81ea\u884c\u52a0\u5165ESP12F \u958b\u767c\u677f\n *  \u958b\u767c\u677f ESP12F(ESP8266)   \n *  \u4f7f\u7528\u901a\u8a0a\u5354\u5b9a MQTT \uff0cMQTT broker \u4f7f\u7528 mqtt.eclipseprojects.io\n *  \u7a0b\u5f0f\u6703\u8a02\u95b1 subTopic \u8a2d\u5b9a\u7684\u4e3b\u984c\uff0c\u53ea\u8981\u6709\u5c0d\u6b64\u4e3b\u984c\u767c\u4f48\u5167\u5bb9P \u5c31\u767c\u5c04 \u96fb\u6e90\u7684\u7d05\u5916\u7dda\u63a7\u5236\u78bc \n *  F \u5c31\u767c\u5c04 \u87a2\u5e55\u9396\u5b9a\u7684\u7d05\u5916\u7dda\u63a7\u5236\u78bc\uff0cM \u5c31\u767c\u5c04\u9ed1\u87a2\u5e55\u7684\u7d05\u5916\u7dda\u63a7\u5236\u78bc \n *  \u7a0b\u5f0f\u6bcf1\u79d2\u6703\u767c\u4f48 1 \u5230 pubTopic \u8a2d\u5b9a\u7684\u4e3b\u984c\uff0c\u53ef\u4ee5\u7528\u6b64\u5224\u65b7\u8a2d\u5099\u662f\u4e0d\u662f\u5728\u7dda\u4e0a\n *  https:\/\/www.block.tw\/blog\n *\/\n\n\/\/ \u5f15\u7528 Wifi AP \u7a0b\u5f0f\u5eab(\u9023\u4e0awifi\u7121\u7ddaAP\u7528)\n#include &lt;ESP8266WiFi.h>\n#include &lt;ESP8266WiFiMulti.h>\n\/\/ \u5f15\u7528 Wifi  \u7a0b\u5f0f\u5eab(\u9023\u4e0a\u7db2\u969b\u7db2\u8def\u7528)\n#include &lt;WiFiClient.h>\n\n\/\/\u5f15\u7528 MQTT \u7a0b\u5f0f\u5eab \u9700\u8981\u81ea\u884c\u5b89\u88dd\u7a0b\u5f0f\u5eab https:\/\/github.com\/knolleary\/pubsubclient\n#include &lt;PubSubClient.h>\n\n\/\/\u5ba3\u544a wifi AP\u7db2\u8def \u9023\u7dda\u7269\u4ef6\nESP8266WiFiMulti wifiMulti;\n\n\/\/\u5ba3\u544a wifi \u7db2\u8def\u9023\u7dda\u7269\u4ef6\nWiFiClient espClient;\n\n\/\/\u5ba3\u544a MQTT \u9023\u7dda\u7269\u4ef6\nPubSubClient client(espClient);\n\n#define   IR_send_pin   D6 \n\n\/\/\u7d05\u5916\u7dda\u767c\u5c04 NEC \u683c\u5f0f\u53c3\u6578\n#define   NEC_START_MARK  9000\n#define   NEC_START_SPACE 4500\n#define   NEC_ONE_MARK    550\n#define   NEC_ONE_SPACE   1550\n#define   NEC_ZERO_MARK   550\n#define   NEC_ZERO_SPACE  600\n#define   NEC_END_MARK    600\n#define   NEC_END_SPACE   30000\n\n\n\n\/\/WIFI SSID \u8ddf\u5bc6\u78bc\n#define   APSSID  \"\u4f60\u7684wifi SSID\"\n#define   APPW    \"wifi \u5bc6\u78bc\"\n\n\/\/ MQTT mqtt.eclipseprojects.io \u4f3a\u670d\u5668 \u4e0d\u9700\u8981\u4f7f\u7528\u8005\u540d\u7a31 \u5bc6\u78bc\n\/\/ MQTT test.mosquitto.org \u4f3a\u670d\u5668 \u4e0d\u9700\u8981\u4f7f\u7528\u8005\u540d\u7a31 \u5bc6\u78bc\n\/\/ \u6240\u4ee5\u6bcf\u500b\u4eba\u90fd\u80fd\u7528\uff0c\u5982\u679c\u6709\u4eba\u8ddf\u4f60\u6709\u76f8\u540c\u7684\u4e3b\u984c(topic)\u5c31\u80fd\u63a7\u5236\u4f60\u7684\u8a2d\u5099\nconst char* brokerUser  = \"\";  \/\/\u4f7f\u7528\u8005\u540d\u7a31\nconst char* brokerPass  = \"\";  \/\/\u4f7f\u7528\u8005\u5bc6\u78bc\n\/\/const char* broker      = \"test.mosquitto.org\";\nconst char* broker      = \"mqtt.eclipseprojects.io\";\nconst char* pubTopic    = \"a1b2c3d4e5f6\/IRControl\/state\";\nconst char* subTopic    = \"a1b2c3d4e5f6\/IRControl\/set\";\nbyte        state       = 0;\nchar        msg&#91;10]     ;\nlong        currentTime, lastTime;\n\nunsigned char POWER&#91;] = {0x83, 0x55, 0x90, 0x6F };\nunsigned char FREEZE&#91;] = {0x83, 0x55, 0x92, 0x6D };\nunsigned char MUTE&#91;] = {0x83, 0x55, 0x93, 0x6C };\n\n\nvoid setup()\n{\n  pinMode(IR_send_pin,OUTPUT);      \/\/\u8a2d\u5b9a PWM\u63a5\u8173\u70ba\u8f38\u51fa\n  analogWriteFreq(38000);       \/\/\u8a2d\u5b9aPWM\u983b\u7387 38kHz\n  pinMode(LED_BUILTIN, OUTPUT);\n  \/\/\u5167\u5efa\u677f\u4e0a LED \u6ec5\n  digitalWrite(LED_BUILTIN, HIGH);\n  Serial.begin(115200);\n  setupWiFi();\n  client.setServer(broker, 1883);\n  client.setCallback(callback);\n}\n\nvoid loop()\n{\n  if (!client.connected())\n  {\n    \/\/\u9023\u63a5 MQTT \u4f3a\u670d\u5668\n    MQTTconnect();\n  }\n  client.loop();\n  currentTime = millis();\n  \n  \/\/1\u79d2\u767c\u4e00\u6b21\u8a0a\u606f\n  if(currentTime - lastTime > 1000)\n  {\n    Serial.print(\"Sending messages:\\t\");        \n    dtostrf(state, 1, 0, msg);             \/\/byte \u8f49 char *\n    Serial.println(msg);\n    client.publish(pubTopic,msg);          \/\/\u767c\u4f48\n    lastTime = millis();\n    \n  }\n   \n}\n\n\/\/\u8a02\u95b1\u7684\u4e3b\u984c\u6709\u4eba\u767c\u4f48\u8a0a\u606f\u6642\u7684\u8655\u7406\u51fd\u5f0f\nvoid callback(char* topic, byte* payload, unsigned int len)\n{\n  Serial.print(\"Received messages: \");\n  Serial.println(subTopic);\n  for (unsigned int i = 0; i &lt; len; i++)\n  {\n    Serial.print((char) payload&#91;i]);\n\n    if (len == 1 &amp;&amp; payload&#91;0] == 'P'){\n      \/\/\u767c\u5c04\u96fb\u6e90\u63a7\u5236\u78bc\n      state=1;      \n      NECsend(POWER, 4);      \n      dtostrf(state, 1, 0, msg);    \n      client.publish(pubTopic,msg);\n    }else if (len == 1 &amp;&amp; payload&#91;0] == 'F'){\n      \/\/\u767c\u5c04\u87a2\u5e55\u9396\u5b9a\u63a7\u5236\u78bc        \n      state=1;\n      NECsend(FREEZE, 4);            \n      dtostrf(state, 1, 0, msg);    \n      client.publish(pubTopic,msg);\n    }else if (len == 1 &amp;&amp; payload&#91;0] == 'M'){\n      \/\/\u767c\u5c04\u9ed1\u87a2\u5e55\u63a7\u5236\u78bc        \n      state=1;\n      NECsend(MUTE, 4);\n      dtostrf(state, 1, 0, msg);    \n      client.publish(pubTopic,msg);\n      \n    }\n    \n  }\n  Serial.println();\n}\n\n\/\/\u9023\u63a5\u7121\u7dda wifi \u7684\u8655\u7406\u51fd\u5f0f\nvoid setupWiFi()\n{\n  delay(100);\n\n  \/\/\u9023\u63a5\u7121\u7dda wifi \u53ef\u4ee5\u8a2d\u5b9a\u5f88\u591a\u7d44\n  wifiMulti.addAP(APSSID, APPW);\n  wifiMulti.addAP(\"\u7b2c2\u7d44wifi SSID\",\"\u5bc6\u78bc\");\n\n  Serial.println(\"Wifi Connecting ...\");\n\n  \/\/\u5167\u5efa\u677f\u4e0a LED \u4eae\n  digitalWrite(LED_BUILTIN, LOW);\n\n  while (wifiMulti.run() != WL_CONNECTED)\n  {\n    delay(250);\n    Serial.print('.');\n  }\n\n  \/\/\u5167\u5efa\u677f\u4e0a LED \u6ec5\n  digitalWrite(LED_BUILTIN, HIGH);\n\n  Serial.println('\\n');\n  Serial.print(\"Connected to:\\t\");\n  Serial.println(WiFi.SSID());\n\n  Serial.print(\"IP address:\\t\");\n  Serial.println(WiFi.localIP());\n}\n\n\nvoid MQTTconnect()\n{\n  while (!client.connected())\n  {\n    \/\/\u9023\u63a5 MQTT \u4f3a\u670d\u5668\uff0c\u56e0\u70ba\u662f\u514d\u8cbb\u7121\u4f7f\u7528\u5e33\u865f\u8ddf\u5bc6\u78bc\uff0c\u6240\u4ee5\u5e95\u4e0b\u96a8\u4fbf\u8f38\u5165\u7684\n    if (client.connect(\"MQTT_CLIENT_ID\", \"brokerUser\", \"brokerPass\")) {\n      Serial.print(\"\\nConnected to \");\n      Serial.println(broker);\n      \/\/\u8a02\u95b1\u4e3b\u984c\n      client.subscribe(subTopic);\n    } else {\n      Serial.println(\"Connecting\");\n      delay(2500);\n    }\n  }\n}\n\n\/\/NEC \u683c\u5f0f\u7684\u767c\u5c04\u51fd\u5f0f\nvoid NECsend(unsigned char buf&#91;], int len) {\n  byte data;\n  \/\/\u555f\u59cb\u4f4d\u5143\n  mark(NEC_START_MARK);\n  space(NEC_START_SPACE);\n  \/\/\u8cc7\u6599\u4f4d\u5143\n  for (byte i = 0; i &lt; len; i++) {\n    data = buf&#91;i];\n    \/\/\u4e26\u5217\u8f49\u4e32\u5217\n    for (byte j = 0; j &lt; 8; j++) {\n      if ((1 &lt;&lt; j &amp; data)) {\n        mark(NEC_ONE_MARK);        \n        space(NEC_ONE_SPACE);\n      } else {        \n        mark(NEC_ZERO_MARK);\n        space(NEC_ZERO_SPACE);\n      }\n    }\n  }\n  \/\/\u7d50\u675f\u4f4d\u5143\n  mark(NEC_END_MARK);\n  space(NEC_END_SPACE);\n}\n\n\/\/\u7d05\u5916\u7dda\u63a5\u8173\u8f38\u51fa38kHz\u65b9\u6ce2 time us\nvoid mark(int time) {\n  unsigned long beginTime = micros();\n  unsigned long endTime = (unsigned long)time;\n  unsigned long nowTime = micros();\n  analogWrite(IR_send_pin,127);\n  while (nowTime - beginTime &lt; endTime) {\n    nowTime = micros();             \n  }\n  analogWrite(IR_send_pin,0);\n}\n\n\/\/\u7d05\u5916\u7dda\u63a5\u8173\u4f4e\u96fb\u4f4d time us\nvoid space(int time) {  \n  unsigned long beginTime = micros();           \n  unsigned long endTime = (unsigned long)time;\n  unsigned long nowTime = micros();             \n  while (nowTime - beginTime &lt; endTime) {\n    nowTime = micros();                         \n  }\n}    \n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<section id=\"section-4f82d2d6-e601-43bc-aa9f-8b7f0edaa8e7\" class=\"wp-block-gutentor-tabs gutentor-section gutentor-tabs-wrapper tabs-template1 has-color-bg has-custom-bg tab-horizontal\"><div class=\"grid-container gutentor-rm-ct-space-d gutentor-rm-ct-space-t gutentor-rm-ct-space\"><div class=\"gutentor-tabs-container gutentor-grid-item-wrap\"><div class=\"gutentor-tabs tablist-left\"><span class=\"gutentor-tabs-list gutentor-single-item-0 gutentor-tab-active\" data-index=\"gutentor-single-item-0\"><div class=\"gutentor-single-item-tabs gutentor-single-item\">\u5165\u9580<\/div><\/span><span class=\"gutentor-tabs-list gutentor-single-item-1\" data-index=\"gutentor-single-item-1\"><div class=\"gutentor-single-item-tabs gutentor-single-item\">\u77e5\u8b58<\/div><\/span><span class=\"gutentor-tabs-list gutentor-single-item-2\" data-index=\"gutentor-single-item-2\"><div class=\"gutentor-single-item-tabs gutentor-single-item\">\u8a9e\u6cd5<\/div><\/span><span class=\"gutentor-tabs-list gutentor-single-item-3\" data-index=\"gutentor-single-item-3\"><div class=\"gutentor-single-item-tabs gutentor-single-item\">\u6d41\u7a0b<\/div><\/span><span class=\"gutentor-tabs-list gutentor-single-item-4\" data-index=\"gutentor-single-item-4\"><div class=\"gutentor-single-item-tabs gutentor-single-item\">\u51fd\u5f0f<\/div><\/span><span class=\"gutentor-tabs-list gutentor-single-item-5\" data-index=\"gutentor-single-item-5\"><div class=\"gutentor-single-item-tabs gutentor-single-item\">\u5be6\u7fd2<\/div><\/span><\/div><div class=\"gutentor-tabs-content-wrap text-left\"><div class=\"gutentor-single-item gutentor-tabs-content gutentor-single-item-0 gutentor-tab-content-active\"><div class=\"gutentor-single-item-tabs gutentor-single-item\"><div class=\"gutentor-single-item-content\"><p><a href=\"https:\/\/www.block.tw\/blog\/arduinoinfo\/\">Arduino \u7c21\u4ecb<\/a><br><a href=\"https:\/\/www.block.tw\/blog\/arduinoide\/\">\u6e96\u5099\u4f60\u7684 Arduino \u958b\u767c\u5de5\u5177<\/a><br><a href=\"https:\/\/www.block.tw\/blog\/start_esp-12ef\/\">\u6e96\u5099\u4f60\u7684 ESP12E\/F \u958b\u767c\u5de5\u5177<\/a><br><a href=\"https:\/\/www.block.tw\/blog\/arduino-uno-hardware\/\">Arduino Uno \u786c\u9ad4<\/a><br><a href=\"https:\/\/www.block.tw\/blog\/arduino-nano-pin\/\">Arduino nano \u786c\u9ad4<\/a><br><a href=\"https:\/\/www.block.tw\/blog\/esp-12fesp8266hardware\/\">ESP-12F(ESP8266)\u786c\u9ad4<\/a><br><a href=\"https:\/\/www.block.tw\/blog\/arduino-structure\/\">Arduino \u7a0b\u5f0f\u8a9e\u6cd5<\/a><br><a href=\"https:\/\/www.block.tw\/blog\/arduino-lib-zip\">\u532f\u5165 zip \u7a0b\u5f0f\u5eab<\/a> <br><\/p><\/div><\/div><\/div><div class=\"gutentor-single-item gutentor-tabs-content gutentor-single-item-1\"><div class=\"gutentor-single-item-tabs gutentor-single-item\"><div class=\"gutentor-single-item-content\"><p><a href=\"https:\/\/www.block.tw\/blog\/camel-case\/\">\u99dd\u5cf0\u5f0f\u547d\u540d\u6cd5<\/a><br><a href=\"https:\/\/www.block.tw\/blog\/uart\/\">UART \u4e32\u5217\u901a\u8a0a<\/a> <br><a href=\"https:\/\/www.block.tw\/blog\/arduino-pwm-control\/\">PWM\u63a7\u5236<\/a><br><a href=\"https:\/\/www.block.tw\/blog\/scankeyboard\/\">\u9375\u76e4\u6383\u63cf<\/a><br><a href=\"https:\/\/www.block.tw\/blog\/thingspeak_account\/\">ThingSpeak \u96f2\u7aef\u8cc7\u6599\u5eab \u5e33\u865f\u7533\u8acb<\/a><br><a href=\"https:\/\/www.block.tw\/blog\/thingspeak_setup\/\">ThingSpeak \u96f2\u7aef\u8cc7\u6599\u5eab \u8a2d\u5b9a<\/a><\/p><\/div><\/div><\/div><div class=\"gutentor-single-item gutentor-tabs-content gutentor-single-item-2\"><div class=\"gutentor-single-item-tabs gutentor-single-item\"><div class=\"gutentor-single-item-content\"><p><a href=\"https:\/\/www.block.tw\/blog\/arduino-decimal\" data-type=\"URL\" data-id=\"https:\/\/www.block.tw\/blog\/arduino-decimal\">Arduino \u9032\u5236\u8868\u793a<\/a><br><a href=\"https:\/\/www.block.tw\/blog\/arduino-array\/\">Arduino \u9663\u5217<\/a><br><a href=\"https:\/\/www.block.tw\/blog\/arduino-variable\/\">Arduino \u5e38\u6578\u8207\u8b8a\u6578<\/a><br><br><a href=\"https:\/\/www.block.tw\/blog\/arduino-arithmetic\/\">Arduino \u7b97\u6578\u904b\u7b97\u5b50<\/a><br><a href=\"https:\/\/www.block.tw\/blog\/arduino-compound-operator\/\">Arduino \u8907\u5408\u904b\u7b97\u5b50<\/a><br><a href=\"https:\/\/www.block.tw\/blog\/arduino-boolean\/\">Arduino \u5e03\u6797\u904b\u7b97\u5b50<\/a><br><a href=\"https:\/\/www.block.tw\/blog\/arduino-compare\/\">Arduino \u6bd4\u8f03\u904b\u7b97\u5b50<\/a><br><br><a href=\"https:\/\/www.block.tw\/blog\/arduino-ide-error\">Arduino IDE \u932f\u8aa4\u8a0a\u606f<\/a><\/p><\/div><\/div><\/div><div class=\"gutentor-single-item gutentor-tabs-content gutentor-single-item-3\"><div class=\"gutentor-single-item-tabs gutentor-single-item\"><div class=\"gutentor-single-item-content\"><p><a href=\"https:\/\/www.block.tw\/blog\/arduino-for\/\">Arduino for \u8ff4\u5708<\/a><br><a href=\"https:\/\/www.block.tw\/blog\/arduino-if\/\">Arduino if \u689d\u4ef6\u5224\u65b7<\/a><br><a href=\"https:\/\/www.block.tw\/blog\/arduino-switch\/\" data-type=\"URL\" data-id=\"https:\/\/www.block.tw\/blog\/arduino-switch\/\">Arduino switch \u9078\u64c7\u6307\u4ee4<\/a><br><a href=\"https:\/\/www.block.tw\/blog\/arduino-while\/\" data-type=\"URL\" data-id=\"https:\/\/www.block.tw\/blog\/arduino-while\/\">Arduino while \u8ff4\u5708<\/a><br><a href=\"https:\/\/www.block.tw\/blog\/arduino-do-while\">Arduino do while \u8ff4\u5708<\/a><\/p><\/div><\/div><\/div><div class=\"gutentor-single-item gutentor-tabs-content gutentor-single-item-4\"><div class=\"gutentor-single-item-tabs gutentor-single-item\"><div class=\"gutentor-single-item-content\"><p><a href=\"https:\/\/www.block.tw\/blog\/arduino-digital\/\">Arduino \u6578\u4f4dI\/O\u51fd\u5f0f<\/a><br><a href=\"https:\/\/www.block.tw\/blog\/arduino-%e9%a1%9e%e6%af%94i-o%e6%8c%87%e4%bb%a4\/\">Arduino \u985e\u6bd4I\/O\u51fd\u5f0f<\/a><br><a href=\"https:\/\/www.block.tw\/blog\/arduino-time\/\">Arduino \u6642\u9593\u51fd\u5f0f<\/a><br><a href=\"https:\/\/www.block.tw\/blog\/arduino-math\/\">Arduino \u6578\u5b78\u51fd\u5f0f<\/a><br><a href=\"https:\/\/www.block.tw\/blog\/arduino-communication\/\">Arduino \u901a\u8a0a\u7269\u4ef6\u51fd\u5f0f<\/a><br><a href=\"https:\/\/www.block.tw\/blog\/tone\" data-type=\"URL\" data-id=\"https:\/\/www.block.tw\/blog\/tone\">Arduino \u767c\u97f3\u51fd\u5f0f<\/a><br><a href=\"https:\/\/www.block.tw\/blog\/myfunction\/\">Arduino \u81ea\u5b9a\u51fd\u5f0f<\/a><\/p><\/div><\/div><\/div><div class=\"gutentor-single-item gutentor-tabs-content gutentor-single-item-5\"><div class=\"gutentor-single-item-tabs gutentor-single-item\"><div class=\"gutentor-single-item-content\"><p><a rel=\"noreferrer noopener\" href=\"https:\/\/www.block.tw\/blog\/arduino-output\/\" target=\"_blank\">Arduino \u8f38\u51fa\u5be6\u7fd2<\/a>(\u55ae\u71c8\u9583\u720d)<br><a rel=\"noreferrer noopener\" href=\"https:\/\/www.block.tw\/blog\/arduino-output-easy\" target=\"_blank\">Arduino \u8f38\u51fa\u5be6\u7fd2<\/a>(\u8dd1\u99ac\u71c8-\u611a\u516c\u79fb\u5c71)<br><a rel=\"noreferrer noopener\" href=\"https:\/\/www.block.tw\/blog\/arduino-output-for\/\" target=\"_blank\">Arduino \u8f38\u51fa\u5be6\u7fd2<\/a>(\u8dd1\u99ac\u71c8-for\u8ff4\u5708)<br><a href=\"https:\/\/www.block.tw\/blog\/arduino-digital-input\">Arduino \u6578\u4f4d\u8f38\u5165\u5be6\u7fd2<\/a><br><a href=\"https:\/\/www.block.tw\/blog\/input-pullup\/\">Arduino \u6578\u4f4d\u8f38\u5165\u5be6\u7fd2(INPUT_PULLUP)<\/a><br><a rel=\"noreferrer noopener\" href=\"https:\/\/www.block.tw\/blog\/arduino-alalog-input\" target=\"_blank\">Arduino \u985e\u6bd4\u8f38\u5165\u5be6\u7fd2<\/a><br><a rel=\"noreferrer noopener\" href=\"https:\/\/www.block.tw\/blog\/arduino-pwm\/\" data-type=\"URL\" data-id=\"https:\/\/www.block.tw\/blog\/arduino-pwm\/\" target=\"_blank\">Arduino PWM <\/a><a href=\"https:\/\/www.block.tw\/blog\/arduino-pwm\/\">\u5be6\u7fd2<\/a> (\u547c\u5438\u71c8)<br> <a rel=\"noreferrer noopener\" href=\"https:\/\/www.block.tw\/blog\/arduino-ldr-3led\/\" data-type=\"URL\" target=\"_blank\">Arduino PWM \u5be6\u7fd2<\/a> (\u5149\u611f\u61c9\u8abf\u5149\u71c8) <br><a rel=\"noreferrer noopener\" href=\"https:\/\/www.block.tw\/blog\/arduino-88-led-matrix-max7219\" data-type=\"URL\" data-id=\"https:\/\/www.block.tw\/blog\/arduino-88-led-matrix-max7219\" target=\"_blank\">Arduino 8&#215;8 LED Matrix MAX7219 \u5be6\u7fd2<\/a> <br><a rel=\"noreferrer noopener\" href=\"https:\/\/www.block.tw\/blog\/arduino-greenMan\" data-type=\"URL\" target=\"_blank\">Arduino \u7d05\u7da0\u71c8\u5c0f\u7da0\u4eba \u5be6\u7fd2<\/a> <br><a rel=\"noreferrer noopener\" href=\"https:\/\/www.block.tw\/blog\/88-led-matrix-max7219-clock\/\" data-type=\"URL\" data-id=\"https:\/\/www.block.tw\/blog\/88-led-matrix-max7219-clock\/\" target=\"_blank\">Arduino \u8a08\u6642\u5668 \u5be6\u7fd2<\/a><br><a rel=\"noreferrer noopener\" href=\"https:\/\/www.block.tw\/blog\/musicbox\" data-type=\"URL\" data-id=\"https:\/\/www.block.tw\/blog\/musicbox\" target=\"_blank\">Arduino \u97f3\u6a02\u76d2<\/a><br><a rel=\"noreferrer noopener\" href=\"https:\/\/www.block.tw\/blog\/keyboard\/\" data-type=\"URL\" data-id=\"https:\/\/www.block.tw\/blog\/keyboard\/\" target=\"_blank\">Arduino \u96fb\u5b50\u7434(\u9375\u76e4\u6383\u63cf)<\/a><br><a rel=\"noreferrer noopener\" href=\"https:\/\/www.block.tw\/blog\/dht11\/\" data-type=\"URL\" data-id=\"https:\/\/www.block.tw\/blog\/dht11\/\" target=\"_blank\">Arduino DHT11 \u6eab\u6fd5\u5ea6\u611f\u61c9\u5668<\/a><br><a rel=\"noreferrer noopener\" href=\"https:\/\/www.block.tw\/blog\/oled\/\" data-type=\"URL\" data-id=\"https:\/\/www.block.tw\/blog\/oled\/\" target=\"_blank\">Arduino OLED \u986f\u793a<\/a><br><span style=\"color: #0693e3;\" class=\"ugb-highlight\"><a href=\"https:\/\/www.block.tw\/blog\/arduino-hcsr04\/\">Arduino \u8d85\u97f3\u6ce2\u6e2c\u8ddd\u6a21\u7d44 HC-SR04<\/a><\/span><br><a href=\"https:\/\/www.block.tw\/blog\/arduino-runtime\/\">Arduino \u57f7\u884c\u6642\u9593\u5be6\u7fd2<\/a><br><a href=\"https:\/\/www.block.tw\/blog\/arduino-captest\/\">Arduino \u96fb\u5bb9\u6e2c\u8a66\u5668<\/a><br><a rel=\"noreferrer noopener\" href=\"https:\/\/www.block.tw\/blog\/arduino-irr\/\" target=\"_blank\">Arduino \u7d05\u5916\u7dda\u63a5\u6536\u5be6\u7fd2<\/a><br><a rel=\"noreferrer noopener\" href=\"https:\/\/www.block.tw\/blog\/arduino-irsend-epson\/\" target=\"_blank\">Arduino \u7d05\u5916\u7dda\u767c\u5c04\u5be6\u7fd2 EPSON \u6295\u5f71\u6a5f\u63a7\u5236 <\/a><br><a rel=\"noreferrer noopener\" href=\"https:\/\/www.block.tw\/blog\/esp12f-iot-plug-mqtt\" target=\"_blank\">ESP-12F \u7db2\u8def\u667a\u6167\u958b\u95dc(MQTT)<\/a><br><a rel=\"noreferrer noopener\" href=\"https:\/\/www.block.tw\/blog\/esp-12fesp8266-max31855-mqtt-thingspeak\" target=\"_blank\">ESP-12F \u96f2\u7aef\u8a18\u9304\u578b K-Type \u6eab\u5ea6\u8a08(MQTT  ThingSpeak)<\/a><br><a href=\"https:\/\/www.block.tw\/blog\/esp-12f-ircontrolbyphone\/\">ESP-12F \u624b\u6a5f\u96f2\u7aef\u7d05\u5916\u7dda\u63a7\u5236<\/a><br><a href=\"https:\/\/www.block.tw\/blog\/esp-12f-webradio\" data-type=\"URL\" data-id=\"https:\/\/www.block.tw\/blog\/esp-12f-webradio\">ESP-12F \u7db2\u8def\u96fb\u53f0\u6536\u97f3\u6a5f<\/a><br><a href=\"https:\/\/www.block.tw\/blog\/esp12f-edrum\">ESP-12F \u96fb\u5b50\u9f13<\/a><\/p><\/div><\/div><\/div><\/div><\/div><\/div><\/section>\n","protected":false},"excerpt":{"rendered":"<p>\u8a2d\u5099\u8207\u6750\u6599 \u500b\u4eba\u96fb\u8166 \u00d7 1\u624b\u6a5f\u00d7 1ESP12F \u00d7 1\u9eb5\u5305\u677f \u00d7 1\u7d05\u5916\u7dda\u767c\u5c04\u5668 \u6a21\u7d44 \u00d7 1\u96fb\u6676\u9ad4 \u00d7 &hellip; <br \/> <a class=\"read-more\" href=\"https:\/\/www.block.tw\/blog\/esp-12f-ircontrolbyphone\/\">Read more<\/a><\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[70,3],"tags":[15,87,81,84,89,88],"class_list":["post-2973","post","type-post","status-publish","format-standard","hentry","category-internship","category-mcu","tag-arduino","tag-esp12f","tag-esp8266","tag-mqtt","tag-nec","tag-88"],"gutentor_comment":0,"featured_image_urls":{"full":"","thumbnail":"","medium":"","medium_large":"","large":"","1536x1536":"","2048x2048":"","post-thumbnail":"","mesmerize-full-hd":""},"post_excerpt_stackable":"<p>\u8a2d\u5099\u8207\u6750\u6599 \u500b\u4eba\u96fb\u8166 \u00d7 1\u624b\u6a5f\u00d7 1ESP12F \u00d7 1\u9eb5\u5305\u677f \u00d7 1\u7d05\u5916\u7dda\u767c\u5c04\u5668 \u6a21\u7d44 \u00d7 1\u96fb\u6676\u9ad4 \u00d7 1\u96fb\u963b 22\u03a9\u00d7 1\u96fb\u963b 100\u03a9\u00d7 1\u9023\u63a5\u7dda \u82e5\u5e72 \u5be6\u9ad4\u63a5\u7dda\u5716 PWM \u76f8\u95dc\u51fd\u5f0f PWM&#8230;<\/p>\n","category_list":"<a href=\"https:\/\/www.block.tw\/blog\/category\/mcu\/internship\/\" rel=\"category tag\">Arduino \u5be6\u7fd2<\/a>, <a href=\"https:\/\/www.block.tw\/blog\/category\/mcu\/\" rel=\"category tag\">\u5fae\u8655\u7406\u6a5f<\/a>","author_info":{"name":"mcu","url":"https:\/\/www.block.tw\/blog\/author\/mcu\/"},"comments_num":"0 comments","featured_image_urls_v2":{"full":"","thumbnail":"","medium":"","medium_large":"","large":"","1536x1536":"","2048x2048":"","post-thumbnail":"","mesmerize-full-hd":""},"post_excerpt_stackable_v2":"<p>\u8a2d\u5099\u8207\u6750\u6599 \u500b\u4eba\u96fb\u8166 \u00d7 1\u624b\u6a5f\u00d7 1ESP12F \u00d7 1\u9eb5\u5305\u677f \u00d7 1\u7d05\u5916\u7dda\u767c\u5c04\u5668 \u6a21\u7d44 \u00d7 1\u96fb\u6676\u9ad4 \u00d7 1\u96fb\u963b 22\u03a9\u00d7 1\u96fb\u963b 100\u03a9\u00d7 1\u9023\u63a5\u7dda \u82e5\u5e72 \u5be6\u9ad4\u63a5\u7dda\u5716 PWM \u76f8\u95dc\u51fd\u5f0f PWM&#8230;<\/p>\n","category_list_v2":"<a href=\"https:\/\/www.block.tw\/blog\/category\/mcu\/internship\/\" rel=\"category tag\">Arduino \u5be6\u7fd2<\/a>, <a href=\"https:\/\/www.block.tw\/blog\/category\/mcu\/\" rel=\"category tag\">\u5fae\u8655\u7406\u6a5f<\/a>","author_info_v2":{"name":"mcu","url":"https:\/\/www.block.tw\/blog\/author\/mcu\/"},"comments_num_v2":"0 comments","_links":{"self":[{"href":"https:\/\/www.block.tw\/blog\/wp-json\/wp\/v2\/posts\/2973","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.block.tw\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.block.tw\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.block.tw\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.block.tw\/blog\/wp-json\/wp\/v2\/comments?post=2973"}],"version-history":[{"count":11,"href":"https:\/\/www.block.tw\/blog\/wp-json\/wp\/v2\/posts\/2973\/revisions"}],"predecessor-version":[{"id":4241,"href":"https:\/\/www.block.tw\/blog\/wp-json\/wp\/v2\/posts\/2973\/revisions\/4241"}],"wp:attachment":[{"href":"https:\/\/www.block.tw\/blog\/wp-json\/wp\/v2\/media?parent=2973"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.block.tw\/blog\/wp-json\/wp\/v2\/categories?post=2973"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.block.tw\/blog\/wp-json\/wp\/v2\/tags?post=2973"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}