質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

3058閲覧

ValueError: expecting a Pinについて

wataru.py

総合スコア7

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/10/18 10:43

編集2021/10/18 12:23

閲覧ありがとうございます。

Raspberry Pi Pico と mp3再生モジュール(DFPlayer mini) を使ってスピーカーから音楽を流したいのですが、
”ValueError: expecting a Pin”というエラーが出てしまい再生できません。

エラーの意味を調べてもよく分からず質問させていただきます。

github上でそれらしきコードが掲載されていたので使わせてもらったのですが、どう修正すればよいかわかりません。。。

よろしくお願いいたします。

from dfplayermini import Player from time import sleep music = Player(pin_TX=17, pin_RX=16) print("set volume") music.volume(20) print("start play") music.play(1) sleep(2) print("stop play with fadeout") music.fadeout(2000) music.play('next') sleep(10) music.pause() sleep(3) music.loop() music.play(2) sleep(20) music.module_sleep() 下記がエラー分です。 Traceback (most recent call last): File "<stdin>", line 5, in <module> File "dfplayermini.py", line 11, in __init__ ValueError: expecting a Pin

エラー箇所line 5の music = Player(pin_TX=17, pin_RX=16)を
music = Player(17,16)に変更してみましたが、同じエラーが出てダメでした。

dfplayermini.pyのコードが以下です。

import utime from machine import UART, Timer IDLE = 0 PAUSED = 1 PLAYING = 2 class Player: def __init__(self, pin_TX, pin_RX): self.uart = UART(1, 9600, tx=pin_TX, rx=pin_RX) self.cmd(0x3F) # send initialization parametres self._fadeout_timer = Timer(-1) self._volume = 15 self._max_volume = 15 self._fadeout_speed = 0 def cmd(self, command, parameter=0x00): query = bytes([0x7e, 0xFF, 0x06, command, 0x00, 0x00, parameter, 0xEF]) self.uart.write(query) def _fade_out_process(self, timer): new_volume = self._volume - self._fadeout_speed if new_volume <= 0: print("fadeout finished") new_volume = 0 self._fadeout_timer.deinit() self.stop() new_volume = self._max_volume # reset volume to max self.volume(new_volume) # playback def play(self, track_id=False): if not track_id: self.resume() elif track_id == 'next': self.cmd(0x01) elif track_id == 'prev': self.cmd(0x02) elif isinstance(track_id, int): self.cmd(0x03, track_id) def pause(self): self.cmd(0x0E) def resume(self): self.cmd(0x0D) def stop(self): self.cmd(0x16) def fadeout(self, fadeout_ms=1000): # more than 500ms and less than 3000ms fadeout_ms = int(sorted([500, fadeout_ms, 3000])[1]) fade_out_step_ms = 100 self._fadeout_speed = self._volume * \ fade_out_step_ms / fadeout_ms # ten steps per second self._fadeout_timer.init( period=fade_out_step_ms, callback=self._fade_out_process) def loop_track(self, track_id): self.cmd(0x08, track_id) def loop(self): self.cmd(0x19) def loop_disable(self): self.cmd(0x19, 0x01) # volume control def volume_up(self): self._volume += 1 self.cmd(0x04) def volume_down(self): self._volume -= 1 self.cmd(0x05) def volume(self, volume=False): if volume: self._volume = int(sorted([0, volume, self._max_volume])[1]) print("volume", self._volume) self.cmd(0x06, self._volume) return self._volume # hardware def module_sleep(self): self.cmd(0x0A) def module_wake(self): self.cmd(0x0B) def module_reset(self): self.cmd(0x0C)

追記:https://github.com/lavron/micropython-dfplayermini
上記URLです。
イメージ説明

皆様ご回答ありがとうございます。
ご指摘を参考に、

import

1music = Player(pin_TX=machine.Pin(17), pin_RX=machine.Pin(16))

を追加訂正したところ今度は、
”ValueError: bad TX pin”というエラーが出てしまいました。今調べているところなのですが、
もしお分かりになる方がいらっしゃればご教授お願い致します。

追記:Pinの箇所を16,17から4,5に変更したところ
エラーなく動きました!
皆様回答ありがとうございます!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ppaul

2021/10/18 11:09

github上でそれらしきコードの場所を質問に追加してください。
nemoplus

2021/10/18 11:58 編集

当方Raspberry Pi 勉強中の身ですが、接続方法に問題はありませんか? 【Raspberry Pi Pico】UART通信でDFPlayerを制御する https://www.ekit-tech.com/?p=2198 上記によると、TX - RX はクロスしてつなぐようです。 勉強させていただきたいので、回路図もお示しいただければ幸いです。
nemoplus

2021/10/18 11:54 編集

thkana さんの回答のとおりで動きそうですね。 --- import machine music = Player(pin_TX=machine.Pin(17), pin_RX=machine.Pin(16)) ---
wataru.py

2021/10/18 12:11

皆様ご回答ありがとうございます。 >>TX - RX はクロスしてつなぐようです。 全く知りませんでした!回路図を見るとそうなっていますね! ありがとうございます! >>import machine music = Player(pin_TX=machine.Pin(17), pin_RX=machine.Pin(16)) ありがとうございます!! ただ、今度は別のエラーが出てしまいました(´;ω;`)
etherbeg

2021/10/18 12:17

music = Player(pin_TX=machine.Pin(8), pin_RX=machine.Pin(9))ではどうでしょうか?
wataru.py

2021/10/18 12:37

ご回答ありがとうございます! music = Player(pin_TX=machine.Pin(8), pin_RX=machine.Pin(9))ではどうでしょうか? 4と5にしたらいけました!
guest

回答1

0

ベストアンサー

Playerのコンストラクタでpin_Tx/pin_Rxに与えるパラメータとしてPinクラスのインスタンスを与えなければいけない、ということではないでしょうか?


とりあえず動いたとのことですが。
むやみにいろいろ試すまえに...
RaspberryPi Picoのピン接続図、とりあえずスイッチサイエンスのページに貼ってあるものをみると、GP16がTX, GP17がRXになっています。まずはその辺を「ちゃんと確認する」ことから始めるべきではないでしょうか。

エラーなく動きました!

そう見えているかも知れませんが、DFPlayerのVccを5VにつないでいるということはDFPlayerのTX端子には5Vが出力されるということで、それをRaspberryPi PicoのRX(絶対最大定格電圧Vdd+0.3V=3.6V)に直結するということはPicoの破壊試験をしているようなものだ、というのは覚悟したほうがいいと思います。

投稿2021/10/18 11:18

編集2021/10/18 12:37
thkana

総合スコア7629

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wataru.py

2021/10/18 12:12

ご回答ありがとうございます! ご指摘のとおり修正してみましたが、ValueError: bad TX pinというエラーが出てしまいました(´;ω;`)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問