Arduino - 基于网络的 MP3 播放器
组件和用品
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
关于这个项目
我有一个类似的项目,这里只使用 PHPoC。
MP3 播放器在博物馆或展览中很有用,可根据需要向参观者提供基于语音的信息。该项目展示了如何使用 Arduino Uno 通过网页控制 MP3。
如果您是初学者,您可以在这里了解 Arduino。
串行 MP3 播放器

串口MP3播放器有两个接口:
- 插孔至扬声器
- 微控制器接口(在这个项目中是 Arduino)
当接收到来自微控制器的命令(例如播放、暂停、音量增大...)时,MP3 播放器从 SD 卡读取 .mp3 文件并根据命令执行操作。
使用前需要将.mp3文件复制到SD卡上,并挂载到MP3播放器中。
接线
- 在 Arduino 上堆叠 PHPoC 扩展板
- 将 MP3 Player 的 GND、VCC TX 和 RX 引脚分别连接到 Arduino 的 GND、5V、引脚 8 和引脚 9。
数据流
Web 浏览器 ---> PHPoC WiFi Shield ---> Arduino
Web 浏览器上的 Web 应用程序将基于触摸或点击事件通过 WebSocket 向 PHPoC 盾发送命令和数据。收到命令后,PHPoC shield 将其传递给 Arduino。 Arduino根据从PHPoC Shield接收到的命令向MP3播放器发送命令。
命令集

其中,XX为体积值。
注意: PHPoC shield 有一个内置程序可以将数据从网络浏览器传递到 Arduino。因此,我们不需要关心它。
我们需要做什么
- 为 PHPoC shield 设置 Wifi 信息(SSID 和密码)
- 将新 UI 上传到 PHPoC shield
- 编写 Arduino 代码
为 PHPoC Shield 设置 Wifi 信息
请参阅此说明。
将新的 Web UI 上传到 PHPoC Shield
- 下载 PHPoC 源代码 remote_mp3.php(在代码部分)。
- 根据此说明使用 PHPoC 调试器将其上传到 PHPoC shield。
注意: 此 Web UI 包含要发送到 Arduino 的命令集。
编写 Arduino 代码
- 在 Arduino IDE 上安装 Arduino 库(请参阅说明)并重新启动 Arduino IDE。
- 在 Arduino IDE 上,转到文件 -> 示例 -> Phpoc -> WebRemoteSlide。
- 我修改了示例(请参阅代码部分中的源代码)。
测试
- 单击 Arduino IDE 上的串行按钮以查看 IP 地址。
- 打开网页浏览器,输入
http://
replace_ip_address
/remote_mp3.php
- 点击连接按钮并进行测试。
适合初学者的最佳 Arduino 入门套件
查看适合初学者的最佳 Arduino 套件
函数参考
- Serial.begin()
- Serial.println()
- 延迟()
- millis()
- for 循环
- while 循环
- 否则
- 循环()
- 设置()
- String.toInt()
- String.substring()
- String.indexOf()
- String.remove()
- String.equals()
代码
- Arduino 代码
- Web IU (remote_mp3.php)
Arduino 代码Arduino
#include "SPI.h"#include "Phpoc.h"#include#define ARDUINO_RX 8 // 应该连接到串行 MP3 播放器模块的 TX#define ARDUINO_TX 9 // 连接到 RX模块AltSoftSerial mySerial(ARDUINO_RX, ARDUINO_TX);静态中int8_t Send_buf [8] ={0};#定义CMD_PLAY_NEXT 0×01#限定CMD_PLAY_PREV 0×02#限定CMD_PLAY_W_INDEX×03#限定CMD_SET_VOLUME 0×06#限定CMD_SEL_DEV 0×09#限定CMD_PLAY_W_VOL为0x22#限定CMD_PLAY 0X0D#限定CMD_PAUSE 0x0E的#限定CMD_SINGLE_CYCLE 0x19#限定DEV_TF 0x02#define SINGLE_CYCLE_ON 0x00#define SINGLE_CYCLE_OFF 0x01// Arduino web server PhpocServer server(80);char name;int value; void setup() { mySerial.begin(9600);延迟(500); // 等待芯片初始化完成 sendCommand(CMD_SEL_DEV, DEV_TF); // 选择TF卡延迟(200); // 等待 200 毫秒 Serial.begin(9600);而(!串行); Phpoc.begin(PF_LOG_SPI | PF_LOG_NET); //Phpoc.begin(); server.beginWebSocket("remote_slide"); Serial.print("WebSocket 服务器地址:"); Serial.println(Phpoc.localIP());} void loop() { // 等待新客户端:PhpocClient client =server.available(); if (client) { String slideStr =client.readLine(); if(slideStr) { name =slideStr.charAt(0); value =slideStr.substring(1).toInt(); if(name =='P') { Serial.println("播放 mp3");发送命令(CMD_PLAY,0x0000); } if(name =='S') { Serial.println("暂停 mp3");发送命令(CMD_PAUSE,0x0000); } if(name =='N') { Serial.println("播放下一个 mp3");发送命令(CMD_PLAY_NEXT,0x0000); } if(name =='B') { Serial.println("播放上一个 mp3");发送命令(CMD_PLAY_PREV,0x0000); } if(name =='V') { Serial.print("将音量改为"); Serial.println(值);发送命令(CMD_SET_VOLUME,值); } } }} void sendCommand(int8_t command, int16_t dat){ delay(20);发送缓冲区[0] =0x7e; // 起始字节 Send_buf[1] =0xff; // 版本 Send_buf[2] =0x06; // 不含起始字节和结束字节的命令字节数 Send_buf[3] =command; // Send_buf[4] =0x00; // 0x00 =无反馈,0x01 =反馈 Send_buf[5] =(int8_t)(dat>> 8); // datah Send_buf[6] =(int8_t)(dat); // datal Send_buf[7] =0xef; // 结束字节 for(uint8_t i=0; i<8; i++) { mySerial.write(Send_buf[i]); }}
Web IU (remote_mp3.php)PHP
PHPoC Shield - IoT MP3 播放器
Web 远程控制/物联网 MP3 播放器
WebSocket :null
示意图

制造工艺