[{"data":1,"prerenderedAt":1890},["ShallowReactive",2],{"navigation-zh":3,"navigation-en":41,"\u002Fen\u002Fdocs\u002Fuser-manual":78,"\u002Fen\u002Fdocs\u002Fuser-manual-surround":1885},[4],{"title":5,"path":6,"stem":7,"children":8,"icon":10},"概览","\u002Fdocs","docs\u002F1.index",[9,11,16,21,26,31,36],{"title":5,"path":6,"stem":7,"icon":10},"i-lucide-house",{"title":12,"path":13,"stem":14,"icon":15},"快速使用指南","\u002Fdocs\u002Fquick-start","docs\u002F2.quick-start","i-lucide-rocket",{"title":17,"path":18,"stem":19,"icon":20},"产品介绍书","\u002Fdocs\u002Fproduct-brief","docs\u002F3.product-brief","i-lucide-layout-dashboard",{"title":22,"path":23,"stem":24,"icon":25},"用户详细使用手册","\u002Fdocs\u002Fuser-manual","docs\u002F4.user-manual","i-lucide-book-open",{"title":27,"path":28,"stem":29,"icon":30},"硬件配置说明","\u002Fdocs\u002Fhardware","docs\u002F5.hardware","i-lucide-cpu",{"title":32,"path":33,"stem":34,"icon":35},"视频转换器使用说明","\u002Fdocs\u002Fvideo-converter","docs\u002F6.video-converter","i-lucide-video",{"title":37,"path":38,"stem":39,"icon":40},"固件烧录","\u002Fdocs\u002Ffirmware","docs\u002F7.firmware","i-lucide-download",[42],{"title":43,"path":44,"stem":45,"children":46,"page":77},"En","\u002Fen","en",[47],{"title":48,"path":49,"stem":50,"children":51,"icon":10},"Overview","\u002Fen\u002Fdocs","en\u002Fdocs\u002F1.index",[52,53,57,61,65,69,73],{"title":48,"path":49,"stem":50,"icon":10},{"title":54,"path":55,"stem":56,"icon":15},"Quick Start Guide","\u002Fen\u002Fdocs\u002Fquick-start","en\u002Fdocs\u002F2.quick-start",{"title":58,"path":59,"stem":60,"icon":20},"Product Brief","\u002Fen\u002Fdocs\u002Fproduct-brief","en\u002Fdocs\u002F3.product-brief",{"title":62,"path":63,"stem":64,"icon":25},"User Manual","\u002Fen\u002Fdocs\u002Fuser-manual","en\u002Fdocs\u002F4.user-manual",{"title":66,"path":67,"stem":68,"icon":30},"Hardware Configuration","\u002Fen\u002Fdocs\u002Fhardware","en\u002Fdocs\u002F5.hardware",{"title":70,"path":71,"stem":72,"icon":35},"Video Converter User Guide","\u002Fen\u002Fdocs\u002Fvideo-converter","en\u002Fdocs\u002F6.video-converter",{"title":74,"path":75,"stem":76,"icon":40},"Firmware","\u002Fen\u002Fdocs\u002Ffirmware","en\u002Fdocs\u002F7.firmware",false,{"id":79,"title":62,"body":80,"description":1875,"extension":1876,"links":1877,"meta":1881,"navigation":1882,"path":63,"seo":1883,"stem":64,"__hash__":1884},"docsEn\u002Fen\u002Fdocs\u002F4.user-manual.md",{"type":81,"value":82,"toc":1834},"minimark",[83,88,93,161,165,189,193,197,250,254,258,262,272,283,290,297,311,315,318,333,337,341,344,361,365,368,389,392,406,410,476,480,484,501,505,508,512,516,519,525,529,540,544,548,630,634,637,726,731,795,799,802,844,847,912,916,919,969,974,978,982,985,1082,1085,1130,1134,1141,1144,1159,1162,1243,1246,1327,1330,1373,1416,1419,1545,1548,1562,1566,1569,1613,1616,1630,1634,1637,1640,1651,1655,1792,1796,1818,1822,1830],[84,85,87],"h2",{"id":86},"_1-before-you-start","1. Before You Start",[89,90,92],"h3",{"id":91},"_11-required-items","1.1 Required Items",[94,95,96,109],"table",{},[97,98,99],"thead",{},[100,101,102,106],"tr",{},[103,104,105],"th",{},"Item",[103,107,108],{},"Purpose",[110,111,112,121,129,137,145,153],"tbody",{},[100,113,114,118],{},[115,116,117],"td",{},"RYMCU BigSmart development board",[115,119,120],{},"Main device",[100,122,123,126],{},[115,124,125],{},"USB Type-C data cable",[115,127,128],{},"Power, serial logs, firmware flashing",[100,130,131,134],{},[115,132,133],{},"5 V USB power supply or computer USB port",[115,135,136],{},"Power",[100,138,139,142],{},[115,140,141],{},"MicroSD card",[115,143,144],{},"Stores MP3, video, and other resources",[100,146,147,150],{},[115,148,149],{},"Bluetooth HID gamepad",[115,151,152],{},"Optional game controller",[100,154,155,158],{},[115,156,157],{},"2.4G Wi-Fi network",[115,159,160],{},"Xiaozhi, internet radio, MQTT, and other connected features",[89,162,164],{"id":163},"_12-notes","1.2 Notes",[166,167,168,172,175,178,181],"ul",{},[169,170,171],"li",{},"Use a USB cable that supports data transfer. Charge-only cables cannot flash firmware or show serial logs.",[169,173,174],{},"Format the MicroSD card as FAT32.",[169,176,177],{},"ESP32-S3 supports 2.4G Wi-Fi only. Do not use a 5G-only network.",[169,179,180],{},"Camera, audio, display, and Wi-Fi features all consume memory. During development, verify basic features first, then enable advanced features one by one.",[169,182,183,184,188],{},"This manual uses the BigSmart Xiaozhi firmware under ",[185,186,187],"code",{},"E:\\RYMCU\\xiaozhi"," as the software reference. If you use other firmware, button behavior and menu flow may differ.",[84,190,192],{"id":191},"_2-development-environment","2. Development Environment",[89,194,196],{"id":195},"_21-recommended-environment","2.1 Recommended Environment",[94,198,199,209],{},[97,200,201],{},[100,202,203,206],{},[103,204,205],{},"Tool",[103,207,208],{},"Recommended version \u002F note",[110,210,211,219,227,235,243],{},[100,212,213,216],{},[115,214,215],{},"ESP-IDF",[115,217,218],{},"5.4 or later",[100,220,221,224],{},[115,222,223],{},"IDE",[115,225,226],{},"VSCode, Cursor, or command line",[100,228,229,232],{},[115,230,231],{},"Serial terminal",[115,233,234],{},"ESP-IDF Monitor, PuTTY, MobaXterm, or another serial terminal",[100,236,237,240],{},[115,238,239],{},"Firmware project",[115,241,242],{},"\u002F",[100,244,245,248],{},[115,246,247],{},"Hardware repository",[115,249,242],{},[84,251,253],{"id":252},"_3-firmware-flashing","3. Firmware Flashing",[89,255,257],{"id":256},"_31-flash-the-repository-merged-firmware-image","3.1 Flash the Repository Merged Firmware Image",[259,260,261],"p",{},"This repository provides BigSmart merged firmware images:",[263,264,270],"pre",{"className":265,"code":267,"language":268,"meta":269},[266],"language-text","firmware\u002Frymcu-V2.3.28-merged.bin\nfirmware\u002Frymcu-V2.3.19-merged.bin\nfirmware\u002Fxiaozhi-esp32-merged.bin\nfirmware\u002Fespressif-brookesia-merged.bin\n","text","",[185,271,267],{"__ignoreMap":269},[259,273,274,275,278,279,282],{},"The RYMCU official firmware ",[185,276,277],{},"rymcu-V2.3.28-merged.bin"," is recommended as the default. ",[185,280,281],{},"rymcu-V2.3.19-merged.bin"," remains available as a legacy fallback.",[259,284,285,286,289],{},"The V2.3.28 prebuilt image includes Weather, Calendar, Codex Status, Smart Home MQTT\u002FEndpoint, the NES launcher, and NES dedicated boot mode. It does not include the later NES display, audio, and volume-control changes from the 2026-07-28 commit ",[185,287,288],{},"b1d1c08",".",[259,291,292,293,296],{},"You can flash it with ESP-IDF, ",[185,294,295],{},"esptool.py",", or a GUI flashing tool. A common command-line method is:",[263,298,302],{"className":299,"code":300,"language":301,"meta":269,"style":269},"language-powershell shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","esptool.py --chip esp32s3 -p COM_PORT -b 460800 write_flash 0x0 firmware\\rymcu-V2.3.28-merged.bin\n","powershell",[185,303,304],{"__ignoreMap":269},[305,306,309],"span",{"class":307,"line":308},"line",1,[305,310,300],{},[89,312,314],{"id":313},"_32-enter-download-mode","3.2 Enter Download Mode",[259,316,317],{},"If automatic flashing fails, enter download mode manually:",[319,320,321,324,327,330],"ol",{},[169,322,323],{},"Hold the Boot button.",[169,325,326],{},"Reset or power-cycle the board.",[169,328,329],{},"Release the Boot button.",[169,331,332],{},"Run the flashing command again.",[84,334,336],{"id":335},"_4-first-boot-and-wi-fi-provisioning","4. First Boot and Wi-Fi Provisioning",[89,338,340],{"id":339},"_41-startup-check","4.1 Startup Check",[259,342,343],{},"After flashing, the device restarts. In a normal startup:",[166,345,346,349,352,358],{},[169,347,348],{},"The screen turns on and shows the Xiaozhi UI.",[169,350,351],{},"Serial logs print board initialization information.",[169,353,354,355,289],{},"If an SD card is present, logs show it mounted at ",[185,356,357],{},"\u002Fsdcard",[169,359,360],{},"If Wi-Fi is not configured, the device enters provisioning.",[89,362,364],{"id":363},"_42-wi-fi-provisioning","4.2 Wi-Fi Provisioning",[259,366,367],{},"The Xiaozhi reference project includes BluFi provisioning documentation. A typical flow:",[319,369,370,377,380,383,386],{},[169,371,372,373,376],{},"Enable ",[185,374,375],{},"WiFi Configuration Method -> Esp Blufi"," during build configuration.",[169,378,379],{},"On first boot without saved Wi-Fi credentials, the device enters provisioning automatically.",[169,381,382],{},"Use the EspBlufi app or another compatible BluFi client to find the device.",[169,384,385],{},"Connect to the device and enter the 2.4G Wi-Fi SSID and password.",[169,387,388],{},"After connection succeeds, the device saves the configuration and connects automatically on later boots.",[259,390,391],{},"To reprovision Wi-Fi after the firmware is running, use one of these methods:",[166,393,394,397,403],{},[169,395,396],{},"Click the Boot button during startup to enter provisioning.",[169,398,399,400,289],{},"Request reprovisioning through the MCP tool ",[185,401,402],{},"self.system.reconfigure_wifi",[169,404,405],{},"Clear NVS or erase data during flashing, then reboot.",[84,407,409],{"id":408},"_5-buttons-and-basic-interaction","5. Buttons and Basic Interaction",[94,411,412,422],{},[97,413,414],{},[100,415,416,419],{},[103,417,418],{},"Operation",[103,420,421],{},"Function",[110,423,424,432,440,452,460,468],{},[100,425,426,429],{},[115,427,428],{},"Hold power button for about 3 seconds",[115,430,431],{},"Power on\u002Foff, depending on the power management circuit state",[100,433,434,437],{},[115,435,436],{},"Click Boot",[115,438,439],{},"Enter provisioning during startup; toggle conversation state during runtime",[100,441,442,445],{},[115,443,444],{},"Double-click Boot",[115,446,447,448,451],{},"Toggle device-side AEC while idle, when ",[185,449,450],{},"CONFIG_USE_DEVICE_AEC"," is enabled",[100,453,454,457],{},[115,455,456],{},"Press GPIO10\u002FPTT",[115,458,459],{},"Start voice listening",[100,461,462,465],{},[115,463,464],{},"Release GPIO10\u002FPTT",[115,466,467],{},"End voice listening",[100,469,470,473],{},[115,471,472],{},"Tap or swipe touch screen",[115,474,475],{},"Depends on the current firmware UI and application logic",[84,477,479],{"id":478},"_6-voice-assistant","6. Voice Assistant",[89,481,483],{"id":482},"_61-conversation","6.1 Conversation",[319,485,486,489,492,495,498],{},[169,487,488],{},"Make sure the device is connected to Wi-Fi.",[169,490,491],{},"Click Boot to switch to conversation\u002Flistening state, or hold GPIO10\u002FPTT to start speaking.",[169,493,494],{},"Speak your question or command.",[169,496,497],{},"Release PTT or wait for the device to stop listening.",[169,499,500],{},"The device plays the response through the speaker and updates the screen state.",[89,502,504],{"id":503},"_62-aec-switching","6.2 AEC Switching",[259,506,507],{},"Device-side AEC suppresses speaker echo. When enabled in firmware, double-click Boot while idle to toggle AEC. If the device frequently captures its own speaker output during recognition, try enabling AEC. In simpler acoustic environments, you may disable it to reduce processing load.",[84,509,511],{"id":510},"_7-sd-card-usage","7. SD Card Usage",[89,513,515],{"id":514},"_71-format-and-directories","7.1 Format and Directories",[259,517,518],{},"Format the MicroSD card as FAT32 and create directories as needed:",[263,520,523],{"className":521,"code":522,"language":268,"meta":269},[266],"\u002Fsdcard\n├── music\n│   ├── song1.mp3\n│   └── song2.mp3\n├── test.mp3\n└── videos\n    ├── demo.mjpg\n    ├── demo.mp3\n    └── demo.fps\n",[185,524,522],{"__ignoreMap":269},[89,526,528],{"id":527},"_72-check-sd-card-mounting","7.2 Check SD Card Mounting",[259,530,531,532,535,536,539],{},"If the startup log contains ",[185,533,534],{},"SD card mounted at \u002Fsdcard",", the card mounted successfully. You can also call ",[185,537,538],{},"self.media.list_mp3_files"," to check whether MP3 files can be read.",[84,541,543],{"id":542},"_8-local-mp3-playback","8. Local MP3 Playback",[89,545,547],{"id":546},"_81-supported-tools","8.1 Supported Tools",[94,549,550,559],{},[97,551,552],{},[100,553,554,556],{},[103,555,421],{},[103,557,558],{},"MCP tool",[110,560,561,571,581,590,600,610,620],{},[100,562,563,566],{},[115,564,565],{},"Play a specific MP3",[115,567,568],{},[185,569,570],{},"self.media.play_mp3",[100,572,573,576],{},[115,574,575],{},"Stop playback",[115,577,578],{},[185,579,580],{},"self.media.stop_mp3",[100,582,583,586],{},[115,584,585],{},"List MP3 files",[115,587,588],{},[185,589,538],{},[100,591,592,595],{},[115,593,594],{},"Play a test file",[115,596,597],{},[185,598,599],{},"self.media.play_test_mp3",[100,601,602,605],{},[115,603,604],{},"Get playback state",[115,606,607],{},[185,608,609],{},"self.media.get_mp3_state",[100,611,612,615],{},[115,613,614],{},"Next track",[115,616,617],{},[185,618,619],{},"self.media.play_next",[100,621,622,625],{},[115,623,624],{},"Previous track",[115,626,627],{},[185,628,629],{},"self.media.play_previous",[89,631,633],{"id":632},"_82-examples","8.2 Examples",[259,635,636],{},"Play music from the SD card:",[263,638,642],{"className":639,"code":640,"language":641,"meta":269,"style":269},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"tool\": \"self.media.play_mp3\",\n  \"arguments\": {\n    \"filepath\": \"\u002Fsdcard\u002Fmusic\u002Fsong1.mp3\"\n  }\n}\n","json",[185,643,644,650,677,692,714,720],{"__ignoreMap":269},[305,645,646],{"class":307,"line":308},[305,647,649],{"class":648},"sMK4o","{\n",[305,651,653,656,660,663,666,669,672,674],{"class":307,"line":652},2,[305,654,655],{"class":648},"  \"",[305,657,659],{"class":658},"spNyl","tool",[305,661,662],{"class":648},"\"",[305,664,665],{"class":648},":",[305,667,668],{"class":648}," \"",[305,670,570],{"class":671},"sfazB",[305,673,662],{"class":648},[305,675,676],{"class":648},",\n",[305,678,680,682,685,687,689],{"class":307,"line":679},3,[305,681,655],{"class":648},[305,683,684],{"class":658},"arguments",[305,686,662],{"class":648},[305,688,665],{"class":648},[305,690,691],{"class":648}," {\n",[305,693,695,698,702,704,706,708,711],{"class":307,"line":694},4,[305,696,697],{"class":648},"    \"",[305,699,701],{"class":700},"sBMFI","filepath",[305,703,662],{"class":648},[305,705,665],{"class":648},[305,707,668],{"class":648},[305,709,710],{"class":671},"\u002Fsdcard\u002Fmusic\u002Fsong1.mp3",[305,712,713],{"class":648},"\"\n",[305,715,717],{"class":307,"line":716},5,[305,718,719],{"class":648},"  }\n",[305,721,723],{"class":307,"line":722},6,[305,724,725],{"class":648},"}\n",[259,727,728,729,665],{},"List MP3 files under ",[185,730,357],{},[263,732,734],{"className":639,"code":733,"language":641,"meta":269,"style":269},"{\n  \"tool\": \"self.media.list_mp3_files\",\n  \"arguments\": {\n    \"directory\": \"\u002Fsdcard\"\n  }\n}\n",[185,735,736,740,758,770,787,791],{"__ignoreMap":269},[305,737,738],{"class":307,"line":308},[305,739,649],{"class":648},[305,741,742,744,746,748,750,752,754,756],{"class":307,"line":652},[305,743,655],{"class":648},[305,745,659],{"class":658},[305,747,662],{"class":648},[305,749,665],{"class":648},[305,751,668],{"class":648},[305,753,538],{"class":671},[305,755,662],{"class":648},[305,757,676],{"class":648},[305,759,760,762,764,766,768],{"class":307,"line":679},[305,761,655],{"class":648},[305,763,684],{"class":658},[305,765,662],{"class":648},[305,767,665],{"class":648},[305,769,691],{"class":648},[305,771,772,774,777,779,781,783,785],{"class":307,"line":694},[305,773,697],{"class":648},[305,775,776],{"class":700},"directory",[305,778,662],{"class":648},[305,780,665],{"class":648},[305,782,668],{"class":648},[305,784,357],{"class":671},[305,786,713],{"class":648},[305,788,789],{"class":307,"line":716},[305,790,719],{"class":648},[305,792,793],{"class":307,"line":722},[305,794,725],{"class":648},[84,796,798],{"id":797},"_9-internet-radio","9. Internet Radio",[259,800,801],{},"After the device is online, internet radio tools can play network audio streams.",[94,803,804,812],{},[97,805,806],{},[100,807,808,810],{},[103,809,421],{},[103,811,558],{},[110,813,814,824,834],{},[100,815,816,819],{},[115,817,818],{},"Play station",[115,820,821],{},[185,822,823],{},"self.radio.play_url",[100,825,826,829],{},[115,827,828],{},"Stop radio",[115,830,831],{},[185,832,833],{},"self.radio.stop",[100,835,836,839],{},[115,837,838],{},"Get status",[115,840,841],{},[185,842,843],{},"self.radio.get_status",[259,845,846],{},"Example:",[263,848,850],{"className":639,"code":849,"language":641,"meta":269,"style":269},"{\n  \"tool\": \"self.radio.play_url\",\n  \"arguments\": {\n    \"station_name\": \"Hit FM\"\n  }\n}\n",[185,851,852,856,874,886,904,908],{"__ignoreMap":269},[305,853,854],{"class":307,"line":308},[305,855,649],{"class":648},[305,857,858,860,862,864,866,868,870,872],{"class":307,"line":652},[305,859,655],{"class":648},[305,861,659],{"class":658},[305,863,662],{"class":648},[305,865,665],{"class":648},[305,867,668],{"class":648},[305,869,823],{"class":671},[305,871,662],{"class":648},[305,873,676],{"class":648},[305,875,876,878,880,882,884],{"class":307,"line":679},[305,877,655],{"class":648},[305,879,684],{"class":658},[305,881,662],{"class":648},[305,883,665],{"class":648},[305,885,691],{"class":648},[305,887,888,890,893,895,897,899,902],{"class":307,"line":694},[305,889,697],{"class":648},[305,891,892],{"class":700},"station_name",[305,894,662],{"class":648},[305,896,665],{"class":648},[305,898,668],{"class":648},[305,900,901],{"class":671},"Hit FM",[305,903,713],{"class":648},[305,905,906],{"class":307,"line":716},[305,907,719],{"class":648},[305,909,910],{"class":307,"line":722},[305,911,725],{"class":648},[84,913,915],{"id":914},"_10-weather-calendar-codex-and-nes","10. Weather, Calendar, Codex, and NES",[259,917,918],{},"The V2.3.28 firmware adds or improves several Launcher app entries:",[94,920,921,931],{},[97,922,923],{},[100,924,925,928],{},[103,926,927],{},"App",[103,929,930],{},"Description",[110,932,933,941,949,957],{},[100,934,935,938],{},[115,936,937],{},"Weather",[115,939,940],{},"Shows connected weather information",[100,942,943,946],{},[115,944,945],{},"Calendar",[115,947,948],{},"Shows calendar information",[100,950,951,954],{},[115,952,953],{},"Codex",[115,955,956],{},"Shows Codex runtime status and bridge settings",[100,958,959,962],{},[115,960,961],{},"NES",[115,963,964,965,968],{},"Selects a ",[185,966,967],{},".nes"," ROM from the SD card and reboots into NES dedicated boot mode",[259,970,971,972,289],{},"The Codex app only provides the device-side status and bridge settings entry; PC-side bridge scripts are not published in the BigSmart-Open repository. NES behavior is limited to the V2.3.28 prebuilt image and does not include the later NES display, audio, and volume-control changes from the 2026-07-28 commit ",[185,973,288],{},[84,975,977],{"id":976},"_11-rgb-led-and-smart-home-mqttendpoint","11. RGB LED and Smart Home MQTT\u002FEndpoint",[89,979,981],{"id":980},"_111-direct-rgb-control","11.1 Direct RGB Control",[259,983,984],{},"Set the RGB LED:",[263,986,988],{"className":639,"code":987,"language":641,"meta":269,"style":269},"{\n  \"tool\": \"self.light.set_rgb_color\",\n  \"arguments\": {\n    \"red\": 255,\n    \"green\": 100,\n    \"blue\": 50\n  }\n}\n",[185,989,990,994,1013,1025,1042,1058,1072,1077],{"__ignoreMap":269},[305,991,992],{"class":307,"line":308},[305,993,649],{"class":648},[305,995,996,998,1000,1002,1004,1006,1009,1011],{"class":307,"line":652},[305,997,655],{"class":648},[305,999,659],{"class":658},[305,1001,662],{"class":648},[305,1003,665],{"class":648},[305,1005,668],{"class":648},[305,1007,1008],{"class":671},"self.light.set_rgb_color",[305,1010,662],{"class":648},[305,1012,676],{"class":648},[305,1014,1015,1017,1019,1021,1023],{"class":307,"line":679},[305,1016,655],{"class":648},[305,1018,684],{"class":658},[305,1020,662],{"class":648},[305,1022,665],{"class":648},[305,1024,691],{"class":648},[305,1026,1027,1029,1032,1034,1036,1040],{"class":307,"line":694},[305,1028,697],{"class":648},[305,1030,1031],{"class":700},"red",[305,1033,662],{"class":648},[305,1035,665],{"class":648},[305,1037,1039],{"class":1038},"sbssI"," 255",[305,1041,676],{"class":648},[305,1043,1044,1046,1049,1051,1053,1056],{"class":307,"line":716},[305,1045,697],{"class":648},[305,1047,1048],{"class":700},"green",[305,1050,662],{"class":648},[305,1052,665],{"class":648},[305,1054,1055],{"class":1038}," 100",[305,1057,676],{"class":648},[305,1059,1060,1062,1065,1067,1069],{"class":307,"line":722},[305,1061,697],{"class":648},[305,1063,1064],{"class":700},"blue",[305,1066,662],{"class":648},[305,1068,665],{"class":648},[305,1070,1071],{"class":1038}," 50\n",[305,1073,1075],{"class":307,"line":1074},7,[305,1076,719],{"class":648},[305,1078,1080],{"class":307,"line":1079},8,[305,1081,725],{"class":648},[259,1083,1084],{},"Turn off the RGB LED:",[263,1086,1088],{"className":639,"code":1087,"language":641,"meta":269,"style":269},"{\n  \"tool\": \"self.light.turn_off\",\n  \"arguments\": {}\n}\n",[185,1089,1090,1094,1113,1126],{"__ignoreMap":269},[305,1091,1092],{"class":307,"line":308},[305,1093,649],{"class":648},[305,1095,1096,1098,1100,1102,1104,1106,1109,1111],{"class":307,"line":652},[305,1097,655],{"class":648},[305,1099,659],{"class":658},[305,1101,662],{"class":648},[305,1103,665],{"class":648},[305,1105,668],{"class":648},[305,1107,1108],{"class":671},"self.light.turn_off",[305,1110,662],{"class":648},[305,1112,676],{"class":648},[305,1114,1115,1117,1119,1121,1123],{"class":307,"line":679},[305,1116,655],{"class":648},[305,1118,684],{"class":658},[305,1120,662],{"class":648},[305,1122,665],{"class":648},[305,1124,1125],{"class":648}," {}\n",[305,1127,1128],{"class":307,"line":694},[305,1129,725],{"class":648},[89,1131,1133],{"id":1132},"_112-smart-home-mqtt-overview","11.2 Smart Home MQTT Overview",[259,1135,1136,1137,1140],{},"The V2.3.28 firmware uses the RYMCU Smart Home MQTT protocol to control third-party smart home devices. The MQTT topic root is ",[185,1138,1139],{},"rymcu\u002Fhome\u002Fv1","; devices interact with BigSmart through pair codes, discovery announcements, state reports, and command topics.",[259,1142,1143],{},"There are two upper-level control paths:",[166,1145,1146,1153],{},[169,1147,1148,1149,1152],{},"Local Xiaozhi session MCP: the voice service calls ",[185,1150,1151],{},"self.smart_home.*"," tools on the device.",[169,1154,1155,1156,1158],{},"External MCP Endpoint Bridge: an endpoint written during provisioning calls the same ",[185,1157,1151],{}," tools, and Smart Home MQTT still sends the final commands.",[259,1160,1161],{},"Common tools:",[94,1163,1164,1172],{},[97,1165,1166],{},[100,1167,1168,1170],{},[103,1169,421],{},[103,1171,558],{},[110,1173,1174,1184,1194,1204,1213,1223,1233],{},[100,1175,1176,1179],{},[115,1177,1178],{},"Set MQTT broker",[115,1180,1181],{},[185,1182,1183],{},"self.smart_home.set_mqtt_endpoint",[100,1185,1186,1189],{},[115,1187,1188],{},"Connect Smart Home MQTT",[115,1190,1191],{},[185,1192,1193],{},"self.smart_home.connect",[100,1195,1196,1199],{},[115,1197,1198],{},"Disconnect",[115,1200,1201],{},[185,1202,1203],{},"self.smart_home.disconnect",[100,1205,1206,1208],{},[115,1207,838],{},[115,1209,1210],{},[185,1211,1212],{},"self.smart_home.get_status",[100,1214,1215,1218],{},[115,1216,1217],{},"Scan devices",[115,1219,1220],{},[185,1221,1222],{},"self.smart_home.scan_devices",[100,1224,1225,1228],{},[115,1226,1227],{},"List devices",[115,1229,1230],{},[185,1231,1232],{},"self.smart_home.list_devices",[100,1234,1235,1238],{},[115,1236,1237],{},"Control device",[115,1239,1240],{},[185,1241,1242],{},"self.smart_home.control_device",[259,1244,1245],{},"Set the broker:",[263,1247,1249],{"className":639,"code":1248,"language":641,"meta":269,"style":269},"{\n  \"tool\": \"self.smart_home.set_mqtt_endpoint\",\n  \"arguments\": {\n    \"endpoint\": \"broker-cn.emqx.io:1883\",\n    \"confirm\": true\n  }\n}\n",[185,1250,1251,1255,1273,1285,1305,1319,1323],{"__ignoreMap":269},[305,1252,1253],{"class":307,"line":308},[305,1254,649],{"class":648},[305,1256,1257,1259,1261,1263,1265,1267,1269,1271],{"class":307,"line":652},[305,1258,655],{"class":648},[305,1260,659],{"class":658},[305,1262,662],{"class":648},[305,1264,665],{"class":648},[305,1266,668],{"class":648},[305,1268,1183],{"class":671},[305,1270,662],{"class":648},[305,1272,676],{"class":648},[305,1274,1275,1277,1279,1281,1283],{"class":307,"line":679},[305,1276,655],{"class":648},[305,1278,684],{"class":658},[305,1280,662],{"class":648},[305,1282,665],{"class":648},[305,1284,691],{"class":648},[305,1286,1287,1289,1292,1294,1296,1298,1301,1303],{"class":307,"line":694},[305,1288,697],{"class":648},[305,1290,1291],{"class":700},"endpoint",[305,1293,662],{"class":648},[305,1295,665],{"class":648},[305,1297,668],{"class":648},[305,1299,1300],{"class":671},"broker-cn.emqx.io:1883",[305,1302,662],{"class":648},[305,1304,676],{"class":648},[305,1306,1307,1309,1312,1314,1316],{"class":307,"line":716},[305,1308,697],{"class":648},[305,1310,1311],{"class":700},"confirm",[305,1313,662],{"class":648},[305,1315,665],{"class":648},[305,1317,1318],{"class":648}," true\n",[305,1320,1321],{"class":307,"line":722},[305,1322,719],{"class":648},[305,1324,1325],{"class":307,"line":1074},[305,1326,725],{"class":648},[259,1328,1329],{},"Connect and scan devices:",[263,1331,1333],{"className":639,"code":1332,"language":641,"meta":269,"style":269},"{\n  \"tool\": \"self.smart_home.connect\",\n  \"arguments\": {}\n}\n",[185,1334,1335,1339,1357,1369],{"__ignoreMap":269},[305,1336,1337],{"class":307,"line":308},[305,1338,649],{"class":648},[305,1340,1341,1343,1345,1347,1349,1351,1353,1355],{"class":307,"line":652},[305,1342,655],{"class":648},[305,1344,659],{"class":658},[305,1346,662],{"class":648},[305,1348,665],{"class":648},[305,1350,668],{"class":648},[305,1352,1193],{"class":671},[305,1354,662],{"class":648},[305,1356,676],{"class":648},[305,1358,1359,1361,1363,1365,1367],{"class":307,"line":679},[305,1360,655],{"class":648},[305,1362,684],{"class":658},[305,1364,662],{"class":648},[305,1366,665],{"class":648},[305,1368,1125],{"class":648},[305,1370,1371],{"class":307,"line":694},[305,1372,725],{"class":648},[263,1374,1376],{"className":639,"code":1375,"language":641,"meta":269,"style":269},"{\n  \"tool\": \"self.smart_home.scan_devices\",\n  \"arguments\": {}\n}\n",[185,1377,1378,1382,1400,1412],{"__ignoreMap":269},[305,1379,1380],{"class":307,"line":308},[305,1381,649],{"class":648},[305,1383,1384,1386,1388,1390,1392,1394,1396,1398],{"class":307,"line":652},[305,1385,655],{"class":648},[305,1387,659],{"class":658},[305,1389,662],{"class":648},[305,1391,665],{"class":648},[305,1393,668],{"class":648},[305,1395,1222],{"class":671},[305,1397,662],{"class":648},[305,1399,676],{"class":648},[305,1401,1402,1404,1406,1408,1410],{"class":307,"line":679},[305,1403,655],{"class":648},[305,1405,684],{"class":658},[305,1407,662],{"class":648},[305,1409,665],{"class":648},[305,1411,1125],{"class":648},[305,1413,1414],{"class":307,"line":694},[305,1415,725],{"class":648},[259,1417,1418],{},"Control a discovered device:",[263,1420,1422],{"className":639,"code":1421,"language":641,"meta":269,"style":269},"{\n  \"tool\": \"self.smart_home.control_device\",\n  \"arguments\": {\n    \"device_id\": \"lamp-bedroom-01\",\n    \"action\": \"turn_on\",\n    \"entity_id\": \"main\",\n    \"params\": \"{}\"\n  }\n}\n",[185,1423,1424,1428,1446,1458,1478,1498,1518,1536,1540],{"__ignoreMap":269},[305,1425,1426],{"class":307,"line":308},[305,1427,649],{"class":648},[305,1429,1430,1432,1434,1436,1438,1440,1442,1444],{"class":307,"line":652},[305,1431,655],{"class":648},[305,1433,659],{"class":658},[305,1435,662],{"class":648},[305,1437,665],{"class":648},[305,1439,668],{"class":648},[305,1441,1242],{"class":671},[305,1443,662],{"class":648},[305,1445,676],{"class":648},[305,1447,1448,1450,1452,1454,1456],{"class":307,"line":679},[305,1449,655],{"class":648},[305,1451,684],{"class":658},[305,1453,662],{"class":648},[305,1455,665],{"class":648},[305,1457,691],{"class":648},[305,1459,1460,1462,1465,1467,1469,1471,1474,1476],{"class":307,"line":694},[305,1461,697],{"class":648},[305,1463,1464],{"class":700},"device_id",[305,1466,662],{"class":648},[305,1468,665],{"class":648},[305,1470,668],{"class":648},[305,1472,1473],{"class":671},"lamp-bedroom-01",[305,1475,662],{"class":648},[305,1477,676],{"class":648},[305,1479,1480,1482,1485,1487,1489,1491,1494,1496],{"class":307,"line":716},[305,1481,697],{"class":648},[305,1483,1484],{"class":700},"action",[305,1486,662],{"class":648},[305,1488,665],{"class":648},[305,1490,668],{"class":648},[305,1492,1493],{"class":671},"turn_on",[305,1495,662],{"class":648},[305,1497,676],{"class":648},[305,1499,1500,1502,1505,1507,1509,1511,1514,1516],{"class":307,"line":722},[305,1501,697],{"class":648},[305,1503,1504],{"class":700},"entity_id",[305,1506,662],{"class":648},[305,1508,665],{"class":648},[305,1510,668],{"class":648},[305,1512,1513],{"class":671},"main",[305,1515,662],{"class":648},[305,1517,676],{"class":648},[305,1519,1520,1522,1525,1527,1529,1531,1534],{"class":307,"line":1074},[305,1521,697],{"class":648},[305,1523,1524],{"class":700},"params",[305,1526,662],{"class":648},[305,1528,665],{"class":648},[305,1530,668],{"class":648},[305,1532,1533],{"class":671},"{}",[305,1535,713],{"class":648},[305,1537,1538],{"class":307,"line":1079},[305,1539,719],{"class":648},[305,1541,1543],{"class":307,"line":1542},9,[305,1544,725],{"class":648},[259,1546,1547],{},"Provisioning custom data also supports two prefixes:",[166,1549,1550,1556],{},[169,1551,1552,1555],{},[185,1553,1554],{},"mqtt:\u003Chost[:port]>",": save the Smart Home MQTT broker.",[169,1557,1558,1561],{},[185,1559,1560],{},"mcp:\u003Cendpoint>",": save the external MCP Endpoint address.",[84,1563,1565],{"id":1564},"_12-imu-attitude-and-shake-detection","12. IMU Attitude and Shake Detection",[259,1567,1568],{},"BigSmart includes a QMI8658 six-axis sensor. After firmware startup, sensor data is read periodically and shake detection is started. You can read attitude angles, acceleration, and gyroscope data through MCP tools:",[263,1570,1572],{"className":639,"code":1571,"language":641,"meta":269,"style":269},"{\n  \"tool\": \"self.imu.get_attitude_angles\",\n  \"arguments\": {}\n}\n",[185,1573,1574,1578,1597,1609],{"__ignoreMap":269},[305,1575,1576],{"class":307,"line":308},[305,1577,649],{"class":648},[305,1579,1580,1582,1584,1586,1588,1590,1593,1595],{"class":307,"line":652},[305,1581,655],{"class":648},[305,1583,659],{"class":658},[305,1585,662],{"class":648},[305,1587,665],{"class":648},[305,1589,668],{"class":648},[305,1591,1592],{"class":671},"self.imu.get_attitude_angles",[305,1594,662],{"class":648},[305,1596,676],{"class":648},[305,1598,1599,1601,1603,1605,1607],{"class":307,"line":679},[305,1600,655],{"class":648},[305,1602,684],{"class":658},[305,1604,662],{"class":648},[305,1606,665],{"class":648},[305,1608,1125],{"class":648},[305,1610,1611],{"class":307,"line":694},[305,1612,725],{"class":648},[259,1614,1615],{},"Typical uses:",[166,1617,1618,1621,1624,1627],{},[169,1619,1620],{},"Shake to wake or switch UI.",[169,1622,1623],{},"Motion-controlled mini games.",[169,1625,1626],{},"Device attitude display.",[169,1628,1629],{},"Interactive installation triggers.",[84,1631,1633],{"id":1632},"_13-camera-usage","13. Camera Usage",[259,1635,1636],{},"BigSmart uses a GC0308 camera with 640 x 480 @ 16 FPS hardware support. The reference firmware uses lazy initialization: the camera is not initialized during startup and is only initialized on the first camera request, reducing startup memory pressure.",[259,1638,1639],{},"Suggestions:",[166,1641,1642,1645,1648],{},[169,1643,1644],{},"Make sure GC0308-related firmware configuration is enabled.",[169,1646,1647],{},"Call the camera only when image capability is needed to avoid competing with audio, Wi-Fi, and large UI tasks for memory.",[169,1649,1650],{},"If the image orientation is wrong, check mirror and flip settings in firmware.",[84,1652,1654],{"id":1653},"_14-troubleshooting","14. Troubleshooting",[94,1656,1657,1670],{},[97,1658,1659],{},[100,1660,1661,1664,1667],{},[103,1662,1663],{},"Problem",[103,1665,1666],{},"Possible cause",[103,1668,1669],{},"Solution",[110,1671,1672,1683,1694,1705,1716,1727,1738,1753,1767,1781],{},[100,1673,1674,1677,1680],{},[115,1675,1676],{},"Computer cannot detect serial port",[115,1678,1679],{},"Charge-only USB cable, missing driver, device not powered",[115,1681,1682],{},"Replace cable, install driver, check power",[100,1684,1685,1688,1691],{},[115,1686,1687],{},"Flashing fails",[115,1689,1690],{},"Not in download mode or serial port is occupied",[115,1692,1693],{},"Enter download mode with Boot + reset, close serial terminal, retry",[100,1695,1696,1699,1702],{},[115,1697,1698],{},"Cannot connect Wi-Fi",[115,1700,1701],{},"5G network, wrong password, weak signal",[115,1703,1704],{},"Use 2.4G Wi-Fi, reprovision, move closer to router",[100,1706,1707,1710,1713],{},[115,1708,1709],{},"No sound",[115,1711,1712],{},"Volume too low, amplifier not enabled, audio init failed",[115,1714,1715],{},"Check serial logs and ES8311\u002FES7210 initialization",[100,1717,1718,1721,1724],{},[115,1719,1720],{},"Poor voice recognition",[115,1722,1723],{},"Noisy environment, too far from mic, unsuitable AEC state",[115,1725,1726],{},"Speak closer to the device, double-click Boot to toggle AEC",[100,1728,1729,1732,1735],{},[115,1730,1731],{},"SD card cannot mount",[115,1733,1734],{},"Not FAT32, poor contact, damaged card",[115,1736,1737],{},"Reformat, reinsert, replace card",[100,1739,1740,1743,1746],{},[115,1741,1742],{},"MP3 not found",[115,1744,1745],{},"Wrong path or unsupported format",[115,1747,1748,1749,1752],{},"Use absolute path and confirm ",[185,1750,1751],{},".mp3"," extension",[100,1754,1755,1758,1761],{},[115,1756,1757],{},"Smart Home MQTT connection fails",[115,1759,1760],{},"Wrong broker address, wrong port, network unreachable, or Smart Home MQTT disabled",[115,1762,1763,1764,1766],{},"Query ",[185,1765,1212],{}," and reconfigure the broker in Settings > Advanced or through the MCP tool",[100,1768,1769,1772,1775],{},[115,1770,1771],{},"NES games are not listed",[115,1773,1774],{},"SD card is not mounted, directory does not match firmware scanning rules, or ROM extension is wrong",[115,1776,1777,1778,1780],{},"Confirm the SD card is FAT32-readable and add ",[185,1779,967],{}," ROMs",[100,1782,1783,1786,1789],{},[115,1784,1785],{},"Codex status cannot connect",[115,1787,1788],{},"PC-side bridge is not running, bridge address is wrong, or the PC is not on the same LAN",[115,1790,1791],{},"Check device-to-PC network access and configure the bridge address in the Codex app",[84,1793,1795],{"id":1794},"_15-hardware-maintenance","15. Hardware Maintenance",[166,1797,1798,1801,1804,1811],{},[169,1799,1800],{},"Power off before plugging or unplugging the display, camera, microphone board, or other flex cables.",[169,1802,1803],{},"Pay attention to battery polarity and charging safety when using battery power.",[169,1805,1806,1807,1810],{},"Enclosure files are in ",[185,1808,1809],{},"enclosure\u002F",". When modifying the structure, consider screen, button, microphone openings, and speaker acoustic cavity.",[169,1812,1813,1814,1817],{},"Before adding new peripherals, check ",[1815,1816,66],"a",{"href":67}," to avoid GPIO conflicts.",[84,1819,1821],{"id":1820},"_16-references","16. References",[166,1823,1824],{},[169,1825,1826,1827],{},"Project hardware documentation: ",[1815,1828,1829],{"href":67},"hardware.md",[1831,1832,1833],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":269,"searchDepth":652,"depth":652,"links":1835},[1836,1840,1843,1847,1851,1852,1856,1860,1864,1865,1866,1870,1871,1872,1873,1874],{"id":86,"depth":652,"text":87,"children":1837},[1838,1839],{"id":91,"depth":679,"text":92},{"id":163,"depth":679,"text":164},{"id":191,"depth":652,"text":192,"children":1841},[1842],{"id":195,"depth":679,"text":196},{"id":252,"depth":652,"text":253,"children":1844},[1845,1846],{"id":256,"depth":679,"text":257},{"id":313,"depth":679,"text":314},{"id":335,"depth":652,"text":336,"children":1848},[1849,1850],{"id":339,"depth":679,"text":340},{"id":363,"depth":679,"text":364},{"id":408,"depth":652,"text":409},{"id":478,"depth":652,"text":479,"children":1853},[1854,1855],{"id":482,"depth":679,"text":483},{"id":503,"depth":679,"text":504},{"id":510,"depth":652,"text":511,"children":1857},[1858,1859],{"id":514,"depth":679,"text":515},{"id":527,"depth":679,"text":528},{"id":542,"depth":652,"text":543,"children":1861},[1862,1863],{"id":546,"depth":679,"text":547},{"id":632,"depth":679,"text":633},{"id":797,"depth":652,"text":798},{"id":914,"depth":652,"text":915},{"id":976,"depth":652,"text":977,"children":1867},[1868,1869],{"id":980,"depth":679,"text":981},{"id":1132,"depth":679,"text":1133},{"id":1564,"depth":652,"text":1565},{"id":1632,"depth":652,"text":1633},{"id":1653,"depth":652,"text":1654},{"id":1794,"depth":652,"text":1795},{"id":1820,"depth":652,"text":1821},"Detailed guide for development environment, flashing, interaction, SD card, media, and peripherals.","md",[1878],{"label":1879,"icon":1880,"to":23},"中文","i-lucide-languages",{},{"title":62,"icon":25},{"title":62,"description":1875},"SsOMYmGaw6r8HU9MNRsXPWnGSCtsqVDK15hzZLfOQnE",[1886,1888],{"title":58,"path":59,"stem":60,"description":1887,"icon":20},"Product positioning, hardware overview, software capabilities, and typical applications.",{"title":66,"path":67,"stem":68,"description":1889,"icon":30},"Hardware components, interfaces, power, peripherals, and GPIO assignments.",1785826458619]