版本协议

GPL 3.0

标签
专业版
#第九届立创电赛#基于esp32和xbox手柄的气垫小船

创建时间:1个月前

76 0

视频

描述

<div class="document"> <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 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;">采用ESP32作为主控,xbox one s手柄作为信号发射端。esp32接收信号控制电调驱动风扇和舵机完成气垫船充气、前进转向。</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;">该项目是本人于24年78月份自创(调用了大佬的库,参考了3d模型),只参加过24年esp32征集令,经询问允许参加此次电赛。</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> <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;">该项目调用了GitHub大佬的xbox库,我会放在附件区,大家感兴趣可以关注下大佬,3d文件是在开源的基础上进行修改的。自己的库正在写,写完后会更换为我自己的库和3d文件。</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> <p>在thingiverse看到这个模型后,自己对一部分地方进行修改以适配eps32电调电机等的安装。并通过3d打印技术打印出来。完美装配</p> <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;"><img src="//image.lceda.cn/pullimage/HVk3nOB3xjc51iFLqFito8nu3dU58WwW48Q0EF6R.png"></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;"><img src="//image.lceda.cn/pullimage/U8e31ADY7PMxypgjJyDrzvfRTn4XPID9trZkt415.jpeg"></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/RPc2fKM9MKcevXCKKVjCXQLv30VNjEoeBh2y0EeS.png"></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;"><img src="//image.lceda.cn/pullimage/GoqGYEJ9NsCA3XcRtnY7uvgEJae8mYhfaRwpn16E.jpeg"></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;"><img src="//image.lceda.cn/pullimage/mtPoMratZ7zB4AQ2RVM2or0JTEUy35IZGnlstGLZ.jpeg"></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;"><img src="//image.lceda.cn/pullimage/HTGuK5g20GrqbMq01uJIR1ZUZaqaCJPvkBWntA8a.jpeg"></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;">*5、软件部分</h3> <hr class="horizontal-splitline normal-bold-2"> <p> </p> <p><img src="//image.lceda.cn/oshwhub/e9aec74ec71a41df9149311de5a8bf58.png"></p> <p>1.入门</p> <p>2024年8月27日</p> <p>23:26</p> <p> </p> <p>先用platform建立下图工程</p> <p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/6b95090d4ae94149a172ca26ea011f32.png"><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/78a537a295a946ffb09cdfed731ddf5f.png"></p> <p>测试代码</p> <p> </p> <p>void setup() {</p> <p>  // put your setup code here, to run once:</p> <p>  //初始化串口</p> <p>  Serial.begin(115200);</p> <p>}</p> <p> </p> <p>void loop() {</p> <p>  // put your main code here, to run repeatedly:</p> <p>  Serial.println("My First PIO Project!");</p> <p>  delay(1000);</p> <p>}</p> <p>编译下载</p> <p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/f268b64fdf3e4c51b520932bf0d2f9da.png"></p> <p> </p> <p>存在的问题</p> <p>Platform 默认波特率是9600,需要在配置文件加</p> <p>monitor_speed = 115200即可正常显示</p> <p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/899f11e07d154a0a82a6c33106403530.png"></p> <p>2.引脚电平读写</p> <p>2024年8月27日</p> <p>23:53</p> <p>直接读取引脚电平</p> <p>#include</p> <p>void setup() {</p> <p><em>  // put your setup code here, to run once:</em></p> <p><em>  //初始化串口</em></p> <p>  Serial.begin(115200);</p> <p>  pinMode(2,OUTPUT);<em>//初始化io  </em></p> <p>  pinMode(4,INPUT);<em>//初始化io</em></p> <p>}</p> <p>void loop() {</p> <p><em>  // put your main code here, to run repeatedly:</em></p> <p><em>  // Serial.println("My First PIO Project!");</em></p> <p><em>  // delay(1000);</em></p> <p>  digitalWrite(2,digitalRead(4));<em>//设置2引脚的电平为读取到4脚输入电平</em></p> <p>}</p> <p> </p> <p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/8778290b08354a4cb8889d53ec522279.png"></p> <p>不同于STM32的简单复用,ESP32的多路复用器,使设计人员可以灵活地更改芯片内部的 GPIO 引脚连接并将其路由到任何信号,这样硬件设计上,布线也方便的多。</p> <p> </p> <p> </p> <p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/68147854856a4c1cab44d23f0aae4462.png"></p> <p> </p> <p> </p> <p>#include</p> <p>void bt_callBack(void);</p> <p>void setup() {</p> <p><em>  // put your setup code here, to run once:</em></p> <p><em>  //初始化串口</em></p> <p>  Serial.begin(115200);</p> <p>  pinMode(2,OUTPUT);<em>//初始化io  </em></p> <p>  pinMode(4,INPUT);<em>//初始化io</em></p> <p>  attachInterrupt(4,bt_callBack,CHANGE);</p> <p>}</p> <p>void loop() {</p> <p><em>  // put your main code here, to run repeatedly:</em></p> <p><em>  // Serial.println("My First PIO Project!");</em></p> <p><em>  // delay(1000);</em></p> <p><em>  // digitalWrite(2,digitalRead(4));//设置2引脚的电平为读取到4脚输入电平</em></p> <p>}</p> <p>void bt_callBack(void)<em>//中断回调函数</em></p> <p>{</p> <p>  digitalWrite(2,digitalRead(4));</p> <p>}</p> <p>通过中断控制</p> <p>3.串口通信</p> <p>2024年8月28日</p> <p>0:34</p> <p>ESP32 芯片有3 个 UART 接口,UART0,UART1,UART2,支持异步通信和 IrDA,通信速度最高可达 5Mbps,3 个接口可以被 DMA 或 CPU 直接访问,3 个串口带发送接收 FIFO,共享 1024*8bit 的 RAM,通过串口,我们可以非常方便的跟其它外设进行通信或者打印数据。</p> <p> </p> <p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/a6632098bbc144878f5cf65cd47913f5.png"></p> <p> </p> <p> </p> <p> </p> <p>UART1的默认引脚为GPIO9,、GPIO10,这两个接口一般用于连接外部Flash,程序中默认使用这两个引脚的,所以我们在用的时候一定记得改到别的IO口</p> <p> </p> <p> </p> <p> </p> <p>  Serial1.begin(115200,SERIAL_8N1,26,27);</p> <p>Serial1可以转到定义查看为串口2,就把RX改到了26,TX改到了27,第一个参数为波特率设置,如果输入0就会自动监测波特率,第二个为串口配置参数,SERIAL_8N1为8位数据位,无校验位,1位停止位的意思</p> <p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/d0a04bac6e3c45ea8b310d1cd46271de.png"></p> <p>串口常用函数,在HardwareSerial中可以看到</p> <p> </p> <p>void begin(unsigned long baud, uint32_t config=SERIAL_8N1, int8_t rxPin=-1, int8_t txPin=-1, bool invert=false, unsigned long timeout_ms = 20000UL); //串口初始化</p> <p>void end();//失能串口</p> <p>void updateBaudRate(unsigned long baud);//重新设置波特率</p> <p>int available(void);//返回串口接收缓冲区中的数据</p> <p>int read(void);//返回串口接收缓冲区的一个字节的数据,之后将缓冲区中的本字节删除</p> <p>void flush(void);//等待串口收发数据完毕</p> <p>size_t write(uint8_t);//写数据到TX缓冲区</p> <p>size_t setRxBufferSize(size_t);//设置接收缓冲区的大小</p> <p> </p> <p>各种格式化打印</p> <p>Serial.println(data) //从串行端口输出数据,跟随一个回车(ASCII 13, 或 'r')和一个换行符(ASCII 10, 或 'n')。这个函数所取得的值与 Serial.print()一样。</p> <p>Serial.println(b) //以十进制形式输出b的ASCII编码值,并同时跟随一个回车和换行符。</p> <p>Serial.println(b, DEC)// 以十进制形式输出b的ASCII编码值,并同时跟随一个回车和换行符。</p> <p>Serial.println(b, HEX) //以十六进数据形式输出b的ASCII编码值,并同时跟随一个回车和换行符。</p> <p>Serial.println(b, OCT)//以八进数据形式输出b的ASCII编码值,并同时跟随一个回车和换行符。</p> <p>Serial.println(b, BIN)//以二进数据形式输出b的ASCII编码值,并同时跟随一个回车和换行符。</p> <p>Serial.print(b, BYTE)//以单个字节输出b,并同时跟随一个回车和换行符。</p> <p>Serial.println(str)//如果 str是一个字符串或数组,输出整个 str的 ASCII编码字符串。</p> <p>Serial.println()//仅输出一个回车和换行符</p> <p> </p> <p>使用ch340分别rx连接27脚,tx连接26脚</p> <p> </p> <p>#include</p> <p>int recData = 0;</p> <p>void bt_callBack(void);</p> <p>void setup() {</p> <p><em>  // put your setup code here, to run once:</em></p> <p><em>  //初始化串口</em></p> <p>  Serial.begin(115200);</p> <p>  Serial1.begin(115200,SERIAL_8N1,26,27);</p> <p>  pinMode(2,OUTPUT);<em>//初始化io  </em></p> <p>  pinMode(4,INPUT);<em>//初始化io</em></p> <p><em>  // attachInterrupt(4,bt_callBack,CHANGE);//初始化中断</em></p> <p>}</p> <p>void loop() {</p> <p><em>  // put your main code here, to run repeatedly:</em></p> <p><em>  // Serial.println("My First PIO Project!");</em></p> <p><em>  // delay(1000);</em></p> <p><em>  // digitalWrite(2,digitalRead(4));//设置2引脚的电平为读取到4脚输入电平</em></p> <p> </p> <p>  if(Serial1.available()>0){</p> <p>    recData = Serial1.read();</p> <p>    Serial1.print("received: ");</p> <p>    Serial1.println(recData,HEX);</p> <p>  }</p> <p>}</p> <p>void bt_callBack(void)<em>//中断回调函数</em></p> <p>{</p> <p>  digitalWrite(2,digitalRead(4));</p> <p>}</p> <p>再通过串口助手进行收发验证</p> <p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/860ff3004f2745768c5933a23042c9ba.png"></p> <p>5.PWM</p> <p>2024年8月28日</p> <p>22:12</p> <p> </p> <p>ESP32 不同于普通的PWM,它这里叫LED PWM,主要用于控制LED的亮度与颜色,当然,也可以用于其它用途,一共有16路通道,8路高速8低速,这16路通道可以分配给任意一个IO(某些只有输入功能的除外)。</p> <p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/4c237d2c06164663a0748cf9f8f3b922.png"></p> <p>16个通道,根据速度分,分为两组,每组有4个定时器对应8个通道,两个通道共享一个定时器,所以,最多能输出8个不同频率的PWM。</p> <p> </p> <p> </p> <p> </p> <p><strong>分配通道到GPIO引脚</strong></p> <p>确定好要使用的PWM通道PWM_Ch,绑定到GPIO_Pin。</p> <p>ledcAttachPin(GPIO_Pin, PWM_Ch);</p> <p><strong>频率,分辨率设置</strong></p> <p>配置选择通道的PWM频率,分辨率可以设置1位到16位,比如我们设置成8位,占空比范围就是0-255,设置成10位,就是0-1023这样,函数也很简单。</p> <p>/*</p> <p>* PWM_Ch   PWM通道 0-15</p> <p>* PWM_Freq PWM频率 </p> <p>* PWM_Res  PWM分辨率 1-16</p> <p>* */</p> <p>ledcSetup(PWM_Ch, PWM_Freq, PWM_Res);;</p> <p><strong>设置占空比</strong></p> <p>直接写入对应占空比即可在对应IO上输出PWM。</p> <p>ledcWrite(PWM_Ch, DutyCycle);</p> <p> </p> <p>ESP-NOW</p> <p>2024年8月29日</p> <p>0:24</p> <p> </p> <p>ESP-NOW 是由 Espressif 开发的一种协议,它使多个设备能够在不使用 Wi-Fi 的情况下相互通信。该协议类似于无线鼠标中用的2.4GHz无线连接。因此,设备之间的配对需要在它们通信之前进行。配对完成后,连接是安全且点对点的,无需握手,也就是他不像TCP/IP等是长连接的,换句话说,它是无连接的,如果其中一个板子突然断电,重新启动后,会自动匹配它的连接设备继续通信。不同于传统的OSI模型,ESP-NOW去掉了其中一些层,只保留最基本的传输层,减少了网络拥堵造成的丢包延迟,实现快速响应。简单来说,ESP-NOW 是一种快速通信协议,可用于在 ESP32 板之间交换短消息(单次最多 250 字节)。</p> <p><strong>ESP-NOW的优势 </strong></p> <ul> <li>快速响应:开机后,设备无需任何无线连接即可直接传输数据和控制其他配对设备,响应速度以毫秒为单位;</li> <li>远距离通信:ESP-NOW 支持远距离通信,板载天线户外空旷距离能达到200米+;</li> <li>多跳控制:ESP-NOW可以实现设备的多跳控制,可通过单播、广播和群控方式控制数百台设备;</li> <li>新配网方式:提供了除 Wi-Fi 和蓝牙之外的新方式,通过蓝牙为第一台设备配置网络,其他设备不需要配置SSID/密码等信息,第一台连接到网络的设备可以直接将这些信息发送给其他设备;</li> <li>升级:可用于固件升级或者大量数据升级的场景;</li> <li>调试:在一些高温高压等不太方便的场合,可以接收多个设备的数据,快速诊断设备故障。</li> <li>低成本:可与WiFi,蓝牙等共存;</li> <li>安全:ESP-NOW 采用 CCMP 方法保护供应商特定动作帧的安全,具体可参考 IEEE Std. 802.11-2012。</li> </ul> <p><strong>ESP-NOW通信 </strong></p> <p><strong>单向通信</strong></p> <p>一个从机向一个主机发送数据</p> <p>这种情况适用于一个设备向另一个设备单向发送数据,比如一个从机采集传感器数据或将开关量发送到主机。</p> <p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/1ed8c198cb8e4f669ee49657e4f99f3e.png" alt="图片"></p> <p>一个主机向多个从机发送数据</p> <p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/931773c6ec76401ca05f4c3361db41af.png" alt="图片"></p> <p>一个从机从多个主机接收数据</p> <p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/42b6d28a64d1486eb5ac9d44c8eda7c7.png" alt="图片"></p> <p><strong>双向通信</strong></p> <p>主机与从机互相通信</p> <p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/1ed8c198cb8e4f669ee49657e4f99f3e.png" alt="图片"></p> <p>多个设备之间互相通信</p> <p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/914f65da07a249cd838c8e03022b5568.png" alt="图片"></p> <p>ESP-NOW非常适合组建一个小型网络,可以让多个ESP32之间交换数据</p> <p> </p> <p><strong>获取板子的MAC地址</strong></p> <p>ESP-NOW是通过MAC地址做为不同设备的唯一识别的,就像不同设备的ID码一样,当然我们可以通过扫描配对的方式去自动配对,这里为了方便展示程序原理,我们就先采用最基本的方式,先通过下面的代码获取主机设备的MAC地址。</p> <p> </p> <p>#include "WiFi.h"</p> <p> </p> <p>void setup(){</p> <p>  Serial.begin(115200);</p> <p>  WiFi.mode(WIFI_MODE_STA);</p> <p>  Serial.println(WiFi.macAddress());</p> <p>}</p> <p> </p> <p>void loop(){</p> <p>}</p> <p> </p> <p>如果没有wifi这个头文件,则需要手动在platform中安装</p> <p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/b7b069c01ba949e49b328ef0acb0c7c9.png"></p> <p> </p> <p>获取到主机的MAC地址后,并记录。</p> <p><strong>初始化ESP-NOW</strong></p> <p>初始化ESP-NOW,在这个函数调用之前必须初始化WiFi。</p> <p>esp_now_init();</p> <p><strong>添加配对设备</strong></p> <p>调用此函数配对设备,将MAC地址,通道,加密信息等进行配置。</p> <p>esp_now_add_peer();</p> <p><strong>发送数据</strong></p> <p>向配对设备发送数据</p> <p>esp_now_send();</p> <p><strong>发送数据回调函数</strong></p> <p>注册一个发送数据时调用的函数,此函数会返回是否发送成功的消息。</p> <p>esp_now_register_send_cb();</p> <p><strong>接收数据回调函数</strong></p> <p>注册一个接收到数据时调用的函数。</p> <p>esp_now_register_rcv_cb();</p> <p> </p> <p>#include</p> <p>#define PWM1_Ch   0<em>     //PWM通道 0-15</em></p> <p>#define LED_GPIO  32<em>    //pwm输出io口</em></p> <p>#define PWM1_Res   10<em>     //PWM分辨率 1-16</em></p> <p>#define PWM1_Freq  50<em>     //PWM频率 </em></p> <p>int PWM1_DutyCycle = 0;</p> <p>void setup() {</p> <p>  Serial.begin(115200);</p> <p>  ledcAttachPin(LED_GPIO, PWM1_Ch);<em>         //定义io口的pwm通道</em></p> <p>  ledcSetup(PWM1_Ch, PWM1_Freq, PWM1_Res);<em>  //定义pwm输出的相关参数</em></p> <p>}</p> <p>void loop() {<em>                                 //实现es08舵机0-180度来回转动</em></p> <p>  while(PWM1_DutyCycle < 127)<em>                 //设定pwm变换条件,我这里基于es08II舵机,10分辨率满计数1024 </em></p> <p>  {<em>                                           //舵机 0.5ms-2.5ms  就是在20ms所占比。 0.5ms占20ms的比例乘上1024即0度舵机占空比</em></p> <p>    ledcWrite(PWM1_Ch, PWM1_DutyCycle++);</p> <p>    delay(10);</p> <p>  }</p> <p>  while(PWM1_DutyCycle > 25)</p> <p>  {</p> <p>    ledcWrite(PWM1_Ch, PWM1_DutyCycle--);</p> <p>    delay(10);</p> <p>  }</p> <p>}</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;">*6、BOM清单</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;"><span style="color: #95a5a6; font-size: 14px;">主页自动生成。</span></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 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/lzBn8jm3Wj5d2benNFx4iMi1pMTKblJWXkBlIYFP.png"></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;">* 8、演示您的项目并录制成视频上传</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;"> </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/de460543d4cf4dacb5f0326612455578" target="_blank">前往查看更多详情 ></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

暂无

附件

附件名 下载
ESP32_connect_XboxController-main.zip
3d文件.zip

成员

评论(1)

  • 表情
    emoji
    小嘉工作篇
    小嘉日常篇
  • 图片
成功
工程所有者当前已关闭评论
哈儿骑自行车 回复
<p>哇塞,好🈶意思哈</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