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というユーティリティが付属し、ライブラリと一緒にインストールされるとあったが、わたしの環境では見付らない。これが使えれば、プログラムを書く必要すら無い。

秋月のESP32-DevKitC購入

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

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

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

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パケットで送信している。


続きを読む… »

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ぐらいで、そろっていた。磁力は弱め。国産のケガをしそうなネオジム磁石と比べれば、非力、安全。でも基板程度を固定するには十分使えそう。

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

はんだごて 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に書いた。

ESP-WROOM-32を試す

秋月電子でESP-WROOM-32モジュールが発売されたのに刺激を受け、昨年末購入したdoit ESP32開発ボードを動かしてみる。これにはESP-WROOM-32が搭載されている。

いろいろ情報を集めると、Arduinoが楽そうなのでarduino-esp32のページのとおり、インストール作業をすすめると順調に完了。
開発ボードにUSBケーブルを接続しても電源は入るがシリアルポートとして認識されなくて焦るが、USBケーブルの不良のようで、交換したら認識された。

まず、ライブラリのサンプルからWiFiScanを試すと、あっさり動いた。これだけでは、何なので開発ボード上のLEDを点滅させてやろうとするが、どのポートに接続されているかわからない。回路図を探すが見つからない。虱潰しに試してIO2に接続されていることが判明、やっとLチカできた。

これから先は、もうちょっと回路が無いと試せないので、今日はここで終わり。ESP-WROOM-32は-02から150円しか高くなっていない。でも増えたIO端子の活用方法のアイデアが、まだ無い。でも増えたROM(500K->1M),RAM(50k->300k)だけでも魅力的かもしれない。 

WeatherStationDemoをHSES-NODE-OLEDで動かした。

前回ESP8266 Weather Station ColorをHSES-LCD24で動かした際、ESP8266 Weather Stationライブラリをインストールしたのだが、そのexampleにOLED用のプログラムがあったのでHSES-NODE-OLEDで動かしてみた。インストール方法はこちら

表示される情報は前回のcolorとほぼ同じ、月齢が無いぐらい。画面が小さいので、何秒ごとかに切り替えながら表示される。動作の様子の動画を下に置く。

画面切り替えは、見栄えが良いので、デモ用としてはありがたい。でも実用上はどうなんだろう。欲しい情報が得られるまで何秒か待たなければいけないのは不満。

スケッチの例には WetherStationDemo|Extended|DSTと似たようなものが3本ある。中身を見ると動作はほぼおなじで、表示の仕方、画面の枚数などが違う程度。あとThingSpeakやセンサーをつかって、室温・湿度なども表示させているようだ。

ESP8266 Weather Station ColorをHSES-LCD24で動かした

ESP8266 Weather Station Colorは スイスの Daniel Eichhorn氏がblogで公開されているプログラム。wundergroundから気象情報を取得し、天気、気温、3日分の天気予報、月齢などを表示する。GitHubで公開されている。

カッコよさそうなプログラムなのでHSES-LCD24で動かそうと試してみたところ、あっさり動いた。WundergroundのAPI-keyの取得方法が若干わかりにくい程度。インストール方法はこちらにまとめておいた。

動かしてみると、やっぱりカッコいい。私の環境ではディスプレイに映り込むのが嫌で、部屋のカーテンを閉め切っているので天気がわかり難いのだが、これで天気がわかる。 外気温は室温よりも変化が大きくて面白い。外気温をスマホの天気状況と見比べているが、大体合っているようだ。3日分の天気予報も、なんか天気をイメージできていい感じだ。

技術的には、Wunderground.comから取得できる気象情報が興味深い。ここから気温データを取ってきて、保存し、グラフ表示とかさせたい。ここではIcon setsも提供されている。このプログラムでもてっきり、それが表示されていると思っていたのだが、ソースを見たら作者のサイトからbmpファイルをダウンロードしているようだ。

HSES-NODE-OLED発売

昨日からHSES-NODE-OLEDスイッチサイエンスから購入可能になった。物はOMMF寸前に上がって来ていたのですが、年末年始のドタバタやHP等の準備で時間がかかってしまった。

HSES-NODE-OLEDのセールスポイントは2つある。1つはGrove Wrapperで固定できるESP8266モジュールであるということ。もう1つは0.96インチSPI接続128x64dot OLEDが付属すること。

Grove Wrapperがあれば、対応した形状の小型基板を、いろんな方法で固定することができる。レゴブロックと組み合わせたり、ネジ止めできたりできるのだが、特に便利だと思うのはGrove Wrapperに磁石をネジ止めしたもの。M3皿ネジ穴付きネオジム磁石を購入し、自分で組み立てた。これを使うと割と強力に固定できるし、簡単に取り外しもできる。身の周りのいろんなところに簡単に設置できる。現在国内でGrove Wrapperを販売しているところは無く、直接SeeedStudioから買うしか入手方法がないようなので、HSES-NODE-OLEDには1個付属させている。ご活用頂きたい。

OLEDは、2.4インチのカラーLCDと比べるとモノクロだし画素数も少ないが、表示の明瞭度、視野角の広さが魅力的だ。それに小さいというところも良い。この手のOLEDにはI2C接続のものとSPI接続のものがあるが、更新速度にこだわりSPI接続のものを使用した。

基板上のピンソケットにはESP-WROOM-02の全I/Oが接続されている。100milピッチに乗っているので市販のユニバーサル基板が使用可能。個人的には、これで色んなハードウェアの実験に使っていきたい。

OLED向けに日本語表示に対応させたライブラリHumblesoft_SSD1306を公開している。また、サンプルプログラム集HSES_NODE_OLED_Sample_programsも、まだプログラムは2つだけだが公開している。

今後、ライブラリの機能拡張、サンプルプログラムの追加を行っていく予定なので、是非一度 HSES-NODE-OLEDを試していただきたい。

ESP8266 PlaneSpotterColorを動かした

ESP8266 PlaneSpotterColorはESP8266で旅客機の位置情報を取得し、小型カラー液晶に表示するプログラム。なんかHSES-LCD24で簡単に動きそうなので試してみた。

続きを読む… »

秋月電子のJpegカメラをESP8266に接続

シリアルJPEGカメラをesp8266につないでみようとaliExpressを物色していた私にとって、秋月の新製品TTLシリアルJPEGカメラは驚きの安さ、1,980円(税込)だ。同等品は国内だと3~4千円するし、AliExpressでも$16ぐらいする。驚きというのは言い過ぎかもしれないが半額に近い。ということで、さっそく注文。届いたいのでHSES-LCD24に繋いでみる。

続きを読む… »