[{"data":1,"prerenderedAt":33},["ShallowReactive",2],{"content:\u002Farticles:1086":3},{"item":4,"md":15,"html":16,"menu":17,"excerpt":31,"related":32},{"title":5,"len":6,"tags":7,"id":9,"time":10,"modifyTime":11,"encrypt":12,"showComments":13,"customSlug":14},"使用USB接口连接STM32F103C并控制舵机",2505,[8],"开发板",1086,1705135650556,1708700996351,false,true,"",null,"\u003Cdiv data-marked-line=\"1\" class=\"container-block tip\">\n                    \u003Cp class=\"container-title\">起因\u003C\u002Fp>\n                    \u003Cp>&emsp;&emsp;前段时间把我的小主机连带路由器硬盘等设备带回了老家，老家也有ipv6，所以无缝衔接，随后安心出去游玩。某天我一如既往地打开nextcloud准备上传图片，发现服务挂了，然后发现是家里停过几小时的电。虽然路由器和小主机都有来电自启，但硬盘盒通电后需要手动按一下开关才能启动，我人不在家，所以这段时间和NAS相关的服务全都无法启动。\n&emsp;&emsp;遂琢磨着弄个东西远程启动硬盘盒。\u003C\u002Fp>\n\n                  \u003C\u002Fdiv>\u003Ch1 data-marked-line=\"6\">\u003Csup class=\"fake-head\" id=\"%E8%B0%83%E7%A0%94\">\u003C\u002Fsup>\u003Ca class=\"header-link\" href=\"#%E8%B0%83%E7%A0%94\">调研\u003C\u002Fa>\u003C\u002Fh1>\u003Cp data-marked-line=\"7\">&emsp;&emsp;这个功能如果用树莓派做应该很简单，但我没有带回来，而且用树莓派专门操作一个舵机也太杀鸡用牛刀了。第一个想到的当然是单片机，一顿搜索，目标定位到了ESP32和STM32，都是非常便宜的单片机，两者的资料也都非常多。\n&emsp;&emsp;但，不是ESP32买不起，而是STM32更有性价比\u003Cimg src=\"\u002Fsticker\u002Fyellow-face\u002F21.png\" alt=\"sticker\"\u002F>，6.1元买一个单片机，只能感叹现代的工业化太发达了。然后再搜索相关资料，以及问ChatGPT，发现STM32到手后不能直接通过USB操作，必须要装一个bootloader，而装bootloader需要另一个单片机，CH340，也非常便宜。\n&emsp;&emsp;所以需要购买的东西如下：\u003C\u002Fp>\n\u003Cul data-marked-line=\"10\">\n\u003Cli>\u003Ccode>STM32F103C8T6\u003C\u002Fcode>大概6元\u003C\u002Fli>\n\u003Cli>\u003Ccode>CH340土豪金\u003C\u002Fcode>大概3元\u003C\u002Fli>\n\u003Cli>\u003Ccode>MG90s舵机（金属齿）\u003C\u002Fcode>大概6元\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch1 data-marked-line=\"14\">\u003Csup class=\"fake-head\" id=\"%E4%B8%8A%E6%89%8B\">\u003C\u002Fsup>\u003Ca class=\"header-link\" href=\"#%E4%B8%8A%E6%89%8B\">上手\u003C\u002Fa>\u003C\u002Fh1>\u003Cp data-marked-line=\"15\">&emsp;&emsp;工作几年，我本就贫乏的硬件知识几乎全部忘了\u003Cimg src=\"\u002Fsticker\u002Faru\u002F22.png\" alt=\"sticker\"\u002F>，好在互联网上啥都有，又一顿搜索，找到这个神奇的视频：\n\u003Cdiv class=\"embed-media youtube\">\n                      \u003Ciframe src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002Fe0CP2IpIBg4?si=ChKfk8L-Gx5tvunm\" title=\"保姆级教程\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen>\u003C\u002Fiframe>\n                      \u003Csmall class=\"desc\">保姆级教程\u003C\u002Fsmall>\n                  \u003C\u002Fdiv>\n&emsp;&emsp;上面的视频讲解了(Windows环境)如何刷bootloader，如何安装驱动，如何通过USB上传代码到STM32。成功实现视频结尾的示例，就算成功了。\u003C\u002Fp>\n\u003Ch1 data-marked-line=\"19\">\u003Csup class=\"fake-head\" id=\"%E7%A1%AC%E4%BB%B6%E5%AE%89%E8%A3%85\">\u003C\u002Fsup>\u003Ca class=\"header-link\" href=\"#%E7%A1%AC%E4%BB%B6%E5%AE%89%E8%A3%85\">硬件安装\u003C\u002Fa>\u003C\u002Fh1>\u003Cp data-marked-line=\"20\">&emsp;&emsp;连线非常简单，就三根线，把舵机的5V和GND接在STM32的5V和GND上，信号线接在STM32的A1针。\n&emsp;&emsp;需要把舵机固定在硬盘盒的合适位置:\n\u003Cspan class=\"image-container\">\u003Cimg data-viewer alt=\"安装前\" title=\"安装前\" src=\"https:\u002F\u002Fr2-blog.yunyuyuan.net\u002Fid9BYlzfKSwgyHn.jpg\"\u002F>\u003Csmall class=\"desc\">安装前\u003C\u002Fsmall>\u003C\u002Fspan>\n\u003Cspan class=\"image-container\">\u003Cimg data-viewer alt=\"安装后\" title=\"安装后\" src=\"https:\u002F\u002Fr2-blog.yunyuyuan.net\u002FmFvnhKsCc95MT6j.jpg\"\u002F>\u003Csmall class=\"desc\">安装后\u003C\u002Fsmall>\u003C\u002Fspan>\u003C\u002Fp>\n\u003Ch1 data-marked-line=\"26\">\u003Csup class=\"fake-head\" id=\"%E7%BC%96%E7%A0%81\">\u003C\u002Fsup>\u003Ca class=\"header-link\" href=\"#%E7%BC%96%E7%A0%81\">编码\u003C\u002Fa>\u003C\u002Fh1>\u003Cp data-marked-line=\"27\">&emsp;&emsp;又到了喜闻乐见的show me the code环节，代码是c写的，也非常简单：\u003C\u002Fp>\n\u003Cpre data-marked-line=\"28\" data-lang=\"c\" data-shiki>\u003Ccode class=\"language-c\">\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#C678DD\">#include\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\"> &#x3C;Servo.h>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#C678DD\">#include\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\"> \"Arduino.h\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#C678DD\">#include\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\"> &#x3C;usb_serial.h>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#C678DD\">#include\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\"> &#x3C;HardwareSerial.h>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#C678DD\">#include\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\"> &#x3C;libmaple\u002Fusart.h>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#C678DD\">#include\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\"> &#x3C;libmaple\u002Fusb_cdcacm.h>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D;--shiki-light-font-style:inherit;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">\u002F\u002F 把舵机的信号线接到STM32的A1口\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#C678DD\">#define\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#61AFEF\"> servoPin\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\"> PA1\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D;--shiki-light-font-style:inherit;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">\u002F\u002F 板载的绿色LED指示灯是PC13\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#C678DD\">#define\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#61AFEF\"> ledPin\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\"> PC13\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">Servo myServo;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#C678DD\">void\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#61AFEF\"> setup\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">() {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#61AFEF\">  pinMode\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">(ledPin, OUTPUT);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D;--shiki-light-font-style:inherit;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">  \u002F\u002F 默认关闭LED指示灯\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#61AFEF\">  digitalWrite\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">(ledPin, HIGH);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E5C07B\">  Serial\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">.\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#61AFEF\">begin\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">();\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D;--shiki-light-font-style:inherit;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">  \u002F\u002F MG90s的脉冲范围是500ms~2500ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E5C07B\">  myServo\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">.\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#61AFEF\">attach\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">(servoPin, \u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#D19A66\">500\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">, \u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#D19A66\">2500\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D;--shiki-light-font-style:inherit;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">  \u002F\u002F 初始设置为20度\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E5C07B\">  myServo\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">.\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#61AFEF\">write\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">(\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#D19A66\">20\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#C678DD\">void\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#61AFEF\"> loop\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">() {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#C678DD\">\tif\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">(\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E5C07B\">Serial\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">.\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#61AFEF\">available\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">()) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">    String c \u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#C678DD\">=\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E5C07B\"> Serial\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">.\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#61AFEF\">readString\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">();\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#C678DD\">    int\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\"> deg;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#C678DD\">    bool\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\"> shouldExec \u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#C678DD\">=\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#D19A66\"> true\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#C678DD\">    if\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\"> (c \u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#C678DD\">==\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\"> \"1\"\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D;--shiki-light-font-style:inherit;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">      \u002F\u002F 如果收到了字符串\"1\"，则正向旋转到40度，打开硬盘盒开关\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">      deg \u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#C678DD\">=\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#D19A66\"> 40\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">    } \u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#C678DD\">else\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#C678DD\"> if\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\"> (c \u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#C678DD\">==\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\"> \"2\"\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">){\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D;--shiki-light-font-style:inherit;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">      \u002F\u002F 如果收到了字符串\"2\"，则反向旋转到0度，用作测试\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">      deg \u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#C678DD\">=\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#D19A66\"> 0\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">    } \u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#C678DD\">else\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\"> {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">      shouldExec \u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#C678DD\">=\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#D19A66\"> false\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">    }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#C678DD\">    if\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\"> (shouldExec) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D;--shiki-light-font-style:inherit;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">      \u002F\u002F 打开LED指示灯\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#61AFEF\">      digitalWrite\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">(ledPin, LOW);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D;--shiki-light-font-style:inherit;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">      \u002F\u002F 执行舵机旋转\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E5C07B\">      myServo\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">.\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#61AFEF\">write\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">(deg);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D;--shiki-light-font-style:inherit;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">      \u002F\u002F 1秒后关闭LED指示灯\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#61AFEF\">      delay\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">(\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#D19A66\">1000\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#61AFEF\">      digitalWrite\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">(ledPin, HIGH);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">    }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">\t}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D;--shiki-light-font-style:inherit;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\">  \u002F\u002F 复原舵机\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E5C07B\">  myServo\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">.\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#61AFEF\">write\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">(\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#D19A66\">20\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">}\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp data-marked-line=\"81\">&emsp;&emsp;写完后，点击Arduino IDE左上方的上传按钮，编译并上传代码到STM32，这时在Serial Monitor上输入\u003Ccode>1\u003C\u002Fcode>并回车，舵机会旋转20度，1秒后复原。\n&emsp;&emsp;测试完成，把STM32转移到linux小主机的USB接口，linux一般自带驱动，什么都不用做，就能发现\u003Ccode>\u002Fdev\u002F\u003C\u002Fcode>下多了一个设备，我的是\u003Ccode>\u002Fdev\u002FttyACM0\u003C\u002Fcode>，操作方法如下：\u003C\u002Fp>\n\u003Cpre data-marked-line=\"83\" data-lang=\"sh\" data-shiki>\u003Ccode class=\"language-sh\">\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D;--shiki-light-font-style:inherit;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\"># 修改权限\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#61AFEF\">sudo\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\"> chmod\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\"> o+rw\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\"> \u002Fdev\u002FttyACM0\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D;--shiki-light-font-style:inherit;--shiki-dark:#7F848E;--shiki-dark-font-style:italic\"># 发送命令\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;--shiki-dark:#56B6C2\">echo\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#D19A66\"> -ne\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\"> '1'\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#ABB2BF\"> >\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\"> \u002Fdev\u002FttyACM0\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\"> \u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp data-marked-line=\"89\">&emsp;&emsp;后面遇到停电了，可以直接命令行远程启动硬盘盒。但是如果断网了，那估计神仙也救不了\u003Cimg src=\"\u002Fsticker\u002Fyellow-face\u002F44.png\" alt=\"sticker\"\u002F>。\n\u003Cdiv class=\"embed-media youtube\">\n                      \u003Ciframe src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002FRzqpdUDKDsI\" title=\"实际效果\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen>\u003C\u002Fiframe>\n                      \u003Csmall class=\"desc\">实际效果\u003C\u002Fsmall>\n                  \u003C\u002Fdiv>\u003C\u002Fp>\n",[18,22,25,28],{"size":19,"text":20,"url":21},"big","调研","%E8%B0%83%E7%A0%94",{"size":19,"text":23,"url":24},"上手","%E4%B8%8A%E6%89%8B",{"size":19,"text":26,"url":27},"硬件安装","%E7%A1%AC%E4%BB%B6%E5%AE%89%E8%A3%85",{"size":19,"text":29,"url":30},"编码","%E7%BC%96%E7%A0%81","起因 前段时间把我的小主机连带路由器硬盘等设备带回了老家，老家也有ipv6，所以无缝衔接，随后安心出去游玩。某天我一如既往地打开nextcloud准备上传图片，发现服务挂了，然后发现是家里停过几小时的电。虽然路由器和小主机都有来电自启，但硬盘盒通电后需要手动按一下开关才能启动，我人不在家，所以这段时…",[],1793351207602]