산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

아두이노 웹 제어 MP3 플레이어 - 브라우저로 오디오 재생하기

부품 및 소모품

부품 수량 비고
아두이노 우노 (Arduino UNO) 1
PHPoC WiFi 쉴드 (아두이노용) 1 PHPoC 쉴드로 대체 가능
시리얼 MP3 플레이어 (Catalex 제품) 1
마이크로 SD 카드 1
스피커 1

프로젝트 소개

박물관이나 전시관에서 방문객에게 음성 안내를 제공하는 등 온디맨드 음성 재생이 필요한 상황에 유용한 프로젝트입니다. 아두이노 우노를 이용해 웹페이지에서 MP3 플레이어를 제어하는 방법을 보여줍니다.

시리얼 MP3 플레이어

아두이노 웹 제어 MP3 플레이어 - 브라우저로 오디오 재생하기
Catalex 시리얼 MP3 플레이어 모듈

시리얼 MP3 플레이어는 두 가지 인터페이스를 가집니다:

마이크로컨트롤러로부터 명령(재생, 일시정지, 볼륨 조절 등)을 수신하면, SD 카드에서 MP3 파일을 읽어 해당 동작을 수행합니다. 사용 전 SD 카드에 MP3 파일을 복사하고 플레이어에 장착해야 합니다.

배선

데이터 흐름

웹 브라우저 → PHPoC WiFi 쉴드 → 아두이노

웹 브라우저의 웹앱이 터치/클릭 이벤트에 따라 명령과 데이터를 WebSocket을 통해 PHPoC 쉴드로 전송합니다. PHPoC 쉴드는 이를 아두이노로 전달하고, 아두이노는 수신한 명령에 따라 MP3 플레이어에 시리얼 명령을 보냅니다.

아두이노 웹 제어 MP3 플레이어 - 브라우저로 오디오 재생하기
MP3 플레이어 명령 세트 (XX는 볼륨 값)

참고: PHPoC 쉴드에는 웹 브라우저에서 아두이노로 데이터를 전달하는 내장 프로그램이 있으므로, 이에 대해 신경 쓸 필요가 없습니다.

필수 작업

  1. PHPoC 쉴드 WiFi 정보 설정 (SSID 및 비밀번호)
  2. PHPoC 쉴드에 새로운 웹 UI 업로드
  3. 아두이노 코드 작성

PHPoC 쉴드 WiFi 설정

이 지침을 참조하세요.

웹 UI를 PHPoC 쉴드에 업로드

참고: 이 웹 UI에는 아두이노로 전송할 명령 세트가 포함되어 있습니다.

아두이노 코드 작성

테스트

함수 레퍼런스

코드

아두이노 코드

#include "SPI.h"
#include "Phpoc.h"
#include 

#define ARDUINO_RX 8  // MP3 플레이어 TX에 연결
#define ARDUINO_TX 9  // MP3 플레이어 RX에 연결
AltSoftSerial mySerial(ARDUINO_RX, ARDUINO_TX);

static int8_t Send_buf[8] = {0};

#define CMD_PLAY_NEXT     0x01
#define CMD_PLAY_PREV     0x02
#define CMD_PLAY_W_INDEX  0x03
#define CMD_SET_VOLUME    0x06
#define CMD_SEL_DEV       0x09
#define CMD_PLAY_W_VOL    0x22
#define CMD_PLAY          0x0D
#define CMD_PAUSE         0x0E
#define CMD_SINGLE_CYCLE  0x19
#define DEV_TF            0x02
#define SINGLE_CYCLE_ON   0x00
#define SINGLE_CYCLE_OFF  0x01

// 아두이노 웹 서버
PhpocServer server(80);
char name;
int value;

void setup() {
  mySerial.begin(9600);
  delay(500); // 칩 초기화 대기
  sendCommand(CMD_SEL_DEV, DEV_TF); // TF 카드 선택
  delay(200);
  Serial.begin(9600);
  while(!Serial);
  Phpoc.begin(PF_LOG_SPI | PF_LOG_NET);
  server.beginWebSocket("remote_slide");
  Serial.print("WebSocket server address: ");
  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("Play mp3");
        sendCommand(CMD_PLAY, 0x0000);
      }
      if (name == 'S') { // 일시정지
        Serial.println("Pause mp3");
        sendCommand(CMD_PAUSE, 0x0000);
      }
      if (name == 'N') { // 다음 곡
        Serial.println("Play next mp3");
        sendCommand(CMD_PLAY_NEXT, 0x0000);
      }
      if (name == 'B') { // 이전 곡
        Serial.println("Play previous mp3");
        sendCommand(CMD_PLAY_PREV, 0x0000);
      }
      if (name == 'V') { // 볼륨 조절
        Serial.print("Change volume to ");
        Serial.println(value);
        sendCommand(CMD_SET_VOLUME, value);
      }
    }
  }
}

void sendCommand(int8_t command, int16_t dat) {
  delay(20);
  Send_buf[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); // 데이터 상위 바이트
  Send_buf[6] = (int8_t)(dat);      // 데이터 하위 바이트
  Send_buf[7] = 0xef; // 종료 바이트
  
  for (uint8_t i = 0; i < 8; i++) {
    mySerial.write(Send_buf[i]);
  }
}

웹 UI (remote_mp3.php)

<!DOCTYPE html>
<html>
<head>
  <title>PHPoC Shield - IoT MP3 Player</title>
  <meta name="viewport" content="width=device-width, initial-scale=0.7, maximum-scale=0.7">
  <style>
    body { text-align: center; font-size: 15pt; }
    h1 { font-weight: bold; font-size: 25pt; }
    h2 { font-weight: bold; font-size: 15pt; }
    button { font-weight: bold; font-size: 15pt; }
  </style>
  <script>
    // 캔버스 기반 원격 제어 UI 구현
    // 재생/일시정지, 이전/다음, 볼륨 슬라이더 등을 터치/마우스로 조작
    // WebSocket으로 아두이노와 실시간 통신
    var canvas_width = 450, canvas_height = 250;
    var trans_x = canvas_width/2, trans_y = canvas_height/2 - 30;
    // ... (전체 코드는 원문 참조)
    window.onload = init;
  </script>
</head>
<body>
  <h1>Web Remote Control / IoT MP3 Player</h1>
  <canvas id="remote"></canvas>
  <h2>
    WebSocket: <span id="ws_state">null</span>
    <button id="bt_connect" type="button" onclick="connect_onclick();">Connect</button>
  </h2>
</body>
</html>

회로도

아두이노 웹 제어 MP3 플레이어 - 브라우저로 오디오 재생하기
전체 회로 연결도

제조공정

  1. 플레이어 피아노: 어쿠스틱 전통과 자동 연주의 정밀한 결합
  2. 블루투스 제어 아두이노 스파이봇(Spybot) 만들기
  3. 플릭모트(FlickMote): 스마트 홈을 위한 제스처 제어 IR 리모컨
  4. DIY 아두이노 TV B-Gone: 모든 TV를 끄는 만능 리모컨
  5. 아두이노로 만드는 대형 LED 마스터 시계 (알람 기능 포함, 12m 거리에서도 식별 가능)
  6. 아두이노와 블루투스로 만드는 스마트 물건 찾기 'Find Me'
  7. 아두이노 프로젝트를 위한 최적화된 전원 솔루션
  8. 아두이노 우노와 DFPlayer Mini로 오디오 재생하기 - 단계별 가이드
  9. 아두이노 틱택토 게임 - MAX7219 LED 매트릭스와 골판지 케이스
  10. 스마트 아두이노 4족 보행 로봇 제작: 단계별 완벽 가이드