{"id":32499398,"url":"https://github.com/williamd1k0/cyclecam","last_synced_at":"2026-05-09T16:10:54.329Z","repository":{"id":318608292,"uuid":"1042548715","full_name":"williamd1k0/cyclecam","owner":"williamd1k0","description":"A timelapse camera for cyclists using M5Stack TimerCamera-F and Flutter.","archived":false,"fork":false,"pushed_at":"2025-10-08T05:59:14.000Z","size":7158,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-08T07:28:18.753Z","etag":null,"topics":["cycling","flutter","m5stack","timelapse"],"latest_commit_sha":null,"homepage":"https://www.hackster.io/tumeo/cyclecam-9d0f27","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/williamd1k0.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-22T07:33:24.000Z","updated_at":"2025-10-08T05:59:17.000Z","dependencies_parsed_at":"2025-10-08T07:28:21.832Z","dependency_job_id":null,"html_url":"https://github.com/williamd1k0/cyclecam","commit_stats":null,"previous_names":["williamd1k0/cyclecam"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/williamd1k0/cyclecam","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/williamd1k0%2Fcyclecam","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/williamd1k0%2Fcyclecam/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/williamd1k0%2Fcyclecam/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/williamd1k0%2Fcyclecam/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/williamd1k0","download_url":"https://codeload.github.com/williamd1k0/cyclecam/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/williamd1k0%2Fcyclecam/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":281295811,"owners_count":26476759,"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-27T02:00:05.855Z","response_time":61,"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":["cycling","flutter","m5stack","timelapse"],"created_at":"2025-10-27T15:53:13.195Z","updated_at":"2025-10-27T15:53:16.606Z","avatar_url":"https://github.com/williamd1k0.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"## ![](assets/m5_cyclecam-x2.png) Cyclecam\n\nA timelapse camera for cyclists using M5Stack TimerCamera-F and Flutter.\n\nThe project is designed to capture images at regular intervals while cycling, allowing users to create a timelapse video of their rides.\n\nhttps://github.com/user-attachments/assets/99a935f3-a570-4225-970a-bdf9e97bd511\n\nThe project consists of three main components:\n\n1. M5Stack TimerCamera-F firmware: the C++ code that runs on the M5Stack TimerCamera-F device, responsible for capturing images at specified intervals and transmitting them to a web server.\n2. Flutter app: a mobile application that runs a web server to receive images from the M5Stack TimerCamera-F device and provides a user interface for basic configuration, such as setting the image capture interval and metadata.\n3. O-ring mount for M5StickC-like devices: a 3D-printed mount that allows the M5Stack TimerCamera-F to be attached to a bicycle handlebar (or other rods) using a single o-ring.\n\n## M5Stack TimerCamera-F Firmware\n\u003em5-cyclecam/*\n\nThe firmware is written in C++ compatible with the Arduino IDE and is designed to run on the M5Stack TimerCamera-F device (it may also work on TimerCamera-X, but this has not been tested since I don't have one).\n\nAssuming you already have familiarity with the Arduino IDE, you can build and upload the firmware by just installing the required libraries, opening the `m5-cyclecam.ino` sketch file, changing the board to *M5Stack/M5TimerCAM* and uploading it to the device.\n\nAside from the [M5Stack libraries](https://docs.m5stack.com/en/arduino/arduino_ide), the firmware requires only the [TimerCam](https://github.com/m5stack/TimerCam-arduino) library, which is the official library for the TimerCamera-F device.\n\n\u003e[!NOTE]\n\u003eAt the time of initial development, the TimerCam library had some bugs that prevented the firmware from building.\n\u003eI have modified the library locally to fix these issues and also made a pull request to the original repository (which has already been merged, but does not seem to have been released yet).\n\u003eIf you encounter build errors, please check the info that I already provided in the pull request [here](https://github.com/m5stack/TimerCam-arduino/pull/28).\n\nSince the firmware is designed to send images to a web server, you will need to set up the Wi-Fi credentials and the server URL in the `configs.h` file. While you can use any Wi-Fi network, the project was designed to work with a mobile hotspot, so you can use your smartphone as a hotspot while cycling.\n\n\u003e[!NOTE]\n\u003eFor now, the mobile hotspot is implemented on Android only (I don't even know if iOS supports exposing a web server on the hotspot).\n\u003eSince Android hotspots are generally set to use the IP address `192.168.43.1` by default, the only thing you need to change in the `configs.h` file is the `WIFI_SSID` and `WIFI_PASS` defines to match your hotspot credentials.\n\nAfter uploading the firmware, you can use the M5Stack TimerCamera-F device to capture images automatically if manages to connect to the Wi-Fi network.\nThe device sleeps between captures to save battery, but it will not turn off completely unless you press the hidden reset button (see the [M5Stack TimerCamera-F documentation](https://docs.m5stack.com/en/unit/timercam_f#learn) for more details on this limitation).\n\nAs per my own experience, the device could capture images for about 2 hours on a full charge with the default settings (1 image every 5 seconds).\nIf you have a power bank and a frame bag on your bike, you can use it to extend the capture time significantly.\n\n## Flutter App\n\u003ecyclecam_app/*\n\nThe Flutter app is a simple mobile application that runs a web server to receive images from the M5Stack TimerCamera-F device and provides a user interface for basic configuration (such as setting the image capture interval and metadata) and monitoring (such as showing the number of images captured and the current battery level of the device).\n\n![](assets/app-screenshot.png)\n\nThe app is designed to run on mobile devices, but since it is built with Flutter, it can also run on desktop platforms with some limitations (such as the lack of metadata support and the inability to expose a web server on a hotspot, only on a local network).\n\nAssuming you have Flutter installed and configured (and also is familiar with it), you can run or build the app using the common `flutter run` or `flutter build` commands.\n\nAll photos are saved in the device's gallery (each session is saved in a separate album).\nThe timelapse video is not generated automatically, you will need to use a video editing software to create the timelapse video from the captured images (I recommend using [ffmpeg](https://ffmpeg.org/) for this task).\n\n## O-ring Mount for M5StickC-like Devices\n\u003eo-ring-mount/*\n\nThe O-ring mount is a 3D-printed mount that allows the M5Stack TimerCamera-F to be attached to a bicycle handlebar (or other rods) using a single o-ring.\n\n![](assets/o-ring-mount.png)\n\nThe design is based on the official mounts for M5StickC-like devices (such as the Lego and wall mounts).\n\nThe mount was designed using Dune3D and is available in STEP and STL formats (as well as the original Dune3D file, so you can modify it if needed, for example, to fit a different rod diameter).\n\nI'm not a 3D printing expert, so I cannot assure that the mount will print correctly on all printers/materials, especially because I made some dimensions adjustments based on try-and-error (since I don't know how to configure tolerances and the like, and never used any filament other than PLA).\n\nBoth the STEP and STL files are already ready for printing (using the orientation that is less likely to break during use), so you can just slice them and print them without any additional modifications, just make sure to enable supports (I used tree supports).\n\nThe diameter of the O-ring may vary depending on the material it is made of and the diameter of the rod to which it will be attached. I tested it with a rigid O-ring with a diameter of 60 cm. I don't know what it's made of, but it's probably silicone.\n\n![](assets/mount.jpg)\n![](assets/mount-cam.jpg)\n\n\u003eI'm not gonna lie, I always feared that the mount would break during use, but it never did, even after several rides on rough terrain.\n\nBy the way, you can also try to use the camera without the mount (in different situations) or with a different mount. When I first started testing both the firmware and the app, I used the M5StickC Plus watch belt to strap the camera to my left wrist, and it worked fine (although all the images were slightly tilted).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwilliamd1k0%2Fcyclecam","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwilliamd1k0%2Fcyclecam","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwilliamd1k0%2Fcyclecam/lists"}