{"id":31177768,"url":"https://github.com/egeonderx/espy32","last_synced_at":"2026-02-25T01:33:14.204Z","repository":{"id":313178417,"uuid":"1047482618","full_name":"EgeOnderX/Espy32","owner":"EgeOnderX","description":"An operating system for ESP32. It can run Python scripts, load drivers, use the terminal with qvga screen and sd card, write programs in its built-in Python interpreter, and even play some basic music.","archived":false,"fork":false,"pushed_at":"2025-09-10T16:51:00.000Z","size":53,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-19T14:38:18.797Z","etag":null,"topics":["esp32","esp32devkit","espy32","micropython","minimal","mit-license","operating-system","os","py-dos","python","qvga","real","screen","sdcard","tiny"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/EgeOnderX.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-08-30T14:20:54.000Z","updated_at":"2025-09-11T08:06:35.000Z","dependencies_parsed_at":"2025-09-04T11:41:21.623Z","dependency_job_id":"903b8a5b-632c-48b1-9f85-f3c6a815e092","html_url":"https://github.com/EgeOnderX/Espy32","commit_stats":null,"previous_names":["egeonderx/espy32"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/EgeOnderX/Espy32","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EgeOnderX%2FEspy32","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EgeOnderX%2FEspy32/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EgeOnderX%2FEspy32/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EgeOnderX%2FEspy32/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/EgeOnderX","download_url":"https://codeload.github.com/EgeOnderX/Espy32/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EgeOnderX%2FEspy32/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279006456,"owners_count":26084107,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-11T02:00:06.511Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["esp32","esp32devkit","espy32","micropython","minimal","mit-license","operating-system","os","py-dos","python","qvga","real","screen","sdcard","tiny"],"created_at":"2025-09-19T14:08:01.795Z","updated_at":"2025-10-11T06:14:04.063Z","avatar_url":"https://github.com/EgeOnderX.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Espy32 (v1.0.7)\nAn operating system fully based on MicroPython for ESP32. It can run Python scripts, load drivers, write programs in its built-in Python interpreter, and even play basic music.\n\n**Developed from scratch by Ege.**\n\n## Features\n- 16GB SDHC card support.\n- Independent kernel error indicator via **D1 pin**.\n- Default editor application (`edit.py`) to write and modify code.\n- SD card library embedded into `hal.py`.\n- Separated kernel-bootloader system.\n- Run Python files directly using the `RUN` command.\n- startup script (startup.py) for automatic startup commands.\n\n---\n\n## Test Components and Environment\n- **Board:** ESP32 DevKit V1 + passive heatsink  \n- **Storage:** HW-203 SD module + 16GB SD card  \n- **Audio:** Basic speaker system controlled by **BD139** with passive cooling  \n- **I/O:** 2× USB, 2× jack input/output  \n- **Power:** 3000mAh battery + 1200mAh charging circuit  \n- **Protection:** USB reverse current protection + USB short-circuit protection  \n\n---\n\n## Why Espy32?\nUnlike other ESP32 operating systems that run at a low hardware level, Espy32 is **fully based on MicroPython**, making it easier to run Python scripts and customize behavior.  \n\n*(This is also why dual-core support is currently unavailable.)*\n\n---\n\n## Future Plans\n- Add display (screen) support.\n- Enable dual-core support for better multitasking.\n\n---\n\n## Commands\n\n- **DIR**       : List files and directories in the current folder\n- **TREE**      : Show folder structure recursively\n- **TYPE**      : Display the content of a file (`TYPE filename`)\n- **WRITE**     : Create or overwrite a file (`WRITE filename content`)\n- **DEL**       : Delete a file (`DEL filename`)\n- **RENAME**    : Rename a file (`RENAME old_name new_name`)\n- **COPY**      : Copy a file (`COPY source_file dest_file`)\n- **MKDIR**     : Create a new folder (`MKDIR foldername`)\n- **CD**        : Change directory (`CD foldername`, `CD ..`)\n- **RUN**       : Execute a Python file (`RUN filename`)\n- **SYSINFO**   : Display system and disk information\n- **REBOOT**    : Restart Espy32\n- **PRINT**     : Print text to screen (`PRINT text`)\n- **EDIT**      : Open the editor to modify files\n- **RESCUE**    : Enter rescue/backup mode\n- **EXIT**      : Exit Espy32\n---\n\n## BSOD\nIf you see an error like this, take a closer look at the error codes:  \n\n```\n\n:( Espy32 ran into a problem and needs to restart.\n            \nTechnical information:\n            \n*** STOP: INVALID_CURRENT_DIR\n\nMore info : https://github.com/EgeOnderX/Espy32/\nPress any key to restart.\n\n```\n\n## Error Codes\nIf Espy32 encounters a problem, the kernel will call the `bsod` function (Bad Screen of Death) and display a stop message. Here's what each error code means:\n\n- `EMPTY_PATH`  \n  The path provided to a command is empty or contains only whitespace. Make sure to specify a valid file or folder path.\n\n- `INVALID_CURRENT_DIR`  \n  The current working directory (`current_dir`) is invalid (None or not a string). Navigate to a valid directory using `CD`.\n\n- `PATH_NOT_FOUND`  \n  The path you specified does not exist on the disk. Check that the file or folder exists.\n\n- `INVALID_PATH`  \n  An unexpected exception occurred while resolving the path. This usually means the path format is invalid or contains illegal characters.\n\n- `UNKNOWN ERROR`  \n  Used by `bsod` when no error code is provided. Indicates an unspecified problem.\n\n\u003e **NOTE:** These are **critical errors**.  \n\u003e For example, the `INVALID_CURRENT_DIR` error is **rare** because it requires the **current working directory** to become **invalid** while the user is **still inside it**.  \n\u003e  \n\u003e In this case, `CD ..` or `CD` commands will **not** work.\n\n## Security\n- A folder depth limit has been added for the `tree` command.\n- Security measures have been implemented in `get_abs_path` to prevent invalid paths.\n- On every boot, the kernel checks whether the files on the SD card exist.\n- If a system file is missing, the **D1 LED** will blink **twice**. You can monitor this via the serial port.\n\n\n## Version Plan\n- Evolution path:  \n  **Py-DOS (Python) (Simulator)** → **Py-DOS on ESP32** *(partial operating system)* → **Espy32** *(towards a fully functional operating system)*\n\n\n**Thank you for checking out this project!**  \n⭐ If you like it, consider giving it a star!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fegeonderx%2Fespy32","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fegeonderx%2Fespy32","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fegeonderx%2Fespy32/lists"}