MAKER :陳亮
这款迷你的复古电视机非常的小巧可爱,它会不会成为你的桌摆新宠呢!它无法接收模拟电视广播信号,但是它可以通过微型 SD 卡播放录像带。你可以多准备几套 SD 卡来播放你喜欢的节目。
趣无尽
这个项目是基于我之前的《用 ESP32 搭建一台视频播放器》基础上加以改进的,更多的搭建的基础细节可以点击链接查看!https://www.instructables.com/Play-Video-With-ESP32/
搭建思路
1、CRT 属性
这款复古的电视机带有阴极射线管 (CRT) 的显示器。它是一个大的真空玻璃管,将电子束发射到磷光屏上以显示图像。
因此,它使这台复古电视机具有一些特殊的属性:纵横比像正方形(但实际上是圆形),圆角的显示屏和厚而笨重的外壳。
最后,我选择了一个 7:6 的圆角 LCD 来打造这款迷你复古电视机。
而厚而笨重的外壳,可以把所有复杂的组件都挤进去。更多细节,可点击链接查看。https://en.wikipedia.org/wiki/Cathode-ray_tube
2、模拟电视格式的标准
现实中许多模拟电视视频的标准,我选择一个众所周知的数字化格式(VCD)标准作为参考。VCD NTSC 格式为 240p(240 条水平线),每秒约 30 帧 (fps)。所以这个项目是以 30 fps 播放 240p 视频。
广播音频采样率为 44.1 或 48 KHz 单声道,由于网络上的大多数视频源都是 44.1 KHz,所以我选择了 44.1 KHz 以避免不必要的采样率转换失真。
更多细节,可点击链接查看。
https://en.wikipedia.org/wiki/Video_CD
https://www.thebroadcastbridge.com/content/entry/11502/broadcast-for-it-part-15-digital-audio
设计外壳
如图所示,LCD 上的灰色圆角屏幕框架使其看起来更像 CRT 屏幕。
前板右侧是 MicroSD 卡插槽,模拟录像带插槽。前板没有空间安装扬声器,所以我将全频音频扬声器放在底部。
ESP32 开发板安装在顶部,左侧为 LCD 分线预留空间,后板有 USB 端口和电源开关。
复古电视标志性的底部支撑,项目中设计了 3 条内置的腿来支撑电视。由于受限于 3D 打印 的 45 度法则,不能太长。
设计稿件和3D打印文件请在项目文件库中下载
https://make.quwj.com/project/443
Fusion 360:https://a360.co/3zdd511
https://www.thingiverse.com/thing:5400343
软件部分
1、软件库
Arduino IDE
请下载并安装 Arduino IDE:
https://www.arduino.cc/en/main/software
ESP32 支持
请按照 Arduino-ESP32 安装指南添加 ESP32 支持。
https://docs.espressif.com/projects/arduino-esp32/en/latest/installing.html
Arduino_GFX 库
通过选择工具->菜单->管理器库,打开 Arduino IDE 库管理器。搜索“适用于各种显示器的 GFX ”,然后安装。
有关 Arduino_GFX 的更多信息,请点击链接查看。
https://www.instructables.com/ArduinoGFX/
JPEGDEC
通过选择工具->菜单->管理器库,打开 Arduino IDE 库管理器。搜索“JPEGDEC”并安装。
arduino-libhelix
该项目使用 Helix 解码器播放 AAC 或 MP3 音频。下载 arduino-libhelix 库并将其导入至 Arduino IDE:
https://github.com/pschatzmann/arduino-libhelix.git
关于如何将库导入 Arduino IDE,请点击链接查看。
https://docs.arduino.cc/software/ide-v1/tutorials/installing-libraries
2、软件设计
ESP32 是双内核,可以在 FreeRTOS 上运行,因此它可以同时运行多个任务。
https://www.freertos.org/
播放视频对于微控制器来说是比较重的负载,因此要很好地分配好它的处理能力。经过后续测试,负载最重的是 MJPEG 解码,所以这个任务专门用 Core 0 来解决。
所有其他进程都在 Core 1 上运行,其中包括:读取音频文件、解码音频、将解码后的音频排队到 I2S、读取视频文件和绘制解码视频显示。
3、烧录程序
该程序可在连接组件之前就上传。因此,你可以检查它是否适用于每个组件连接。整个过程为:
在 GitHub 下载 MiniTV 源代码:https://github.com/moononournation/MiniTV.git
在 Arduino IDE 中打开 MJPEG_2task_Audio_1task.ino,连接 TTGO T7 开发板,选择工具菜单->开发板->ESP32 Arduino->ESP32 开发模块,选择工具菜单-> PSRAM ->禁用,选择工具菜单->端口->[选择端口开发板连接],按上传按钮,最后等待编译上传成功
4、转换视频
准备好要播放的视频,然后转换为 MJPEG 视频和 AAC 音频。脚本中将源视频假设为“input.mp4”:
ffmpeg -i input.mp4 -vf "fps=30,scale=-1:240:flags=lanczos,crop=288:in_h:(in_w-288)/2:0" -q:v 11 288_30fps.mjpeg
ffmpeg -i input.mp4 -ar 44100 -ac 1 -ab 24k -filter:a loudnorm -filter:a "volume=-5dB" 44100.aac
FFmpeg:https://ffmpeg.org/
注意的点:
显示分辨率为 280 x 240,因为 MJPEG 格式偏爱被 16 整除的尺寸,因此可扩展到 288 x 240。你可以通过更改“-5dB”值来调整音量。
MicroSD 卡的处理
1、MicroSD 卡的说明
之前的帖子中已经对 SD 卡在 ESP32 运行的速度进行测试,ESP32 读取 SD 卡的速度只能达到每秒 2MB 左右。MicroSD 被评为四种级,可以满足要求。更快的卡无助于提高性能。
具体可查看另一个项目。
https://www.instructables.com/Select-SD-Interface-for-ESP32/
2、SD 卡连接
此前,我发现 ESP32 SD_MMC 4-bit 模式读取 SD 卡数据最快。但是,使用最新的 Arduino-ESP32 版本 SD_MMC 库变得非常不稳定,无法与大多数 SD 卡兼容。所以这个项目是回到标准的 Arduino 可以兼容 SD 库。
调整音频增益电平设置(可选)
24 mm 全频音频扬声器的额定功率为 2-4W,MAX98357 音频板可支持高达 3.2W 的输出,因此扬声器能够输出音频板的最大增益设置。但我们要合理设置电视的音量,我认为设置为 3dB 增益水平会更好。
功率分配器
TTGO T7开发板可以通过 USB 供电,也可以连接锂电池作为不插电的电源,所以其他组件都可以从开发板上获取电源。
但是开发板只有一个 3v3 排针,所以它需要一个小插针分离器来制作电源插针。
电池供电(可选)
TTGO T7 开发板可内置锂电池座为 Lipo 充电。因此你可以在电视机中添加一个可安装在开发板下方的 Lipo。理论上,一个 600mAh 的 Lipo 可以使用大约 1-2 小时。上面的视频显示电池可以播放 44 分钟没有任何问题。
Micro SD 卡插入开关(可选)
增加 Micro SD 卡插入开关,需要一些焊接技巧。
大多数 micro SD 卡插槽分线板不能断开插入检测开关,因此你需要手动断开。然后将其连接到 TTGO T7 电源开关。这样一旦拔插 micro SD 卡,电视机会在你取出卡时自动开机或关机。
上个世纪,当我们将租回来碟片放入到录像机/播放器(VCR)时,就可以在沙发上看电影了。所以我设计了这个可选的 Micro SD 卡插入开关。体会一把当年的感受(暴露年纪)。
连接方式
趣无尽
如图所示,连接方式。
TTGO T7 ESP32 ST7789 LCD MAX98357 Audio SD Card Slot
============= ========== ============== ============
VCC -> VCC -> VCC -> VCC
GND -> GND -> GND -> GND
GPIO 4 -> MISO
GPIO 5 -> CS
GPIO 13 -> CS
GPIO 14 -> SCK
GPIO 15 -> MOSI
GPIO 18 -> CLK
GPIO 22 -> BLK
GPIO 23 -> SDA
GPIO 25 -> BCLK/SCLK
GPIO 26 -> LRCLK/LRCK
GPIO 27 -> DC
GPIO 32 -> DOUT
GPIO 33 -> RST
如果你想尝试使用 SD_MMC,SD 卡 MISO 需要连接到 GPIO2,但请记住在上传程序时断开 GPIO2。
如果音频输出噪音太大,可能是 3v3 电源对于 MAX98357 不够用,可以考虑将 MAX98357 电源改为 5v。
具体可参考:
https://github.com/LilyGO/ESP32-MINI-32-V1.3
组装
如图所示,内部的线十分的复杂。这个项目不仅模仿了复古电视的外表,还模仿了内部笨拙的布线方式。
那么可想而知,这台复工电视机的重量也不轻了。这台 1.69 英寸迷你电视机重 78g。按比例,25 英寸的电视机重为 252 公斤。它比真正的 CRT 电视重得多!而且真正的 CRT 电视没有内置电池。
Apple iMac Flower Power 系列的 CRT 设备的外观我非常的喜欢,所以将这些花卉图案的复制到我的迷你复古电视机上。是不是非常的养眼呢!
项目所用的代码在本项目文件库中可以下载:
https://make.quwj.com/project/443