{"id":723,"date":"2022-12-15T18:05:36","date_gmt":"2022-12-15T10:05:36","guid":{"rendered":"http:\/\/wordpress.loc\/?p=723"},"modified":"2022-12-16T13:21:36","modified_gmt":"2022-12-16T05:21:36","slug":"esp32_ch2-16","status":"publish","type":"post","link":"https:\/\/www.nmking.io\/index.php\/2022\/12\/15\/723\/","title":{"rendered":"ESP32CAM MQTT\u76f4\u64ad"},"content":{"rendered":"\n<figure class=\"wp-block-pullquote\"><blockquote><p>ESP32CAM\u9810\u8a2d\u662f\u900f\u904eWIFI\u50b3\u905emjpeg\u5f71\u50cf\uff0c\u540c\u7db2\u57df\u76e3\u770b\u8996\u8a0a\u5f71\u50cf\u5f88\u7c21\u55ae<br>\u4f46\u662f\u5982\u679c\u8de8\u7db2\u57df\u5c31\u8981\u5229\u7528NAT\u7684IP\u8f49\u9001\uff0c\u8a2d\u5b9a\u6709\u9ede\u9ebb\u7169\u3002<\/p><\/blockquote><\/figure>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-ht-block-toc is-style-rounded htoc htoc--position-wide toc-list-style-plain\" data-htoc-state=\"expanded\"><span class=\"htoc__title\"><span class=\"ht_toc_title\">Table of Contents<\/span><span class=\"htoc__toggle\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"16\" height=\"16\"><g fill=\"#444\"><path d=\"M15 7H1c-.6 0-1 .4-1 1s.4 1 1 1h14c.6 0 1-.4 1-1s-.4-1-1-1z\"><\/path><path d=\"M15 1H1c-.6 0-1 .4-1 1s.4 1 1 1h14c.6 0 1-.4 1-1s-.4-1-1-1zM15 13H1c-.6 0-1 .4-1 1s.4 1 1 1h14c.6 0 1-.4 1-1s-.4-1-1-1z\"><\/path><\/g><\/svg><\/span><\/span><div class=\"htoc__itemswrap\"><ul class=\"ht_toc_list\"><li class=\"\"><a href=\"#htoc-\">\u5be6\u505a\u8aaa\u660e<\/a><\/li><li class=\"\"><a href=\"#htoc-1\">\u4e00\u3001\u6750\u6599\u6e96\u5099<\/a><\/li><li class=\"\"><a href=\"#htoc-esp32cam\">\u4e8c\u3001ESP32CAM\u71d2\u9304\u4ee5\u4e0b\u7a0b\u5f0f<\/a><\/li><li class=\"\"><a href=\"#htoc-mqtt\">\u4e09\u3001\u624b\u6a5fMQTT\u8a2d\u5b9a<\/a><\/li><\/ul><\/div><\/div>\n\n\n\n<p>\u6211\u7684ESP32\u5be6\u505a\u66f8\u7c4d\uff1a<a rel=\"noreferrer noopener\" href=\"https:\/\/www.nmking.io\/index.php\/2022\/11\/10\/esp32_ch1-2\/\" target=\"_blank\">\u6211\u51fa\u66f8\u4e86 ESP32 \u7269\u806f\u7db2\u5c08\u984c<\/a><br>\u535a\u5ba2\u4f86\u7db2\u5740\uff1a<a rel=\"noreferrer noopener\" href=\"https:\/\/www.books.com.tw\/products\/0010901195\" target=\"_blank\">https:\/\/www.books.com.tw\/products\/0010901195<\/a><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"htoc-\">\u5be6\u505a\u8aaa\u660e<\/h2>\n\n\n\n<p>ESP32CAM\u9810\u8a2d\u662f\u900f\u904eWIFI\u50b3\u905emjpeg\u5f71\u50cf\uff0c\u540c\u7db2\u57df\u76e3\u770b\u8996\u8a0a\u5f71\u50cf\u5f88\u7c21\u55ae\uff0c\u4f46\u662f\u5982\u679c\u8de8\u7db2\u57df\u5c31\u8981\u5229\u7528NAT\u7684IP\u8f49\u9001\uff0c\u8a2d\u5b9a\u6709\u9ede\u9ebb\u7169\u3002<\/p>\n\n\n\n<p>\u5176\u4ed6\u7684\u65b9\u5f0f\uff0c\u4f8b\u5982\u5c07\u7167\u7247\u4e0a\u50b3\u5230Google\u7a7a\u9593\uff0c\u6216\u8005\u628a\u7167\u7247\u4e0a\u50b3\u5230Line\u7b49\u3002\u4e0d\u904e\u90fd\u8f03\u70ba\u8907\u96dc<\/p>\n\n\n\n<p>\u9019\u6b21\u5247\u662f\u4f7f\u7528\u73fe\u5728\u6700\u6d41\u884c\u7684MQTT\u8f49\u9001\u7167\u7247\uff0c\u4e26\u7528\u624b\u6a5f\u89c0\u770b\uff0c\u8a2d\u5b9aVGA\u54c1\u8cea\u6bcf5\u79d2\u4e00\u5f35\uff0c\u6e2c\u8a66\u5e7e\u500b\u5c0f\u6642\u90fd\u5f88\u6b63\u5e38\u3002<\/p>\n\n\n\n<p>\u672c\u6b21\u611f\u8b1d\u7db2\u53cb\u694a\u8001\u5e2b\uff0c\u4e3b\u5167\u5bb9\u662f\u4ed6\u7684\u7a0b\u5f0f\uff0c\u4ed6\u9084\u6709\u5beb\u4e00\u500b\u8eca\u724c\u8fa8\u8b58\uff0c\u6539\u5929\u8acb\u4ed6\u5206\u4eab<\/p>\n\n\n\n<p class=\"quote\">\u4e0d\u904e\u8981\u8a18\u5f97\u7684\u662f\u6211\u9019\u6b21\u7528\u7684MQTT\u6c92\u6709\u5b89\u5168\u6027\uff0c\u53ea\u8981\u6709\u4eba\u8a02\u95b1\u540c\u4e00\u500bTopic\u5c31\u53ef\u4ee5\u89c0\u770b\u4f60\u7684\u7167\u7247\u5594<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"htoc-1\">\u4e00\u3001\u6750\u6599\u6e96\u5099<\/h2>\n\n\n\n<p>1.\u624b\u6a5f\uff0c\u5b89\u88dd\u597dMQTT APP\uff1aMQTT Dash\uff08<a href=\"https:\/\/play.google.com\/store\/apps\/details?id=net.routix.mqttdash&amp;hl=zh_TW\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/play.google.com\/store\/apps\/details?id=net.routix.mqttdash&amp;hl=zh_TW<\/a>\uff09<\/p>\n\n\n\n<p>2.ESP32CAM<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"htoc-esp32cam\">\u4e8c\u3001ESP32CAM\u71d2\u9304\u4ee5\u4e0b\u7a0b\u5f0f<\/h2>\n\n\n\n<p>\u8981\u5148\u5b89\u88dd\u7a0b\u5f0f\u5eab\uff0c\u8acb\u5229\u7528\u529f\u80fd\u8868\/\u8349\u7a3f\u78bc\/\u532f\u5165\u7a0b\u5f0f\u5eab\/\u7ba1\u7406\u7a0b\u5f0f\u5eab\uff0c\u8f38\u5165\u95dc\u9375\u5b57\uff1aPubSubClient\uff0c\u4f5c\u8005\u70baNick O&#8217;Leary\u9019\u500b<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/pic.pimg.tw\/youyouyou\/1606028504-2755668809-g_n.png?resize=841%2C474&#038;ssl=1\" alt=\"\" width=\"841\" height=\"474\"\/><figcaption class=\"wp-element-caption\">\u5b89\u88ddPubSubClient\u7a0b\u5f0f\u5eab<\/figcaption><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;esp_camera.h>\n#include &lt;WiFi.h>\n#include &lt;PubSubClient.h>\n\/\/ ------ \u4ee5\u4e0b\u4fee\u6539\u6210\u4f60\u81ea\u5df1\u7684WiFi\u5e33\u865f\u5bc6\u78bc ------\nconst char* ssid = \"You\";\nconst char* password = \"0933932774\";\n\n\/\/ ------ \u4ee5\u4e0b\u4fee\u6539\u6210\u4f60MQTT\u8a2d\u5b9a ------\nconst char* mqtt_server = \"mqtt.eclipseprojects.io\";\/\/\u514d\u8a3b\u518aMQTT\u4f3a\u670d\u5668\nconst unsigned int mqtt_port = 1883;\n#define MQTT_USER               \"my_name\"             \/\/\u672c\u6848\u4f8b\u672a\u4f7f\u7528\n#define MQTT_PASSWORD           \"my_password\"         \/\/\u672c\u6848\u4f8b\u672a\u4f7f\u7528\n#define MQTT_PUBLISH_Monitor    \"yourTopic\/esp32cam\/pic\"  \/\/ \u653e\u7f6eBinary JPG Image\u7684Topoc\uff0c\u8a18\u5f97\u8981\u6539\u6210\u81ea\u5df1\u7684\n\n\n \n\/\/ ------ OV2640\u76f8\u6a5f\u8a2d\u5b9a ------------\n#define CAMERA_MODEL_AI_THINKER\n#define PWDN_GPIO_NUM     32\n#define RESET_GPIO_NUM    -1\n#define XCLK_GPIO_NUM      0\n#define SIOD_GPIO_NUM     26\n#define SIOC_GPIO_NUM     27\n#define Y9_GPIO_NUM       35\n#define Y8_GPIO_NUM       34\n#define Y7_GPIO_NUM       39\n#define Y6_GPIO_NUM       36\n#define Y5_GPIO_NUM       21\n#define Y4_GPIO_NUM       19\n#define Y3_GPIO_NUM       18\n#define Y2_GPIO_NUM        5\n#define VSYNC_GPIO_NUM    25\n#define HREF_GPIO_NUM     23\n#define PCLK_GPIO_NUM     22\n\n\n \nchar clientId&#91;50];\nvoid mqtt_callback(char* topic, byte* payload, unsigned int msgLength);\nWiFiClient wifiClient;\nPubSubClient mqttClient(mqtt_server, mqtt_port, mqtt_callback, wifiClient);\n\n\/\/\u555f\u52d5WIFI\u9023\u7dda\nvoid setup_wifi() {\n  Serial.printf(\"\\nConnecting to %s\", ssid);\n  WiFi.begin(ssid, password);\n  while (WiFi.status() != WL_CONNECTED) {\n    delay(500);\n    Serial.print(\".\");\n  }\n  Serial.print(\"\\nWiFi Connected.  IP Address: \");\n  Serial.println(WiFi.localIP());\n}\n\n\n \n\/\/MQTT callback\uff0c\u672c\u6848\u4f8b\u6c92\u4f7f\u7528\nvoid mqtt_callback(char* topic, byte* payload, unsigned int msgLength) {\n\n}\n\n\/\/\u91cd\u65b0\u9023\u7ddaMQTT Server\nboolean mqtt_nonblock_reconnect() {\n  boolean doConn = false;\n  if (! mqttClient.connected()) {\n    boolean isConn = mqttClient.connect(clientId);\n    \/\/boolean isConn = mqttClient.connect(clientId, MQTT_USER, MQTT_PASSWORD);\n    char logConnected&#91;100];\n    sprintf(logConnected, \"MQTT Client &#91;%s] Connect %s !\", clientId, (isConn ? \"Successful\" : \"Failed\"));\n    Serial.println(logConnected);\n  }\n  return doConn;\n}\n\n\/\/MQTT\u50b3\u905e\u7167\u7247\nvoid MQTT_picture() {\n  \/\/camera_fb_t * fb;    \/\/ camera frame buffer.\n  camera_fb_t * fb = NULL;\n  fb = esp_camera_fb_get();\n  if (!fb) {\n    delay(100);\n    Serial.println(\"Camera capture failed, Reset\");\n    ESP.restart();\n  }\n\n  char* logIsPublished;\n\n  if (! mqttClient.connected()) {\n    \/\/ client loses its connection\n    Serial.printf(\"MQTT Client &#91;%s] Connection LOST !\\n\", clientId);\n    mqtt_nonblock_reconnect();\n  }\n\n  if (! mqttClient.connected())\n    logIsPublished = \"  No MQTT Connection, Photo NOT Published !\";\n  else {\n    int imgSize = fb->len;\n    int ps = MQTT_MAX_PACKET_SIZE;\n    \/\/ start to publish the picture\n    mqttClient.beginPublish(MQTT_PUBLISH_Monitor, imgSize, false);\n    for (int i = 0; i &lt; imgSize; i += ps) {\n      int s = (imgSize - i &lt; s) ? (imgSize - i) : ps;\n      mqttClient.write((uint8_t *)(fb->buf) + i, s);\n    }\n\n\n \n    boolean isPublished = mqttClient.endPublish();\n    if (isPublished)\n      logIsPublished = \"  Publishing Photo to MQTT Successfully !\";\n    else\n      logIsPublished = \"  Publishing Photo to MQTT Failed !\";\n  }\n  Serial.println(logIsPublished);\n esp_camera_fb_return(fb);\/\/\u6e05\u9664\u7de9\u885d\u5340\n}\n\n\nvoid setup() {\n  Serial.begin(115200);\n  \/\/\u76f8\u6a5f\u8a2d\u5b9a\n  camera_config_t config;\n  config.ledc_channel = LEDC_CHANNEL_0;\n  config.ledc_timer = LEDC_TIMER_0;\n  config.pin_d0 = Y2_GPIO_NUM;\n  config.pin_d1 = Y3_GPIO_NUM;\n  config.pin_d2 = Y4_GPIO_NUM;\n  config.pin_d3 = Y5_GPIO_NUM;\n  config.pin_d4 = Y6_GPIO_NUM;\n  config.pin_d5 = Y7_GPIO_NUM;\n  config.pin_d6 = Y8_GPIO_NUM;\n  config.pin_d7 = Y9_GPIO_NUM;\n  config.pin_xclk = XCLK_GPIO_NUM;\n  config.pin_pclk = PCLK_GPIO_NUM;\n  config.pin_vsync = VSYNC_GPIO_NUM;\n  config.pin_href = HREF_GPIO_NUM;\n  config.pin_sscb_sda = SIOD_GPIO_NUM;\n  config.pin_sscb_scl = SIOC_GPIO_NUM;\n  config.pin_pwdn = PWDN_GPIO_NUM;\n  config.pin_reset = RESET_GPIO_NUM;\n  config.xclk_freq_hz = 20000000;\n  config.pixel_format = PIXFORMAT_JPEG;\n  config.jpeg_quality = 10;  \/\/10-63 lower number means higher quality\n  config.fb_count = 2;\n  \/\/\u8a2d\u5b9a\u7167\u7247\u54c1\u8cea\n  config.frame_size = FRAMESIZE_QVGA ;\/\/ FRAMESIZE_ + UXGA|SXGA|XGA|SVGA|VGA|CIF|QVGA|HQVGA|QQVGA\n  esp_err_t err = esp_camera_init(&amp;config);\n  delay(500);\n  \/\/\u555f\u52d5WIFI\u9023\u7dda\n  setup_wifi();\n  sprintf(clientId, \"ESP32CAM_%04X\", random(0xffff));  \/\/ Create a random client ID\n  \/\/\u555f\u52d5MQTT\u9023\u7dda\n  mqtt_nonblock_reconnect();  \n}\n\n\n \n\nvoid loop() {\n  mqtt_nonblock_reconnect(); \n  MQTT_picture();\/\/\u7528MQTT\u50b3\u7167\u7247\n  delay(10000);\n}<\/code><\/pre>\n\n\n\n<p>\u71d2\u9304\u5b8c\u6210\u5f8c\uff0c\u5982\u679c\u8a2d\u5b9a\u6c92\u554f\u984c\uff0c\u5c31\u53ef\u4ee5\u5f9e\u5e8f\u5217\u8996\u7a97\u770b\u5230\u50b3\u905e\u6210\u529f\u7684\u756b\u9762<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/pic.pimg.tw\/youyouyou\/1605715633-376513904-g_n.png?resize=841%2C643&#038;ssl=1\" alt=\"\" width=\"841\" height=\"643\"\/><figcaption class=\"wp-element-caption\">\u71d2\u9304\u6210\u529f\uff0c\u5e8f\u5217\u8996\u7a97\u756b\u9762<\/figcaption><\/figure>\n\n\n\n<p>\u63a5\u4e0b\u4f86\u5c31\u662f\u8a2d\u5b9a\u624b\u6a5f\u7684MQTT\u63a5\u6536\u7aef<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"htoc-mqtt\">\u4e09\u3001\u624b\u6a5fMQTT\u8a2d\u5b9a<\/h2>\n\n\n\n<p>\u5b89\u88dd\u597dAPP\u5f8c\uff0c\u5148\u8a2d\u5b9aMQTT\u4f3a\u670d\u5668<\/p>\n\n\n\n<p>1.\u9ede\u9078\u53f3\u4e0a\u89d2\u7684 (+) \u7b26\u865f<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/pic.pimg.tw\/youyouyou\/1614762211-3968311743-g_n.jpg?w=1290&#038;ssl=1\" alt=\"\"\/><figcaption class=\"wp-element-caption\">MQTT APP\u958b\u555f\u756b\u9762<\/figcaption><\/figure>\n\n\n\n<p>2.\u8f38\u5165\u8207ESP32CAM\u71d2\u9304\u6642\u76f8\u540c\u7684MQTT\u8a2d\u5b9a<\/p>\n\n\n\n<p>Name\uff1a\u96a8\u4fbf\u8f38\u5165\uff0c\u81ea\u5df1\u8a18\u5f97\u5373\u53ef<br>Address\uff1a\u8f38\u5165\u8207ESP32CAM\u7a0b\u5f0f\u76f8\u540c\u7684\u4f3a\u670d\u5668\uff0c\u672c\u4f8b\uff1amqtt.eclipseprojects.io<br>Port\uff1a1883<br>\u5176\u9918\u4fdd\u7559\u9810\u8a2d\uff0c\u6309\u53f3\u4e0a\u89d2\u7684\u5b58\u6a94\u7b26\u865f<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/pic.pimg.tw\/youyouyou\/1614762439-3336220779-g_n.jpg?w=1290&#038;ssl=1\" alt=\"\"\/><figcaption class=\"wp-element-caption\">\u8f38\u5165MQTT\u8a2d\u5b9a<\/figcaption><\/figure>\n\n\n\n<p>3.\u9032\u5165\u525b\u5efa\u7acb\u597d\u7684MQTT\u4f3a\u670d\u5668\u5167\uff08\u672c\u4f8b\u70baEsp32cam\uff09<\/p>\n\n\n\n<p>\u9ede\u9078\u53f3\u4e0a\u89d2\u7684(+)\u670d\u52d9\uff0c\u52a0\u5165\u65b0\u7684\u9078\u9805<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/pic.pimg.tw\/youyouyou\/1614762243-3063984711-g_n.jpg?w=1290&#038;ssl=1\" alt=\"\"\/><figcaption class=\"wp-element-caption\">\u5df2\u5efa\u7acbMQTT\u4f3a\u670d\u5668\u756b\u9762<\/figcaption><\/figure>\n\n\n\n<p>4.\u9078\u64c7\u985e\u578b\u70baImage<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/pic.pimg.tw\/youyouyou\/1614762264-393626936-g_n.jpg?w=1290&#038;ssl=1\" alt=\"\"\/><figcaption class=\"wp-element-caption\">\u9078\u64c7Image\u985e\u578b<\/figcaption><\/figure>\n\n\n\n<p>5.\u9032\u5165\u9078\u9805\u8a2d\u5b9a<\/p>\n\n\n\n<p>\u5148\u5c07\u9078\u9805\u6539\u70ba\u7b2c\u4e09\u500bImage file data received as binary payload contents<br>Name\uff1aESP32CAM\uff08\u81ea\u5df1\u53d6\u540d\u5373\u53ef\uff09<br>Topic\uff1a\u8acb\u8f38\u5165\u4f60\u81ea\u5df1\u7684ESP32CAM\u7a0b\u5f0f\u5167\u76f8\u540c\u7684Topic<br>\u5b8c\u6210\u5f8c\u9ede\u53f3\u4e0a\u7684\u5b58\u6a94\u7b26\u865f<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/pic.pimg.tw\/youyouyou\/1614762278-345056686-g.png?w=1290&#038;ssl=1\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Image\u9078\u9805\u8a2d\u5b9a<\/figcaption><\/figure>\n\n\n\n<p>6.\u56de\u5230Dashboard\u6642\uff0c\u5c31\u53ef\u4ee5\u770b\u5230\u7167\u7247\u4e0d\u65b7\u7684\u50b3\u5165\u5594<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/pic.pimg.tw\/youyouyou\/1614762294-1863769067-g_n.jpg?w=1290&#038;ssl=1\" alt=\"\"\/><figcaption class=\"wp-element-caption\">\u8a2d\u5b9a\u5b8c\u6210\uff0c\u756b\u9762\u6210\u529f\u50b3\u8f38<\/figcaption><\/figure>\n\n\n\n<p>7.\u53ef\u4ee5\u9ede\u5165\uff0c\u770b\u5927\u5716<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/pic.pimg.tw\/youyouyou\/1614762325-242757484-g_n.jpg?w=1290&#038;ssl=1\" alt=\"\"\/><figcaption class=\"wp-element-caption\">\u9ede\u64ca\u653e\u5927\u89c0\u770b<\/figcaption><\/figure>\n\n\n\n<p>\u6e2c\u8a66\u4e86\u4e00\u5169\u5929\u90fd\u6c92\u4ec0\u9ebc\u554f\u984c\uff0c\u5728\u6b64\u5206\u4eab\u7d66\u5927\u5bb6\uff0cMQTT\u4f3a\u670d\u5668\u4e5f\u6c92\u95dc\u9589\u9023\u7dda\uff0c\u771f\u662f\u4f5b\u5fc3\u4f86\u8457\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>ESP32CAM\u9810\u8a2d\u662f\u900f\u904eWIFI\u50b3\u905emjpeg\u5f71\u50cf\uff0c\u540c\u7db2\u57df\u76e3\u770b\u8996\u8a0a\u5f71\u50cf\u5f88\u7c21\u55ae\u4f46\u662f\u5982\u679c\u8de8\u7db2\u57df\u5c31\u8981\u5229\u7528NAT\u7684I [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[1,26],"tags":[],"class_list":["post-723","post","type-post","status-publish","format-standard","hentry","category-esp32","category-esp32cam"],"blocksy_meta":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack-related-posts":[],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.nmking.io\/index.php\/wp-json\/wp\/v2\/posts\/723","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.nmking.io\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.nmking.io\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.nmking.io\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.nmking.io\/index.php\/wp-json\/wp\/v2\/comments?post=723"}],"version-history":[{"count":1,"href":"https:\/\/www.nmking.io\/index.php\/wp-json\/wp\/v2\/posts\/723\/revisions"}],"predecessor-version":[{"id":724,"href":"https:\/\/www.nmking.io\/index.php\/wp-json\/wp\/v2\/posts\/723\/revisions\/724"}],"wp:attachment":[{"href":"https:\/\/www.nmking.io\/index.php\/wp-json\/wp\/v2\/media?parent=723"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.nmking.io\/index.php\/wp-json\/wp\/v2\/categories?post=723"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.nmking.io\/index.php\/wp-json\/wp\/v2\/tags?post=723"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}