{"id":4192,"date":"2026-10-13T06:53:22","date_gmt":"2026-10-12T22:53:22","guid":{"rendered":"https:\/\/saludpcb.com\/zh\/?p=4192"},"modified":"2026-10-13T07:32:46","modified_gmt":"2026-10-12T23:32:46","slug":"hermes-agent-esp32-led-rainbow","status":"publish","type":"post","link":"https:\/\/saludpcb.com\/zh\/hermes-agent-esp32-led-rainbow\/","title":{"rendered":"2026 Hermes Agent \u5e6b\u4f60\u5beb\u7a0b\u5f0f |  ESP32 LED \u7a0b\u5f0f"},"content":{"rendered":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity alignwide has-text-color has-palette-color-1-color has-palette-color-1-background-color has-background is-style-wide\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Hermes Agent<\/strong> \u662f Nous Research \u51fa\u54c1\u7684\u958b\u6e90 <a href=\"https:\/\/saludpcb.com\/zh\/openclaw-agentic-esp32-guide\/\">AI Agent<\/a>\u2014\u2014\u6703\u7528\u7d42\u7aef\u6a5f\u3001\u6703\u8b80\u5beb\u6a94\u6848\u3001\u6703\u4e0a\u7db2\u67e5\u8cc7\u6599\uff0c\u751a\u81f3\u6703\u628a\u8e29\u904e\u7684\u5751\u5beb\u6210\u81ea\u5df1\u7684\u6280\u80fd\u7b46\u8a18\u3002\u9019\u7bc7\u6587\u7ae0\u662f\u4e00\u6b21\u5b8c\u6574\u5be6\u6e2c\uff1a<strong>\u5f9e\u4e00\u53e5\u300c\u5e6b\u6211\u5075\u6e2c\u958b\u767c\u677f\u300d\u958b\u59cb\uff0c\u5230\u677f\u4e0a\u7684 RGB LED \u8f49\u51fa\u5f69\u8679\uff0c\u5168\u7a0b\u7531 Hermes \u4ee3\u8fa6<\/strong>\uff0c\u4eba\u985e\u53ea\u8ca0\u8cac\u6309\u6279\u51c6\u3001\u63d2\u677f\u5b50\u3001\u62cd\u5f71\u7247\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u807d\u8d77\u4f86\u50cf\u6309\u4e0b\u6309\u9215\u5c31\u7d50\u675f\uff1f\u5be6\u969b\u904e\u7a0b\u7cbe\u5f69\u5f97\u591a\uff1aAI \u5beb\u7684\u7a0b\u5f0f\u6709 bug\u3001\u71d2\u9304\u88ab\u677f\u5b50\u7684 USB \u6676\u7247\u64cb\u4e86\u4e09\u5c0f\u6642\u3001\u6700\u5f8c\u767c\u73fe PSRAM \u662f\u767d\u724c\u76f8\u5bb9\u9846\u7c92\u4e14\u9ad4\u8cea\u4e0d\u4f73\u2014\u2014<strong>\u9019\u689d\u9664\u932f\u9577\u5f81\uff0c\u624d\u662f AI Agent \u6642\u4ee3\u5beb\u97cc\u9ad4\u7684\u771f\u5be6\u6a23\u8c8c<\/strong>\uff0c\u4e5f\u662f\u9019\u7bc7\u6587\u7ae0\u6700\u503c\u5f97\u770b\u7684\u90e8\u5206\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/saludpcb.com\/zh\/wp-content\/uploads\/2026\/10\/2026-Hermes-Agent-Codes-for-You-ESP32-LED-Firmware-1.jpg\" alt=\"Hermes Agent\" title=\"\"><\/figure>\n\n\n\n<div class=\"wp-block-rank-math-toc-block\" id=\"rank-math-toc\"><h2>\u5167\u5bb9<\/h2><nav><ul><li class=\"\"><a href=\"#\u70ba\u4ec0\u9ebc\u7528-hermes-agent-\u5beb\u97cc\u9ad4\">\u70ba\u4ec0\u9ebc\u7528 Hermes Agent \u5beb\u97cc\u9ad4<\/a><\/li><li class=\"\"><a href=\"#\u4e8b\u524d\u6e96\u5099\">\u4e8b\u524d\u6e96\u5099<\/a><\/li><li class=\"\"><a href=\"#\u7b2c\u4e00\u5e55-\u4e00\u53e5\u8a71\u5075\u6e2c\u677f\u5b50\">\u4e00\u53e5\u8a71\u5075\u6e2c\u677f\u5b50<\/a><\/li><li class=\"\"><a href=\"#\u7b2c\u4e8c\u5e55-hermes-agent-\u5beb\u7a0b\u5f0f\u542b\u4e09\u9023-bug\">Hermes Agent \u5beb\u7a0b\u5f0f<\/a><\/li><li class=\"\"><a href=\"#ai-\u5beb\u7684\u7a0b\u5f0f\u4e5f\u6709-bug\u4e09\u9023\">AI \u5beb\u7684\u7a0b\u5f0f\u4e5f\u6709 bug<\/a><\/li><li class=\"\"><a href=\"#\u7b2c\u4e09\u5e55-\u71d2\u9304\u9577\u5f810105-0107-\u8207-paced-esptool\">\u71d2\u9304\u9577\u5f81<\/a><\/li><li class=\"\"><a href=\"#\u7b2c\u56db\u5e55-\u958b\u6a5f\u5d29\u6f70\u8207-psram-\u4e8c\u5206\u6cd5\">\u958b\u6a5f\u5d29\u6f70<\/a><\/li><li class=\"\"><a href=\"#\u6700\u7d42\u9a57\u8b49-log-\u8207\u5f69\u8679\">\u6700\u7d42\u9a57\u8b49<\/a><\/li><li class=\"\"><a href=\"#\u5be6\u6230\u5fc3\u6cd5\">\u5be6\u6230\u5fc3\u6cd5<\/a><\/li><li class=\"\"><a href=\"#\u7d50\u8ad6\">\u7d50\u8ad6<\/a><\/li><\/ul><\/nav><\/div>\n\n\n\n<h2 id=\"\u70ba\u4ec0\u9ebc\u7528-hermes-agent-\u5beb\u97cc\u9ad4\" class=\"wp-block-heading\">\u70ba\u4ec0\u9ebc\u7528 Hermes Agent \u5beb\u97cc\u9ad4<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u5d4c\u5165\u5f0f\u958b\u767c\u7684\u7b2c\u4e00\u9846 LED\uff0c\u5361\u4f4f\u4eba\u7684\u5f9e\u4f86\u4e0d\u662f\u9583\u720d\u908f\u8f2f\uff08\u90a3\u53ea\u662f\u5e7e\u884c\u7a0b\u5f0f\u78bc\uff09\uff0c\u800c\u662f<strong>\u9031\u908a\u7684\u4e00\u5207<\/strong>\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u74b0\u5883<\/strong>\uff1aESP-IDF \u7248\u672c\u3001\u5de5\u5177\u93c8\u3001Python venv\u3001\u74b0\u5883\u8b8a\u6578\u2014\u2014\u88dd\u932f\u4e00\u6b65\u6eff\u76e4\u7686\u8f38<\/li>\n\n\n\n<li><strong>\u786c\u9ad4<\/strong>\uff1a\u9019\u584a\u677f\u5b50\u7684 LED \u63a5\u54ea\u652f\u8173\uff1f\u9a45\u52d5\u65b9\u5f0f\u662f GPIO \u9084\u662f WS2812\uff1f<\/li>\n\n\n\n<li><strong>\u71d2\u9304<\/strong>\uff1aUSB \u8f49\u63a5\u6676\u7247\u7684\u76f8\u5bb9\u6027\u3001bootloader \u9032\u4e0d\u4e86\u3001\u83ab\u540d\u5176\u5999\u7684 checksum error<\/li>\n\n\n\n<li><strong>\u786c\u9ad4\u9ad4\u8cea<\/strong>\uff1aPSRAM \u662f\u5426\u70ba\u767d\u724c\u76f8\u5bb9\u6599\u4ef6\uff1f\u6642\u8108\u8981\u8a2d\u591a\u5c11\u624d\u4e0d\u6703\u5d29\u6f70\uff1f<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">AI Agent \u7684\u50f9\u503c\u4e0d\u662f\u300c\u66ff\u4f60\u5beb\u90a3\u5e7e\u884c\u9583\u720d\u7a0b\u5f0f\u300d\uff0c\u800c\u662f<strong>\u628a\u9019\u4e9b\u7463\u4e8b\u6574\u5305\u5403\u6389<\/strong>\uff1a\u5b83\u6703\u4e0a\u7db2\u67e5\u677f\u578b\u898f\u683c\u3001\u7ffb SDK \u539f\u59cb\u78bc\u78ba\u8a8d API\u3001\u8b80 boot log \u5b9a\u4f4d\u5d29\u6f70\u9ede\u3001\u751a\u81f3\u53bb GitHub issue \u88e1\u6316\u51fa\u8ddf\u4f60\u4e00\u6a21\u4e00\u6a23\u7684\u6848\u4f8b\u3002\u4eba\u985e\u7684\u89d2\u8272\u5f9e\u300c\u64cd\u4f5c\u54e1\u300d\u8b8a\u6210\u300c\u5be9\u7a3f\u4eba\uff0b\u6c7a\u7b56\u8005\u300d\u3002<\/p>\n\n\n\n<h2 id=\"\u4e8b\u524d\u6e96\u5099\" class=\"wp-block-heading\">\u4e8b\u524d\u6e96\u5099<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>\u9805\u76ee<\/th><th>\u7248\u672c\/\u5167\u5bb9<\/th><th>\u8aaa\u660e<\/th><\/tr><\/thead><tbody><tr><td>Hermes Agent<\/td><td>v0.21.6<\/td><td><code>hermes update<\/code> \u4e00\u9375\u5347\u7d1a\uff0cgit \u5b89\u88dd<\/td><\/tr><tr><td>\u6a21\u578b\u914d\u7f6e<\/td><td>\u96f2\u7aef <code>z-ai\/glm-5.3<\/code>\uff08NVIDIA NIM\uff09\uff0b \u672c\u5730 <code>Qwen3.8-27B<\/code> \u5099\u63f4<\/td><td>\u96f2\u7aef\u639b\u4e86\u81ea\u52d5\u5207\u672c\u5730\uff0c\u7121\u7e2b\u63a5\u624b<\/td><\/tr><tr><td><a href=\"https:\/\/docs.espressif.com\/projects\/esp-idf\/en\/stable\/esp32\/index.html\" target=\"_blank\" rel=\"noopener\">ESP-IDF<\/a><\/td><td>v5.5.5\uff08\u542b esp32s3 \u5de5\u5177\u93c8\uff09<\/td><td>\u7528 Espressif \u5b98\u65b9 <code>eim<\/code> \u5b89\u88dd\u5668<\/td><\/tr><tr><td>\u958b\u767c\u677f<\/td><td>YD-ESP32-S3\uff08DevKitC-1 \u76f8\u5bb9\u677f\uff0c16MB flash\uff0b8MB PSRAM\uff09<\/td><td>\u5167\u5efa WS2812 RGB LED \u5728 GPIO48<\/td><\/tr><tr><td>\u9023\u63a5<\/td><td>USB \u8cc7\u6599\u7dda\uff08CH343 \u8f49\u63a5\u6676\u7247\uff09<\/td><td>\u52d9\u5fc5\u7528\u8cc7\u6599\u7dda\uff0c\u5145\u96fb\u7dda\u5075\u6e2c\u4e0d\u5230<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u6a21\u578b\u914d\u7f6e\u7684\u91cd\u9ede\uff1aHermes \u652f\u63f4 <strong>fallback \u93c8<\/strong>\u2014\u2014\u96f2\u7aef\u6a21\u578b\uff08\u5f37\u3001\u4f46\u5076\u723e\u903e\u6642\uff09\u639b\u6389\u6642\u81ea\u52d5\u5207\u5230\u672c\u6a5f\u6a21\u578b\uff08\u5feb\u3001\u96e2\u7dda\u53ef\u7528\uff09\u3002\u9019\u6b21\u5be6\u6e2c\u4e2d\u96f2\u7aef\u53cd\u8986\u903e\u6642\uff0c\u672c\u5730\u6a21\u578b\u63a5\u624b\u4e86\u597d\u5e7e\u8f2a\uff0c\u5168\u7a0b\u7121\u611f\u3002<\/p>\n\n\n\n<h2 id=\"\u7b2c\u4e00\u5e55-\u4e00\u53e5\u8a71\u5075\u6e2c\u677f\u5b50\" class=\"wp-block-heading\">\u4e00\u53e5\u8a71\u5075\u6e2c\u677f\u5b50<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u9032\u5165 Hermes CLI \u5f8c\uff0c\u7b2c\u4e00\u53e5\u8a71\uff1a<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u5e6b\u6211\u5075\u6e2c\u76ee\u524d\u63a5\u5728\u96fb\u8166\u4e0a\u7684\u958b\u767c\u677f\uff1a\u5148\u770b <code>\/dev\/cu.usb*<\/code> \u6709\u6c92\u6709\u5e8f\u5217\u57e0\uff0c\u518d\u7528 <code>system_profiler SPUSBDataType<\/code> \u770b USB \u88dd\u7f6e\u578b\u865f\uff1b\u627e\u5f97\u5230\u57e0\u7684\u8a71\uff0c\u5148\u555f\u52d5\u74b0\u5883\uff0c\u518d\u7528 esptool \u8b80\u6676\u7247 ID\u3002<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">\u5b83\u505a\u7684\u4e8b\uff1a\u5217\u51fa\u5e8f\u5217\u57e0 \u2192 \u67e5\u51fa USB \u8f49\u63a5\u6676\u7247\u662f <strong>WCH CH343<\/strong> \u2192 \u9023\u7e8c\u5169\u6b21 esptool \u9023\u7dda\u5931\u6557\u5f8c<strong>\u81ea\u5df1\u63db\u53c3\u6578<\/strong>\uff08<code>--no_reset<\/code>\u3001\u6307\u5b9a\u6676\u7247\uff09\u2192 \u6210\u529f\u8b80\u51fa\u8eab\u5206\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">\u6676\u7247\uff1aESP32-S3\uff08rev v0.2\uff0cWiFi + BLE\uff09\nFlash\uff1a16MB \u00b7 PSRAM\uff1a8MB\uff08Octal\uff09\nMAC\uff1afc:01:2c:d1:85:ec<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u9019\u6bb5\u6709\u5169\u500b\u503c\u5f97\u6ce8\u610f\u7684\u7d30\u7bc0\uff1a\u5075\u6e2c\u300c\u5931\u6557\u300d\u6642\u5b83\u4e0d\u6703\u5f37\u884c\u778e\u731c\uff0c\u6703\u8aa0\u5be6\u56de\u5831\u300c\u6c92\u63d2\u677f\u5b50\u300d\u4e26\u7d66\u51fa\u6392\u67e5\u5efa\u8b70\uff08\u8cc7\u6599\u7dda vs \u5145\u96fb\u7dda\uff09\uff1b\u9023\u4e0d\u4e0a\u6642\u6703\u81ea\u5df1\u8abf\u6574\u7b56\u7565\u91cd\u8a66\uff0c\u800c\u4e0d\u662f\u628a\u932f\u8aa4\u4e1f\u56de\u7d66\u4f60\u3002<\/p>\n\n\n\n<h2 id=\"\u7b2c\u4e8c\u5e55-hermes-agent-\u5beb\u7a0b\u5f0f\u542b\u4e09\u9023-bug\" class=\"wp-block-heading\">Hermes Agent \u5beb\u7a0b\u5f0f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u7b2c\u4e8c\u53e5\u8a71\u628a\u898f\u683c\u4ea4\u4ee3\u6e05\u695a\uff1a<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u677f\u5b50\u78ba\u8a8d\u662f ESP32-S3\uff0816MB flash + 8MB PSRAM\uff09\u3002\u78ba\u8a8d\u5167\u5efa\u53ef\u7a0b\u5f0f LED \u8173\u4f4d\u3001\u5efa\u7acb ESP-IDF v5.5.5 \u5c08\u6848\u3001\u5beb LED \u9583\u720d\u7a0b\u5f0f\u3001\u7de8\u8b6f\u3002<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Hermes \u7684\u505a\u6cd5\u76f8\u7576\u5c08\u696d\uff1a\u5148<strong>\u4e0a\u7db2\u67e5\u8b49\u677f\u578b<\/strong>\uff08YD-ESP32-S3 \u5b98\u65b9\u898f\u683c\u8868\uff0b\u96fb\u8def\u5716\uff09\uff0c\u78ba\u8a8d WS2812 \u5728 <strong>GPIO48<\/strong>\uff08DevKitC-1 v1.0 \u4f48\u5c40\uff1bv1.1 \u624d\u662f GPIO38\uff09\uff1b\u63a5\u8457<strong>\u7ffb\u672c\u6a5f IDF \u539f\u59cb\u78bc<\/strong>\u78ba\u8a8d RMT \u9a45\u52d5\u7684 API \u7c3d\u540d\uff0c\u624d\u958b\u59cb\u64b0\u5beb\u7a0b\u5f0f\u78bc\u3002\u5b83\u9078\u64c7\u76f4\u63a5\u7528 RMT \u5916\u8a2d\u9a45\u52d5 WS2812\uff0c\u4e0d\u4f9d\u8cf4\u7b2c\u4e09\u65b9 <code>led_strip<\/code> \u5143\u4ef6\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">\/* WS2812 wire order: G byte first, then R, then B \u2014 each byte MSB first *\/\nstatic void encode_pixel(rmt_symbol_word_t *symbols, uint8_t r, uint8_t g, uint8_t b)\n{\n    const uint8_t grb[3] = { g, r, b };\n    int i = 0;\n    for (int byte_idx = 0; byte_idx &lt; 3; byte_idx++) {\n        for (int bit = 7; bit &gt;= 0; bit--) {\n            bool one = (grb[byte_idx] &gt;&gt; bit) &amp; 1;\n            symbols[i].level0 = 1;\n            symbols[i].duration0 = ns_to_ticks(one ? T1H_NS : T0H_NS);\n            symbols[i].level1  = 0;\n            symbols[i].duration1 = ns_to_ticks(one ? T1L_NS : T0L_NS);\n            i++;\n        }\n    }\n}<\/code><\/pre>\n\n\n\n<h2 id=\"ai-\u5beb\u7684\u7a0b\u5f0f\u4e5f\u6709-bug\u4e09\u9023\" class=\"wp-block-heading\">AI \u5beb\u7684\u7a0b\u5f0f\u4e5f\u6709 bug<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u7b2c\u4e00\u6b21 build \u4e4b\u524d\uff0c\u4eba\u985e\u5be9\u67e5\u63ea\u51fa\u7b2c\u4e00\u500b\uff1b\u5f8c\u9762\u5169\u500b\u662f\u7de8\u8b6f\u8207\u786c\u9ad4\u903c\u51fa\u4f86\u7684\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>#<\/th><th>Bug<\/th><th>\u5fb5\u72c0<\/th><th>\u4fee\u5fa9\u65b9\u5f0f<\/th><\/tr><\/thead><tbody><tr><td>1<\/td><td><strong>GRB \u9806\u5e8f\u7b97\u53cd<\/strong>\uff08bit 23 \u5c0d\u5230 B\uff09<\/td><td>\u5f69\u8679\u7167\u6a23\u8f49\u3001\u7d05\u71c8\u7167\u6a23\u7d05\uff0c\u4f46\u7d14\u7da0\u6703\u4eae\u6210\u85cd\u2014\u2014\u8089\u773c\u5e7e\u4e4e\u770b\u4e0d\u51fa\u4f86<\/td><td>\u4eba\u985e\u5be9\u67e5\u767c\u73fe\uff0cAI \u91cd\u5beb\u70ba\u986f\u5f0f\u7684 G\u2192R\u2192B \u9010 byte<\/td><\/tr><tr><td>2<\/td><td><strong>RMT \u8a18\u61b6\u9ad4\u8d85\u914d<\/strong>\uff0864 symbols\uff09<\/td><td>S3 \u6bcf\u901a\u9053\u53ea\u6709 48 words\uff0c<code>rmt_new_tx_channel<\/code> \u6703\u76f4\u63a5\u56de\u932f<\/td><td>AI \u81ea\u67e5 SOC \u5e38\u6578\u5f8c\u6539 48<\/td><\/tr><tr><td>3<\/td><td><strong>API \u6b04\u4f4d\u540d\u932f<\/strong>\uff08<code>flags.loop_mode<\/code>\uff09<\/td><td>IDF 5.5 \u7684 <code>rmt_transmit_config_t<\/code> \u7528 <code>loop_count<\/code><\/td><td>\u7de8\u8b6f\u5668\u5831\u932f\u5f8c AI \u67e5\u6a19\u982d\u6a94\u4fee\u6b63\uff0c\u4e26\u540c\u6b65\u66f4\u65b0\u81ea\u5df1\u7684\u6280\u80fd\u7b46\u8a18<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u7b2c 1 \u984c\u6700\u503c\u5f97\u6df1\u601d\uff1a<strong>\u7a0b\u5f0f\u6703\u52d5\u4e0d\u4ee3\u8868\u7a0b\u5f0f\u662f\u5c0d\u7684<\/strong>\u3002GRB\/BGR \u985b\u5012\u7684\u5f69\u8679\u5728\u4eba\u773c\u770b\u4f86\u4e00\u6a23\u662f\u5f69\u8679\uff08\u8272\u76f8\u53cd\u8f49\u800c\u5df2\uff09\uff0c\u53ea\u6709\u5be9\u5230\u8cc7\u6599\u5354\u5b9a\u90a3\u4e00\u5c64\u624d\u6703\u6293\u5230\u3002AI \u80fd\u5beb\u51fa\u300c\u80fd\u52d5\u300d\u7684\u7a0b\u5f0f\uff0c\u4f46\u8de8\u5c64\u4e00\u81f4\u6027\u7684\u6700\u5f8c\u4e00\u9053\u9632\u7dda\uff0c\u4ecd\u7136\u662f\u61c2\u786c\u9ad4\u7684\u4eba\u985e\u3002<\/p>\n\n\n\n<h2 id=\"\u7b2c\u4e09\u5e55-\u71d2\u9304\u9577\u5f810105-0107-\u8207-paced-esptool\" class=\"wp-block-heading\">\u71d2\u9304\u9577\u5f81<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u7a0b\u5f0f\u7de8\u8b6f\u901a\u904e\uff08200KB bin\uff09\uff0c\u771f\u6b63\u7684\u786c\u4ed7\u624d\u958b\u59cb\u3002\u71d2\u9304\u9023\u74b0\u5931\u6557\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>stub \u6a21\u5f0f<\/strong>\uff1a\u4e0a\u50b3 stub \u6642 <code>0107: Checksum error<\/code><\/li>\n\n\n\n<li><strong>ROM \u76f4\u5beb<\/strong>\uff08<code>--no-stub<\/code>\uff09\uff1a\u7b2c\u4e00\u500b flash block \u5c31 <code>0105: format of the received message is invalid<\/code><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Hermes \u7684\u6392\u67e5\u6d41\u7a0b\u5b8c\u5168\u662f\u5de5\u7a0b\u5e2b\u505a\u6cd5\uff1a\u5148<strong>\u6392\u9664\u8b8a\u6578<\/strong>\uff08\u8b80 flash OK\u3001\u64e6\u9664 OK \u2192 \u901a\u8a0a\u662f\u901a\u7684\uff09\uff1b\u63db USB \u7dda\u3001\u63db\u57e0\u91cd\u8a66 \u2192 \u884c\u70ba\u4e0d\u8b8a \u2192 \u6392\u9664\u5be6\u9ad4\u5c64\uff1b\u6383\u904e\u6240\u6709 baud rate \u2192 \u5168\u8ecd\u8986\u6c92 \u2192 \u6392\u9664\u901f\u5ea6\uff1b\u6700\u5f8c\u4e0a\u7db2\u641c\u5c0b\uff0c<strong>\u5728 Espressif \u5b98\u65b9 issue #1178 \u627e\u5230\u4e00\u6a21\u4e00\u6a23\u7684\u6848\u4f8b<\/strong>\uff08\u540c\u9846 S3 rev v0.2\uff09\uff0c\u4e26\u5f9e Meta \u7684\u958b\u6e90\u5c08\u6848 muse-gadget-sdk \u627e\u5230\u89e3\u6cd5\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u6839\u56e0<\/strong>\uff1a\u9019\u584a\u677f\u5b50\u7684 CH343 USB \u8f49\u63a5\u6676\u7247<strong>\u6c92\u6709\u786c\u9ad4\u6d41\u91cf\u63a7\u5236<\/strong>\u3002esptool \u4e00\u53e3\u6c23\u704c\u4e00\u6574\u5305\u8cc7\u6599\uff0cUART \u4f86\u4e0d\u53ca\u6d88\u5316\u5c31\u6389\u5c01\u5305\u2014\u2014\u5c0f\u91cf\u50b3\u8f38\uff08\u8b80\/\u64e6\uff09\u525b\u597d\u904e\u95dc\uff0c\u5927\u91cf\u50b3\u8f38\uff08\u5beb\u5165\u3001\u4e0a\u50b3 stub\uff09\u5fc5\u639b\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u89e3\u6cd5<\/strong>\uff1apaced \u5beb\u5165\u2014\u2014\u628a\u8cc7\u6599\u5207\u6210 64 bytes \u5c0f\u5305\uff0c\u6309\u7dda\u901f\u7bc0\u6d41\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\"># tools\/paced_esptool.py\uff08\u7bc0\u9304\uff0c\u6e90\u81ea muse-gadget-sdk, Apache-2.0\uff09\nCHUNK = 64\n\ndef paced_write(self, data):\n    data = bytes(data)\n    n = 0\n    for i in range(0, len(data), CHUNK):\n        chunk = data[i : i + CHUNK]\n        n += _write(self, chunk)\n        self.flush()\n        time.sleep(len(chunk) * 10 \/ self.baudrate)  # 10 bits a byte on the wire\n    return n\n\nserial.Serial.write = paced_write   # \u88dc\u4e01\u5f8c\u518d import esptool<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u7528\u5b83\u71d2\u9304\uff1a\u4e09\u500b bin\uff08bootloader \/ partition table \/ app\uff09<strong>\u5168\u90e8\u5beb\u5165\u6210\u529f\u3001hash \u9a57\u8b49\u901a\u904e<\/strong>\u3002<\/p>\n\n\n\n<h2 id=\"\u7b2c\u56db\u5e55-\u958b\u6a5f\u5d29\u6f70\u8207-psram-\u4e8c\u5206\u6cd5\" class=\"wp-block-heading\">\u958b\u6a5f\u5d29\u6f70<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u71d2\u9032\u53bb\u4e86\uff0c\u65b0\u7684\u5751\uff1a\u677f\u5b50\u958b\u6a5f\u5f8c<strong>\u7121\u9650\u91cd\u555f<\/strong>\uff0clog \u65b7\u5728\u7b2c\u4e8c\u968e\u6bb5 bootloader \u4e4b\u5f8c\uff0c<code>app_main()<\/code> \u4e00\u6b65\u90fd\u6c92\u8dd1\u5230\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hermes \u7684\u4e8c\u5206\u6cd5\u4e7e\u6de8\u4fd0\u843d\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u5148\u9a57\u8b49\u71d2\u9304\u672c\u8eab<\/strong>\u2014\u2014\u628a flash \u5167\u5bb9\u8b80\u56de\u4f86\u9010\u6bb5\u6bd4\u5c0d\uff0c\u5168\u90e8\u6b63\u78ba \u2705<\/li>\n\n\n\n<li><strong>\u518d\u505a\u7159\u9727\u6e2c\u8a66<\/strong>\u2014\u2014\u63db\u4e00\u500b\u300c\u4ec0\u9ebc\u90fd\u4e0d\u505a\u3001\u53ea\u5370\u4e00\u884c\u5b57\u300d\u7684\u7a0b\u5f0f\uff08\u5f69\u8679\u7248\u5b8c\u6574\u5099\u4efd\uff09\u2192 <strong>\u7167\u6a23\u5d29<\/strong> \u2192 \u6392\u9664\u7a0b\u5f0f\u908f\u8f2f<\/li>\n\n\n\n<li><strong>\u95dc\u9589\u5acc\u7591\u72af<\/strong>\u2014\u2014\u628a PSRAM \u95dc\u6389\u91cd\u7de8 \u2192 <strong>app \u8dd1\u5230 <code>app_main()<\/code>\uff0c\u8ff4\u5708\u7a69\u5b9a\u904b\u884c<\/strong> \u2192 \u5147\u624b\u73fe\u5f62<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u6839\u56e0<\/strong>\uff1a\u9019\u584a\u677f\u5b50\u7684 PSRAM\uff08vendor 0x0d\uff0c\u767d\u724c\u76f8\u5bb9\u9846\u7c92\uff09\u5728 <strong>80MHz Octal \u6a21\u5f0f\u521d\u59cb\u5316\u6642\u5fc5\u5d29<\/strong>\u3002\u964d\u901f\u5230 <strong>40MHz<\/strong> \u5f8c\u5b8c\u5168\u7a69\u5b9a\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">esp_psram: Found 8MB PSRAM device\nesp_psram: Speed: 40MHz\nesp_psram: SPI SRAM memory test OK<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u628a <code>sdkconfig.defaults<\/code> \u6c38\u4e45\u6539\u70ba 40MHz \u4e26\u8a3b\u660e\u539f\u56e0\u2014\u2014\u9019\u7a2e\u300c\u70ba\u4ec0\u9ebc\u4e0d\u662f\u9810\u8a2d\u503c\u300d\u7684\u8a3b\u89e3\uff0c\u4e09\u500b\u6708\u5f8c\u7684\u81ea\u5df1\u6703\u611f\u8b1d\u73fe\u5728\u7684\u81ea\u5df1\u3002<\/p>\n\n\n\n<h2 id=\"\u6700\u7d42\u9a57\u8b49-log-\u8207\u5f69\u8679\" class=\"wp-block-heading\">\u6700\u7d42\u9a57\u8b49<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u9084\u539f\u5f69\u8679\u7248\u3001\u7528 paced \u5de5\u5177\u505a\u6700\u7d42\u71d2\u9304\uff0c\u5b8c\u6574\u958b\u6a5f log \u7684\u95dc\u9375\u4e09\u884c\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">I (197) esp_psram: Speed: 40MHz\nI (1015) spi_flash: detected chip: boya\nI (1055) led_demo: hermes_led_demo: rainbow cycle on WS2812 @ GPIO48<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u677f\u4e0a\u7684 WS2812 \u958b\u6a5f\u5148\u9583\u7d05\u71c8\u4e00\u4e0b\uff0c\u7136\u5f8c\u4ee5 HSV \u8272\u76f8\u6bcf 10ms \u8f49 1\u00b0 \u7684\u901f\u5ea6\u5faa\u74b0\u2014\u2014\u7d05\u3001\u6a59\u3001\u9ec3\u3001\u7da0\u3001\u9752\u3001\u85cd\u3001\u7d2b\uff0c3.6 \u79d2\u4e00\u5708\uff0c\u6c38\u4e0d\u505c\u6b47\u3002<\/p>\n\n\n\n<h2 id=\"\u5be6\u6230\u5fc3\u6cd5\" class=\"wp-block-heading\">\u5be6\u6230\u5fc3\u6cd5<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u8b93 Agent \u505a\u4e8b\uff0c\u4f46\u4fdd\u7559\u5be9\u67e5\u6b0a<\/strong>\u2014\u2014AI \u5beb\u7684\u7a0b\u5f0f\u300c\u6703\u52d5\u300d\u4e0d\u7b49\u65bc\u300c\u662f\u5c0d\u7684\u300d\u3002GRB \u985b\u5012\u90a3\u984c\uff0c\u4eba\u985e\u5be9\u67e5\u7684\u50f9\u503c\u5927\u65bc AI \u81ea\u67e5\u3002\u770b\u5230\u53ef\u7591\u8655\u76f4\u63a5\u6307\u51fa\uff0c\u8b93\u5b83\u81ea\u5df1\u4fee\uff08\u5b83\u4fee\u5f97\u53c8\u5feb\u53c8\u597d\uff0c\u9084\u6703\u8a18\u7b46\u8a18\uff09\u3002<\/li>\n\n\n\n<li><strong>\u6279\u51c6\u6a5f\u5236\u662f\u5b89\u5168\u7db2\uff0c\u5225\u5716\u7701\u4e8b<\/strong>\u2014\u2014Hermes \u5c0d\u5371\u96aa\u6307\u4ee4\uff08<code>python -c<\/code>\u3001<code>rm -rf<\/code>\uff09\u6703\u8df3\u6279\u51c6\u6846\uff0c60 \u79d2\u672a\u56de\u61c9\u81ea\u52d5\u62d2\u7d55\u3002\u9019\u500b\u8a2d\u8a08\u5728\u6574\u5834\u5be6\u6e2c\u4e2d\u6514\u4e0b\u4e86\u591a\u689d\u4e0d\u5fc5\u8981\u57f7\u884c\u7684\u6307\u4ee4\u3002\u65b9\u5411\u9375\uff0bEnter \u7684\u9078\u55ae\u64cd\u4f5c\uff0c\u8a18\u5f97\u5148\u628a\u7d42\u7aef\u6a5f\u8996\u7a97\u9ede\u6210\u7126\u9ede\u3002<\/li>\n\n\n\n<li><strong>\u96f2\u7aef\uff0b\u672c\u5730 fallback \u662f\u5be6\u7528\u914d\u7f6e<\/strong>\u2014\u2014\u96f2\u7aef\u6a21\u578b\u667a\u5546\u9ad8\u4f46\u5076\u723e\u903e\u6642\uff0c\u672c\u5730\u6a21\u578b\u5feb\u4e14\u96e2\u7dda\u53ef\u7528\u3002\u6574\u5834\u9664\u932f\u4e0b\u4f86\u5169\u8005\u7121\u7e2b\u63a5\u624b\uff0c\u9ad4\u611f\u8fd1\u4e4e\u96f6\u4e2d\u65b7\u3002<\/li>\n\n\n\n<li><strong>\u300c\u932f\u8aa4\u78bc\u5168\u90e8\u5217\u8209\uff0b\u6392\u9664\u6cd5\u300d\u662f\u6700\u5f37\u9664\u932f\u6a21\u677f<\/strong>\u2014\u2014\u8b80 OK\/\u64e6 OK\/\u5beb\u639b \u2192 \u6392\u9664\u5be6\u9ad4\u5c64\uff1b\u63db\u7dda\u7121\u6548 \u2192 \u6392\u9664\u7dda\u6750\uff1b\u5168 baud \u5931\u6557 \u2192 \u6392\u9664\u901f\u5ea6\u3002\u6bcf\u6392\u9664\u4e00\u500b\u8b8a\u6578\uff0c\u5acc\u7591\u7bc4\u570d\u5c31\u7e2e\u4e00\u5708\uff0c\u6700\u5f8c\u5269\u4e0b\u7684\u7b54\u6848\u5f80\u5f80\u85cf\u5728 GitHub issue \u88e1\u3002<\/li>\n\n\n\n<li><strong>\u76f8\u5bb9\u958b\u767c\u677f\u7684\u6676\u7247\u9ad4\u8cea\u53c3\u5dee\u4e0d\u9f4a\u662f\u5e38\u614b<\/strong>\u2014\u2014\u6a19\u7c64\u5beb 16MB Flash\uff0b8MB PSRAM \u4e0d\u4ee3\u8868\u80fd\u8dd1\u6eff\u5b98\u65b9\u6700\u9ad8\u6642\u8108\u3002PSRAM \u964d\u901f\u81f3 40MHz \u9019\u7a2e\u300c\u898f\u683c\u6253\u6298\u63db\u7a69\u5b9a\u300d\u7684\u59a5\u5354\uff0c\u6b63\u5f0f\u91cf\u7522\u6216\u5c08\u6848\u5b9a\u6848\u524d\u52d9\u5fc5\u5be6\u6e2c\u3002<\/li>\n\n\n\n<li><strong>Agent \u7684\u81ea\u6211\u9032\u5316\u662f\u771f\u7684<\/strong>\u2014\u2014\u9019\u6b21\u5b83\u628a\u300c\u677f\u5b50\u898f\u683c\u3001WS2812 RMT \u9a45\u52d5\u914d\u7f6e\u3001\u71d2\u9304 0105\/0107 \u89e3\u6cd5\u3001PSRAM 40MHz \u5751\u300d\u5168\u90e8\u5beb\u9032\u4e86\u81ea\u5df1\u7684\u6280\u80fd\u5eab\u3002\u4e0b\u6b21\u518d\u958b ESP32 \u5c08\u6848\uff0c\u5b83\u6703\u5148\u7ffb\u81ea\u5df1\u7684\u7b46\u8a18\u518d\u52d5\u624b\u3002<\/li>\n<\/ul>\n\n\n\n<h2 id=\"\u7d50\u8ad6\" class=\"wp-block-heading\">\u7d50\u8ad6<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e00\u6b21\u5b8c\u6574\u7684\u300cAI Agent \u5beb\u97cc\u9ad4\u300d\u5be6\u6e2c\u4e0b\u4f86\uff0c\u5206\u5de5\u5176\u5be6\u5f88\u6e05\u695a\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>\u89d2\u8272<\/th><th>\u5de5\u4f5c<\/th><\/tr><\/thead><tbody><tr><td><a href=\"https:\/\/github.com\/nousresearch\" target=\"_blank\" rel=\"noopener\">Hermes Agent<\/a><\/td><td>\u5075\u6e2c\u786c\u9ad4\u3001\u67e5\u8b49\u677f\u578b\u3001\u5beb\u78bc\u3001\u7de8\u8b6f\u3001\u71d2\u9304\u3001\u8b80 log\u3001\u641c issue\u3001\u4e8c\u5206\u9664\u932f\u3001\u5beb\u6280\u80fd\u7b46\u8a18<\/td><\/tr><tr><td>\u4eba\u985e<\/td><td>\u63d2\u677f\u5b50\u3001\u6309\u6279\u51c6\u3001\u5be9\u51fa GRB bug\u3001\u8aaa\u300c\u7e7c\u7e8c\u300d<\/td><\/tr><tr><td>\u677f\u5b50\u672c\u8eab<\/td><td>\u51fa\u96e3\u984c\uff08CH343 \u50b3\u8f38\u6389\u5305\u3001PSRAM \u76f8\u5bb9\u9846\u7c92\u9ad4\u8cea\u9650\u5236\uff09\u2014\u2014\u5de5\u7a0b\u5e2b\u6c38\u9060\u7684\u670b\u53cb<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">AI Agent \u6c92\u6709\u53d6\u4ee3\u5d4c\u5165\u5f0f\u5de5\u7a0b\u5e2b\uff0c\u4f46\u5b83\u628a\u300c\u7b2c\u4e00\u9846 LED \u5f9e\u96f6\u5230\u4eae\u300d\u7684\u9580\u6abb\u5f9e\u300c\u4e00\u500b\u9031\u672b\u7684\u74b0\u5883\u6298\u9a30\u300d\u58d3\u7e2e\u6210\u300c\u4e00\u5834\u4e0b\u5348\u7684\u5c0d\u8a71\u300d\u3002\u771f\u6b63\u5361\u4f4f\u7684\u5169\u95dc\uff08\u71d2\u9304\u6642\u5e8f\u3001PSRAM \u76f8\u5bb9\u6676\u7247\u9ad4\u8cea\u9650\u5236\uff09\uff0c\u9760\u7684\u662f AI \u7684\u7aae\u8209\u8010\u5fc3\u52a0\u4e0a\u4eba\u985e\u7684\u8de8\u5c64\u5be9\u67e5\u2014\u2014<strong>\u9019\u500b\u7d44\u5408\uff0c\u624d\u662f 2026 \u5e74\u5beb\u97cc\u9ad4\u7684\u6b63\u78ba\u59ff\u52e2<\/strong>\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e0b\u4e00\u9846 LED\uff0c\u4f60\u4e5f\u4f86\u4e00\u53e5\u8a71\u8a66\u8a66\uff1f<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity alignwide has-text-color has-palette-color-1-color has-palette-color-1-background-color has-background is-style-wide\"\/>\n","protected":false},"excerpt":{"rendered":"<p>Hermes Agent \u662f Nous Research \u51fa\u54c1\u7684\u958b\u6e90 AI Agent\u2014\u2014\u6703\u7528\u7d42\u7aef\u6a5f\u3001\u6703\u8b80\u5beb\u6a94 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":4361,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,19,53,83],"tags":[27,21,44,9,11],"class_list":["post-4192","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-module","category-arduino","category-esp32","category-featured","tag-c","tag-ide","tag-programming-language","tag-python","tag-tutorial"],"_links":{"self":[{"href":"https:\/\/saludpcb.com\/zh\/wp-json\/wp\/v2\/posts\/4192","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/saludpcb.com\/zh\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/saludpcb.com\/zh\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/saludpcb.com\/zh\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/saludpcb.com\/zh\/wp-json\/wp\/v2\/comments?post=4192"}],"version-history":[{"count":16,"href":"https:\/\/saludpcb.com\/zh\/wp-json\/wp\/v2\/posts\/4192\/revisions"}],"predecessor-version":[{"id":4373,"href":"https:\/\/saludpcb.com\/zh\/wp-json\/wp\/v2\/posts\/4192\/revisions\/4373"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/saludpcb.com\/zh\/wp-json\/wp\/v2\/media\/4361"}],"wp:attachment":[{"href":"https:\/\/saludpcb.com\/zh\/wp-json\/wp\/v2\/media?parent=4192"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/saludpcb.com\/zh\/wp-json\/wp\/v2\/categories?post=4192"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/saludpcb.com\/zh\/wp-json\/wp\/v2\/tags?post=4192"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}