※旧スタッフブログから移設転記記事となります。
スタッフブログにて、ATtiny13aにて、振動センサーを利用した1時間のお休みタイマー付きのDFPlayer Miniの再生環境を紹介しました。記事は、こちら。
利用をしている、Nerd Ralph氏によるシリアル環境のBug fixと各種アップデートを兼ねて新たにGit HUBにライブラリ picoUARTとしてを公開されました。 Git HUBのライブラリのダウンロードは、こちら。
そこで、DFPlayer miniで構築しているライブラリもそれに合わせて更新をします。今回は、その紹介記事となります。 ライブラリのツリー構成は、以下のようになります。
では、次にそれぞれの変更内容を紹介します。
(旧)DFPlayer_Mini_Mp3.cpp → tiny-DFPlayer_Mini.cppへファイル名変更
“DFPlayer_Mini_Mp3″を”tiny-DFPlayer_Mini”としました。また、#includeしているシリアル通信用のライブラリを変更し、シリアル通信用の関数TxByteをputxに修正します。その他は、そのままです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
#include <Arduino> #include <picoUART> #include <pu_print> extern uint8_t send_buf[10]; extern uint8_t recv_buf[10]; unsigned long _last_call = 0; // static void fill_uint16_bigend (uint8_t *thebuf, uint16_t data) { *thebuf = (uint8_t)(data>>8); *(thebuf+1) = (uint8_t)data; } //calc checksum (1~6 byte) uint16_t mp3_get_checksum (uint8_t *thebuf) { uint16_t sum = 0; for (int i=1; i<7; i++) { sum += thebuf[i]; } return -sum; } //fill checksum to send_buf (7~8 byte) void mp3_fill_checksum () { uint16_t checksum = mp3_get_checksum (send_buf); fill_uint16_bigend (send_buf+7, checksum); } // void mp3_send_cmd (uint8_t cmd, uint16_t high_arg, uint16_t low_arg) { unsigned long d = abs(millis() - _last_call); if (d < 50) { delay(50 - d); } send_buf[3] = cmd; send_buf[5] = high_arg; send_buf[6] = low_arg; mp3_fill_checksum (); //send_func (); for (uint8_t i=0; i<10; i++) { putx (send_buf[i]); } _last_call = millis(); } // void mp3_send_cmd (uint8_t cmd, uint16_t low_arg) { mp3_send_cmd(cmd, 0, low_arg); } // void mp3_send_cmd (uint8_t cmd) { mp3_send_cmd(cmd, 0, 0); } // コマンド一覧 // 次のトラックを再生する void mp3_next () { mp3_send_cmd (0x01); } // 前のトラックを再生する void mp3_prev () { mp3_send_cmd (0x02); } // ボリュームのレベルを指定する(0~30) void mp3_set_volume (uint16_t volume) { mp3_send_cmd (0x06, volume); } // イコライザーを選択する // 0/1/2/3/4/5 Normal/Pop/Rock/Jazz/Classic/Bass void mp3_set_EQ (uint16_t eq) { mp3_send_cmd (0x07, eq); } // 再生を開始する void mp3_play () { mp3_send_cmd (0x0d); } // 一時停止する void mp3_pause () { mp3_send_cmd (0x0e); } // フォルダーとトラック番号を指定して再生する void mp3_play_file_in_folder (uint8_t folder, uint8_t num) { mp3_send_cmd (0x0f, folder, num); } // デバイス内の全てのファイルを繰り返し再生する void mp3_play_repeat_all () { mp3_send_cmd (0x11, 0x00, 0x01); } // 再生を停止する void mp3_stop () { mp3_send_cmd (0x16); } // デバイス内の全てのファイルをシャッフルして再生する void mp3_random_play () { mp3_send_cmd (0x18); } |
DFPlayer_Mini_Mp3.h → tiny-DFPlayer_Mini.hへファイル名変更
ヘッダファイルは、ファイル名のみの変更となります。
pu_config.h
pu_configは、ボーレートとTXピンとRXピンの設定をします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
// picoUART configuration #ifndef PU_BAUD_RATE #define PU_BAUD_RATE 9600L // default baud rate #endif // port and bit for Tx and Rx - can be same #define PU_TX B,0 #define PU_RX B,1 // disable interrupts during Tx and Rx #define PU_DISABLE_IRQ 1 // I/O register macros #define GBIT(r,b) b #define GPORT(r,b) (PORT ## r) #define GDDR(r,b) (DDR ## r) #define GPIN(r,b) (PIN ## r) #define get_bit(io) GBIT(io) #define get_port(io) GPORT(io) #define get_ddr(io) GDDR(io) #define get_pin(io) GPIN(io) #define PUTXBIT get_bit(PU_TX) #define PUTXPORT get_port(PU_TX) #define PUTXDDR get_ddr(PU_TX) #define PURXBIT get_bit(PU_RX) #define PURXPIN get_pin(PU_RX) |
4行目にボーレートを設定します。
また、8行目にTXに使用するPORTBのBit番号と9行目にRXに使用するPORTBのBit番号を記載します。
ここで注意ですが、書式は、B,0のような書式となります。
最後にATtiny13aでインクルードしていたライブラリ名も”DFPlayer_Mini_ATtiny13a.h” →”tiny-DFPlayer_Mini.h”に変更しておきます。
以上が、ライブラリの更新内容の説明となります。シリアルプリントも使えるようになったのでかなりうれしい更新となります。