差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
gimmickkouza:electronic_basic:6:2_dfplayer_uart [2024/06/02 18:49] – lutamesta | gimmickkouza:electronic_basic:6:2_dfplayer_uart [2024/06/21 18:34] (現在) – lutamesta | ||
---|---|---|---|
行 2: | 行 2: | ||
「ライブラリ」を使いこなせば、「シリアル通信」で部品とArduino間でデータのやり取りを行う、高機能な電子部品を動かすことができるようになります。 | 「ライブラリ」を使いこなせば、「シリアル通信」で部品とArduino間でデータのやり取りを行う、高機能な電子部品を動かすことができるようになります。 | ||
本項より順に、「UART」・「I2C」・「SPI」の3種類のシリアル通信について説明します。 | 本項より順に、「UART」・「I2C」・「SPI」の3種類のシリアル通信について説明します。 | ||
+ | |||
===== 本項で使用する電子部品 ===== | ===== 本項で使用する電子部品 ===== | ||
==== DFPlayerモジュール ==== | ==== DFPlayerモジュール ==== | ||
行 17: | 行 17: | ||
正規品、海外品、DFPlayer miniを比べてみた(ど素人電子工作): | 正規品、海外品、DFPlayer miniを比べてみた(ど素人電子工作): | ||
https:// | https:// | ||
+ | |||
==== スピーカー ==== | ==== スピーカー ==== | ||
{{: | {{: | ||
行 77: | 行 77: | ||
検索結果をスクロールし、__ライブラリ名が「DFRobotDFPlayerMini」開発者が「by DFRobot」のもの__をインストールしてください。 | 検索結果をスクロールし、__ライブラリ名が「DFRobotDFPlayerMini」開発者が「by DFRobot」のもの__をインストールしてください。 | ||
__このライブラリがインストールされていないと本資料のサンプルコードは動きませんのでご注意ください。__ | __このライブラリがインストールされていないと本資料のサンプルコードは動きませんのでご注意ください。__ | ||
+ | |||
+ | ライブラリのバージョンは最新版で大丈夫です。 | ||
+ | (万が一、最新版のライブラリを使ってエラーが出る場合は、講師が使った1.0.6にダウングレードしてみてください) | ||
+ | /*<alert type=" | ||
== 手順4:公式のライブラリを見つけてインストールする == | == 手順4:公式のライブラリを見つけてインストールする == | ||
行 213: | 行 217: | ||
そんなわけでようやく配線図です。 | そんなわけでようやく配線図です。 | ||
DFPlayerのRXとArduinoのTXの間には、先述の通り1kΩの抵抗を入れてください。 | DFPlayerのRXとArduinoのTXの間には、先述の通り1kΩの抵抗を入れてください。 | ||
+ | __この図ではパッと見DFPlayerの向きがわかりにくいのですが、SDカードの挿入口が右側にある状態です。__ | ||
+ | **また先述の通り、RXとTXは互い違いになるように(つまりDFPlayerのRXはArduinoのTX(D1)に、DFPlayerのTXはArduinoのRX(D0)に)繋いでください。** | ||
+ | |||
+ | 今回ArduinoののD0とD1はデジタル入出力ではなく、UART(RX/ | ||
+ | [[gimmickkouza: | ||
+ | |||
+ | ===使う部品リスト=== | ||
+ | ^ 部品 | ||
+ | | DFPlayer | 1個 | | ||
+ | | 抵抗器(1kΩ) | 1個 | | ||
+ | | ブレッドボード用スピーカー | 1個 | | ||
+ | |||
+ | /*<alert type=" | ||
+ | <alert type=" | ||
+ | 注意ポイントとして、DFplayerの向きと、TXRXの配線の確認をお願いしたいです。 | ||
+ | ほぼ絶対逆にする。私も逆にしました。</ | ||
== ⚠注意⚠ == | == ⚠注意⚠ == | ||
こちらの配線図及びサンプルコード6-2-1には、Arduino Uno R4シリーズでしか動作しない固有の仕様が含まれています。 | こちらの配線図及びサンプルコード6-2-1には、Arduino Uno R4シリーズでしか動作しない固有の仕様が含まれています。 | ||
なので、Arduino Uno R3(及び、R4シリーズではない他のArduino)で上の図の配線及び6-2-1を実行しようとすると、エラーが出て動作しません! | なので、Arduino Uno R3(及び、R4シリーズではない他のArduino)で上の図の配線及び6-2-1を実行しようとすると、エラーが出て動作しません! | ||
- | Uno R4シリーズ以外のArduinoをお使いの方は、6-2-1の説明は目を通すだけにして、実際のコードはR4以外対応版となるサンプルコード6-2-2をご利用ください。 | + | __Uno R4シリーズ以外のArduinoをお使いの方は、6-2-1の説明は目を通すだけにして、実際のコードはR4以外対応版となるサンプルコード6-2-2をご利用ください。__ |
ちなみに6-2-2では「R4シリーズ以外のArduinoで2つ以上のUARTを同時に使いたい時」のやり方を履修できます。 | ちなみに6-2-2では「R4シリーズ以外のArduinoで2つ以上のUARTを同時に使いたい時」のやり方を履修できます。 | ||
行 263: | 行 283: | ||
実は# | 実は# | ||
今回「DFRobotDFPlayerMini」ライブラリ用のサンプルコード(スケッチ例)を召喚したところ、この# | 今回「DFRobotDFPlayerMini」ライブラリ用のサンプルコード(スケッチ例)を召喚したところ、この# | ||
+ | |||
+ | <panel type=" | ||
== 2行目 == | == 2行目 == | ||
行 304: | 行 326: | ||
R4シリーズでは~と書いてある通り、この部分はR4独自の仕様となっています。 | R4シリーズでは~と書いてある通り、この部分はR4独自の仕様となっています。 | ||
**R4以外のArduinoを使う場合は、このシリアルの使い方が異なります**(詳細は6-2-2で!) | **R4以外のArduinoを使う場合は、このシリアルの使い方が異なります**(詳細は6-2-2で!) | ||
+ | /*<alert type=" | ||
== 10行目 == | == 10行目 == | ||
行 356: | 行 379: | ||
なので、__myDFP.play(1); | なので、__myDFP.play(1); | ||
- | しかし、delay(187000); | + | しかし、delay(187000); |
また、どれだけの時間delayで止めるべきかはファイルの再生時間によって変わります。 | また、どれだけの時間delayで止めるべきかはファイルの再生時間によって変わります。 | ||
もしファイルを入れ替える場合や、再生したいファイルが複数ある場合に、ファイルごとに個別にdelayを設定するのはあまり賢い方法とは言えません。 | もしファイルを入れ替える場合や、再生したいファイルが複数ある場合に、ファイルごとに個別にdelayを設定するのはあまり賢い方法とは言えません。 | ||
行 366: | 行 389: | ||
MP3ファイルの再生が終わると、loop文の先頭に戻りもう一度ファイルの再生が始まります。 | MP3ファイルの再生が終わると、loop文の先頭に戻りもう一度ファイルの再生が始まります。 | ||
+ | <panel type=" | ||
===== 6-2-2_DFPlayer_UART_SoftwareSerial ===== | ===== 6-2-2_DFPlayer_UART_SoftwareSerial ===== | ||
なぜ6-2-1のコードは、R3系などのArduinoでは使えないのでしょうか。 | なぜ6-2-1のコードは、R3系などのArduinoでは使えないのでしょうか。 | ||
R3系等のArduinoで同じ処理をするにあたっては、Arduinoが持っているシリアル通信の" | R3系等のArduinoで同じ処理をするにあたっては、Arduinoが持っているシリアル通信の" | ||
+ | |||
==== 「ハードウェアシリアル」と「ソフトウェアシリアル」について ==== | ==== 「ハードウェアシリアル」と「ソフトウェアシリアル」について ==== | ||
ArduinoのRX・TX、それからUSBは、Arduinoの脳みそともいえるマイコンチップに繋がっており、チップに内蔵されたUARTの機能を使って通信を行っています。 | ArduinoのRX・TX、それからUSBは、Arduinoの脳みそともいえるマイコンチップに繋がっており、チップに内蔵されたUARTの機能を使って通信を行っています。 | ||
行 381: | 行 405: | ||
サンプルコード6-2-1をR3等のArduinoで使えないのは、ずばりこれが原因です。 | サンプルコード6-2-1をR3等のArduinoで使えないのは、ずばりこれが原因です。 | ||
(逆にハードウェアシリアルを4つ搭載したArduino Mega 2560なんてのもあります) | (逆にハードウェアシリアルを4つ搭載したArduino Mega 2560なんてのもあります) | ||
+ | |||
+ | こちらのページも参考に!:[[gimmickkouza: | ||
で、このようなハードウェアシリアルの数以上にUARTを繋ぎたいシーンで役に立つのが「ソフトウェアシリアル(Software Serial)」です。 | で、このようなハードウェアシリアルの数以上にUARTを繋ぎたいシーンで役に立つのが「ソフトウェアシリアル(Software Serial)」です。 | ||
**「ソフトウェアシリアル」は、ハードウェアシリアルの機能をプログラムで" | **「ソフトウェアシリアル」は、ハードウェアシリアルの機能をプログラムで" | ||
+ | |||
+ | <panel type=" | ||
+ | 最大115200 bps。ソフトウェア内での処理が重いと9600でもキツい…。</ | ||
+ | /*<alert type=" | ||
==== 配線図 ==== | ==== 配線図 ==== | ||
行 392: | 行 422: | ||
Uno R4では、TXはほとんどのソケットが指定できます(とはいえ、DかAのどれかにするのが無難です)が、RXはD0, | Uno R4では、TXはほとんどのソケットが指定できます(とはいえ、DかAのどれかにするのが無難です)が、RXはD0, | ||
なので今回はD3をRX、D4をTXとして使用することにします。 | なので今回はD3をRX、D4をTXとして使用することにします。 | ||
+ | |||
+ | ===使う部品リスト=== | ||
+ | ^ 部品 | ||
+ | | DFPlayer | 1個 | | ||
+ | | 抵抗器(1kΩ) | 1個 | | ||
+ | | ブレッドボード用スピーカー | 1個 | | ||
+ | /*<alert type=" | ||
==== サンプルコード解説 ==== | ==== サンプルコード解説 ==== | ||
行 461: | 行 498: | ||
===== 6-2-3_DFPlayer_SoundPlayer_for_fursuit ===== | ===== 6-2-3_DFPlayer_SoundPlayer_for_fursuit ===== | ||
+ | {{youtube> | ||
+ | |||
仮にも" | 仮にも" | ||
とりあえず、DFPlayerで音を鳴らせるようになったので、タクトスイッチと組み合わせて好きなタイミングで任意のサウンドを鳴らせる、簡易サウンドプレイヤーを作ってみました。 | とりあえず、DFPlayerで音を鳴らせるようになったので、タクトスイッチと組み合わせて好きなタイミングで任意のサウンドを鳴らせる、簡易サウンドプレイヤーを作ってみました。 | ||
<text background=" | <text background=" | ||
+ | |||
行 498: | 行 538: | ||
何のひねりもない配線図です。 | 何のひねりもない配線図です。 | ||
- | + | ||
+ | ===使う部品リスト=== | ||
+ | ^ 部品 | ||
+ | | DFPlayer | 1個 | | ||
+ | | 抵抗器(1kΩ) | 1個 | | ||
+ | | ブレッドボード用スピーカー | 1個 | | ||
+ | | タクトスイッチ | 2個 | | ||
+ | |||
==== サンプルコード解説 ==== | ==== サンプルコード解説 ==== | ||
サンプルコード6-2-3_DFPlayer_SoundPlayer_for_fursuitを開いてください。 | サンプルコード6-2-3_DFPlayer_SoundPlayer_for_fursuitを開いてください。 | ||
+ | /*<alert type=" | ||
+ | |||
+ | コピーしてみたら全角スペースいたので貼り変えてもいいかも | ||
+ | {{: | ||
+ | |||
+ | </ | ||
+ | |||
< | < | ||
#include " | #include " | ||
行 543: | 行 597: | ||
CURRENT_FILE = 1;// | CURRENT_FILE = 1;// | ||
while(digitalRead(busy_PIN) == LOW){ | while(digitalRead(busy_PIN) == LOW){ | ||
- | // | + | |
- | | + | delay(100); |
- | | + | if(digitalRead(TRIGGER_PIN) == LOW){ |
- | | + | |
- | | + | } |
} | } | ||
while (digitalRead(TRIGGER_PIN) == LOW) { | while (digitalRead(TRIGGER_PIN) == LOW) { |