3 / 24712345...最後 »

音楽の再生には何bit必要?

ESP32のDACに音を出力する場合、8bitというのはどんなもんなんだろう。 bit数が足りないために音声が、まともに聞こえないというのでは困るなぁと思い、実験してみた。

pythonのwavライブラリを使うとwavファイルの操作ができる。これを使って、wavファイルのデータを指定したbit数まで落とすプログラムを作成した。処理に結構時間が、かかるので10秒だけ出力する。

結果、私のPCの再生環境では8bitと12bitの聞き分けができないことが判明。8bitからbit数を落として行ってもホワイトノイズが増えていくだけで、あまり問題無く聞ける。1bitだとノイズがかなり大きいが、それでも曲は判別可能。予想外の結果だった。

変換した結果を以下に示す。元の曲は魔王魂さんのフリー歌もの素材「桜日和」

1bitの音源:(音量注意)

続きを読む… »

ESP32のI2S+DAC出力成功

ESP32_MP3_Decoderのプログラムを調べ、遂にはESP32のI2S+DACから、音声を出力することができた。嬉しい。

Tw_Mhageさんの記事:ESP32でBluetoothイヤホンを作ってみた – Qiitaに刺激を受け、ESP-IDF添付のサンプルプログラムを改造し、Bluetooth Speakerのデモプログラムを作成、公開している。Bluetoothの中身に疎いので、最初苦戦したが、iPhoneに接続し音が出せるようになった。回路は、ものすごく簡単なので、ESP32のモジュールを持っている人には、一度試してもらいたい。

ESP32_MP3_Decorderを動かしてみた。

ESP32のI2Sで音声出力の実験をしているが、なかなかうまくいかない。サンプルプログラムを元にプログラミング・ガイドを見ながらDACに音声を出力させようとしているのだが、うまくいかない。部分的にちゃんと波形は出力されているのだが、うまくつながらない。周期も変。

資料も少ないし、動いたという例も無いと思っていたところESP32_MP3_Decoderの存在を知る。試してみると、いろいろ問題は、ありながら、断続的に音が出た。MP3のデコードも自前でやっているらしい。


続きを読む… »

intel hexファイルのマージ

PIC32MXのプログラムを開発中、2つのintel hexファイル(bootloaderとfirmware本体)を1度に書き込みたいと思ったのだが、pic32progではできない。objcopyあたりでmergeできるか調べるが,無理そう。hexファイルのmergeならpythonで自分で書いても簡単そうなので書き始めるが、念のため python + intel hexで検索したら、ライブラリ、その名もintelhexがあった。ドキュメントによるとmerge機能まである。サンプルを見ながらプログラムを書き、あっさり動作。凄いね。世の中は。

import sys
from intelhex import IntelHex

usage = "%s hex_infile1 hex_infile2 hex_outfile" % sys.argv[0]
if len(sys.argv) != 4:
    print(usage)
    sys.exit(1)

infile1, infile2,outfile  = sys.argv[1:]

ih1 = IntelHex(infile1)
ih2 = IntelHex(infile2)
ih1.merge(ih2, overlap='ignore')
ih1.write_hex_file(outfile)

ドキュメントによると、ライブラリにhexmerge.pyというユーティリティが付属し、ライブラリと一緒にインストールされるとあったが、わたしの環境では見付らない。これが使えれば、プログラムを書く必要すら無い。

ゼルダに夢中?

このところ、すっとswitchでゼルダをやっている。広大な地図、膨大なギミック、キャラクターの細かい動きに、どれくらいのマンパワーを投入したのだろうかとクラクラしてしまう。大学生のころ読んだ話、大型計算機のOS開発には4000人年とかかかるんだぜ、を思い出す。

一人でやっていても寂しいので、youtubeで人のプレイ動画などをみつつ楽しむ。こちらも楽しい。

秋月のESP32-DevKitC購入

ESP32の実験を少しづつやっている。最初に買った。昨年末に買ったdoitのESP32開発ボードは、eepromに変なデータが書き込まれてしまったのか、WiFi.hをincludeしただけでabortするようになってしまった。それで自作ボードで8bitパラレル接続のLCDの実験を行ったのだが、他のデバイス用の配線が間違っていることが判明。それなら秋月のESP32-DevKitCを使った方が実験しやすそうだということで購入した。

doitの基板と比べると端子が多い。SDIO系の端子もでているのだろう。あと秋月の基板の抵抗の小ささに驚く。最初みたとき、実装されていないのかと思ってしまった。

ESP32開発ボード比較 ( ←秋月、doit→ )

Nintendo Switch購入

Nintendo Switchを購入した。スプラトゥーン2があるので、いずれは買うつもりだったが、ネットで「ゼルダの伝説」絶賛の記事をみるにつけ、すぐに買いたくなってきたが、定価で販売しているところがない。なんどか調べている内、アマゾンで定価販売があったので「ゼルダ」といっしょに購入、今日届いた。

スプラトゥーンは相変わらずやっているので、なかなか忙しい。

ESP8266+OLEDでRSS表示

HSES-NODEのサンプルプログラムにRSS表示のプログラムを追加することは、前々から予定していた。RSS表示自体はHSES-LCD24で既にやっていて新味が無いので後回しになっていたのだが、やっと完成した。実際に動かして見ると案外面白い。OLEDなので、表示が鮮明。LCDより、はるかに見やすい。表示される文字数が少なく、スクロールされていくので、見続けないと内容がわからないため、つい見続けてしまう。あとサイズが小さいのも魅力的。

プログラムとしては、まずHumblesoft_SSD1306ライブラリに文字をスクロール表示する機能(ScrollTextクラス)を追加。HSES-LCD24用のRssDispのソースプログラムを持ってきて、ちょっと修正してやったら、すぐにRSSが表示された。 それに日付・時刻等を表示する機能を追加し、さらに画面のレイアウトを変更する機能もつけた。スイッチ(IO0)を押すとレイアウトが切り替わり、時刻が大きく表示されたり、RSSが大きく表示されたりする。

ESP32で動画表示

ESP32に接続した320×240のTFT LCDにネットワーク経由でデータを転送し動画を表示することができた。表示速度は、240×160だと10fps, 240×135で15fps, 120×90なら30fps以上が可能。あと2倍ぐらい高速化の余地はありそう。

ESP32側のプログラムはArduino環境で開発。udpパケットを受信し、データをそのままLCDに書き込む。簡単なフロー制御も実装している。tcpではなく、udpを使用したのは、フロー制御を自前でやりたかったから。通信エラーでパケット欠落が起きても再送などして欲しくなかったから。あとudpだと自然にパケット単位で処理することになり、プログラムがわかりやすい。tcpのストリームにパケットの切り出し処理が面倒。やってみた結果,フロー制御でいろいろ実験できて面白かった半面、いろんな通信環境にちゃんと対応できているかどうか不安。そのうちtcpでも試してみたい。

動画データは、既存の動画ファイルをffmpegで専用フォーマットに変換したものを使用。ファイルの中には RGB各5,6,5bitづつの16bit/pixelのTFT LCDのフォーマットで画像データが収められている。これをpythonのプログラムでudpパケットで送信している。


続きを読む… »

ESP32のGPIOのバグ

ESP32でパラレル接続のTFT LCDに表示を行おうと、既存のライブラリを参考にプログラムを書き、大体動くようになったのだが、なんか変。変な点が描画される。(右上の写真参照)

怪しいところはたくさんある。自分のコードも怪しいし、LCDは使用実績はあるものの、結構古いものなので怪しいし、esp32-arduinoもesp-idfも日々更新されていて怪しい。電源ラインも怪しい。オシロスコープを駆使し、しつこく調べると WRパルスが出ているタイミングでCSがHighになっている状況を発見。WR信号もCS信号もGPIOで操作している。これは、プログラムのミスではありえない。
続きを読む… »

Bad Apple on ESP8266 + OLED

HSES-NODE-OLEDでBad Apple(影絵)を再生できた… って、結構前に出来ていたのだけれど、Blogに記事を書くのが遅くなってしまった。画像データは ffmpegで1フレームづつBMPファイルに変換し、PCからpythonのプログラムでudpパケットにして送信している。詳しい話はQiitaに書いた。ソースコードはGitHubで公開している。
続きを読む… »

マグネット付きスペーサ

AliExpressでマグネット付きスペーサを購入。M3で高さが8-10、20個で$3.99。1$133円として450円。1個22円。

高さ8-10の意味が不明。 8~10mmの範囲ということか。高さがバラバラだったら使い道が限定される。ちなみに計ったら高さ8mmぐらいで、そろっていた。磁力は弱め。国産のケガをしそうなネオジム磁石と比べれば、非力、安全。でも基板程度を固定するには十分使えそう。

試しに、ユニバーサル基板の足に使ってみた。普通のスペーサーを使うより、当然だが、強く固定されて割と良い感じ。

AliExpressへ返品

AliExpressでチョイチョイ買い物をしている。品質に疑問があるものや、発送してこないものも結構あるが、とにかく安いのでチョイチョイ注文している。すると忘れたころに届く。

部品の補充で2.4インチLCD10枚注文したところ、届いたのは2.8インチ10枚。これを上手く使う方法を一瞬検討したが、かなりの手間だし、相手側のミスを、こちらが手間かけて処理するというのも変な話だ。そこで返品&全額返金でOpen Disputeする。すぐに相手側からメッセージが届く。2.4インチを送りなおすから、返品してくれ。送料はPayPalで払う、あとDisputeは取り消してください、とのこと。返品しなきゃいけなくなった。

日本郵便のHPでEMSの費用を調べると、案外安い。500gで深センまでだと 1,560円。2,3日で届くらしい。EMSで返品する方法 : Re:BINOを読みつつ、EMSの伝票を郵便局でもらい、記入。インボイスも作成して荷物とともに郵便局に持参、無事発送できた。

EMSの追跡情報によると、物は現地に届いているらしい。 PayPalのメールアドレスと送料は連絡したが、まだ振り込まれていない。2.4インチのLCDもまだ届かない。さて、どうなることか。

はんだごて FX-888D 購入

FX888Dを購入した。 これまではeBayで購入したSMD Rework Stationを使用していたのだが、なんか中央あたりのプラスティック製のネジが頻繁に外れるようになってしまった。締めなおせば固定できるのだが、強く締めると外れてしまう。サイズが合っていないのだろうか? コテが温まり、さぁはんだ付けを始めようかと持った時にポロっと外れたりするので、大いに気が削がれる。使い続けることも可能だが、外れるたびにイラつくし、思ったほどHot Air Gunの出番も少ないので、新たにはんだごてを買うことにした。

続きを読む… »

ESP32を試す(2)

実験用の部品が届いたので、ESP32の実験を続ける。で、わかってきたのは、Arduinoのライブラリが開発途上であること。例えばWebServerが無い。WiFiServerは、あるが、これはtcpのサーバーで、ESP8266WebServerにある便利な機能(arg()とか?)が無い。OTAも無い。

arduino-esp32のgithubを見ると頻繁に更新されている。機能が充実し安定するには時間がかかりそうだ。

ESP32は、プログラム書込みは通信速度が921600baudで、なかなか高速。しかし書込みモードへの切り替えがうまくいかないことが多い。数回試してやっと成功する感じ。最初、電源環境でも悪いのかと思っていたが、やっぱり書き込み回路が悪いのではないかと対策を試みたところ、失敗がなくなった。対策は EN(Reset)端子とGND間に0.1μFのコンデンサを追加するだけ。理由については、Qiitaに書いた。

3 / 24712345...最後 »