STM32(nucleof401)用DFplayerの関数作成
1.本日の内容
(1) STM32マイコン(nucleof401RE)で使用するDFplayerの関数を作成する。
・目次
2.内容
(1) やる内容の詳細
・DFplayerの操作するための関数を作成する。
(2) CubeMXの設定
(3) 作成する関数
DFplayerを操作する関数として下記関数を作成する。
関数名 | 引数 | 返り値 | 役割 |
---|---|---|---|
DFP_SEND | int fd //function deseriptin | void | DFplayer UART通信送信関数 |
int paraH //parameterのHigh byte | - | - | |
int paraL //parameterのLow byte | - | - | |
DFP_NEXT | void | void | 次の曲を再生 |
DFP_PREVIOUS | void | void | 前の曲を再生 |
DFP_SPEC | int track_set //トラック番号(1~2999) | void | 特定のトラックを再生 |
DFP_VOL_INC | void | void | 音量を+1 |
DFP_VOL_DEC | void | void | 音量を-1 |
DFP_VOL | int volume //音量設定(1~30) | void | 指定した値に音量を設定 |
DFP_FOLDER_REP | void | void | 現在のフォルダーをリピート |
DFP_SINGLE_REP | void | void | 現在の曲を1曲リピート |
DFP_RANDOM | void | void | 曲をランダム再生 |
DFP_POWER_LOW | void | void | パワーオフ(低消費電力モード) |
DFP_NW | void | void | 通常起動 |
DFP_RES | void | void | モジュールリセット |
DFP_PLAY | void | void | 現在の曲を再生 |
DFP_PAUSE | void | void | 曲の再生を一時停止 |
DFP_FOLDER_PLAY |
int folder_set //リピートするフォルダーを指定(1~10) |
void | 指定したフォルダーをリピート |
DFP_VOL_AD |
int DH //オープン制御、ボリュームセットの設定 |
void | 音の設定 |
int DL //音量設定値 | - | - | |
DFP_REP | void | void | リピート再生 |
(4) プログラムの作成
・dfplayer.cファイルの作成
/** ********************************************************* */ /** * @file dfplayer.c * @brief DFplayer操作用 * @brief Compiler : Atollic True Studio for STM32 9.3.0 * @brief CPU : STM32F401 * @date $LastChangedDate : 2021/11/13 $ */ /** ********************************************************* */ /** ********************************************************* */ // インクルード ファイル /** ********************************************************* */ #include "main.h" #include "dfplayer.h" ///dfplayer操作用ヘッダファイル /** ********************************************************* */ // 外部定義変数 /** ********************************************************* */ /** ********************************************************* */ // 内部定義変数 /** ********************************************************* */ UART_HandleTypeDef huart1; //huart1の宣言 /** ********************************************************* */ // 関数の作成 /** ********************************************************* */ /** ********************************************************** */ /** * DFplayerデータ送信(USART) * @param fd : function deseriptionの値 * @param paraH : parameterのhigh data byteの値 * @param paraL : parameterのlow data byteの値 * @return void : None */ /** ********************************************************** */ void DFP_SEND(int fd, int paraH, int paraL) { //配列の宣言 //SINT dataset[]={}; //UART送信データ格納用配列 // SINT dataset[] = {0x7E, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0xEF}; //データ送信用配列を用意 uint8_t dataset[] = {0x7E, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0xEF}; dataset[3] = fd; //function deseription の値を設定 dataset[5] = paraH; //parameterのhigh data byteの値を設定 dataset[6] = paraL; //parameterのlow data byteの値を設定 //USARTデータ送信処理 //USART1を使用 HAL_UART_Transmit(&huart1, dataset, sizeof(dataset), 100); } /** ********************************************************** */ /** * 次の曲を再生 * @param void : none * @return void : none */ /** ********************************************************** */ void DFP_NEXT() { DFP_Send(FD_NEXT, PARA, PARA); } /** ********************************************************** */ /** * 前の曲を再生 * @param void : none * @return void : none */ /** ********************************************************** */ void DFP_PREVIOUS() { DFP_Send(FD_PREVIOUS, PARA, PARA); } /** ********************************************************** */ /** * 特定のトラックを再生 * @param int track_set :トラック番号(1~2999) * @return void : none */ /** ********************************************************** */ void DFP_SPEC(int track_set) { //tack_set:1~2999で曲を選択 DFP_Send(FD_SPEC, PARA, track_set); } /** ********************************************************** */ /** * DFplayerの音量を+1 * @param void : none * @return void : none */ /** ********************************************************** */ void DFP_VOL_INC() { DFP_Send(FD_VOL_INC, PARA, PARA); } /** ********************************************************** */ /** * DFplayerの音量を-1 * @param void : none * @return void : none */ /** ********************************************************** */ void DFP_VOL_DEC() { DFP_Send(FD_VOL_DEC, PARA, PARA); } /** ********************************************************** */ /** * DFplayerの音量を設定 * @param int volume : 音量設定値(1~30) * @return void : none */ /** ********************************************************** */ void DFP_VOL(int volume) //音量の設定 { //volumeの値が1~30の時 if(volume>0 && volume<31){ //volume:1~30で音量設定 DFP_Send(FD_VOL, PARA, volume); }else{ //何もしない。 } } /** ********************************************************** */ /** * 現在のフォルダーをリピート * @param void : none * @return void : none */ /** ********************************************************** */ void DFP_FOLDER_REP() { //set= 0:リピート //set= 1:フォルダーリピート DFP_Send(FD_SPEC_REP, PARA, 0x01); } /** ********************************************************** */ /** * 現在の曲を1曲リピート * @param void : none * @return void : none */ /** ********************************************************** */ void DFP_SINGLE_REP() { //set= 2:シングルリピート DFP_Send(FD_SPEC_REP, PARA, 0x02); } /** ********************************************************** */ /** * ランダム再生 * @param void : none * @return void : none */ /** ********************************************************** */ void DFP_RANDOM() { //set= 3:ランダム再生 DFP_Send(FD_SPEC_REP, PARA, 0x03); } /** ********************************************************** */ /** * パワーオフ(低消費電力モードに入る) * @param void : none * @return void : none */ /** ********************************************************** */ void DFP_POWER_LOW() //パワーオフ { DFP_Send(FD_LOW, PARA, PARA); } /** ********************************************************** */ /** * 通常起動 * @param void : none * @return void : none */ /** ********************************************************** */ void DFP_NW() { DFP_Send(FD_NW, PARA, PARA); } /** ********************************************************** */ /** * モジュールリセット * @param void : none * @return void : none */ /** ********************************************************** */ void DFP_RES() { DFP_Send(FD_RES, PARA, PARA); } /** ********************************************************** */ /** * 現在の曲を再生 * @param void : none * @return void : none */ /** ********************************************************** */ void DFP_PLAY() { DFP_Send(FD_PLAY, PARA, PARA); } /** ********************************************************** */ /** * 曲の再生を一時停止 * @param void : none * @return void : none */ /** ********************************************************** */ void DFP_PAUSE() { DFP_Send(FD_PAUSE, PARA, PARA); } /** ********************************************************** */ /** * 指定したフォルダーの曲を再生 * @param int folder_set : 再生するフォルダーを設定
* @param int song_set : 再生する曲を設定
* @return void : none */ /** ********************************************************** */ void DFP_FOLDER_PLAY(int folder_set,int song_set) { DFP_Send(FD_FOLDER_PLAY, folder_set, song_set); } /** ********************************************************** */ /** * 音量設定 * @param void : none * @return void : none */ /** ********************************************************** */ void DFP_VOL_AD(int DH, int DL) { //DH:1:オープン制御 //DH:0:ボリュームセット(DL:1~31) DFP_Send(FD_VOL_AD, DH, DL); } /** ********************************************************** */ /** * リピート再生 * @param void : none * @return void : none */ /** ********************************************************** */ void DFP_REPEAT() //再生、停止 { //1:リピート開始 //2:停止 DFP_Send(FD_REPEAT, PARA, PARA); } /* **** ファイルの最後 ( dfplayer.c ) *********************** */
・dfplayer.hファイルの作成
/** ******************************************************* */ /** * @file dfplayer.h * @brief dfplayer操作用ヘッダファイル * @date $LastChangedDate : 2021/11/13$ */ /** ******************************************************** */ #ifndef DFPLAYER_H ///<DFPLAYER_H 未定義? #define DFPLAYER_H ///<DFPLAYER_H 定義済み!! /* *************************************************************** */ // インクルード ファイル /* *************************************************************** */ /* **************************************************************** */ // 定数値の定義 /* ****************************************************************** */ /** DFplayer動作ステート定義 */ #define PARA 0x00 ///NEXT,PAUSE,STOP,PLAY,RANDのLSB #define FD_NEXT 0x01 ///次の曲を再生 #define FD_PREVIOUS 0x02 ///前の曲を再生 #define FD_SPEC 0x03 ///特定のトラック(曲)を再生 #define FD_VOL_INC 0x04 ///音量+ #define FD_VOL_DEC 0x05 ///音量- #define FD_VOL 0x06 ///音量の設定 #define FD_SPEC_REP 0x08 ///特定の曲、ファイル、ランダムリピート #define FD_LOW 0x0A ///パワーオフモード #define FD_NW 0x0B ///通常起動 #define FD_RES 0x0C ///モジュールをリセット #define FD_PLAY 0x0D ///曲を再生 #define FD_PAUSE 0x0E ///曲の一時停止 #define FD_FOLDER_PLAY 0x0F ///フォルダの再生 #define FD_VOL_AD 0x10 ///ボリュームの調整 #define FD_REPEAT 0x11 ///曲のリピート再生 /* ************************************************************* */ // 構造体の定義 /* ************************************************************* */ /* ************************************************************** */ // 外部変数の定義 /* ************************************************************** */ /* ************************************************************** */
// 関数のプロトタイプ宣言 /* ************************************************************** */
extern void DFP_SEND(int fd, int paraH, int paraL); ///DFplayerデータ送信(USART) extern void DFP_NEXT(); ///次の曲を再生 extern void DFP_PREVIOUS(); //前の曲を再生 extern void DFP_SPEC(int track_set); ///特定のトラック(曲)を再生 extern void DFP_VOL_INC(); ///音量+ extern void DFP_VOL_DEC(); ///音量- extern void DFP_VOL(int vol); ///音量を設定 extern void DFP_FOLDER_REP(); ///フォルダリピート extern void DFP_SINGLE_REP(); ///1曲リピート extern void DFP_RANDOM(); ///ランダムリピート extern void DFP_POWER_LOW(); ///パワーオフ extern void DFP_NW(); ///通常起動 extern void DFP_RES(); ///モジュールリセット extern void DFP_PLAY(); ///曲の再生を再開 extern void DFP_PAUSE(); ///曲の再生を一時停止 extern void DFP_FOLDER_PLAY(int folder_set); ///フォルダーリピート extern void DFP_VOL_AD(int DH, int DL); ///音量調整 extern void DFP_REPEAT(); ///再生、停止 #endif ///<DFPLAYER_H 未定義 End /* **** ファイルの最後 ( dfplayer.h ) ***************************** */
※amazonのDFplayerで動作確認したところ、一部コマンド動作が違う部分がある。
・DFP_RANDOM/DFP_SINGLE_REPEAT/DFP_FOLDER_REPEATは、実際には動作しなかった。
→0x08 DH DL を送った場合 DH DLで曲の選択、選択した曲を1曲リピートする。
DL:0~255(0xff)曲目までを選択
DH:それ以降を選択する場合に使用する。
256の場合、DH:0x01 /DL:0x00
確認:DFplayer
/** ********************************************************** */ /** * 選択した曲をシングルリピート * @param int : song_set2:0~255まで選択 * @param int : song_set1: 0~255以降を選択 * @return void : none */ /** ********************************************************** */ void DFP_SINGLE_REPEAT(int song_set1,int song_set2) { ///最大値確認 song_set2 = song_set2<=255?song_set2:255; song_set1 = song_set1<=255?song_set1:255; //set= 2:シングルリピート DFP_Send(FD_SPEC_REP, song_set1, song_set2); }
(4) プログラムの説明
3.関連記事
・STM32マイコン_2(UART通信:TeraTermにHellow表示) - Project_OKI’s diary
・STM32マイコン_3(UART通信:複数文字送信) - Project_OKI’s diary
・STM32マイコン_4(NVICの設定内容) - Project_OKI’s diary
・STM32マイコン_5(スイッチ入力とLED点灯、消灯) - Project_OKI’s diary
その他:
・CubeIDEの使い方(起動~デバック実行) - Project_OKI’s diary
C言語:
・組み込みの為のC言語基礎知識1(printf) - Project_OKI’s diary
・C言語基礎知識2(for分で処理を繰り返す) - Project_OKI’s diary
・C言語基礎知識3(配列) - Project_OKI’s diary