「PIC AVR 工作室」サイトの日記的なブログです。
サイトに挙げなかった他愛ないことを日記的に書き残してます。
PIC AVR 工作室 ブログ



こないだ、ふと思いついちゃったので、ArduinoとC-LCD
に移植してみた。






昨日届いた、DFplayer。ちょっとだけ鳴らしてみようと
思ったのが運のつき。なんか、色々はまりどころが
あった。一応動いたけど。



こんな風に、ブレッドボード2個使ってみた。
配線した後の状態は写真取り忘れた。

3.3V版の「あちゃんでいいの」を使って、3.3V I/Oで
動かす。ソフトウェアシリアルのTXとRXを繋ぐだけで
簡単に制御できるだろうと思ったんだけど、いくつか
はまる。


あまりまとまってないけど、備忘録としてまとめて
おくことに。単なる走り書き。



(その1)電源

3.2~5Vで動くはずなんだけど、電源が安定してないと
だめみたい。
電源が安定しないと、突如、初期値(最大音量)で
バリバリとノイズが出る。これはちょっとこまる。

電源を選ぶみたい。別途5V使って電源を供給。


(その2)ファイル名、ディレクトリ名

情報を色々あさっていると、SDカードに「/mp3」って
ディレクトリ作って、そこにmp3を入れること、とか、
そこに入れるファイルのファイル名は、頭4桁が0000
から始まる通番を含むファイル名であること、とか
条件があるらしい。

え?普通のmp3ファイルを放り込んだSDカードを
そのまま再生できないの?と、戸惑う。

とりあえずそういう風にファイル名を変えて、サンプル
プログラム動かしてみた。
このあたりの点についてはまた後ほど。


(その3)制御コードまわり

制御コードは、バイナリ数バイトの簡単なものでは
あるんだけど、さらに、簡単に扱えるライブラリも
あるので、そっちを使って簡単に済ますという目論み。

…だったんだけど、まぁ、サンプルはひとまず動いた。
動いたけど、なんかが微妙におかしい。なにがおかしい
のかを色々実験して確認してみる。

ArduinoのTXだけじゃなくRXも繋いでいることから、
なにか変な事起きるときに、それに関する情報でも
吐き出してないかなぁ?と思って、シリアルモニタ
で眺めてみる。

なんかでてきた。調べてみたら、

http://www.picaxe.com/docs/spe033.pdf

このpdfの5ページ目に、戻りのコードが書かれてて、
それによると、
   「7E FF 06 3D 00 00 01 xx xx EF」
は、SDカードのトラックが終了したよ、1曲目だよ、
みたいな感じらしいんだけど、意味がよくわからない。

普通に1曲再生終わったときには、こういうコードは
返ってこないんだけど、曲が途中で勝手に終わって
次の曲に飛んじゃうときにだけ、このコードが吐かれる。

PDFによると、そういう時は1曲戻すコマンドを打て、
という感じに掛かれているんだけど、なんでそんな
変な処理してるの?意味が解らん。


んで、仕方ないので、そういう処理を、シリアルモニタ
通じて手で行ってみると…タイミングが微妙。信号を
受け取ってすぐに1曲戻すと、さらに前の曲に戻っちゃう
みたい。
そもそも、エラーがでる原因の曲と、エラーが出る
タイミングの曲が一致してない場合があったりして、
単純には上手くいかないみたいだなぁ。



あと、色々弄っててわかったこと。

一つは、/mp3ディレクトリじゃなくても、再生はできる
ってこと。ファイル名の先頭4桁が通番になってなくても、
自動的に検索されて、再生はできた。

できるんだけど、多分、「直接曲番指定で再生」する
ことはできないっぽい。

この、ディレクトリ名とかファイル名の通番とかをルール
通りにしないといけないよ、っていうのは、「効果音」
とかを再生する場合に使うモードみたい。

んでさらに、普通のmp3プレイヤー的な用途にも使える
ようにできているみたいだなぁ。

ライブラリを使うと、
  mp3_play ();
って風に、引数なしで呼び出すと、とりあえず頭の1曲が
再生されるみたい。
  mp3_play (1);
みたいに番号を指定すると、その局番から再生するみたい。
その番号が、例の4桁と。

これじゃない場合は、曲の番号がどうカウントされるのかは
よくわからない。(内部仕様は見えないし、どこかに書いて
あるわけじゃないみたい)


あと、busy端子を使わないといけないみたい。1曲再生
すると、再生終わったところでbusy信号がHIGHになる
ので、それを読み取って、「次」の曲を再生するコマンド
入れてやらないといけないみたい。
  mp3_next ();
っていう関数を使えばいいみたい。

あと、相変わらず、初期状態のボリュームがでかい。
電源オン時に、ボリューム設定は最大みたいなので、
ちゃんと絞らないとビビる。

あと、コマンドを打つにしても、マイコン側
(Arduino側)で、現在の状態が再生中なのか、
停止中のなのか、みたいなステータス管理をして
おかないと、ちゃんと処理できない。
(ステータス読み出し関数とか使ってもできる
のかなぁ?)


その他、細かいところが色々あって、いわゆるmp3
プレイヤーとして使うには、その辺をちゃんと処理
してやらないとだめみたい。

ちょっと弄っただけで簡単にすますってわけには
いかなかった。



それ以外に判ったこと。アナログ出力2ch分は、アンプ
を通して鳴らすためのもの。
内蔵の3Wアンプは1CHだけで、でも、音声信号は左右とも
混ざってる。なので、ちょっと鳴らすだけなら、アンプ
出力端子使って、簡単に済ます事ができる。

まぁ、ライブラリ使ってコマンド流して制御するのは
簡単なんだけど、曲が途中で終わって次に行っちゃう
っていうのを何とかしないと、mp3プレイヤーとして
使うのに支障があるなぁ。


https://github.com/DFRobot/DFPlayer-Mini-mp3/blob/master/DFPlayer_Mini_Mp3/examples/DFPlayer_sample/DFPlayer_sample.ino

ここに、色々使える関数名がヘッダに書かれてる。
もうちっと弄ってみたりして、癖をつかまないと
いかんかな。

もうちょっと情報仕入れようとおもったんだけど、
DFrobotのサイト、証明書の有効期限が切れてて、
接続できないんだよな。

なんかあの、中国のあやしい認証局を無効にするとか
なんとかっていうあの話かな?




https://twitter.com/mo_t_on/status/894208986999685120

セミファイナルの次はこれだったのか。



コメント ( 0 )




http://www.nicovideo.jp/watch/sm31764844

ただ3人が突っ立ってしゃべってる動画、6日目来てた。





ふと、部品とか押し込んでおいた棚の中の袋を物色
していたら、前に買ってたNucleo F303K8を発掘。



そうそう、やっぱ買ってたんだよ。探すところ間違え
てたみたいだな。

あらためて、メモリ量とか調べなおす…。
どうやら、Seeeduino Archと比べて、フラッシュも
SRAMもちょうど倍だな。

入るかなぁ?オシロのプログラム。

というわけで、まずは以前のFFTプログラムを、
コネクタだけ変えてコンパイルしてみる。



これだけで半分食ってる。結構大食い。32ビットだから、
命令1個1個がでかいんだよな。やっぱ。
これって、Thumb2命令セットとか使って、これなのか
なぁ?やっぱ、Arduinoの8ビット命令と比べて、全然
効率低いなぁ。

さて、Seeeduino Archではコンパイルできなかった
オシロのプログラム。やっぱりコネクタ定義を変えて
みて、コンパイル。



まぁ、やっぱりコンパイルは通ると思ってたのだ。
以前散々見直ししたからなぁ。

やっぱり32kBは余裕で超えちゃうけど、一応入り
きった。SRAMもなにげに3kBとか、Arduinoの時より
食ってるけど、でもまぁ、このマイコンなら余裕で
入るみたい。

あとで、これを配線してみて、5110液晶にちゃんと
表示されるかとか、確認してみよう。





そうそう。mbedといえば、Seeeduino Archにしても、
Nucleoにしても、USB経由でシリアル接続できるもの
なの?できたらラッキーなの?

ドライバの設定が悪いのかなにかよくわかってない
んだけど、オリジナルのmbed持ってないのと、
Seeeduino ArchはUSB経由でシリアル接続ができな
かったんだよな。
記憶では、USBTX、USBRXでシリアルモニタ的に通信
しようかと思うと、コンパイルエラー出ないけど、
通信ができなかった。理由わからず。

Nucleo関係の情報をちょっとあさっておく。

http://www.mbed-nucleo.net/article/442429985.html

ほう。ほうほう。

で、F303K8のピン定義を調べてみる。

https://github.com/dbestm/mbed/blob/86c139d13bbdea7b106ce5272a27346c2e848c2f/libraries/mbed/targets/hal/TARGET_STM/TARGET_STM32F3/TARGET_NUCLEO_F303K8/PinNames.h

なるほど。USBTX、USBRXとか、SERIAL_TX、SERIAL_RX
とかって名前で二重に定義されてて、これらを使えば
よさそうなんだけど、ドライバがちゃんと動かないと、
やっぱり通信はできないはずなんだよなぁ。

ちなみに、ネイティブのコネクタ(ポート名+番号)
と、Arduino形式のD13みたいな定義。両方とも定義
されてるから、Arduino形態のNucleoとか使うなら、
Arduinoの名前でやっておいたほうが、他のボードに
切り替えるときに楽だよなぁ。そっち使ったほうが
いいのかな。


http://threethree.hatenablog.com/entry/2016/11/29/140402

ほう。

https://developer.mbed.org/users/okini3939/notebook/Serial_jp/

ほう。

せっかく発掘したので、しばらくこれでちょっと
色々と弄りたい。






Aliexで注文してたmp3モジュール、DFPlayer。
もう届いた。2個頼んでた。

http://brown.ap.teacup.com/nekosan0/3302.html

早いなぁ。1週間だよ。
残念ながら、弄るのはまたあとで。

そういえば、こないだAliexで頼んでた、Arduino
Uno互換基板。届かないなぁと思ってお店に問い合わせ
したら、
「トレースできないやつだから、わからないよ。
 もうちょっと待ってて」
ってこないだ返信あったんだけど、
「荷物、返ってきたよ。再送はできないことになってる。
 なので、もしよければ、open disputeで返金の手続き
 とって、んで、よければトレースできる発送方法で
 注文しなおして」
といわれたので、注文しなおした。

open disputeは、今回みたいにモノが届いてない
場合は、2ヶ月(?)くらい経たないと返金手続きに
進めないので、とりあえず注文だけ先にしておいた。
あとからopen disputeの手続きするから、そのときに
返金してちょ、と伝えてある。





https://www.youtube.com/watch?v=AX2wgyDsJXk

例のきれいなおねいさん。
このボンド。ちょっと高いけど、紫外線LEDライト
も付いてて、カチッと固まるんだなぁ。へぇ。





https://www.youtube.com/watch?v=9ib2OkytCBs

ほほう。船のペラって、前進後退、こういう風に
デフギヤ使って、スリーブをどっち側に挿すか
っていうことで切り替えてたんだなぁ。なるほど。

ギヤシフトの仕組みは、クルマのギヤと似てるん
だな。もっと全然違う仕組みなのかと思ってた。





http://h-miyako.hatenablog.com/entry/2016/04/06/185403

こないだ見つけた、「WDOM」っていうPython用のGUI
開発環境というか、ライブラリ。

技術的には、webアプリっぽく、ブラウザベースのGUI
アプリを書くんだけど、だからといってwebアプリ用
のフレームワークとかじゃない。ローカル用のGUI
アプリを書くためのライブラリで、ただし実行環境が
ブラウザという事みたい。

TkInterとか、Qtとか、wxPythonとかの代わりに使うと
いう目的のものらしい。

面白いねぇこれ。

作ったプログラムは、ちゃんとバイナリにコンパイルして
配布するとかもできるみたい。Pythonは、すでにバイナリ
にコンパイルするための環境そろったから、ああいうのを
使ってバイナリ作るんだろうな。

まだ弄ってみてないから、詳しい事はわからないけど、
ブラウザ上で動かすっていうと、WindowsとかLinuxとか
のネイティブ動作なら可能なのに、ブラウザだとできない
こともあるだろうから、色々厄介な事はあるんだろうと
思うけど、リッチなGUIアプリを作るって言う場合に、
これは一つの面白い選択肢になる気がする。





https://twitter.com/ohnuki_tsuyoshi/status/898431308514246656

これは、

http://meigen.dancing-doll.com/kyuukyokuchoujin-r/narihara-nariyuki.html

成原博士の名言だ。





https://twitter.com/TJO_datasci/status/898387936751755264

日本のかつてのやり方が間違ってただけなんだろうな。
それをいつまでも引きずる以外の選択肢を考えられない
思考停止、と。





https://twitter.com/kumarobo/status/898141558599372800

なぜか電池が3本限定。



コメント ( 0 )