반응형

앞선 포스트에서 DFplayer 모듈을 제어하는 방법에 대해 다루었었다. 통신을 통해 사운드 트랙을 제어하기 위한것이라면 mp3 플레이어 환경에서 DFplayer를 제어 할 수 있도록 프로그램된 DFcontroller를 이용하면 DFplayer 라이브러리 없이도 제어 할 수 있고 아두이노 스케치상 코드의 양을 줄일수 있게된다.  

 

DFcontroller - DFPlayer mini 원격제어 안드로이드 앱 버전 2.2 다운로드

(*** 상기앱의 와이파이 연결은 안드로이드8 [갤럭시S7]이하 버전에서만 작동합니다 ***)

(*** 상기앱의 블루투스 연결은 안드로이드10 이하 버전에서만 작동합니다 ***)

 

 

DFcontroller 매뉴얼

 

 

 

 

1. SD카드에 사운드 파일 저장 방법

A. 저장방식 1

폴더명: 01 ~ 99까지 각 폴더별 파일갯수 1 ~ 255

파일명: 숫자 3자리 001 ~ 255 반드시 포함하는 파일명으로, 최대 파일갯수 255개 까지 각 폴더에 저장된 파일 인식

예) 폴더           파일명

      01       /     001.mp3, 002.wav, 003 시크릿a.mp3,,,,,, 255 yayayat.mp3

      02       /     001.mp3, 002.wav, 003 시크릿a.mp3,,,,,, 255 yayayat.mp3

 

B. 저장방식 2 (저장방식 1에 추가로 ADVERT 폴더 사용)

폴더명: 01 ~ 99까지 각 폴더별 파일갯수 1 ~ 255

파일명: 숫자 3자리 001 ~ 255 반드시 포함하는 파일명으로, 최대 파일갯수 255개 까지 각 폴더에 저장된 파일 인식

ADVERT 폴더: mp3 또는 wave파일의 이름은 4자리 이하 숫자로만 저장되어야만 한다. 1 ~ 3000

예) 폴더             파일명

      01          /    001.mp3, 002.wav, 003 시크릿a.mp3,,,,,, 255 yayayat.mp3

      02          /    001.mp3, 002.wav, 003 시크릿a.mp3,,,,,, 255 yayayat.mp3

      ADVERT  /    0001.mp3/wav, 0002.mp3/wav, 0003 시크릿a.mp3/wav, .......3000.mp3/wav.

※ 블루투스 연결 옵션에서 ADVERT 체크항목에 체크를 하고 연결해야 한다.

 

2. DFplayer 연결 및 코드 

 

DFplayer에 블루투스 직접 연결

 

 

특별한 설정 없이 DFcontroller에서 블루투스에 연결하면 SD카드의 데이터를 받아 초기화를 시작하고, 저장된 SD카드의 폴더 및 트랙 정보를 이용하여 dfplayer를 제어 할 수 있다. 

 

 

아두이노의 software Serial을 이용하여 dfplayer 연결

 

 

상기의 경우 아래 코드를 아두이노에 업로드 해야한다.

DFplayer_bluetooth_basic.zip
0.00MB

#include <SoftwareSerial.h> 

#define DF_rxPin 2 // DFplayer RX -> arduino 2

#define DF_txPin 3 // DFplayer TX -> arduino 3 

SoftwareSerial dfSerial(DF_txPin, DF_rxPin); // (RX, TX)

 

bool send_df = false;

 

void setup() {

  Serial.begin(9600);   // bluetooth Serial 

  dfSerial.begin(9600); // DFplayer Serial

}

 

void loop() {

  if (dfSerial.available()) {    

    Serial.write(dfSerial.read());  // send to android via bluetooth

  }

  if (Serial.available()) {  

    if (Serial.peek() == 0x7E) send_df = true; 

    if (send_df == true) {   

      uint8_t temp = Serial.read();  

      if (temp == 0xEF) send_df = false;  

      dfSerial.write(temp);  // send to DFplayer

    }        

  }

}

 

dfplayer와 아두이노 핀 및 RGB LED 동시 제어 

 

 

아래의 코드를 아두이노에 업로드 해야한다. 

DFplayer_bluetooth_basic_with_pin_control_RGB_LED.zip
0.00MB

더보기

#include <SoftwareSerial.h> 

#define DF_rxPin 2 // DFplayer RX -> arduino 2

#define DF_txPin 3 // DFplayer TX -> arduino 3 

SoftwareSerial dfSerial(DF_txPin, DF_rxPin); // (RX, TX)

 

#define ledPin 13

#define Red 9

#define Green 10

#define Blue 11

 

// 블루투스 앱 디지털 핀 제어용 변수

bool get_pin_val = false;

uint8_t pin_count = 0;

uint8_t pin_a[3] = {0, };

uint8_t pin_val;

 

// 블루투스 앱 PWM 제어용 변수

bool get_pwm_val = false;

uint8_t pwm_count = 0;

uint8_t pwm_a[5] = {0, };

uint16_t pwm1 = 0;  

uint16_t pwm2 = 0;  

uint16_t pwm3 = 0;  

 

bool send_df = false;

 

void setup() {

  Serial.begin(9600);   // bluetooth Serial 

  dfSerial.begin(9600); // DFplayer Serial

  pinMode(ledPin, OUTPUT);

  pinMode(Red, OUTPUT);

  pinMode(Green, OUTPUT);

  pinMode(Blue, OUTPUT);

}

 

void loop() {

  if (dfSerial.available()) { 

    Serial.write(dfSerial.read());  // send to android via bluetooth

  }

  if (Serial.available()) {  

    if (Serial.peek() == 0x7E) send_df = true; 

    else if (Serial.peek() == 0xF3) get_pwm_val = true; 

    else if (Serial.peek() == 0xF0) get_pin_val = true; 

    if (send_df == true) {   

        uint8_t temp = Serial.read();  

        if (temp == 0xEF) send_df = false;  

        dfSerial.write(temp);  // send to DFplayer

    }   

    else if (get_pwm_val == true ) { // pwm 제어값 수신

      uint8_t temp = Serial.read();

      pwm_a[pwm_count] = temp;

      pwm_count++; 

      if (temp == 0xF1) {

        get_pwm_val = false;

        pwm_count = 0;

        pwm_control();

      }

    }

    else if (get_pin_val == true) {  // 디지털 핀 제어값 수신

      uint8_t temp = Serial.read();

      pin_a[pin_count] = temp;

      pin_count++;

      if (temp == 0xF1) {

        get_pin_val = false;

        pin_count = 0;

        pin_control();

      }

    }

    else {

      if (Serial.peek() == 0xF8) {

        String temp = Serial.readStringUntil('\n');

        Serial.println(temp);

      }

      else if (Serial.peek() == 0xF9) {

        String temp = Serial.readStringUntil('\n');

        Serial.println(temp);

      } 

      else {

        char text = Serial.read();  // text value for some purpose.

        if (text > 0 && text != 0x7E) Serial.write(text); // print text to Serial Monitor

      }

    }

  }

}

 

void pin_control() {

  pin_val = pin_a[1];

  if (pin_val != 0) {

    switch (pin_val) {

      case 11: digitalWrite(ledPin, true); // button 1 : on

               Serial.println("LED ON");

                  break;

      case 10: digitalWrite(ledPin, false); // button 1 : off

               Serial.println("LED OFF");

                  break;

    }

    pin_val = 0;

  }

}

 

void pwm_control() {

  uint16_t temp = pwm_a[3];

  temp = temp << 8 | pwm_a[2];

  if (pwm_a[1] == 1) {  // 슬라이드 1번

    pwm1 = temp;

    analogWrite(Red, pwm1);

  }

  else if (pwm_a[1] == 2) { // 슬라이드 2번

    pwm2 = temp;

    analogWrite(Green, pwm2);

  }

  else if (pwm_a[1] == 3) {  // 슬라이드 3번

    pwm3 = temp;

    analogWrite(Blue, pwm3);

  }

}

 

 

 

관련 글

[arduino] - DFplayer - 아두이노 사운드 모듈

[arduino] - NodeMcu(ESP8266)에서 DFplayer를 제어하는 코드

[arduino] - ESP32(DevKit)로 DFplayer 제어하기

[arduino] - 안드로이드 앱 DFcontroller를 이용하여 DFplayer 제어

[arduino] - 아두이노시계 예제, ESP01 WiFi 이용 시간 동기화 하기

[arduino] - 아두이노 말하는알람시계 예제 - DFPlayer

[arduino] - 말하는알람시계 - 블루투스 연결 및 시간 동기화, DFPlayer 제어

[arduino] - NodeMcu - 말하는 알람시계, wifi이용 시간 동기화 및 DFPlayer 원격제어

 

DFcontroller - DFPlayer mini 원격제어 안드로이드 앱 버전 2.2 다운로드

DFcontroller 매뉴얼

 

 

+ Recent posts