版本协议

GPL 3.0

标签
标准版
#第六届立创电赛#ESP32 一对多无线键盘鼠标扩展器

创建时间:3年前

视频

描述

<div class="document"> <p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;">注:* 为必填项</p> <p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"><strong><span style="color: #0093e6;">请在报名阶段填写 ↓</span></strong></p> <p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p> <h3 class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;">* 1、项目功能介绍</h3> <hr class="horizontal-splitline normal-bold-2"> <p><span>很多时候出于空间和便捷性考虑,我们希望一套键盘鼠标来控制多个</span>PC<span>。通常情况下可以通过 </span>KVM<span>实现这个功能。显而易见,他们使用有线方式来进行连接,仍然会占用大量空间。这次使用 </span>ESP32<span>来实现无线的键盘鼠标扩展功能。</span></p> <p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p> <p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"><img src="//image.lceda.cn/pullimage/nYQEWR7lQGKYo1bMPUOSB1UxjxmYdG1JiiqMgiSx.jpeg" alt="" width="790" height="1039"></p> <p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p> <h3 class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;">*2、项目属性</h3> <hr class="horizontal-splitline normal-bold-2"> <p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p> <p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"><span style="color: #95a5a6;"><span style="font-size: 14px;">原创项目首次公开</span></span></p> <p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p> <h3 class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;">* 3、开源协议</h3> <hr class="horizontal-splitline normal-bold-2"> <p> </p> <p>GPL3.0<span>开源协议</span> </p> <p style="line-height: 1.8;"> </p> <p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"><strong><span style="color: #0093e6;">请在竞赛阶段填写 ↓</span></strong></p> <p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p> <h3 class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;">*4、硬件部分</h3> <hr class="horizontal-splitline normal-bold-2"> <p>为了完成这个目标,选择眼下最流行的 Arduino 开发环境,配合ESP32 来实现。这次使用到了 ESP32 和 ESP32 S2两种型号的主控芯片。</p> <p>首先要实现解析USB键盘鼠标的功能,通常情况下可以使用 Arduino USB Host Shield,但是因为我们需要同时解析USB键盘和鼠标,这样的方案会显得比较麻烦,另外一个原因是这个Shield的主要芯片是 Max3421e 现在价格较高(立创商城报价人民币42-65元)。因此,选择了CH9350(这是一颗国产芯片,是南京沁恒WCH出品的, 现在非常流行的 USB转串口芯片CH340 也是他们家的产品)。CH9350能够将 USB 键盘鼠标的有效信息转为串口数据。芯片特点如下:<br>•    支持12Mbps全速USB传输和1.5Mbps低速USB传输,兼容USB V2.0。<br>•    上位机端USB端口符合标准HID类协议,不需要额外安装驱动程序,支持内置HID类设备驱动的Windows、Linux、MAC等操作系统。<br>•    同一芯片可配置为上位机模式和下位机模式,分别连接USB-Host主机和USB键盘、鼠标。<br>•    支持USB键盘鼠标在BIOS界面使用,支持多媒体功能键,支持不同分辨率USB鼠标。<br>•    支持各种品牌的USB键盘鼠标、USB无线键盘鼠标、USB转PS2线等。<br>•    上位机端和下位机端支持热插拔。<br>•    提供发送状态引脚,支持485通讯。<br>•    串口支持115200/57600/38400串口通信波特率。<br>•    内置晶振和上电复位电路,外围电路简单。<br>•    支持5V、3.3V电源电压。<br>•    提供LQFP-48无铅封装,兼容RoHS。<br> 同时这个款芯片立创商城报价是 25元,比Max3421便宜一大截。<br>然后围绕这个芯片,给DFRobot 的 FireBeetle 主控板(芯片是ESP32D32)设计一个转接板,能够将USB 键盘鼠标信号解析为串口数据。</p> <p><br>核心是 CH9350芯片,它能够一次性支持2个 USB Host接口,下图中的 USB1 和 USB2。LED1 和 LED2 是通讯指示灯,对应的 USB1 和 USB2 如果有正常的通讯,对应的 LED会熄灭。此外,还有一个USB_Power 是USB公头,用于从外部取电,避免 FireBeetle 供电不足的情况。</p> <p> </p> <p><img src="//image.lceda.cn/pullimage/ZvZbJffd5PYutWL8MAc4dDXAy8N30RJQMXDfWwnE.png" alt="" width="1457" height="873"></p> <p> </p> <p>PCB <span>设计如下:</span></p> <p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt pap-left-indent-1.6em" style="line-height: 1.8;"><img src="//image.lceda.cn/pullimage/9vfBGYZAbUtXFqJZjh3XQVsHtGOdhnPhZkFiAJ06.png" alt="" width="450" height="732"></p> <p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt pap-left-indent-1.6em" style="line-height: 1.8;"> </p> <p>3D <span>预览如下:</span></p> <p> </p> <p><span><img src="//image.lceda.cn/pullimage/3K1Guno6xdIuG4SR1H78ZK7pnX1Fqphl5RKqbwCK.png" alt=""></span></p> <p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt pap-left-indent-1.6em" style="line-height: 1.8;"> </p> <p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt pap-left-indent-1.6em" style="line-height: 1.8;"><span>做出来就是这样(美中不足的因为</span>2<span>个</span>USB <span>母头的存在,这个板子稍微大一些。另外,这个芯片引脚比较密集,焊接费了一些功夫,如果你对自己焊接技术不放心,推荐直接</span> SMT <span>避免手工焊接):</span></p> <p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt pap-left-indent-1.6em" style="line-height: 1.8;"> <img src="//image.lceda.cn/pullimage/DxqmgRhNaZYwLVmyGG6aJQTrg8nUCh3wJRORozMI.png" alt="" width="1025" height="662"></p> <p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt pap-left-indent-1.6em" style="line-height: 1.8;"> </p> <p><span>接下来我们还需要设计和用户交互的部分,这一部分电路比较简单,有四个按钮,用于选择当前工作的接收器,另外有四个指示灯用于指示当前的工作接收器。</span></p> <p><span><img src="//image.lceda.cn/pullimage/vapxSPbmTlPilYuk3YrIIUeZdQORyq1G8M076HFq.png" alt=""></span></p> <p>PCB<span>设计如下,比较有意思的是:</span>LED <span>是反贴(发光部分朝向</span>PCB<span>方向)在</span>PCB<span>背面的,然后这里使用了阻焊层,这样光线能够透过</span>PCB<span>照亮正面的字迹。</span></p> <p><span><img src="//image.lceda.cn/pullimage/8ESfGNPp0spDK53ZNyyLGZHsib7bdZtbVoJa3Cq9.png" alt="" width="1072" height="680"></span></p> <p> </p> <p><span>很遗憾 </span>3D <span>预览无法展现这种效果</span></p> <p><span><img src="//image.lceda.cn/pullimage/RdGEMNKCsSVeYCxEDB0bQ0KDLuxX5KPQV4vfnMYe.png" alt="" width="1200" height="767"></span></p> <p> </p> <p><span>实物拍摄:</span></p> <p><span><img src="//image.lceda.cn/pullimage/sz3RZvkH3a8XLpvCx7dQnDc2QfuDkmcPH43G9afV.jpeg" alt="" width="1094" height="820"></span></p> <p><span>于是我们有了三个卡:</span>FireBeetle<span>,</span>USB <span>键盘鼠标</span>Shield<span>和上面的用户交互界面卡。将三个插接在一起即可正常工作。上述就是发送端。</span></p> <p><span>我们同样使用 </span>ESP32 <span>作为接收端,只是这里必须使用 </span>ESP32 S2 <span>主控,因为这款支持 </span>USB Device <span>,可以方便的实现一个 </span>USB <span>设备。你可以使用下面这种直接引出 </span>USB Device<span>的</span> ESP32 S2 <span>开发板(上面一个是 </span>CH340 <span>下载端口,一个是 </span>USB Device <span>端口):</span></p> <p><span><img src="//image.lceda.cn/pullimage/A53rDfwKG9I7UihGNmZPPj6QySTp7uXrVGSPBksb.jpeg" alt="" width="800" height="800"></span></p> <p> </p> <p><span>除此之外,还可以直接购买</span>ESP32 S2<span>模块自己设计引出 </span>USB Device <span>引脚。</span></p> <p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt pap-left-indent-1.6em" style="line-height: 1.8;"> </p> <p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt pap-left-indent-1.6em" style="line-height: 1.8;"> </p> <h3 class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;">*5、软件部分</h3> <hr class="horizontal-splitline normal-bold-2"> <p>同样的,软件也有2个,一个是 键盘鼠标信息发送端,另外一个是数据接收端,还要负责模拟键盘鼠标设备。</p> <p>前面提到了我们使用 CH9350进行键盘鼠标数据的解析,具体数据格式在 Data Sheet 上有描述:</p> <p><img src="//image.lceda.cn/pullimage/VAcxuub2RrhpMhmSf71n0OeIZDOYFie0FCp9FLfX.png" alt="" width="1500" height="683"></p> <p> </p> <p><span>解析后的数据会出现在</span> FireBeetle <span>的</span> Serial2 <span>上。</span></p> <p><span>首先解说发送端的关键代码:</span></p> <p>1.<span>初始化时,使用下面的代码对于</span> CH9350 <span>发送数据,这样</span> Ch9350<span>只会发送有效的信息(就是说鼠标键盘有动作才会有数据出来)。</span></p> <p>  char SwitchToMode1[] = {0x57, 0xAB, 0x12, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x20};</p> <p>  for (int i = 0; i < sizeof(SwitchToMode1); i++) {</p> <p>    Serial2.write(SwitchToMode1[i]);</p> <p>  }</p> <p> </p> <p>2.ESP32 自带了一个称作 ESP-NOW 的功能,只需要简单的代码就能让两块 ESP32 轻松实现无线互联。</p> <p>  // 初始化 ESP-NOW<br>  WiFi.mode(WIFI_STA);<br>  if (esp_now_init() != ESP_OK) {<br>    Serial.println("Error initializing ESP-NOW");<br>    return;<br>  }</p> <p>  // 设置发送数据回调函数<br>  //esp_now_register_send_cb(OnDataSent);</p> <p>  // 绑定数据接收端,这里需要首先知道接收端的MAC,在文件开始处,使用下面的代码来给定 MAC<br>// 接收设备的 MAC 地址<br>// 红色 PCB 7C:DF:A1:06:70:EC <br>// 双TypeC 开发板 7C:DF:A1:06:5D:18 <br>// 双TypeC 开发板 7C:DF:A1:06:77:C0<br>// 大绿色开发板 7C:DF:A1:06:70:A4</p> <p>uint8_t Receiver1[] = {0x7C, 0xDF, 0xA1, 0x06, 0x70, 0xEC};<br>uint8_t Receiver2[] = {0x7C, 0xDF, 0xA1, 0x06, 0x5D, 0x18};<br>uint8_t Receiver3[] = {0x7C, 0xDF, 0xA1, 0x06, 0x70, 0xA4};<br>uint8_t Receiver4[] = {0x7C, 0xDF, 0xA1, 0x06, 0x77, 0xC0};<br>// 接下来绑定接收端的MAC<br>  esp_now_peer_info_t peerInfo;<br>  memcpy(peerInfo.peer_addr, Receiver1, 6);<br>  peerInfo.channel = 0;<br>  peerInfo.encrypt = false;<br>3.使用 CurrentDevice 变量来记录当前接收端的动作(一些时候我们不会希望在多台机器上进行相同的键盘鼠标动作)</p> <p>  if (digitalRead(BUTTON1) == LOW) {<br>    delay(100);<br>    if (digitalRead(BUTTON1) == LOW) {<br>      if ((CurrentDevice & BIT0) == 0) {<br>        CurrentDevice |= BIT0;<br>      } else {<br>        CurrentDevice &= (~BIT0);<br>      }<br>    }<br>  }</p> <p>同样的,根据当前的CurrentDevice值设定LED<br>  if (CurrentDevice != CurrentDeviceLast) {<br>    digitalWrite(LED1, (CurrentDevice & BIT0 ? 1 : 0));<br>    digitalWrite(LED2, (CurrentDevice & BIT1 ? 1 : 0));<br>    digitalWrite(LED3, (CurrentDevice & BIT2 ? 1 : 0));<br>    digitalWrite(LED4, (CurrentDevice & BIT3 ? 1 : 0));<br>    CurrentDeviceLast = CurrentDevice;<br>    Serial.println(CurrentDevice, HEX);<br>  }<br>4.接收USB键盘鼠标的动作之后,根据前面的CurrentDevice状态,发送给不同的接收端,只需要esp_now_send()函数即可将数据送出:</p> <p>   if ((CurrentDevice & BIT0) != 0) {<br>      // 发送数据<br>      result = esp_now_send(Receiver1, Data, Counter);</p> <p>      // 检查数据是否发送成功<br>      if (result == ESP_OK) {<br>       // Serial.println("Sent success Receiver1");<br>      }<br>      else {<br>       // Serial.println("Error sending the data to Receiver1");<br>      }<br>}<br>上述就是发送端的关键代码,有兴趣的朋友可以直接阅读完整的代码实现。特别注意,因为我使用 DFRobot 的 FireBeetle, 所以编译时需要安装对应的 FireBeetle 支持包。<br>接下来介绍接收端的代码,相比发送,接收端要简单很多。同样只挑出来关键部分进行解说:<br>1.    无线接收的 ESP-NOW代码同样很简单,初始化之后注册回调函数即可,当收到无线信号后会自动进入esp_now_register_recv_cb()给定的函数中进行处理</p> <p>  // 初始化 ESP-NOW<br>  WiFi.mode(WIFI_STA);<br>  if (esp_now_init() != 0) {<br>    Serial.println("Error initializing ESP-NOW");<br>    return;<br>  }</p> <p>  // 设置接收数据回调函数<br>  esp_now_register_recv_cb(OnDataRecv);</p> <p>2.    收到数据后的处理代码中会使用verifyData()函数对接收到的数据进行校验,之后再根据数据类型使用device.directMS() 和device.directKB分别处理</p> <p>// 数据接收回调函数<br>void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) {<br>  char *Starter = (char*)incomingData;<br>  if (len>72) {return;}<br>  <br>  while (Starter < (char *)(incomingData+len)) {<br>    if (verifyData((char*)Starter, Starter[3]+4)) {<br>      <br>      for (int i = 0; i < Starter[3]+4; i++) {<br>        Serial.print(Starter[i], HEX);<br>         Serial.print(" ");<br>      }<br>       Serial.println(" ");<br>      // 如果是鼠标 <br>      if (((Starter[4] >> 4) & 0x3) == 0x2) {<br>        device.directMS((char *)&Starter[5]);<br>      }<br>      //如果是键盘<br>      if ((((Starter[4] >> 4) & 0x3) == 0x3)||(((Starter[4] >> 4) & 0x3) == 0x1)) {<br>        device.directKB((char *)&Starter[5]);<br>      }<br>      <br>    }<br>    Starter=&Starter[Starter[3]+4];<br>  }//while (Start < (incomingDatalen))<br>}<br>3.    为了模拟USB键盘鼠标,我使用了 TinyUSB 库,这个库中自带一个KB MS复合设备的代码(hidcomposite.cpp) ,美中不足的是代码没有支持RAW 格式发送鼠标键盘数据。为此,在代码中添加如下函数支持这个功能,即将收到的数据原封不动的发送为鼠标或者键盘的动作:<br>//LABZ_Debug_Start<br>void HIDcomposite::directKB(char *data)<br>{<br>    uint8_t keycode[6]={data[2],data[3],data[4],data[5],data[6],data[7]};<br>    if (tud_hid_ready())<br>    {<br>        // KEYBOARD: convenient helper to send keyboard report if application<br>        // use template layout report as defined by hid_keyboard_report_t<br>        tud_hid_keyboard_report(report_keyboard,data[0], keycode);<br>    }<br>}<br>//LABZ_Debug_End</p> <p>//LABZ_Debug_Start<br>void HIDcomposite::directMS(char *data)<br>{<br>    if (tud_hid_ready())<br>    {<br>        // uint8_t report_id, uint8_t buttons, int8_t x, int8_t y, int8_t vertical, int8_t horizontal<br>        tud_hid_mouse_report(report_mouse, data[0], data[1], data[2], data[3], 0);<br>    }<br>}<br>//LABZ_Debug_End</p> <h3 class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </h3> <h3 class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </h3> <h3 class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;">*6、BOM清单</h3> <hr class="horizontal-splitline normal-bold-2"> <p><span>用户界面板</span></p> <table width="640"> <tr> <td width="64"> <p>ID</p> </td> <td width="64"> <p>Name</p> </td> <td width="64"> <p>Designator</p> </td> <td width="64"> <p>Footprint</p> </td> <td width="64"> <p>Quantity</p> </td> <td width="64"> <p>Manufacturer Part</p> </td> <td width="64"> <p>Manufacturer</p> </td> <td width="64"> <p>Supplier</p> </td> <td width="64"> <p>Supplier Part</p> </td> <td width="64"> <p>Price</p> </td> </tr> <tr> <td> <p align="right">1</p> </td> <td> <p>KT-1206Red LED</p> </td> <td> <p>LED1,LED2,LED3,LED4</p> </td> <td> <p>LED1206-R-RD</p> </td> <td> <p align="right">4</p> </td> <td> <p>KT-1206Red LED</p> </td> <td> <p>KENTO</p> </td> <td> <p>LCSC</p> </td> <td> <p>C49018</p> </td> <td> <p align="right">0.0738</p> </td> </tr> <tr> <td> <p align="right">2</p> </td> <td> <p>10K</p> </td> <td> <p>R1,R2</p> </td> <td> <p>R1206</p> </td> <td> <p align="right">2</p> </td> <td> <p>CR1206F10K7P05</p> </td> <td> <p>Ever Ohms Tech</p> </td> <td> <p>LCSC</p> </td> <td> <p>C245447</p> </td> <td> <p align="right">0.0391</p> </td> </tr> <tr> <td> <p align="right">3</p> </td> <td> <p>FireBeelte ESP32</p> </td> <td> <p>U1</p> </td> <td> <p>DFROBOT FIREBEETLE</p> </td> <td> <p align="right">1</p> </td> <td> </td> <td> </td> <td> <p>DFRobot</p> </td> <td> </td> <td> </td> </tr> <tr> <td> <p align="right">4</p> </td> <td> <p>10K</p> </td> <td> <p>R3,R4</p> </td> <td> <p>R1206</p> </td> <td> <p align="right">2</p> </td> <td> <p>CR1206F10K7P05</p> </td> <td> <p>Ever Ohms Tech</p> </td> <td> <p>LCSC</p> </td> <td> <p>C245447</p> </td> <td> <p align="right">0.0391</p> </td> </tr> <tr> <td> <p align="right">5</p> </td> <td> <p>1TS005A-2700-5001</p> </td> <td> <p>DEV1,DEV2,DEV3,DEV4</p> </td> <td> <p>SW-TH_4P-L6.0-W6.0-P4.50-LS6.5</p> </td> <td> <p align="right">4</p> </td> <td> <p>1TS005A-2700-5001</p> </td> <td> <p>HYP</p> </td> <td> <p>LCSC</p> </td> <td> <p>C319408</p> </td> <td> <p align="right">0.161</p> <p align="right"> </p> </td> </tr> </table> <p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p> <p>CH9350 Shield</p> <table width="1071"> <tr> <td width="64"> <p>ID</p> </td> <td width="102"> <p>Name</p> </td> <td width="76"> <p>Designator</p> </td> <td width="213"> <p>Footprint</p> </td> <td width="64"> <p>Quantity</p> </td> <td width="146"> <p>Manufacturer Part</p> </td> <td width="214"> <p>Manufacturer</p> </td> <td width="64"> <p>Supplier</p> </td> <td width="64"> <p>Supplier Part</p> </td> <td width="64"> <p>Price</p> </td> </tr> <tr> <td width="64"> <p align="right">1</p> </td> <td width="102"> <p>3.3uf</p> </td> <td width="76"> <p>C2</p> </td> <td width="213"> <p>C1206</p> </td> <td width="64"> <p align="right">1</p> </td> <td width="146"> <p>TCC1206X7R561K501DT</p> </td> <td width="214"> <p>CCTC</p> </td> <td width="64"> <p>LCSC</p> </td> <td width="64"> <p>C377112</p> </td> <td width="64"> <p align="right">0.1299</p> </td> </tr> <tr> <td width="64"> <p align="right">2</p> </td> <td width="102"> <p>0.1uf</p> </td> <td width="76"> <p>C3</p> </td> <td width="213"> <p>C1206</p> </td> <td width="64"> <p align="right">1</p> </td> <td width="146"> <p>TCC1206X7R561K501DT</p> </td> <td width="214"> <p>CCTC</p> </td> <td width="64"> <p>LCSC</p> </td> <td width="64"> <p>C377112</p> </td> <td width="64"> <p align="right">0.1299</p> </td> </tr> <tr> <td width="64"> <p align="right">3</p> </td> <td width="102"> <p>100uf</p> </td> <td width="76"> <p>C5,C4</p> </td> <td width="213"> <p>C1206</p> </td> <td width="64"> <p align="right">2</p> </td> <td width="146"> <p>TCC1206X7R561K501DT</p> </td> <td width="214"> <p>CCTC</p> </td> <td width="64"> <p>LCSC</p> </td> <td width="64"> <p>C377112</p> </td> <td width="64"> <p align="right">0.1299</p> </td> </tr> <tr> <td width="64"> <p align="right">4</p> </td> <td width="102"> <p>2.54mm 1*2P</p> </td> <td width="76"> <p>DPOWER1</p> </td> <td width="213"> <p>HDR-TH_2P-P2.54-V-M</p> </td> <td width="64"> <p align="right">1</p> </td> <td width="146"> <p>2.54mm 1*2P</p> </td> <td width="214"> <p>ReliaPro</p> </td> <td width="64"> <p>LCSC</p> </td> <td width="64"> <p>C36717</p> </td> <td width="64"> <p align="right">0.0372</p> </td> </tr> <tr> <td width="64"> <p align="right">5</p> </td> <td width="102"> <p><span>短接电阻</span></p> </td> <td width="76"> <p>JP2</p> </td> <td width="213"> <p><span>短接焊盘</span></p> </td> <td width="64"> <p align="right">1</p> </td> <td width="146"> </td> <td width="214"> </td> <td colspan="2" width="128"> <p>TTOOAADD</p> </td> <td width="64"> </td> </tr> <tr> <td width="64"> <p align="right">6</p> </td> <td width="102"> <p>LED</p> </td> <td width="76"> <p>LED2,LED1</p> </td> <td width="213"> <p>LED1206-R-RD</p> </td> <td width="64"> <p align="right">2</p> </td> <td width="146"> <p>KT-1206Red LED</p> </td> <td width="214"> <p>KENTO</p> </td> <td width="64"> <p>LCSC</p> </td> <td width="64"> <p>C49018</p> </td> <td width="64"> <p align="right">0.0738</p> </td> </tr> <tr> <td width="64"> <p align="right">7</p> </td> <td width="102"> <p>1K</p> </td> <td width="76"> <p>R3,R4</p> </td> <td width="213"> <p>R1206</p> </td> <td width="64"> <p align="right">2</p> </td> <td width="146"> <p>R1206RXX102XJ04LTC</p> </td> <td width="214"> <p>Shenzhen Eyang Tech Development</p> </td> <td width="64"> <p>LCSC</p> </td> <td width="64"> <p>C267247</p> </td> <td width="64"> <p align="right">0.0201</p> </td> </tr> <tr> <td width="64"> <p align="right">8</p> </td> <td width="102"> <p>CH9350L</p> </td> <td width="76"> <p>U1</p> </td> <td width="213"> <p>LQFP-48_L7.0-W7.0-P0.50-LS9.0-BL</p> </td> <td width="64"> <p align="right">1</p> </td> <td width="146"> <p>CH9350L</p> </td> <td width="214"> <p>WCH</p> </td> <td width="64"> <p>LCSC</p> </td> <td width="64"> <p>C109472</p> </td> <td width="64"> <p align="right">25.69</p> </td> </tr> <tr> <td width="64"> <p align="right">9</p> </td> <td width="102"> <p>FireBeelte ESP32</p> </td> <td width="76"> <p>U2</p> </td> <td width="213"> <p>DFROBOT FIREBEETLE</p> </td> <td width="64"> <p align="right">1</p> </td> <td width="146"> </td> <td width="214"> </td> <td width="64"> <p>DFRobot</p> </td> <td width="64"> </td> <td width="64"> </td> </tr> <tr> <td width="64"> <p align="right">10</p> </td> <td width="102"> <p>U2</p> </td> <td width="76"> <p>USB1,USB2</p> </td> <td width="213"> <p>USB-A-TH_U-A-24DD-Y-1</p> </td> <td width="64"> <p align="right">2</p> </td> <td width="146"> <p>U-A-24DD-Y-1</p> </td> <td width="214"> <p>Rectangular Connectors - Contacts</p> </td> <td width="64"> <p>LCSC</p> </td> <td width="64"> <p>C193133</p> </td> <td width="64"> <p align="right">0.8234</p> </td> </tr> <tr> <td width="64"> <p align="right">11</p> </td> <td width="102"> <p>USB-212-BCW</p> </td> <td width="76"> <p>USB-POWER</p> </td> <td width="213"> <p>USB-A-SMD_USB-212-BCW</p> </td> <td width="64"> <p align="right">1</p> </td> <td width="146"> <p>USB-212-BCW</p> </td> <td width="214"> <p>XUNPU</p> </td> <td width="64"> <p>LCSC</p> </td> <td width="64"> <p>C720521</p> </td> <td width="64"> <p align="right">0.4174</p> </td> </tr> </table> <p> </p> <p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p> <p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p> <p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p> <h3 class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;">*7、大赛LOGO验证</h3> <hr class="horizontal-splitline normal-bold-2"> <p style="line-height: 1.8;"> </p> <p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"><img src="//image.lceda.cn/pullimage/nGox62tQM4Wy6iGy7jlSjyWPcPXssbwGz3vEZAwG.jpeg" alt=""></p> <h3 class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;">* 8、演示您的项目并录制成视频上传</h3> <hr class="horizontal-splitline normal-bold-2"> <p style="line-height: 1.8;"> </p> <p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"><span style="color: #95a5a6; font-size: 14px;">视频要求:请横屏拍摄,分辨率不低于1280×720,格式Mp4/Mov,单个视频大小限100M内;</span></p> <p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"><span style="color: #95a5a6; font-size: 14px;">视频标题:立创电赛:{项目名称}-{视频模块名称};如立创电赛:《自动驾驶》-团队介绍。</span></p> <p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p> <p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"><span style="font-size: 14px;">更多详情:<a href="/posts/06c94d90c2c447dfbd9ed7339ff4a5b1" target="_blank">https://diy.szlcsc.com/posts/06c94d90c2c447dfbd9ed7339ff4a5b1</a></span></p> <p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p> </div>

文档

BOM

暂无

附件

附件名 下载
EspTinyUSB.zip
MultiKBMSReceiver.zip
MultiKBMSSender.zip

评论(1)

  • 表情
    emoji
    小嘉工作篇
    小嘉日常篇
  • 图片
成功
工程所有者当前已关闭评论
Zoologist 回复
<p>项目涉及到的2个板卡的电路图和 PCB 已经上传到附件中吗,此外还有修改之后的 TinyUSB 库。</p><br/><p><br><br/><br></p>
goToTop
svg-battery svg-battery-wifi svg-books svg-more svg-paste svg-pencil svg-plant svg-ruler svg-share svg-user svg-logo-cn svg-double-arrow