
Controller
google/mozc-devices
Circuit diagrams and firmware source code for Gboard DIY keyboards

Never ending summer again. (Solar-powered AVI player based on ESP32/ULP)
Endless endless eight is an open-source printed circuit board by likeablob, from the likeablob/endless-endless-eight repository on GitHub, published under the MIT licence. It is a 2-layer board with 11 parts on 34 nets.
Its parts include 6 resistors, 2 transistors, 2 connectors and 1 IC. It belongs with the ESP32 boards of this library.
The clip played is from The Melancholy of Haruhi Suzumiya (2009).
A self-sustained AVI player to replay the summer days.
WIP
All the video files to be placed on the MicroSD must be MJPEG-encoded AVI.
# Transcode EP 12~19 to ee_%d.avi, with scaling and cropping
$ seq 12 19 | xargs -L 1 -P1 -I% bash -c 'ffmpeg -i ee_%.mp4 -r 24 -vf scale=160:-1,crop=160:80 -vcodec mjpeg -q:v 5 -an ee_%.avi -y'See sdcard/ for a set of sample vid files. These are converted from BigBuckBunny.mp4.
# The sample vid files were from
$ seq 12 19 | xargs -L 1 -P1 -I% bash -c 'ffmpeg -ss $(((% - 12)*2)) -to $(((% - 12 + 1) * 2)) -i BigBuckBunny.mp4 -r 24 -vf scale=160:-1,crop=160:80 -vcodec mjpeg -q:v 5 -an ee_%.avi -y'$ git clone https://github.com/likeablob/endless-endless-eight.git
$ cd endless-endless-eight
$ cp include/user_config.g.template cp include/user_config.h
$ code include/user_config.h
$ pio run || pio run # The very 1st run may fail due to ulptool-pio
$ pio run -t uploadSee ./enclosure.
Centering on the deep sleep mode, this application has several wake-up states as depicted in the following diagram.
stateDiagram-v2
Playing: Playing Video (Nominal)
[*] --> Playing
Playing --> DeepSleep: At low battery
DeepSleep --> Playing: At high battery
DeepSleep --> Emergency: At very low battery
Emergency --> DeepSleep: ASAP
DeepSleep --> PeriodicReporting: Every 30 minutes
PeriodicReporting --> DeepSleep: ASAPIt's quite simple; Wake the Main CPU up if the battery voltage (BAT_V) >= 3.9 V and put into sleep if BAT_V <= 3.75 V.
The ULP co-processor executes own routine every one second, but still is able to keep the deep sleep current consumption at uA-level.
flowchart TB
subgraph CPU["Main CPU"]
%% flow
power_boot(" ")
boot("Boot")
check_ulp_boot{"Wake by ULP?"}
init_ulp["Init ULP routine"]
%% flow
init_loop(" ")
check_batv_sleep{"BAT_V <= SLEEP_TH"}
sleep("Deep sleep")
power_boot --> boot --> check_ulp_boot
check_ulp_boot -->|"Yes"| init_loop
check_ulp_boot -->|"No"| init_ulp --> init_loop
init_loop --> check_batv_sleep
check_batv_sleep -->|"Yes"| sleep
check_batv_sleep -->|"No"| init_loop
sleep -.-> |"Wake by ULP"| boot
end
subgraph ULPThe play state such as a file playing, its position and loop count etc. are kept over deep sleep or even complete power outage, thanks to Nagato RTC SLOW MEM and Non-Volatile Storage. The former is volatile but survives deep sleep, and the latter is nothing but a reserved region in flash.
In short there are two pathways for each storage.
RTC_SLOW_MEM before entering deep sleep. Restore from RTC_SLOW_MEM after waking up from deep sleep.NVS at very-low battery voltage. Restore from NVS on boot.Note: About B., the ULP routine wakes the main CPU in the Emergency mode when BAT_V <= 3.55 V. This happens only once and the related flag will be cleared by the main CPU after normal wake up.
flowchart
%% nodes
init(" ")
check_ulp_boot{"Wake by ULP?"}
restore_from_nvs["Restore from Non-volatile storage"]
restore_from_rtc["Restore from RTC SLOW RAM\n(Volatile, Deep-sleep persistent)"]
check_ulp_flag_emergency{"Emergency Mode?\n(caused by very low battery)"}
save_to_nvs["Save to Non-volatile storage"]
sleep("Deep sleep")
init_loop("Main Loop")
check_low_bat{"Low battery?"}
save_to_rtc["Save to RTC SLOW MEM"]
init ---> check_ulp_boot
check_ulp_boot -->|"Yes"| check_ulp_flag_emergency
check_ulp_boot -->|"No"| restore_from_nvs --> init_loop
check_ulp_flag_emergency --> |"Yes"| save_to_nvs --> sleep
check_ulp_flag_emergency --> |"No"| restore_from_rtc --> init_loop
init_loop --> check_low_bat
check_low_bat --> |"Yes"| save_to_rtc --> sleep
check_low_bat --> |"No"| init_loop
sleep -.-> initMIT
This projects is here thanks to a lot of superb OSS libraries. See platformio.ini for details. Thank you to all the devs.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 4 | 10k | Resistor_SMD:R_0603_1608Metric | R2, R3, R4, R5 |
| 1 | 0.96in_80x160_st7735s_LCD_module | Connector_PinSocket_2.54mm:PinSocket_1x08_P2.54mm_Vertical | J1 |
| 1 | 100 | Resistor_SMD:R_0603_1608Metric | R1 |
| 1 | 2k | Resistor_SMD:R_0603_1608Metric | R6 |
| 1 | Micro_SD_Card_Det | Connector_Card:microSD_HC_Hirose_DM3BT-DSF-PEJS | J2 |
| 1 | Q_NMOS_GSD | Package_TO_SOT_SMD:SOT-23 | Q1 |
| 1 | Q_PMOS_GSD | Package_TO_SOT_SMD:SOT-23 | Q2 |
| 1 | esp32_wemos_lolin32_lite | wemos_lolin32_lite:esp32_wemos_lolin32_lite | U1 |
11 parts. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
From the likeablob/endless-endless-eight repository on GitHub, at the commit this page was made from: the board is kicad/endless-endless-eight.kicad_pcb and its schematic kicad/endless-endless-eight.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

google/mozc-devices
Circuit diagrams and firmware source code for Gboard DIY keyboards


FrameworkComputer/ExpansionCards
Reference designs and documentation to create Expansion Cards for the Framework Laptop

hoglet67/RGBtoHDMI
Bare-metal Raspberry Pi project that provides pixel-perfect sampling of Retro Computer RGB/YUV video and conversion to HDMI

hackclub/OnBoard
💡 Join 1,000 teenagers and make your first PCB with a $100 grant!


tardate/LittleArduinoProjects
a collection of "Little Electronic & Arduino Projects", most involving electronics or an Arduino in one way or another!

basilfx/TRADFRI-Hacking
Hacking IKEA TRÅDFRI products, such as light bulbs, window blinds and other accessories.