{"id":559,"date":"2025-11-21T11:18:34","date_gmt":"2025-11-21T03:18:34","guid":{"rendered":"http:\/\/175.178.117.18\/?p=559"},"modified":"2025-11-21T11:18:34","modified_gmt":"2025-11-21T03:18:34","slug":"%e5%9f%ba%e4%ba%8eidf5-5-1%e7%9a%84%e5%b0%8f%e6%99%ba2-0-5%e7%89%88%e6%9c%ac%e7%a7%bb%e6%a4%8d%e7%ac%ac%e4%b8%89%e6%96%b9s3%e5%bc%80%e5%8f%91%e6%9d%bf%e4%bd%bf%e7%94%a8mcp%e8%bf%9b%e8%a1%8c%e8%af%ad","status":"publish","type":"post","link":"https:\/\/starhill.online\/index.php\/2025\/11\/21\/%e5%9f%ba%e4%ba%8eidf5-5-1%e7%9a%84%e5%b0%8f%e6%99%ba2-0-5%e7%89%88%e6%9c%ac%e7%a7%bb%e6%a4%8d%e7%ac%ac%e4%b8%89%e6%96%b9s3%e5%bc%80%e5%8f%91%e6%9d%bf%e4%bd%bf%e7%94%a8mcp%e8%bf%9b%e8%a1%8c%e8%af%ad\/","title":{"rendered":"\u57fa\u4e8eIDF5.5.1\u7684\u5c0f\u667a2.0.5\u7248\u672c\u79fb\u690d\u7b2c\u4e09\u65b9S3\u5f00\u53d1\u677f\u4f7f\u7528MCP\u8fdb\u884c\u8bed\u97f3\u6b65\u8fdb\u7535\u673a\u7cbe\u51c6\u63a7\u5236"},"content":{"rendered":"<blockquote>\n<p>\u672c\u6587\u7ae0\u9ed8\u8ba4\u5b89\u88c5\u597dVsCode\u7684IDF\u7684\u73af\u5883\uff0c\u5982\u679c\u6ca1\u6709\u5b89\u88c5\u597d\u73af\u5883\uff0c\u53ef\u4ee5\u770b\u5609\u7acb\u521b\u7684IDF\u5b89\u88c5\u73af\u5883\n<a href=\"https:\/\/wiki.lckfb.com\/zh-hans\/esp32s3r8n8\/esp-idf-beginner\/idf-install.html\">1. IDF\u73af\u5883\u5b89\u88c5 | \u7acb\u521b\u5f00\u53d1\u677f\u6280\u672f\u6587\u6863\u4e2d\u5fc3<\/a><\/p>\n<\/blockquote>\n<h2>1.\u4e0b\u8f7d\u5c0f\u667aAI\u7684\u6e90\u7801<\/h2>\n<p><a href=\"https:\/\/github.com\/78\/xiaozhi-esp32\/releases\/tag\/v2.0.5\">Release v2.0.5 \u00b7 78\/xiaozhi-esp32<\/a><\/p>\n<figure id=\"attachment_mmd_565\" class=\"wp-block-image alignnone\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/starhill.online\/wp-content\/uploads\/2025\/11\/1-2.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" width=\"1246\" height=\"800\" data-original=\"https:\/\/starhill.online\/wp-content\/uploads\/2025\/11\/1-2.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" class=\"attachment-full size-full\" alt=\"1\" loading=\"lazy\" align=\"none\" \/><\/div><\/figure>\n<p>2.\u89e3\u538b\u4f7f\u7528vscode\u7684\u6253\u5f00\u6587\u4ef6\u5939\u529f\u80fd\u6253\u5f00\u4e0b\u8f7d\u7684\u5c0f\u667a\u6587\u4ef6\u5939<\/p>\n<h2>2.\u6253\u5f00\u5c0f\u667aAI\u4ee3\u7801\u8fdb\u884c\u81ea\u5b9a\u4e49\u914d\u7f6e<\/h2>\n<p>3.\u8fdb\u5165\u6253\u5f00\u7684\u5de5\u7a0b\u6587\u4ef6\u5939\uff0c\u6dfb\u52a0\u7b2c\u4e09\u65b9(\u81ea\u5df1\u753b\u7684\uff0c\u6216\u8005\u662f\u4e70\u7684)\u5f00\u53d1\u677f\uff0c\u8fd9\u91cc\u662f\u81ea\u5df1\u753b\u7684,\u65b0\u5efa\u6587\u4ef6\u5939 <code>A-stepper-motor<\/code> \u4ee5\u53ca\u4e09\u4e2a\u6587\u4ef6<\/p>\n<figure id=\"attachment_mmd_566\" class=\"wp-block-image alignnone\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/starhill.online\/wp-content\/uploads\/2025\/11\/3-2.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" width=\"304\" height=\"371\" data-original=\"https:\/\/starhill.online\/wp-content\/uploads\/2025\/11\/3-2.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" class=\"attachment-full size-full\" alt=\"3\" loading=\"lazy\" align=\"none\" \/><\/div><\/figure>\n<p>A_stepper_motor.cc<\/p>\n<blockquote>\n<p>\u6587\u4ef6\u5939\u7684\u540d\u5b57\u548cc++\u6587\u4ef6\u7684\u540d\u5b57\u53ef\u4ee5\u968f\u610f\uff0c\u8fd9\u91cc\u662fA_stepper_motor<\/p>\n<\/blockquote>\n<pre><code class=\"lang-cmd language-cmd cmd\">#include &quot;wifi_board.h&quot;\n#include &quot;codecs\/no_audio_codec.h&quot;\n#include &quot;display\/oled_display.h&quot;\n#include &quot;system_reset.h&quot;\n#include &quot;application.h&quot;\n#include &quot;button.h&quot;\n#include &quot;config.h&quot;\n#include &quot;mcp_server.h&quot;\n#include &quot;lamp_controller.h&quot;\n#include &quot;led\/single_led.h&quot;\n#include &quot;assets\/lang_config.h&quot;\n\n#include &lt;wifi_station.h&gt;\n#include &lt;esp_log.h&gt;\n#include &lt;driver\/i2c_master.h&gt;\n#include &lt;esp_lcd_panel_ops.h&gt;\n#include &lt;esp_lcd_panel_vendor.h&gt;\n\n#ifdef SH1106\n#include &lt;esp_lcd_panel_sh1106.h&gt;\n#endif\n\n#define TAG &quot;A_stepper_motor&quot;\n\nclass A_stepper_motor : public WifiBoard {\nprivate:\n    i2c_master_bus_handle_t display_i2c_bus_;\n    esp_lcd_panel_io_handle_t panel_io_ = nullptr;\n    esp_lcd_panel_handle_t panel_ = nullptr;\n    Display* display_ = nullptr;\n    Button boot_button_;\n    Button touch_button_;\n    Button volume_up_button_;\n    Button volume_down_button_;\n\n    void InitializeDisplayI2c() {\n        i2c_master_bus_config_t bus_config = {\n            .i2c_port = (i2c_port_t)0,\n            .sda_io_num = DISPLAY_SDA_PIN,\n            .scl_io_num = DISPLAY_SCL_PIN,\n            .clk_source = I2C_CLK_SRC_DEFAULT,\n            .glitch_ignore_cnt = 7,\n            .intr_priority = 0,\n            .trans_queue_depth = 0,\n            .flags = {\n                .enable_internal_pullup = 1,\n            },\n        };\n        ESP_ERROR_CHECK(i2c_new_master_bus(&amp;bus_config, &amp;display_i2c_bus_));\n    }\n\n    void InitializeSsd1306Display() {\n        \/\/ SSD1306 config\n        esp_lcd_panel_io_i2c_config_t io_config = {\n            .dev_addr = 0x3C,\n            .on_color_trans_done = nullptr,\n            .user_ctx = nullptr,\n            .control_phase_bytes = 1,\n            .dc_bit_offset = 6,\n            .lcd_cmd_bits = 8,\n            .lcd_param_bits = 8,\n            .flags = {\n                .dc_low_on_data = 0,\n                .disable_control_phase = 0,\n            },\n            .scl_speed_hz = 400 * 1000,\n        };\n\n        ESP_ERROR_CHECK(esp_lcd_new_panel_io_i2c_v2(display_i2c_bus_, &amp;io_config, &amp;panel_io_));\n\n        ESP_LOGI(TAG, &quot;Install SSD1306 driver&quot;);\n        esp_lcd_panel_dev_config_t panel_config = {};\n        panel_config.reset_gpio_num = -1;\n        panel_config.bits_per_pixel = 1;\n\n        esp_lcd_panel_ssd1306_config_t ssd1306_config = {\n            .height = static_cast\n&lt;uint8_t&gt;(DISPLAY_HEIGHT),\n        };\n        panel_config.vendor_config = &amp;ssd1306_config;\n\n#ifdef SH1106\n        ESP_ERROR_CHECK(esp_lcd_new_panel_sh1106(panel_io_, &amp;panel_config, &amp;panel_));\n#else\n        ESP_ERROR_CHECK(esp_lcd_new_panel_ssd1306(panel_io_, &amp;panel_config, &amp;panel_));\n#endif\n        ESP_LOGI(TAG, &quot;SSD1306 driver installed&quot;);\n\n        \/\/ Reset the display\n        ESP_ERROR_CHECK(esp_lcd_panel_reset(panel_));\n        if (esp_lcd_panel_init(panel_) != ESP_OK) {\n            ESP_LOGE(TAG, &quot;Failed to initialize display&quot;);\n            display_ = new NoDisplay();\n            return;\n        }\n        ESP_ERROR_CHECK(esp_lcd_panel_invert_color(panel_, false));\n\n        \/\/ Set the display to on\n        ESP_LOGI(TAG, &quot;Turning display on&quot;);\n        ESP_ERROR_CHECK(esp_lcd_panel_disp_on_off(panel_, true));\n\n        display_ = new OledDisplay(panel_io_, panel_, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y);\n    }\n\n    void InitializeButtons() {\n        boot_button_.OnClick([this]() {\n            auto&amp; app = Application::GetInstance();\n            if (app.GetDeviceState() == kDeviceStateStarting &amp;&amp; !WifiStation::GetInstance().IsConnected()) {\n                ResetWifiConfiguration();\n            }\n            app.ToggleChatState();\n        });\n        touch_button_.OnPressDown([this]() {\n            Application::GetInstance().StartListening();\n        });\n        touch_button_.OnPressUp([this]() {\n            Application::GetInstance().StopListening();\n        });\n\n        volume_up_button_.OnClick([this]() {\n            auto codec = GetAudioCodec();\n            auto volume = codec-&gt;output_volume() + 10;\n            if (volume &gt; 100) {\n                volume = 100;\n            }\n            codec-&gt;SetOutputVolume(volume);\n            GetDisplay()-&gt;ShowNotification(Lang::Strings::VOLUME + std::to_string(volume));\n        });\n\n        volume_up_button_.OnLongPress([this]() {\n            GetAudioCodec()-&gt;SetOutputVolume(100);\n            GetDisplay()-&gt;ShowNotification(Lang::Strings::MAX_VOLUME);\n        });\n\n        volume_down_button_.OnClick([this]() {\n            auto codec = GetAudioCodec();\n            auto volume = codec-&gt;output_volume() - 10;\n            if (volume &lt; 0) {\n                volume = 0;\n            }\n            codec-&gt;SetOutputVolume(volume);\n            GetDisplay()-&gt;ShowNotification(Lang::Strings::VOLUME + std::to_string(volume));\n        });\n\n        volume_down_button_.OnLongPress([this]() {\n            GetAudioCodec()-&gt;SetOutputVolume(0);\n            GetDisplay()-&gt;ShowNotification(Lang::Strings::MUTED);\n        });\n    }\n\n    \/\/ \u7269\u8054\u7f51\u521d\u59cb\u5316\uff0c\u9010\u6b65\u8fc1\u79fb\u5230 MCP \u534f\u8bae\n    void InitializeTools() {\n        static LampController lamp(LAMP_GPIO);\n    }\n\npublic:\n    A_stepper_motor() :\n        boot_button_(BOOT_BUTTON_GPIO),\n        touch_button_(TOUCH_BUTTON_GPIO),\n        volume_up_button_(VOLUME_UP_BUTTON_GPIO),\n        volume_down_button_(VOLUME_DOWN_BUTTON_GPIO) {\n        InitializeDisplayI2c();\n        InitializeSsd1306Display();\n        InitializeButtons();\n        InitializeTools();\n    }\n\n    virtual Led* GetLed() override {\n        static SingleLed led(BUILTIN_LED_GPIO);\n        return &amp;led;\n    }\n\n    virtual AudioCodec* GetAudioCodec() override {\n#ifdef AUDIO_I2S_METHOD_SIMPLEX\n        static NoAudioCodecSimplex audio_codec(AUDIO_INPUT_SAMPLE_RATE, AUDIO_OUTPUT_SAMPLE_RATE,\n             AUDIO_I2S_SPK_GPIO_BCLK, AUDIO_I2S_SPK_GPIO_LRCK, AUDIO_I2S_SPK_GPIO_DOUT, I2S_STD_SLOT_RIGHT,  \/\/ \u626c\u58f0\u5668\u53f3\u58f0\u9053\n            AUDIO_I2S_MIC_GPIO_SCK, AUDIO_I2S_MIC_GPIO_WS, AUDIO_I2S_MIC_GPIO_DIN, I2S_STD_SLOT_LEFT); \/\/ \u5de6\u58f0\u9053 \u9ea6\u514b\u98ce\n#else\n        static NoAudioCodecDuplex audio_codec(AUDIO_INPUT_SAMPLE_RATE, AUDIO_OUTPUT_SAMPLE_RATE,\n            AUDIO_I2S_GPIO_BCLK, AUDIO_I2S_GPIO_WS, AUDIO_I2S_GPIO_DOUT, AUDIO_I2S_GPIO_DIN);\n#endif\n        return &amp;audio_codec;\n    }\n\n    virtual Display* GetDisplay() override {\n        return display_;\n    }\n};\n\nDECLARE_BOARD(A_stepper_motor);\n<\/code><\/pre>\n<p>config.h<\/p>\n<pre><code class=\"lang-c language-c c\">#ifndef _BOARD_CONFIG_H_\n#define _BOARD_CONFIG_H_\n\n#include &lt;driver\/gpio.h&gt;\n\n#define AUDIO_INPUT_SAMPLE_RATE  16000\n#define AUDIO_OUTPUT_SAMPLE_RATE 24000\n\n\/\/ \u5982\u679c\u4f7f\u7528 Duplex I2S \u6a21\u5f0f\uff0c\u8bf7\u6ce8\u91ca\u4e0b\u9762\u4e00\u884c\n#define AUDIO_I2S_METHOD_SIMPLEX\n\n#ifdef AUDIO_I2S_METHOD_SIMPLEX\n\n#define AUDIO_I2S_MIC_GPIO_WS   GPIO_NUM_40     \/\/\u5fc5\u8981\uff0c\u4fee\u6539\u4e3a\u81ea\u5df1\u7684\n#define AUDIO_I2S_MIC_GPIO_SCK  GPIO_NUM_42     \/\/\u5fc5\u8981\uff0c\u4fee\u6539\u4e3a\u81ea\u5df1\u7684\n#define AUDIO_I2S_MIC_GPIO_DIN  GPIO_NUM_41     \/\/\u5fc5\u8981\uff0c\u4fee\u6539\u4e3a\u81ea\u5df1\u7684\n#define AUDIO_I2S_SPK_GPIO_DOUT GPIO_NUM_21     \/\/\u5fc5\u8981\uff0c\u4fee\u6539\u4e3a\u81ea\u5df1\u7684\n#define AUDIO_I2S_SPK_GPIO_BCLK GPIO_NUM_47     \/\/\u5fc5\u8981\uff0c\u4fee\u6539\u4e3a\u81ea\u5df1\u7684\n#define AUDIO_I2S_SPK_GPIO_LRCK GPIO_NUM_48     \/\/\u5fc5\u8981\uff0c\u4fee\u6539\u4e3a\u81ea\u5df1\u7684\n\n#else\n\n#define AUDIO_I2S_GPIO_WS GPIO_NUM_4            \/\/\u5fc5\u8981\uff0c\u4fee\u6539\u4e3a\u81ea\u5df1\u7684\n#define AUDIO_I2S_GPIO_BCLK GPIO_NUM_5          \/\/\u5fc5\u8981\uff0c\u4fee\u6539\u4e3a\u81ea\u5df1\u7684\n#define AUDIO_I2S_GPIO_DIN  GPIO_NUM_6          \/\/\u5fc5\u8981\uff0c\u4fee\u6539\u4e3a\u81ea\u5df1\u7684\n#define AUDIO_I2S_GPIO_DOUT GPIO_NUM_7          \/\/\u5fc5\u8981\uff0c\u4fee\u6539\u4e3a\u81ea\u5df1\u7684\n\n#endif\n\n#define BUILTIN_LED_GPIO        GPIO_NUM_NC     \/\/\u975e\u5fc5\u8981\uff0c\u6ca1\u6709\u5219\u4f7f\u7528NC\n#define BOOT_BUTTON_GPIO        GPIO_NUM_NC\n#define TOUCH_BUTTON_GPIO       GPIO_NUM_NC\n#define VOLUME_UP_BUTTON_GPIO   GPIO_NUM_NC\n#define VOLUME_DOWN_BUTTON_GPIO GPIO_NUM_NC\n\n#define DISPLAY_SDA_PIN GPIO_NUM_8              \/\/\u5fc5\u8981\uff0c\u4fee\u6539\u4e3a\u81ea\u5df1\u7684\n#define DISPLAY_SCL_PIN GPIO_NUM_9              \/\/\u5fc5\u8981\uff0c\u4fee\u6539\u4e3a\u81ea\u5df1\u7684\n#define DISPLAY_WIDTH   128\n\n#define DISPLAY_HEIGHT  32                      \/\/\u8fd9\u91cc\u76f4\u63a5\u5199\u6b7b\n\n\/\/ #if CONFIG_OLED_SSD1306_128X32\n\/\/ #define DISPLAY_HEIGHT  32\n\/\/ #elif CONFIG_OLED_SSD1306_128X64\n\/\/ #define DISPLAY_HEIGHT  64\n\/\/ #elif CONFIG_OLED_SH1106_128X64\n\/\/ #define DISPLAY_HEIGHT  64\n\/\/ #define SH1106\n\/\/ #else\n\/\/ #error &quot;\u672a\u9009\u62e9 OLED \u5c4f\u5e55\u7c7b\u578b&quot;\n\/\/ #endif\n\n#define DISPLAY_MIRROR_X true\n#define DISPLAY_MIRROR_Y true\n\n\/\/ A MCP Test: Control a lamp\n#define LAMP_GPIO GPIO_NUM_18\n\n#endif \/\/ _BOARD_CONFIG_H_\n<\/code><\/pre>\n<p>config.json<\/p>\n<pre><code class=\"lang-json language-json json\">{\n    &quot;target&quot;: &quot;esp32s3&quot;,\n    &quot;builds&quot;: [\n        {\n            &quot;name&quot;: &quot;bread-compact-wifi&quot;,\n            &quot;sdkconfig_append&quot;: [\n                &quot;CONFIG_OLED_SSD1306_128X32=y&quot;\n            ]\n        },\n        {\n            &quot;name&quot;: &quot;bread-compact-wifi-128x64&quot;,\n            &quot;sdkconfig_append&quot;: [\n                &quot;CONFIG_OLED_SSD1306_128X64=y&quot;\n            ]\n        }\n    ]\n}<\/code><\/pre>\n<p>4.\u4fee\u6539main\u6587\u4ef6\u5939\u4e0b\u7684CMakeLists.txt,\u5728133\u884c\u6dfb\u52a0\u677f\u5b50\u7684\u4fe1\u606f\uff0c\u4f7fVsCode\u53ef\u4ee5\u901a\u8fc7cmake\u8fde\u63a5\u5230<\/p>\n<pre><code class=\"lang-cmake language-cmake cmake\">elseif(CONFIG_BOARD_TYPE_A_STEPPER_MOTOR)\n    set(BOARD_TYPE &quot;A-stepper-motor&quot;)\n    set(BUILTIN_TEXT_FONT font_puhui_basic_20_4)\n    set(BUILTIN_ICON_FONT font_awesome_20_4)\n    set(DEFAULT_EMOJI_COLLECTION twemoji_64)<\/code><\/pre>\n<figure id=\"attachment_mmd_567\" class=\"wp-block-image alignnone\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/starhill.online\/wp-content\/uploads\/2025\/11\/4-3.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" width=\"975\" height=\"751\" data-original=\"https:\/\/starhill.online\/wp-content\/uploads\/2025\/11\/4-3.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" class=\"attachment-full size-full\" alt=\"4\" loading=\"lazy\" align=\"none\" \/><\/div><\/figure>\n<p>5.\u4fee\u6539main\u6587\u4ef6\u5939\u4e0b\u7684Kconfig.projbuild,\u5728198\u884c\u6dfb\u52a0\u677f\u5b50\u7684\u4fe1\u606f\uff0c\u4f7fVsCode\u53ef\u4ee5\u9009\u5b9a\u5f00\u53d1\u677f\u578b\u53f7<\/p>\n<figure id=\"attachment_mmd_568\" class=\"wp-block-image alignnone\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/starhill.online\/wp-content\/uploads\/2025\/11\/5-1.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" width=\"901\" height=\"670\" data-original=\"https:\/\/starhill.online\/wp-content\/uploads\/2025\/11\/5-1.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" class=\"attachment-full size-full\" alt=\"5\" loading=\"lazy\" align=\"none\" \/><\/div><\/figure>\n<p>6.\u9009\u62e9\u578b\u53f7<\/p>\n<figure id=\"attachment_mmd_569\" class=\"wp-block-image alignnone\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/starhill.online\/wp-content\/uploads\/2025\/11\/6-1.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" width=\"1731\" height=\"1383\" data-original=\"https:\/\/starhill.online\/wp-content\/uploads\/2025\/11\/6-1.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" class=\"attachment-full size-full\" alt=\"6\" loading=\"lazy\" align=\"none\" \/><\/div><\/figure>\n<p>7.\u6253\u5f00\u914d\u7f6e\u6587\u4ef6\u8fdb\u884c\u914d\u7f6e<\/p>\n<figure id=\"attachment_mmd_570\" class=\"wp-block-image alignnone\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/starhill.online\/wp-content\/uploads\/2025\/11\/7_1-2.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" width=\"548\" height=\"76\" data-original=\"https:\/\/starhill.online\/wp-content\/uploads\/2025\/11\/7_1-2.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" class=\"attachment-full size-full\" alt=\"7_1\" loading=\"lazy\" align=\"none\" \/><\/div><\/figure>\n<figure id=\"attachment_mmd_571\" class=\"wp-block-image alignnone\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/starhill.online\/wp-content\/uploads\/2025\/11\/7_2-1.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" width=\"749\" height=\"178\" data-original=\"https:\/\/starhill.online\/wp-content\/uploads\/2025\/11\/7_2-1.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" class=\"attachment-full size-full\" alt=\"7_2\" loading=\"lazy\" align=\"none\" \/><\/div><\/figure>\n<figure id=\"attachment_mmd_572\" class=\"wp-block-image alignnone\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/starhill.online\/wp-content\/uploads\/2025\/11\/7_3-1.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" width=\"497\" height=\"323\" data-original=\"https:\/\/starhill.online\/wp-content\/uploads\/2025\/11\/7_3-1.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" class=\"attachment-full size-full\" alt=\"7_3\" loading=\"lazy\" align=\"none\" \/><\/div><\/figure>\n<p>\u6309\u4e0b\u53f3\u65b9\u5411\u952e(-&gt;)\u8fdb\u5165\u4e8c\u7ea7\u83dc\u5355<\/p>\n<figure id=\"attachment_mmd_573\" class=\"wp-block-image alignnone\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/starhill.online\/wp-content\/uploads\/2025\/11\/7_4-1.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" width=\"598\" height=\"283\" data-original=\"https:\/\/starhill.online\/wp-content\/uploads\/2025\/11\/7_4-1.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" class=\"attachment-full size-full\" alt=\"7_4\" loading=\"lazy\" align=\"none\" \/><\/div><\/figure>\n<p>\u9009\u4e2d\u521a\u521a\u521b\u5efa\u7684\u677f\u5b50<\/p>\n<figure id=\"attachment_mmd_574\" class=\"wp-block-image alignnone\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/starhill.online\/wp-content\/uploads\/2025\/11\/7_5.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" width=\"606\" height=\"608\" data-original=\"https:\/\/starhill.online\/wp-content\/uploads\/2025\/11\/7_5.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" class=\"attachment-full size-full\" alt=\"7_5\" loading=\"lazy\" align=\"none\" \/><\/div><\/figure>\n<p>\u6309\u4e0b\u56de\u8f66\u9009\u4e2d\uff0c\u968f\u540e\u5207\u6362\u5230\u82f1\u6587\u8f93\u5165\u6cd5\u540e\u6309\u4e0bshift + s \u4fdd\u5b58<\/p>\n<figure id=\"attachment_mmd_575\" class=\"wp-block-image alignnone\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/starhill.online\/wp-content\/uploads\/2025\/11\/7_6.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" width=\"702\" height=\"93\" data-original=\"https:\/\/starhill.online\/wp-content\/uploads\/2025\/11\/7_6.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" class=\"attachment-full size-full\" alt=\"7_6\" loading=\"lazy\" align=\"none\" \/><\/div><\/figure>\n<p>\u5173\u95ed\u7ec8\u7aef<\/p>\n<figure id=\"attachment_mmd_576\" class=\"wp-block-image alignnone\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/starhill.online\/wp-content\/uploads\/2025\/11\/7_7.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" width=\"741\" height=\"629\" data-original=\"https:\/\/starhill.online\/wp-content\/uploads\/2025\/11\/7_7.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" class=\"attachment-full size-full\" alt=\"7_7\" loading=\"lazy\" align=\"none\" \/><\/div><\/figure>\n<p>8.\u6dfb\u52a0\u81ea\u5df1\u5199\u7684\u6b65\u8fdb\u7535\u673a\u63a7\u5236\u4ee3\u7801\u548cIO\u5b9a\u4e49<\/p>\n<figure id=\"attachment_mmd_577\" class=\"wp-block-image alignnone\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/starhill.online\/wp-content\/uploads\/2025\/11\/8_1-2.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" width=\"588\" height=\"614\" data-original=\"https:\/\/starhill.online\/wp-content\/uploads\/2025\/11\/8_1-2.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" class=\"attachment-full size-full\" alt=\"8_1\" loading=\"lazy\" align=\"none\" \/><\/div><\/figure>\n<p>\u8ba9cmake\u53ef\u4ee5\u627e\u5230<\/p>\n<figure id=\"attachment_mmd_578\" class=\"wp-block-image alignnone\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/starhill.online\/wp-content\/uploads\/2025\/11\/8_2-2.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" width=\"1610\" height=\"586\" data-original=\"https:\/\/starhill.online\/wp-content\/uploads\/2025\/11\/8_2-2.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" class=\"attachment-full size-full\" alt=\"8_2\" loading=\"lazy\" align=\"none\" \/><\/div><\/figure>\n<p>\u8fdb\u5165mcp_server.cc\uff0c\u6dfb\u52a0\u4ee3\u7801<\/p>\n<p>\u9876\u7aef\u6dfb\u52a0\u8def\u5f84<\/p>\n<pre><code class=\"lang-c language-c c\">#include &quot;Stepper_motor\/Little_Rotate.h&quot;<\/code><\/pre>\n<p>\u52a0\u5165\u4ee3\u7801<\/p>\n<pre><code class=\"lang-c language-c c\">    \/**\n     * @brief \u6b65\u8fdb\u7535\u673aMCP\u63a5\u5165\u4ee3\u7801\n     * \n     *\/\n    AddTool(&quot;\u8bbe\u7f6e\u6b65\u8fdb\u7535\u673a\u89d2\u5ea6&quot;,\n        &quot;Rotate the stepper motor to a specific angle.&quot;,\n        PropertyList({\n            Property(&quot;angle&quot;, kPropertyTypeInteger, 90, 270),    \/\/ \u89d2\u5ea6\u53c2\u6570\u8303\u56f4\n            Property(&quot;speed&quot;, kPropertyTypeInteger, 1, 500),    \/\/ \u8f6c\u901f\uff0c\u4f60\u53ef\u6839\u636e\u81ea\u5df1\u7684\u9700\u6c42\u8c03\u6574\n            Property(&quot;direction&quot;, kPropertyTypeInteger, 0, 1)    \/\/ \u65b9\u5411\uff1a0 \u6216 1\n        }),\n        [this](const PropertyList&amp; properties) -&gt; ReturnValue {\n\n            int angle = properties[&quot;angle&quot;].value\n&lt;int&gt;();\n            int speed = properties[&quot;speed&quot;].value\n&lt;int&gt;();\n            int direction = properties[&quot;direction&quot;].value\n&lt;int&gt;();\n\n            ESP_LOGI(TAG, &quot;\u6b65\u8fdb\u7535\u673a\u65cb\u8f6c\uff1a\u89d2\u5ea6=%d&deg; \u901f\u5ea6=%d \u65b9\u5411=%d&quot;,\n                     angle, speed, direction);\n\n            \/\/ \u8c03\u7528\u4f60\u7684\u6b65\u8fdb\u7535\u673a\u51fd\u6570\n            Little_stepper_rotate_US(angle, speed, direction);\n\n            return true;\n        });<\/code><\/pre>\n<figure id=\"attachment_mmd_579\" class=\"wp-block-image alignnone\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/starhill.online\/wp-content\/uploads\/2025\/11\/8_3-2.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" width=\"1436\" height=\"940\" data-original=\"https:\/\/starhill.online\/wp-content\/uploads\/2025\/11\/8_3-2.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" class=\"attachment-full size-full\" alt=\"8_3\" loading=\"lazy\" align=\"none\" \/><\/div><\/figure>\n<h2>3.\u51c6\u5907\u6210\u529f\u6492\u82b1<\/h2>\n<p>\u8fde\u63a5\u5f00\u53d1\u677f\u540e\u9009\u62e9\u6b63\u786e\u7684\u7aef\u53e3\uff0c\u6309\u4e0b\u5c0f\u706b\u82d7\u8fdb\u884c\u6784\u5efa\uff0c\u70e7\u5f55\uff0c\u76d1\u89c6<\/p>\n<figure id=\"attachment_mmd_570\" class=\"wp-block-image alignnone\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/starhill.online\/wp-content\/uploads\/2025\/11\/7_1-2.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" width=\"548\" height=\"76\" data-original=\"https:\/\/starhill.online\/wp-content\/uploads\/2025\/11\/7_1-2.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" class=\"attachment-full size-full\" alt=\"7_1\" loading=\"lazy\" align=\"none\" \/><\/div><\/figure>\n<p>\u7f16\u8bd1\u6210\u529f<\/p>\n<figure id=\"attachment_mmd_581\" class=\"wp-block-image alignnone\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/starhill.online\/wp-content\/uploads\/2025\/11\/9_2-2.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" width=\"700\" height=\"602\" data-original=\"https:\/\/starhill.online\/wp-content\/uploads\/2025\/11\/9_2-2.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" class=\"attachment-full size-full\" alt=\"9_2\" loading=\"lazy\" align=\"none\" \/><\/div><\/figure>\n<p>\u7b49\u5f85\u8fdb\u884c\u70e7\u5f55\u540e\u8bbe\u5907\u81ea\u52a8\u91cd\u542f\uff0c\u968f\u540e\u53ef\u4ee5\u5bf9\u8bdd\u8fdb\u884c\u6b65\u8fdb\u7535\u673a\u8bed\u97f3\u63a7\u5236\u4e86<\/p>","protected":false},"excerpt":{"rendered":"<p>\u672c\u6587\u7ae0\u9ed8\u8ba4\u5b89\u88c5\u597dVsCode\u7684IDF\u7684\u73af\u5883\uff0c\u5982\u679c\u6ca1\u6709\u5b89\u88c5\u597d\u73af\u5883\uff0c\u53ef\u4ee5\u770b\u5609\u7acb\u521b\u7684IDF\u5b89\u88c5\u73af\u5883 1. IDF\u73af\u5883 [&hellip;]<\/p>","protected":false},"author":1,"featured_media":562,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[5],"class_list":["post-559","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-esp32","tag-esp32"],"_links":{"self":[{"href":"https:\/\/starhill.online\/index.php\/wp-json\/wp\/v2\/posts\/559","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/starhill.online\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/starhill.online\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/starhill.online\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/starhill.online\/index.php\/wp-json\/wp\/v2\/comments?post=559"}],"version-history":[{"count":4,"href":"https:\/\/starhill.online\/index.php\/wp-json\/wp\/v2\/posts\/559\/revisions"}],"predecessor-version":[{"id":584,"href":"https:\/\/starhill.online\/index.php\/wp-json\/wp\/v2\/posts\/559\/revisions\/584"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/starhill.online\/index.php\/wp-json\/wp\/v2\/media\/562"}],"wp:attachment":[{"href":"https:\/\/starhill.online\/index.php\/wp-json\/wp\/v2\/media?parent=559"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/starhill.online\/index.php\/wp-json\/wp\/v2\/categories?post=559"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/starhill.online\/index.php\/wp-json\/wp\/v2\/tags?post=559"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}