{"id":26880583,"url":"https://github.com/neodoggy/bettermochi","last_synced_at":"2025-05-07T22:23:03.441Z","repository":{"id":265717736,"uuid":"893776419","full_name":"NeoDoggy/BetterMochi","owner":"NeoDoggy","description":"Based on Dasai™ Mochi","archived":false,"fork":false,"pushed_at":"2025-04-21T18:20:55.000Z","size":32850,"stargazers_count":7,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-21T18:38:39.591Z","etag":null,"topics":["animation","arduino","c","cpp","esp32","esp32-s3","gps","m5dial","m5stack","mochi"],"latest_commit_sha":null,"homepage":"","language":"C","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/NeoDoggy.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}},"created_at":"2024-11-25T07:35:06.000Z","updated_at":"2025-04-21T18:20:58.000Z","dependencies_parsed_at":null,"dependency_job_id":"9ec98126-0f97-431f-88cd-f86c7f20a777","html_url":"https://github.com/NeoDoggy/BetterMochi","commit_stats":null,"previous_names":["neodoggy/bettermochi"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NeoDoggy%2FBetterMochi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NeoDoggy%2FBetterMochi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NeoDoggy%2FBetterMochi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NeoDoggy%2FBetterMochi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NeoDoggy","download_url":"https://codeload.github.com/NeoDoggy/BetterMochi/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252962862,"owners_count":21832412,"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","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":["animation","arduino","c","cpp","esp32","esp32-s3","gps","m5dial","m5stack","mochi"],"created_at":"2025-03-31T14:37:26.687Z","updated_at":"2025-05-07T22:23:03.427Z","avatar_url":"https://github.com/NeoDoggy.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Static Badge](https://img.shields.io/badge/Version-v0.3.2-blue?style=for-the-badge\u0026logo=espressif\u0026logoSize=auto\u0026link=https%3A%2F%2Fgithub.com%2FNeoDoggy%2FBetterMochi%2Freleases%2Ftag%2Fv0.3.2\u0026color=%231D9BF0)\n![GitHub Repo stars](https://img.shields.io/github/stars/NeoDoggy/BetterMochi?style=for-the-badge\u0026logo=github\u0026logoSize=auto\u0026label=STARS%20UWU\u0026color=%23FE8A2C)\n![Static Badge](https://img.shields.io/badge/Binaries-avaliable-green?style=for-the-badge\u0026color=%2300ba7c)\n![GitHub Issues or Pull Requests](https://img.shields.io/github/issues/NeoDoggy/BetterMochi?style=for-the-badge\u0026logo=github\u0026logoSize=auto\u0026color=ff4060)\n\n\n# BetterMochi\n###### Based on Dasai's Mochi\n\n## Intro\nMochi is a cute little display like device that has animated faces and emotions. It's originally manufactured and designed by Dasai™.  \n\nThough Mochi is very cute but it's very lack of any funtions. It only show animations and make noises, although in version 3, it could make movements according to your car, but to myself, it still lacks the functions that are suppose to have being a \"car pet\". And that's why I wanted to make some improvments to it and making it a **BETTER MOCHI**.  \n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://dasai.com.au/cdn/shop/files/IMG_13292_debdcf9e-f730-40b0-b9bd-089d5284aaa4.jpg?v=1703580072\u0026width=1000\"\u003e\n    \u003cb\u003eDasai™ Mochi\u003c/b\u003e\n\u003c/p\u003e\n\n\n## Features\nAddition to the basic features mochi already has, I personally thinks that below features could add some touch to the cute little buddy.  \n- speed guage\n- welcoming tones\n- clock\n\nAlso, the screen are both too small for the animimations and the features above. So, by changing it into a 1.28 inch round display, things starting to look interesting. First, it finally looks like a guage, or a clock.  \n\n## Implement\n\nTo implement the above mentioned features, you could just use a vanilla ESP32/ESP32-S3 and a round tft display powered by GC9A01 with an GPS module. Or, you could use a M5Dial for more features like a rotary encoder for changing modes, and a built in buzzer for melodies.  \n\nAs for myself, all the software is tested and implement using the first way on a bread board and later been implemented onto the M5Dial and tested. The below installation steps are specified for implementation on the M5Dial or similar devices with same GPIO outpins.  \n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://i.imgur.com/32S1pZj.jpeg\"\u003e\n\u003cb\u003eMochi on M5Dial\u003c/b\u003e\n\u003c/p\u003e\n\n## Installation\n\n### Parts\nTo make your own Mochi on a M5Dial, you first need the following parts.  \n1. A M5Dial\n2. Neo6M GPS reciever\n3. Any ESP32 (This includes S2, S3, C3, etc.)\n4. CH340 UART to USB connector\n\n### Software\nFor an easy burn in for the software, we'll use arduino as the platform.  \n\n#### STEP 0\nFirst, for the preparation for the tft_eSPI library. After installing the library, navigate to the location of the library in arduino, for example `C:\\Users\\yourname\\Documents\\Arduino\\libraries\\TFT_eSPI`.  \nAfter, locate the `Setup46_GC9A01_ESP32.h` in the `User_Setups` and paste the following codes into it. Also remember to backup the original one.\n```cpp\n// See SetupX_Template.h for all options available\n#define USER_SETUP_ID 46\n\n#define GC9A01_DRIVER\n\n#define TFT_MOSI 5\n#define TFT_SCLK 6\n#define TFT_CS    7  // Chip select control pin\n#define TFT_DC    4  // Data Command control pin\n#define TFT_RST  8  // Reset pin (could connect to RST pin)\n#define TFT_BL   9\n#define TFT_BACKLIGHT_ON HIGH\n\n#define LOAD_GLCD   // Font 1. Original Adafruit 8 pixel font needs ~1820 bytes in FLASH\n#define LOAD_FONT2  // Font 2. Small 16 pixel high font, needs ~3534 bytes in FLASH, 96 characters\n#define LOAD_FONT4  // Font 4. Medium 26 pixel high font, needs ~5848 bytes in FLASH, 96 characters\n#define LOAD_FONT6  // Font 6. Large 48 pixel font, needs ~2666 bytes in FLASH, only characters 1234567890:-.apm\n#define LOAD_FONT7  // Font 7. 7 segment 48 pixel font, needs ~2438 bytes in FLASH, only characters 1234567890:.\n#define LOAD_FONT8  // Font 8. Large 75 pixel font needs ~3256 bytes in FLASH, only characters 1234567890:-.\n#define LOAD_GFXFF  // FreeFonts. Include access to the 48 Adafruit_GFX free fonts FF1 to FF48 and custom fonts\n#define SMOOTH_FONT\n\n#define SPI_FREQUENCY  80000000 //40000000\n\n#define SPI_READ_FREQUENCY  20000000\n\n#define SPI_TOUCH_FREQUENCY  2500000\n\n// #define SUPPORT_TRANSACTIONS\n```\nThen, uncomment the `#include \u003cUser_Setups/Setup46_GC9A01_ESP32.h\u003e` in the `User_Setup_Select.h` located in the root folder of tft_eSPI library.\n\n#### STEP 1\nIn order to make the esp-now function correctly, please check the mac address of your m5dial and place here in the 8th line in datasender.ino:\n```cpp\nuint8_t broadcastAddress[] = {0xC0, 0x4E, 0x30, 0x12, 0xC8, 0xA4};//c0:4e:30:12:c8:a4\n```\nAbout how to get your esp32's mac, please navigate to [here](https://randomnerdtutorials.com/get-change-esp32-esp8266-mac-address-arduino/) for more informations.  \nAlso, if you want to use the ntp function, please remember to set up your AP's ssid and password located in `conf.secret.h`.\n\n#### STEP 2\nPlace the files excluding the datasender folder into a sketch folder and choose M5Dial as your board, then hit compile\u0026upload.  \n\n#### STEP 3\nConnect your Neo6M to your computer using the CH340 dongle and change the baude rate to `115200` and rate to `5Hz` using U-center.  \nMore infos of changing the settings could be found [Here](https://www.waveshare.com/wiki/UART_GPS_NEO-6M).  \n\n#### STEP 4\nConnect the GPS to the secondary ESP32 using UART. Here we use the second UART port for communication, but since specs may be different, feel free to modify the code to meet your own needs.  \n\n#### STEP 5\nPlace the files in the datasender folder into another sketch folder and select the corresponding board then hit upload.  \n\n#### STEP 6\nAt defualt, after installation, the dial should got animations running on the screen. You could use the rotary encoder to change to the guage page by spinnig the outer rim.  \nBelow is a picture showcasing the guage page.  \nAlso, the touch screen is for adjusting the brightness of the screen, swipe left to dim it and the opposite to lighten it!  \n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://i.imgur.com/Q3KdznQ.jpeg\"\u003e\n\u003cb\u003eSpeed guage page\u003c/b\u003e\n\u003c/p\u003e\n\n---\n\n## UPDATE v0.2.0\n###### 25 JAN 20\nCongrats!!! Now the mochi guage has 3 pages, the mochi page; the speed guage page; and the clock page!! No more distractions, mochi could help for telling the time now!!\n\n### Clock Page\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://i.imgur.com/UqplSaZ.jpeg\"\u003e\n\u003cb\u003eSpeed guage page\u003c/b\u003e\n\u003c/p\u003e\n\nThe time will be automatically set when connected to a resonable GPS signal.  \n\n---\n\n## UPDATE v0.3.0\n###### 25 JAN 24\nNow the mochi got settings, horay! To get to the set page, simply press the button located at the bottom of the round, or in other words, press the \"M5\" on the orange ring.  \n\nIn the set page, you could turn the rotary encoder to navigate to the settings you want to change, when navigated to the one, simply press the button again will move you into the setting itself and one more press will bring you out.  \n\nTo navigate back to the home page, turn to the part that is labeled `Back` and press the button.  \n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://raw.githubusercontent.com/NeoDoggy/BetterMochi/refs/heads/main/readmeImages/Roty.gif\" alt=\"Rotaries!!!\"\u003e\n\u003cbr\u003e\n\u003cb\u003eRotaries!!!\u003c/b\u003e\n\u003c/p\u003e\n\nBTW, the settings could also be adjust with the touch screen, left for adding `1` and right for subtracting `1`. The rotary's delta depends, for example, when in the backlight setting, turning left adds `5` to the value.  \n\n#### SETTINGS\n1. Backlight -\u003e Backlight value (0-255)\n2. Rotation -\u003e Rotation of the screen (0-7)\n3. Sound -\u003e Whether the beep is muted (True/False)\n\n## UPDATE v0.3.1\n###### 25 JAN 26\nNow added ntp support for setting the time s.t. when there are no GPS signals, you could still set the internal RTC time.  \n\nTo set the time using NTP, simple navigate to the settings-\u003eSet Time.  \n\nTo make sure you could connect to the ntp server, you need to set your AP's SSID and PSW using the provided file `conf.secret.h`.  \n\nIn the file, simply place your AP's SSID and PSW into the string, for example:\n```cpp=1\nchar ssid[] = \"YOUR_SSID\";\nchar pass[] = \"YOUR_PW\";\n```\nI would recommend you to set it to your mobile phone's hotspot etc s.t. you could set the time wherever you go.  \n\n## UPDATE v0.3.2\n###### 25 JAN 28\nSmol tweak for the speed guage, the guage now would set its speed to 0 when NAK from the GPS with a timeout of `0` seconds. Also, the `GPS` located at the bottom of the guage would turn into red when NAK and navy when ACKed.  \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneodoggy%2Fbettermochi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fneodoggy%2Fbettermochi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneodoggy%2Fbettermochi/lists"}