描述
<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 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: #000000;"><span style="font-size: 14px;">这是一个基于 ESP32 的编写的便携式扬声器,通过数字麦克风获得音频数据,然后通过数字功放 HT513 从喇叭播放出去。</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;">*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;"><span style="color: #000000; 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;"> </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><span style="color: #000000;"> </span></p>
<p><span style="color: #000000; font-size: 14px;">GPL3.0开源协议</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 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: #000000;"><span style="font-size: 14px;">使用 ESP32 S3 作为核心(但是并未使用ESP32 S3 特有的属性)。</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 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 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: #000000;"><span style="font-size: 14px;">通过 Arduino 基于 AudioTools 库完成。</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;"><span style="color: #000000;"><span style="font-size: 14px;">1. 音频数据通过MSM261S4030H0来获得</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;"><span style="color: #000000;"><span style="font-size: 14px;">2.使用国产的 HT513作为功放。这款芯片支持通过寄存器直接调整音量,使用起来非常方便。外部有一个旋转按钮,通过 ADC 来得到当前需要的音量。</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;"><span style="color: #000000;"><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>
<p>/**<br> @file streams-i2s-i2s-2.ino<br> @brief Copy audio from I2S to I2S: We use 2 different i2s ports!<br> @author Phil Schatzmann<br> @copyright GPLv3<br>*/<br>#include <br>#include "AudioTools.h"</p>
<p>AudioInfo IN_info(16000, 1, 32);<br>AudioInfo OUT_info(16000, 1, 32);<br>I2SStream in;<br>I2SStream out;<br>VolumeStream vol(in);<br>StreamCopy copier(out, vol); // copies sound into i2s<br>//FormatConverterStream converter(in); // or use converter(out)<br>//StreamCopy copier(out, converter); // copier(converter, sound);<br>// HT513 音量<br>uint16_t Volume;<br>// 最小音量<br>#define LOWESTVOLUME 1<br>#define TOLENCE 16<br>#define HT513_ADDR_L 0x6c<br>/**<br> @brief ht513写寄存器<br> @param addr 寄存器地址<br> @param val 要写的值<br> @retval None<br>*/<br>void HT513_WriteOneByte(uint8_t addr, uint8_t val)<br>{<br> Wire.beginTransmission(HT513_ADDR_L);<br> Wire.write(addr);<br> Wire.write(val);<br> int ack = Wire.endTransmission(true);<br> Serial.print("Ack ");<br> Serial.println(ack, HEX);<br>}</p>
<p>/**<br> @brief ht513读寄存器<br> @param addr 寄存器地址<br> @retval 读取到的寄存器值<br>*/<br>uint8_t HT513_ReadOneByte(uint8_t addr)<br>{<br> uint8_t temp = 0;</p>
<p> Wire.beginTransmission(HT513_ADDR_L);<br> Wire.write(addr);<br> Wire.endTransmission(false);<br> uint8_t bytesReceived = 0;<br> bytesReceived = Wire.requestFrom(HT513_ADDR_L, (uint8_t)1, true);<br> if (bytesReceived == 1) {<br> temp = Wire.read();<br> }<br> else {<br> Serial.println("Read Error ");<br> }</p>
<p> return temp;<br>}</p>
<p>// Arduino Setup<br>void setup(void) {<br> delay(5000);<br> // HT513 SD Pin 需要设置为 High<br> pinMode(8, OUTPUT);<br> digitalWrite(8, HIGH);<br> analogReadResolution(9);<br> // Open Serial<br> Serial.begin(115200);<br> // change to Warning to improve the quality<br> //AudioToolsLogger.begin(Serial, AudioToolsLogLevel::Info);</p>
<p> Wire.begin(18, 17);<br> int nDevices;<br> byte error, address;<br> Serial.println("Scanning...");<br> nDevices = 0;<br> for ( address = 1; address Wire.beginTransmission(address);<br> error = Wire.endTransmission();<br> if (error == 0) {<br> Serial.print("I2C device found at address 0x");<br> if (address Serial.print("0");<br> }<br> Serial.println(address, HEX);<br> nDevices++;<br> }<br> else if (error == 4) {<br> Serial.print("Unknow error at address 0x");<br> if (address Serial.print("0");<br> }<br> Serial.println(address, HEX);<br> }<br> }<br> if (nDevices == 0) {<br> Serial.println("No I2C devices found\n");<br> }<br> else {<br> Serial.println("done\n");<br> }</p>
<p> // 设置 SD 为LOW<br> HT513_WriteOneByte(0x12, 0b11110000);</p>
<p> // 设置数据格式为 I2S, 32Bits<br> HT513_WriteOneByte(0x13, 0b00000000);</p>
<p> // 读取音量设置<br> Volume = analogRead(3);<br> uint8_t Vol=(Volume,0,511,0x07,0xff);<br> HT513_WriteOneByte(0x16, Vol);<br> HT513_WriteOneByte(0x15, Vol);<br> Serial.println(Volume, HEX);</p>
<p> // 调整声道<br> HT513_WriteOneByte(0x17, 0b10110000);</p>
<p> Serial.println("++++++++++++++++");<br> // 设置 SD 为HIGH<br> HT513_WriteOneByte(0x12, 0b11110100);<br> uint8_t Value = HT513_ReadOneByte(0x12);<br> Serial.println(Value, HEX);<br> Value = HT513_ReadOneByte(0x13);<br> Serial.println(Value, HEX);<br> Value = HT513_ReadOneByte(0x16);<br> Serial.println(Value, HEX);<br> Value = HT513_ReadOneByte(0x17);<br> Serial.println(Value, HEX);</p>
<p> // Define Converter<br> //converter.begin(IN_info, OUT_info);</p>
<p> // start I2S in<br> Serial.println("starting I2S...");<br> auto config_in = in.defaultConfig(RX_MODE);<br> config_in.copyFrom(IN_info);<br> config_in.i2s_format = I2S_STD_FORMAT;<br> config_in.is_master = true;<br> config_in.port_no = 1;<br> config_in.pin_bck = 37;<br> config_in.pin_ws = 38;<br> config_in.pin_data = 36;<br> // config_in.fixed_mclk = sample_rate * 256<br> // config_in.pin_mck = 2<br> in.begin(config_in);</p>
<p> // start I2S out<br> auto config_out = out.defaultConfig(TX_MODE);<br> config_out.copyFrom(OUT_info);<br> config_out.i2s_format = I2S_STD_FORMAT;<br> config_out.is_master = true;<br> config_out.port_no = 0;<br> config_out.pin_bck = 15;<br> config_out.pin_ws = 6;<br> config_out.pin_data = 7;<br> config_out.pin_mck = 16;<br> out.begin(config_out);</p>
<p> // set initial volume<br> vol.begin(IN_info); // we need to provide the bits_per_sample and channels<br> vol.setVolume(0.3);<br> <br> Serial.println("I2S started...");</p>
<p><br>}</p>
<p>// Arduino loop - copy sound to out<br>void loop() {<br> copier.copy();<br> if (abs(analogRead(3) - Volume) > TOLENCE) {<br> // 读取音量设置<br> Volume = analogRead(3);<br> // 设置 SD 为LOW<br> HT513_WriteOneByte(0x12, 0b11110000);<br> uint8_t Vol=map(Volume,0,511,0x07,0xff);<br> HT513_WriteOneByte(0x16, Vol);<br> // 设置 SD 为HIGH<br> HT513_WriteOneByte(0x12, 0b11110100);<br> Serial.print(analogRead(3), HEX);<br> Serial.print(" ");<br> Serial.print(Volume, HEX);<br> Serial.print(" ");<br> Serial.println(Vol, HEX);<br> }</p>
<p><br>}</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 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;">*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;"> </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/43Sk6SiHY6ZEFkiZm1nXFXKkcfrNVc4DwCHIMZ8J.jpeg" alt="" width="4000" height="3000"></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 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/42551e8f2f2548cabc1c36626a42da94" 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>
评论(0)