Personal Information System OS (formerly Plasma Information Screen OS). (Not DOS, there is no disk in it! yet.)
A somewhat portable relatively-stylish pixel-art clock/weather station.
This display uses high voltage, which could be lethal!!
The display comes from a bus or a train, supposedly.
It has the following labels on the PCBs:
- Morio Denki 6M06056 (the 8085-based control board I wasn't able to get running)
- MD 16101DS-CONT82 06 (the actual framebuffer/drive board)
- MD-24T-ADT (2) 8201 (the boards on the plasma tube itself)
Despite using a standard "HDD" Molex 4-pin connector for the drive board power, it expects +160V on the pin where normally +12V would be supplied. Take care not to mix up the power supplies. (Plugging in +12V into the plasma board doesn't seem to damage it. Plugging in +160V into an HDD, on the other hand...)
More detailed info is available in the following articles:
- На русском: https://habr.com/ru/companies/timeweb/articles/808805/
- 日本語で: https://elchika.com/article/b9f39c29-64aa-42ab-8f73-e6e27a72bd0e/
- Demo video: https://youtu.be/D4MiHmhhjeQ
You can also read the quest I went through trying to get it to run "in real time" at EEVBlog Forums.
-
Clock
-
Indoor temperature
-
Switchbot Meter temperature
-
Weather (via OpenWeatherMap)
-
Weather Forecast
-
Hourly Precipitation and Pressure charts
-
Weather Effect (raining and thunder on idle screen when rain/thunderstorm outside)
-
Word of the Day (via Wordnik)
-
Foobar2000 (via foo_controlverver)
-
Remaining sleep time (when using alarm app)
-
Idle (home screen)
-
Timer
-
Stopwatch
-
Alarm (Smart Wake Up on devices with motion sensor)
(blinking lights warning!)
-
Weighing Scale (via Wii Balance Board)
-
Settings
(All chime tones are covers adapted for single channel beeper or 1-bit PIS-OS Sequencer by DJ AKASAKA)
- Simple beep
- PC-98 Boot Chime
- Russ28 (Русь 28) Hourly Chime (poorly timed Beethoven's 5th Symphony)
- Some mid-2000s Shtrikh-M (Штрих-М) POS Boot chime
- Caramell - Caramelldansen: MIDI, MP3 Recording
- BôA - Duvet (simple version): MIDI
- T-Square - Truth: MIDI
- Kosaki Satoru - Haruhi no Omoi: MIDI
- WAVE and DRAX - When Present Is Past: MIDI
- Kawada Mami - Hishoku no Sora: MIDI
- ? - Like The Wind (TMMS): MIDI
- NightRadio - Waiting Freqs: MIDI
- NightRadio - The Way: MIDI
- Dougal & Gammer — Guitar Hero: MIDI, MP3 Recording
- 蜂屋ななし — シャボン: MIDI
- Takeshi Abo — Gate of Steiner: MIDI
- deadballP — 永遠に続く五線譜: MIDI
- Cream puff — Mermaid girl: MIDI
- Brisk & Trixxy — Eye Opener: MIDI, MP3 Recording
- A.M. - Arise: MIDI, MP3 Recording
- Hirano Aya - Bouken Desho Desho: MIDI
- Magome Togoshi, Shinji Orito - Gentle Jena: MIDI
- OMEGA - Gammapolisz: MIDI
- Hiroyuki Oshima - The Ark Awakes From The Sea Of Chaos: MIDI, , MP3 Recording
- Timbaland - Give It To Me also known as Skibidi Toilet: MIDI, MP3 Recording
- PinocchioP - God-ish (神っぽいな): MIDI, MP3 Recording
- KOTOKO - Re-sublimity: MIDI, MP3 Recording - simple piano-ish score, better cover TBD?
- Calvin Harris - Acceptable In The 80s: MIDI
- emon - shake it!: MIDI, MP3 Recording
- Omega - Én elmegyek: MIDI (thanks lemuel_producer for the help!)
- John Scatman - Scatman (Ski-Ba-Bop-Dop-Bop): MIDI
There is a MIDI to sequencer conversion tool (supports note events in one track only, track end event, and comment event): midi_to_chime
8 bit 8 kHz wave to RLE sample conversion tool (not even reading the header, so very jank): pwm.py
You can also use the HAS_SERIAL_MIDI
feature flag in combination with Hairless MIDI Serial to get a rough idea of how the ringtones will sound when writing them in e.g. Sekaiju. However exact representation in comparison to the native sequencer converter script is not guaranteed. Additionally there is no way of using PWM samples in this MIDI mode.
There is a remote control server you can enable in settings for debugging remotely when uploading firmware via OTA, or using an emulator without any screen and buttons.
Also included is a primitive client that has pretty poor performance, but allows recording GIFs and taking screenshots. All of the screenshots and GIFs in this readme were made that way.
pisosremote.mp4
- Enable "Remote Control Server" under Settings → Display.
- Save and Restart PIS-OS
- Run
python ./helper/remote-control.py <CLOCK-IP>
on your computer. Port 3939 must be accessible.
The protocol is very simple.
The control client sends a control packet to the clock via UDP:
{
uint16_t magic = 0x3939;
key_id_t pressed = (set bits of those keys that were pressed since last transaction);
key_id_t released = (set bits of those keys that were released since last transaction);
}
After that the client should expect a UDP packet from the clock with the format:
{
uint16_t magic = 0x8888;
uint16_t display_width;
uint16_t display_height;
... remainder: bitmap data in fanta buffer format
}
The basic configuration without any bluetooth functionality (no Switchbot or Balance Board integration) seems to work just fine on an ESP32 WROOM. However to be less limited by RAM size in further features I've decided to make WROVER the requirement, so further versions are not guaranteed to run on WROOM.
DEVICE_PLASMA_CLOCK
: a clock that I built around a plasma screen from an old Japanese bus/train.DEVICE_MICROPISOS
: a portable devkit for PIS-OS, using a 100x16 OLED from WinStar.
- Morio Denki 16101DS (see below, driver, feature flag
HAS_OUTPUT_MD_PLASMA
) - Winstar WEG010016A in 8-bit parallel mode (driver, feature flag
HAS_OUTPUT_WS0010
)
- Taptic Engine via 2N3904 transistor as an amp (WIP: wired in parallel with the speaker)
HAS_WORDNIK_API
: compile with the Word Of The Day service using Wordnik API. This requires SSL, so bloats the firmware size significantly.HAS_BLUETOOTH_LE
: automatically set on ESP32. Required for Switchbot-over-BLE. Uses Arduino-BLE and increases firmware size significantly.HAS_OTAFVU
: OTA updates via ArduinoOTA. Currently disabled due to partition size constraints from the above.HAS_SERIAL_MIDI
: Enable receiving MIDI data over serial. Makes the CPU a tad bit hotter so probably do not include this feature flag in production builds, unless you really want a MIDI powered alarm clock for some reason.
- AM2322 over IIC (driver, feature flag
HAS_TEMP_SENSOR
) - Switchbot Meter over BLE (unstable, driver, feature flag
SWITCHBOT_METER_INTEGRATION
, needs extra ram of a WROVER module)
- Any which provides logic H when motion found, logic L when not found (driver, feature flag
HAS_MOTION_SENSOR
)
- Opto-resistor in voltage divider mode (driver, feature flag
HAS_LIGHT_SENSOR
)
- Keypad/D-Pad. Set feature flag
HAS_KEYPAD
and defineconst keypad_definition_t HWCONF_KEYPAD
in the device definition. Driver - Touch plane. E.g. a faceplate with touch sensitive arrow keys to work in place of a D-pad. Set feature flag
HAS_TOUCH_PLANE
and defineconst touch_plane_definition_t HWCONF_TOUCH_PLANE
in the device definition. Driver
- Wii Balance Board. Set feature flag
HAS_BALANCE_BOARD_INTEGRATION
. Driver, based upon code by Sasaki Takeru, requires WROVER module
by Genjitsu Labs / akasaka, 2024.