11月25日発売 書籍『Arduinoと3Dプリンタでロボットを作ろう』を出させて頂きました!

【TinyTV / ESP32】ESP32で動画を再生する!片手サイズで可愛いミニレトロテレビ(Mini RetroTV)の製作!①ブレッドボードで組んでみる

【追記】3Dプリントパーツを設計しMini RetroTVとして完成しました!

【TinyTV / ESP32】ESP32で動画再生!ミニレトロテレビ(Mini RetroTV)の製作②!

みなさん、『TinyTV』ってご存知でしょうか?
TinyTVはレトロテレビを模した形状で内蔵されている動画の再生が出来るという小さなガジェットです。

「バック・トゥ・ザ・フューチャー」や「サウスパーク」など内蔵されている動画によりいくつかのタイプが販売されています。

すごく面白そうなガジェットなので普段電子工作で使っているマイコンボードでもこのようなものが作れないかな?と前々から思っていたのですが・・・
世の中にはすごい方がいるものですね!
ESP32を使い動画再生を行うコア部分を作られている方がいました。(非常に感謝です!)

動画ファイル(mp4)からあらかじめ映像(mjpegファイル)と音声(mp3ファイル)に分離したファイルを用意しておき、ESP32の2つのコアを使いこれらを同時に処理して動画として再生させるというものです。

これならSDカードに保存した映像&音声ファイルをESP32を使って再生することができ、TinyTVのような構成のものが作れそうですよね!

そして3Dプリントパーツを使い実際に製作したものがこちらとなります。
TinyTVのように指先に乗るようなサイズにはさすがに出来ませんでしたが、入手しやすい既存パーツのみという構成で片手サイズに収まる可愛いミニレトロテレビとして製作することが出来ました!

本体に付いているスイッチ操作で動画の[進み][戻り]や赤外線リモコン(IR)での操作も出来るようにしています。
非常にコンパクトで可愛く仕上がったと思います。

上記3Dプリントパーツを使って製作したものは後日データを公開しようと考えていますが、製作は少し大変だと思うので今回はブレッドボードで組んで動かせるものを見ていきたいと思います。

ESP32で動かすミニレトロテレビ(Mini RetroTV)の製作!

このMini RetroTV製作の話に移る前に素晴らしいプロジェクトを公開してくれている方々に感謝です!
いくつか参考にさせて頂いたプロジェクトをまずご紹介しておきます。

ESP32で動画を再生するのは動作速度等の問題で難しいと思いますが、動画ファイル(mp4)からあらかじめ映像(mjpegファイル)と音声(mp3ファイル)に分離したファイルをSDカード内に用意しておきESP32の2つのコアを使い同時に再生するという、このプロジェクトのコアとなる部分を公開してくれているmoononournationさんに感謝です!

参考 Mini Retro TVAUTODESK Instructables

上記プロジェクトをベースに構成やプログラムをカスタムして製作されている方も何人かいらっしゃるようです!
自作のPCB基板を作り動画再生が出来るボードを製作されているのも面白そうですね!

参考 Mini-Tv-ESP32GitHub

参考 Open Source Mini Video PlayerGitHub

私も当初このようなキーホルダー形状のミニサイズのPCB基板を設計して製作する予定でしたが・・・

これも後々作ってみようかと考えていますが、まずブレッドボードのテストを経て3Dプリントパーツを使いTinyTVのような構成のものを製作してみました。

今回は電子工作でよく使われる入手性の良いESP32-DevKitCや既存パーツを使いブレッドボードで動かせる構成のものを見ていきたいと思います。

全体構成 & 接続

全体構成を見ていきます。

1.69インチ(240×280)TFTディスプレイ、SDカードモジュール、I2Sオーディオモジュール&スピーカーといったシンプルな構成で動かすことが出来ます。

上記サイトで公開されているスケッチをベースに3Dプリントパーツで製作する際に実装した、[進む][戻る]ボタンを取り付け動画の切り替えが出来るようにしています。
SDカード内の動画ファイルをランダムに再生するボタンも付けていますが、これは3Dプリントパーツで製作したものでは最終的に実装はしませんでした。

またIR(赤外線)リモコンを使いランダムにSDカード内の動画を再生する機能も付けています。

ESP32開発ボードはESP32-DevKitCを使いました。
最もポピュラーなESP32開発ボードなので使われている方も多いと思います。

TFTディスプレイは3Dプリントパーツで製作したミニテレビ形状に合うように角が丸まったディスプレイを使いましたが、ブレッドボードで動作させる場合は通常の角ばった形状のモジュールでも問題ありません。
制御ドライバにST7789を使ったディスプレイとなります。

全体の接続はこのようになります。

この構成で動くスケッチもダウンロードできるようにしておきます。

使用I/O端子

ディスプレイESP32-DevKitC
GNDGND
VCC3.3V
SCLGPIO18
SDAGPIO23
RESGPIO33
DCGPIO27
CSGPIO5
BLK3.3V
SDカードモジュールESP32-DevKitC
VCC(3.3V or 5V)3.3V or 5V
CSGPIO13
MOSIGPIO15
CLKGPIO14
MISOGPIO4
GNDGND
I2Sオーディオ(PAM8302)ESP32-DevKitC
A+GPIO26
A-GND
Vin3.3V
GNDGND
ボタンESP32-DevKitC
進むGPIO16
戻るGPIO17
ランダムGPIO21
IR(赤外線受光モジュール)ESP32-DevKitC
SignalGPIO22
GNDGND
VCC3.3V

スケッチの書き込み

ESP32ボードパッケージのインストール

Arduino IDEを使いスケッチの書き込みです。
ESP32ボードへの書き込みが初めてという方はESP32に対応したボードパッケージのインストールが必要となります。

普段ESP32を使われている方は問題ないと思いますが、初めての方はこちらの記事を参考にまずボードパッケージのインストールを行って下さい。

Arduino IDEでESP32やESP8266を使う時の環境設定を行う手順!

ライブラリのインストール

次に必要なライブラリのインストールです。
以下ライブラリのインストールが必要となります!

  • Adafruit GFX Library
  • JPEGDEC
  • arduino-libhelix
[Adafruit GFX Library by Adafruit]と[JPEGDEC by Larry Bank]ライブラリはArduino IDEのライブラリマネージャーからインストール出来ます。

最後に[arduino-libhelix]ライブラリです。
以下GitHubページからダウンロードしてインストールします。

参考 pschatzmann/arduino-libhelixGitHub

GitHubからダウンロードしたライブライのZIPファイルを、[スケッチ]→[ライブラリをインクルード]→[ZIP形式のライブラリをインストール]から行います。

ライブラリのインストールが完了したらESP32-DevKitCにスケッチを書き込みます。
[ボード]設定は[ESP32 Dev Module]です。

動画ファイルの用意

再生させたい動画ファイル(mp4)からあらかじめ映像(mjpeg)と音声(mp3)を分離した2つのファイルを用意しておく必要があります!

FFmpegというフリーソフトを使い解像度やビットレートなどを設定して動画ファイルからmjpeg/mp3ファイルの抽出を行いますが・・・少し面倒な作業となるので、上記ダウンロードしたファイル内にある[SDCards]フォルダ内に私がテストで使っていた既に変換済みのファイルをいくつか入れています。

FAT32形式でフォーマットしたSDカード内にコピーするだけで再生出来るので、動作確認の際にお使い下さい!

動作確認

上記接続でダウンロードしたスケッチを書き込み、mjpeg/mp3ファイルが入ったSDカードをセットして起動すると動画が順次再生されます。
お疲れ様でした!

[進む][戻る]スイッチで動画を切り替えたり、[ランダム]再生も出来ます。
またIR受光モジュールがテレビやエアコンなどリモコンからの何かしらIR信号を受信するとランダムで動画が切り替わります。

製作したMini RetroTVでは普段使っているテレビのリモコンの各チャンネル(1~10)に特定の動画を割り当ててよりテレビっぽくさせたのですが、使用するリモコンによりIRコードが異なるのでこちらではランダム再生にさせています。

そのようなカスタムをしてみたいという方は、こちらの記事を参考にIRコードを取得すれば比較的簡単にスケッチ修正は出来ると思います。

【Arduino入門編㉗】赤外線(IR)モジュールを使いリモコンの信号を読み取り送受信する方法!

使用したパーツ一覧

今回ブレッドボードで動かす際に使用したパーツ一覧です。
基本的に3Dプリントパーツを使い完成させたものとは使用したESP32ボードが異なるだけです。

ESP32開発ボード(ESP32-DevKitC)

ESP32開発ボードはESP32-DevKitCを使いました。
最もポピュラーなESP32開発ボードなので使われている方多いと思います。

はじめてのESP32開発ボードのおすすめ!『ESP-WROOM-32D開発ボード/ESP32-DevKitC-32D』の基本的な使い方!

また、ESP32-DevKitCは幅広なボードなので6列タイプのブレッドボードがあると便利で組みやすいと思います。

他のESP32ボードでもいくつか動作確認し、3Dプリントパーツで製作したmini RetroTVではLolin D32というボードを使いました。
幅狭なボードでリポバッテリーからの駆動も出来る便利なESP32開発ボードです。

【電子工作】技適取得済みESP32開発ボード『Lolin D32』を使ってみる!

ディスプレイ(1.69inch TFT 240×280 ST7789)

ディスプレイは1.69インチ(解像度240×280)のSPI制御のST7789ドライバタイプのものを使います。

上記ダウンロードしたスケッチを使われる場合はこのディスプレイに合わせているので、他のディスプレイで動作させる場合はスケッチの変更や用意する映像ファイルの解像度など異なってくるので変更が必要となります!

他の大きなディスプレイや制御ドライバが異なるものでも動作させることが出来ましたが、こちらでは3Dプリントパーツで製作したものに合わせ解像度240×280のST7789ドライバで制御するタイプのディスプレイを選択して下さい。

SDカードモジュール

SDカードモジュールは、こちらも3Dプリンタで製作したものに合わせミニタイプのものを使いました。
駆動電圧が3.3Vタイプのものです。

SDカードモジュールは様々なタイプのものが販売されていますが、5V駆動タイプのSDカードモジュールを使われる場合は上記接続図にあるSDカードモジュール部分のVCCをESP32-DevKitCの5V端子に接続して下さい!

I2Sオーディオアンプ(PAM8302) & スピーカー

I2SオーディオモジュールはPAM8302を使いました。
シングルチャンネルのD級パワーアンプモジュールです。
最大2.5Wまでの出力が可能なので使用するスピーカーの選択肢は広いと思います。

ブレッドボードでの動作ではこのような小さな(1W前後)スピーカーがあれば問題ないと思います。

3Dプリンタで製作したものに合わせ、今回こちらの2Wタイプのものを使いました。
音質がかなり向上します。

IR受光モジュール

IR(赤外線)の受光モジュールはこちらを使いました。
テレビやエアコンなどリモコンのIR信号に反応して動画をランダムに切り替えることが出来ます。

タクトスイッチ

タクトスイッチはブレッドボードでのテストでは6mmや12mmサイズのものが使いやすいと思います。

こちらは6mmタイプのものですが、セットものを1つ持っておくと工作には便利です!

FFmpegを使ったファイル変換

動作確認が出来る変換済みの映像(mjpeg)と音声(mp3)ファイルはスケッチとともに添付したのですが、自身で用意した動画を再生させたい場合はFFmpegというフリーソフトを使いmp4ファイルからmjpeg/mp3ファイルを抽出(ファイル変換)する必要があります!
必要な部分のみ簡単に見ておきます。

ダウンロードしたスケッチの先頭部分を見て頂くとコメントアウトした2行のコードがあります。
FFmpegを使い映像及び音声ファイル変換の際に必要となります。
FFmpegを使い今回使用した構成で再生する際の映像&音声ファイル変換の際に使用するターミナルに打ち込むコマンドです。

これをターミナルで打ち込み、FFmpegを使ってmjpegファイル/mp3ファイルの抽出を行います。

  • ffmpeg -i XXXX.mp4 -vf “fps=24,scale=-1:240:flags=lanczos,crop=288:in_h:(in_w-288)/2:0” -q:v 11 AAAA.mjpeg

  • ffmpeg -i XXXX.mp4 -ar 44100 -ac 1 -ab 32k -filter:a loudnorm -filter:a “volume=-5dB” AAAA.mp3

[XXXX.mp4]は動画の元ファイルで、[AAAA.mjpeg][AAAA.mp3]は抽出後の映像と音声ファイルとなります。
AAAAは任意の文字で問題ないのですが、映像と音声をセットで使うので一致させておく必要があります。

FFmpegの使い方は詳しくは割愛しますが、こちらの動画が参考になると思います。
自作基板でMini TVを製作されている方の動画です!

【追記】Mini RetroTV 完成しました!

3Dプリントパーツを設計し可愛く仕上げることが出来ました!

ESP32開発ボードはESP32-DevKitCからLolin D32に変更しましたが、その他のパーツは本記事でご紹介したブレッドボードで組んだものとほぼ同じ構成で組めるので、興味ある方はこちらの記事も見て頂ければと思います。

【TinyTV / ESP32】ESP32で動画再生!ミニレトロテレビ(Mini RetroTV)の製作②!

最後に!

ESP32で動画の再生が出来る面白いプロジェクトですが、ほんと先人の方々に感謝ですね!

比較的入手しやすいパーツ構成で組めるので、興味ある方はまずブレッドボードで試してみるのが面白いと思います。

3Dプリントパーツを使いほぼ今回のブレッドボードで組んだものと同じ構成で製作したMini RetroTVも可愛く満足できる出来になったので、あらためて詳しくブログで書ければと思っています。

電子工作を始めた頃はコンパイルすら通す事が出来なかった先人の方々のこのような面白いプロジェクトも少しずつですが理解や動かす事が出来るようになってきたので、また別のプロジェクトも含めご紹介出来ればと思います。

・・・あっ、そうそう!
TINYシリーズのアーケードゲーム版?
TINY ARCADEもESP32で動かす事が出来るので、興味ある方はこちらの記事も見て頂ければと思います。

【電子工作 / ESP32】ESP32で動かすアーケードゲームエミュレーター『Galagino』。TINY ARCAD風ケースを3Dプリンタで製作しました!

1 COMMENT

コメントを残す