描述
<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>
评论(1)