This is a small LCOS projector driven by an ESP32S3, with a resolution of 320*240.
I previously open-sourced a small projector using an LCD screen, but the effect wasn't good. A friend recently recommended this stock optical engine, and the effect is much better than the previous LCD screen version.
The LCOS modules for this project were found on Xianyu (a second-hand marketplace), 5 for 50 yuan. Those who want to replicate it should buy the optical engine as soon as possible, as the quantity of this LCOS module on Xianyu seems to be limited. (
Packaging is shameful! Don't package!
Packaging is shameful! Don't package!
Packaging is shameful! Don't package!)
[Xianyu] https://m.tb.cn/h.5PMdZ6i?tk=rIbQWe9RBtp CZ3457 "Come grab a bargain! [Mini projector LED light head, LCOS model, see the last picture, the light source is exceptionally bright]" Click the link to open
Xianyu. The optical engine is gone. This project cannot be replicated
, please do not make any boards.
The LCOS model is Lijing Optoelectronics HX7033,
driven by the Arduino_GFX library (https://github.com/moononournation/Arduino_GFX).
The driving method is I2C+RGB565
. Main controller: ESP32S3 N8R8 (S3-WROOM-1U-N8R8, which is the version without PCB antenna).
I2S amplifier: MAX98357
. 3.3V step-down: TLV62569DBVR.
10V boost: MT3608.
LED Constant Current: PAM2863ECR
Serial Port: CH340K
WARNING ⚠: A heatsink must be connected before the optical engine module is lit; otherwise, powering on for more than 3 seconds may burn out the LED chips.
WARNING ⚠: A heatsink must be connected before the optical engine module is lit; otherwise, powering on for more than 3 seconds may burn out the LED chips.
WARNING ⚠: A heatsink must be connected before the optical engine module is lit; otherwise, powering on for more than 3 seconds may burn out the LED chips
. Please read the document carefully! Questions already answered in the document will not be answered!
Please read the document carefully! Questions already answered in the document will not be answered
! Please read the document carefully! Questions already answered in the document will not be answered!
If your computer displays a message indicating excessive USB port current during firmware flashing, please connect the charging adapter to the OTG port and then connect the USB port to the computer.
Projection distance:
To project the entire area of an A4 sheet of paper, the distance is approximately 60cm.
The minimum projection distance is approximately 29cm (with the focus ring turned to the far left).
The maximum projection distance should be between 1m and 1.5m (with the focus ring turned to the far right). At this distance, the projected area will be slightly larger than the A3 size (29.7cm × 42.0cm), but the brightness will be lower.
For secondary development, please note:
The SD card slot is only compatible with SDMMC 1-bit mode. If you do not know how to use it, please refer to the example file in the attachment.
The R10 resistor can be replaced with any resistance value between 100-500K.
The current light source current is currently set to 760mA, and the brightness is acceptable. If you want to increase the current, you can replace it with the R52 resistor. The resistance value calculation formula is: R = 0.1 / backlight current (A).
Component purchase:
The BOM (Bill of Materials) has been matched with the C-number from LCSC's online store. You can also purchase them individually from Taobao.
The following items are not available in the online store and need to be purchased from Taobao
: Main controller: https://item.taobao.com/item.htm?id=676604026231 Specifications: S3-WROOM-1U-N8R8
Buttons: https://item.taobao.com/item.htm?id=617002359193 Specifications: 7mm from base to handle Tape-and-reel
speaker: https://item.taobao.com/item.htm?id=684864879619 Specifications: 2030 cavity, 4Ω, 3W
ribbon cable connector: https://item.taobao.com/item.htm?id=663268066843 Specifications: 0.3mm Front-plug, rear-lock (this connector is top-to-bottom)
ribbon cable: https://item.taobao.com/item.htm?id=729164547096 Specifications: 60mm, 35P in the same direction. Note: If the connector is bottom-plug, use reverse-direction mounting
screws: https://item.taobao.com/item.htm?id=539731606451 Specifications: M1.6*6*3.4 head*0.8mm thick
antenna: https://item.taobao.com/item.htm?id=586583930371 Specifications: 6cm IPEX 1st generation N types
of cooling fans: https://item.taobao.com/item.htm?id=678659741079 Specifications: 2507 + thick aluminum sheet (5V with oil) 2.54
Note: After placing the order, contact customer service and say you need a 1.25mm pitch connector. Then send the picture below to customer service.
If the contact surface of the fan's heat sink aluminum block is uneven, you can use a hammer to flatten it.
Installation:
Note: Once the optical engine is installed in the housing, it is difficult to remove unless the housing is damaged.
Prepare an MX 1.25mm pitch 2P male connector and connect the optical engine's LED light source cable to the

optical engine ribbon cable. Installation: (The optical engine ribbon cable must be installed first). After installation, manually fold the ribbon cable upwards
and then peel off the protective film on the optical engine lens
. (Carefully check the housing for any unpolished support points. If there are any, polish them smooth, otherwise they will block the optical engine.)
Place the optical engine diagonally into the housing
and push it to the right while pressing it down
. Place the speaker diagonally in as well.
Then, while pushing to the left, press down firmly on
the heatsink connector. Use pointed tweezers or a needle to remove the terminal

, then insert it through the pre-drilled hole on the casing
and back in (be careful not to reverse the positive and negative terminals) .
Apply thermal paste to the contact points between the heatsink and the optical engine, then align it with the hole on the side and press in the included adhesive pins to secure it.
Motherboard connection method: (By default, the gold fingers of the ribbon cable face up. If the connector is bottom-mounted, the ribbon cable is reversed, and the gold fingers face down.)
Then connect the other cables. Align
the two buttons
, then gently bend the right side of the casing to the right to insert the motherboard.
After inserting it, close the back cover and secure it with the four screws.
If the image is blurry during use, you can adjust the focus by turning this knob left
and right. Turn it to the left when you are closer, and turn it to the right when you are farther away.
Firmware:
There are two firmware files, one for the Arduino IDE example
. Firmware 1:
Game Console Firmware
Main functions: NES game emulator + MJPEG video player
Author: Twilight of Sanalan Bilibili Homepage: https://space.bilibili.com/18598545
Firmware open source address: https://github.com/planevina/esp32s3_nes_gamer
Note: The original GitHub project could only play video, not audio, when playing MJPEGs. Don't ask why.
Usage:
You need to download and unzip the "Game Console Memory Card Files.zip" compressed package in the attachment, and put the folders inside into the memory card. The memory card needs to be formatted as FAT32.
Folder structure:
NES folder: This folder is used to store NES game files. Theoretically, .nes game files are supported, but actual testing is required; opening.mp3 file is the boot sound effect.
MJPEG folder: This folder is used to store the MJPEG files to be played and audio.
Control method:
USB controller: A USB controller that costs a few yuan on Taobao will do. You need to bring your own USB to Type-C adapter. (Recommended: https://item.taobao.com/item.htm?id=599716798406)
Video playback requires conversion to .mjpeg files. Conversion instructions are below.
Video and audio files must have the same filename, i.e., 001.mjpeg 001.mp3.
Game controller operation:
Joystick up, down, left, right;
A for confirmation; B for returning to
the game. Press both Select and Start buttons simultaneously to exit to the main menu.
In the main menu, press B to enable mute mode.
In the video list, press A to play the selected video.
While the video is playing, press B to return to the video list.
During playback, the up arrow key increases volume, and the down arrow key decreases volume. The default volume is 50%, and the volume adjustment range is 5%~100%.
Firmware 2:
Under development...
Example 1:
Video playback demo
(Firmware attached)
This example is only provided for reference by those who want to write their own firmware, that is, how to drive this projection module using the Arduino_GFX library.
It is modified from the Arduino_GFX library example, original link: https://github.com/moononournation/MiniTV/tree/master/ZX3D50CE02S.
These three libraries are needed
: https://github.com/moononournation/Arduino_GFX, https://github.com/pschatzmann/arduino-libhelix, and https://github.com/bitbank2/JPEGDEC.
The modified files are in the attachment
. The conversion method is below.
Firmware burning:
Open flash_download_tool_3.9.5.exe
, select ESP32S3
, select each partition file:
bootloader.bin (burning address 0x0),
firmware.bin (burning address 0x10000),
partitions.bin (burning address 0x8000).
Connect the Type-C data cable to the USB port (do not connect to the OTG port). The CH340 driver needs to be installed beforehand. Then select your serial port number, click START to start burning
, wait for the progress bar to complete, then unplug the data cable and plug in a charger with a voltage of 5V2A or higher
. (Do not use your computer's USB port to power it; the peak power is 6.5W+, use a charger with a voltage of 5V2A or higher).
Video conversion:
Since the video being played uses MJPEG image frames, FFmpeg is needed for conversion.
FFmpeg download address: https://ffmpeg.org or download directly from Github: https://github.com/BtbN/FFmpeg-Builds/releases.
Usage: When exporting with your editing software, change the resolution to 320*240 pixels and export as a .mp4 file. Download and extract FFmpeg. In the FFmpeg.exe directory, hold down the Shift key, right-click, and select "Open PowerShell window here."
Execute the following command to convert the mp4 file to MJPEG format
: `./ffmpeg -i [your mp4 file path] -vf`. `"fps=25,scale=-1:240:flags=lanczos,crop=320:in_h:(in_w-320)/2:0" -q:v 5 [output path]`
For example: `
./ffmpeg -i D:video1.mp4 -vf "fps=18,scale=-1:240:flags=lanczos,crop=320:in_h:(in_w-320)/2:0" -q:v 5 D:video01.mjpeg`
After conversion, place the `001.mjpeg` file in the root directory of the memory card. The memory card needs to be formatted as FAT32.
Audio conversion:
`./ffmpeg -i [your mp4 file path] -ar 44100 -ac 1 -ab 32k -filter:a loudnorm -filter:a "volume=-5dB" [output path]` For example: `./ffmpeg -i` D:video1.mp4 -ar 44100 -ac 1 -ab 32k -filter:a loudnorm -filter:a "volume=-5dB"
After converting D:video01.mp3, simply place the 001.mp3 file in the root directory of your memory card
. Finally finished writing!
(Group chat: 636426429)