我仍然收到许多发布ArduinoSoundMachine项目的请求。我认为现在是为初学者准备入门书的合适时机。首先,保持低期望,因为我在这里没有什么新的东西可以分享。我只是想帮你构建一个基于Arduino的小型语音生成器项目仅此而已。好的,让我们开始吧!MP3TF16P模块 我在这里介绍的项目是基于旧的,但仍然可用的串行MP3迷你模块MP3TF16P,这是一个廉价的MP3模块,具有放大的单声道扬声器输出。该模块可用作带有电池、扬声器和按钮的独立模块,或与Arduino或任何其他具有串行通信(UART)功能的微控制器结合使用。根据数据表,这种易于使用、稳定且可靠的模块提供了完美的集成MP3和WMV硬件解码。 最小的模块有一个SD卡端口,并从SD卡读取MP3文件。此外,该模块具有用于与微控制器通信的TX和RX引脚。它还具有DAC和USB功能。 主要特性(复制自数据表): 支持的采样率(kHz):811。025121622。05243244。14824位DAC输出,支持动态范围90dB,SNR支持85dB完全支持FAT16,FAT32文件系统,最大支持32G的TF卡,支持32G的U盘,64M字节的NORFLASH多种控制模式、IO控制模式、串行模式、AD按钮控制模式广告声音等待功能,音乐可以暂停。当广告结束时,音乐继续播放音频数据按文件夹排序,最多支持100个文件夹,每个文件夹最多可容纳255首歌曲30级可调音量,6级EQ可调解码MP3、WAV、WMA 以下是围绕YX520024SS(内核)和8002(音频)IC构建的MP3TF16P模块的引脚。正如您在引脚排列数据中看到的那样,小MP3模块还在软件音量控制(DACR,DACL)下提供双声道(立体声)音频输出。 MP3TF16P模块操作有三种模式串行模式、AD键模式和IO模式。串行模式支持异步串行通信UART。 通信标准:9600基点数据位数:1结账:无流量控制:无在串行通信模式下,应注意电平转换,因为模块的外部接口是为3。3VTTL电平定制的。如果您的项目建议的微控制器是5V类型如ArduinoUnoNano,那么建议包括一个与模块的RX引脚串联的1K电阻。该模块的推荐输入电压(Vcc)为DC3。2V至5。0V(典型值为4。2V)。板载桥式音频放大器可以驱动标准的3W额定扬声器(请参阅数据表以了解有关扬声器选择的更多信息)。 相关网站链接: http:www。flyrontech。comeproducts126。html,http:thaieasyelec。comdownloadsEFDV308HXJ8002MiniatureAudioAmplifierDatasheet。pdfhttps:picaxe。comdocsspe033。pdfhttps:wiki。dfrobot。comDFPlayerMiniSKUDFR0299 要与Arduino板配合使用,您只需要模块的VCC、GND、SP、SP、TX和RX引脚(其他引脚是可选的)。整个布线非常简单。该模块通过其标有TX和RX的引脚与ArduinoUno串行通信。在当前设置中,Uno的引脚D10和D11充当软件串行库下的可编程TX和RX。模块的扬声器输出引脚(SPK1和SPK2)被路由到小型扬声器。将一些MP3文件复制到SD卡并上传ArduinoSketch后,您可以看到模块上的红色LED在播放操作期间开始闪烁。 请注意,您只能将microSD卡与模块一起使用(1GB足以快速入门)。大多数微型SD卡开箱即用,但设置可能无法读取以前使用的卡。如果是这样,请尝试使用microSD卡适配器读卡器和计算机格式化存储卡。该安装程序支持FAT16和FAT32文件系统。将microSD卡插入计算机,转到我的电脑,右键单击SD卡,然后选择格式化。。。 接下来,在该MicroSD卡上创建一个名为MP3的新文件夹,并将mp3文件复制到那里。MP3文件应具有名称0001名称。mp3,0002名称。mp3等。请记住,您将MP3文件复制到microSD卡中的顺序会影响播放顺序,即播放(1)功能在这里使用的ArduinoSketch中将播放复制到microSD卡中的第一个MP3文件。 在下面,您可以看到我在上述硬件设置中使用的快速测试ArduinoSketch。坦率地说,这个ArduinoSketch是从Web获取的代码的改编版本。ArduinoSketch需要三个库Arduinoh,SoftwareSerialh和DFRobotDFPlayerMini。h。 下载并安装第三个库后,只需复制并粘贴ArduinoSketch并上传(库下载链接https:github。comDFRobotDFRobotDFPlayerMini)。 〔code〕includeArduino。hincludeSoftwareSerial。hincludeDFRobotDFPlayerMini。hRequisiteLibrarySoftwareSerialmySoftwareSerial(10,11);RX,TXDFRobotDFPlayerMinimyDFPvoidprintDetail(uint8ttype,intvalue);voidsetup(){mySoftwareSerial。begin(9600);Serial。begin(115200);Serial。println();Serial。println(F(MP3TF16PModuleTest));Serial。println(F(InitializingMP3TF16P(Maytakeacoupleofseconds)));if(!myDFPlayer。begin(mySoftwareSerial)){Serial。println(F(Unabletobegin:));Serial。println(F(1。Pleaserechecktheconnection!));Serial。println(F(2。PleaseinserttheSDcard!));while(true);}Serial。println(F(MP3TF16PModuleActive!));myDFPlayer。volume(30);Setvolumevalueto30myDFPlayer。play(1);Playthefirstmp3}voidloop(){staticunsignedlongtimermillis();if(millis()timer5000){timermillis();myDFPlayer。next();Playnextmp3every5seconds}if(myDFPlayer。available()){printDetail(myDFPlayer。readType(),myDFPlayer。read());PrintthedetailmessagefromMP3TF16PModuletohandledifferenterrorsandstates}}voidprintDetail(uint8ttype,intvalue){switch(type){caseTimeOut:Serial。println(F(TimeOut!));caseWrongStack:Serial。println(F(StackWrong!));caseDFPlayerCardInserted:Serial。println(F(CardInserted!));caseDFPlayerCardRemoved:Serial。println(F(CardRemoved!));caseDFPlayerCardOnline:Serial。println(F(CardOnline!));caseDFPlayerPlayFinished:Serial。print(F(Number:));Serial。print(value);Serial。println(F(PlayFinished!));caseDFPlayerError:Serial。print(F(DFPlayerError:));switch(value){caseBusy:Serial。println(F(Cardnotfound));caseSleeping:Serial。println(F(Sleeping));caseSerialWrongStack:Serial。println(F(GetWrongStack));caseCheckSumNotMatch:Serial。println(F(CheckSumNotMatch));caseFileIndexOut:Serial。println(F(FileIndexOutofBound));caseFileMismatch:Serial。println(F(CannotFindFile));caseAdvertise:Serial。println(F(InAdvertise));default:}default:}}〔code〕 这是上述ArduinoSketch的SerialMonitor窗口: 这是我的快速测试设置: 老实说,我讨厌我的小聚酯薄膜扬声器的微弱单声道MP3输出。因此,我寻找一种简单的方法来获得立体声输出,并找到了一个很棒的技巧!我将MP3TF16P模块的输出引脚DACR和DACL连接到一个有点黑客入侵的PC多媒体扬声器的信号输入点L和R,通过100电阻,而其公共信号输入点(G)连接到GND。然后,模块的现有单声道扬声器输出引脚(SPK1和SPK2)连接到2引脚螺丝端子,作为可选的单声道声音插座。尽管如此,修改后的设置仍然发挥出色! 这是我使用的PC多媒体扬声器系统。幸运的是,它有自己的USB电源。 下一步是什么? 最初的DFPlayer模块(来自DFRobotics)是一个很棒的小型MP3播放器模块,价格实惠。这款便宜的MP3TF16P模块的性能也相当不错。该MP3TF16P模块的原理图基本上是YX520024SSMP3播放器芯片供应商描述的官方参考设计的近似复制品(见下文),但它在BTL(桥接负载)模式下采用了伪造的AB类(不是D)8引脚8002音频放大器芯片。 随它去!您刚刚学习了如何将MP3TF16P迷你MP3播放器模块连接到ArduinoUno以及如何开始播放。显然,将基于microSD卡的MP3播放器模块连接到Arduino打开了一个真正的数字音频的新世界。您可以编辑此基本想法,以便在许多需要自定义基于语音的报警器的项目中使用。 结语 这里介绍的MiniMP3播放器模块是一个小巧而便宜的模块,可直接输出一个扬声器。该模块还可以用作独立模块,并附有电池、扬声器和按钮。值得注意的是,这个超级可爱的模块有很多变体,包括假货。我观察到这些假货并不支持最新DFR库的所有功能(假货有效,但形式有限)。此外,如果您在播放过程中听到非常响亮的噪音,则需要将模块电源与Arduino电源分开和或简单地将模块的Vcc降低到4。2VDC。这是DFPlayerMini备忘单的有用链接 https:reprage。compostdfplayerminicheatsheet