GithubHelp home page GithubHelp logo

szybet / inkwatchy Goto Github PK

View Code? Open in Web Editor NEW
31.0 4.0 4.0 16.95 MB

A firmware for the open source Watchy - with some unique features

License: MIT License

Shell 4.54% C++ 37.91% C 56.36% Python 0.82% CMake 0.12% Dockerfile 0.25%
e-ink firmware smartwatch watchy watchy-apps watchy-faces watchy-screen wearable

inkwatchy's Introduction

InkWatchy

A new innovative firmware written from the ground up for the watchy, by the second developer of Quill OS

02-demo-10mb

This 3> minute demo was heavily compressed, so it looks like it looks. The speed is also messed up because of missing frames

User features

Apart from code things, here are the key features for now:

  • Easy to install demo (no compiling!)
  • Full weather info via open weather api in charts, 5 day forecast
  • A book reader
    • with pages changable by moving your hand
    • Support for many books
  • Working, uncomplete watchface
    • Watchface modules (Apps which are shown on the watchface directly). COnfigured to be shown on the bottom of the watchface. They can be configured as "dissmissable" so
      • Bitcoin module, which shows some data, here is an example:

        image

        • Now it also has a "Big" mode to be truly a "bitclock"
      • A simple net module which just shows wifi status and SSID. It's more of an example imlementation than a serious module (for now)

      • A conway game of life module - which updates every minute

  • Debug menus to check on things on the fly
  • Battery life features:
    • Configurable wake up every x minutes at night
    • A menu to manually, or after certain battery percantage drop enable these features:
      • Disable wake up - The watch will sleep until you press a button
      • Disable all vibrations (For button clicks) - Spikes caused by the motor are heavy for the battery
  • A "vault" which allows to save encrypted images to the watchy and view them if provided the correct PIN. All generated dynamically via a script. Uses AES128 cbc/ecb. Example use is a backup phone book, bitcoin key backup in the form of a QR code
  • Reset cause shower. If your battery will be the cause of a reset, you will be informed about it on boot.
  • I integrated https://github.com/risinek/esp32-wifi-penetration-tool to this firmware as a service. I won't provide support for it or give any advice how to use it. Use for your own responsibility, don't do illegall stuff. Seriously.
  • https://github.com/ckcr4lyf/EvilAppleJuice-ESP32 too. the same story as above. Those 2 options were removed because I updated the build system and didn't bother to make it work with it, with some cmake you should be able to easily re-add those features, I you can't use cmake, then you shouldn't probably use either of those features anyway

Code features

It doesn't use the watchy sub-class but it uses the same libraries. With that in mind, those are further diffrences from other firmwares: Every small text is a reason why I was mad enough to rewrite everything myself...

  • It's splitted into files and folders In my opinion a file that has 5k lines is heresy
  • It's function - not object based for the reason above and to make it easier for beginners to use
  • It uses free rtos tasks where needed
  • All resources like images, fonts, books are converted into variables dynamically via scripts. Editing images, changing font spacing is just one click. I can't believe I was the first to make this that way
  • The Ui is dynamically written. There are functions to do it eassly. Adding a new menu is just a few lines for exampleIt's not just a collection of drawBitmap
  • It has a "manager" and design for various apps to run eassly
  • Has logs via serial. They can be disabled that they don't get compiled with changing one define - and the code doesn't look bad because it's a macro. Amazing Yea, this is a feature compared to other ones I have looked at
  • Uses libraries instead of pure calls to NTP or open weather
  • Many configurable values via defines in config.h
  • Many debugging tools in config.h
  • Most UI is rendered only when needed / values it's showing changed. Good for battery life
  • Proper variable naming and camelCase everywhere
  • LittleFS is used instead of NVS. Which means better code, logs in file system. Resources not uploaded on every program change. Awesome
  • Various tasks which speed up the debugging / development process (resources/tools/other/tasks)

Devices supported

Watchy 2.0 is supported, 1.0 or 1.5 should work but not fully

The 3.0 is supported but not tested, contact me if you want to test it :D

Compiling, Some instructions, Further informations

Don't try anything by yourself, you will fail.

Head out to the wiki

Donations

This was the first thing I have written and asked myself if I should release it for free. Well here we are ;)

This is a passion project at this point. To help an open source developer - who is still a student and motivate him to create this software feel free to donate

Here is my libera pay. Direct paypall is also a option.

Oh and as it seems bitcoin is also preferred, just contact me and ask me for an address because creating a new address for every transaction is more secure, right?

For a small coffe donation I can manage your firmware and provide you personalised binaries, if you can't compile it yourself, even add some features for you

Sister projects

Questions / Contact

Create a github issue or get in touch with me on Quill OS or *atchy community discord servers

or via matrix: @szybet:matrix.org

Some credits

  • GuruSR - I used some of his awesome libraries and looked at the code for how the watchy hardware should be handled. Also answered a few questions on discord. Thanks!
  • Prokuon - I really liked the design of this watchface and almost coppied it. Thanks! - well the code is completly diffrent

inkwatchy's People

Contributors

egnor avatar gurusr avatar kitkat-ok avatar kuratius avatar saiyaken-phoenix avatar szybet avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

inkwatchy's Issues

"'initBatteryDebugDisplay' was not declared in this scope" compilling error, when DEBUG_MENUS=0

Compiling .pio/build/min/src/ui/watchface/modules.cpp.o
src/ui/manager.cpp: In function 'void loopManager()':
src/ui/manager.cpp:126:41: error: 'initBatteryDebugDisplay' was not declared in this scope
         managerLaunchFunc(batteryDebug, initBatteryDebugDisplay, loopBatteryDebugDisplay);
                                         ^~~~~~~~~~~~~~~~~~~~~~~
src/ui/manager.cpp:126:41: note: suggested alternative: 'initGeneralDebugDisplay'
         managerLaunchFunc(batteryDebug, initBatteryDebugDisplay, loopBatteryDebugDisplay);
                                         ^~~~~~~~~~~~~~~~~~~~~~~
                                         initGeneralDebugDisplay
src/ui/manager.cpp:126:66: error: 'loopBatteryDebugDisplay' was not declared in this scope
         managerLaunchFunc(batteryDebug, initBatteryDebugDisplay, loopBatteryDebugDisplay);
                                                                  ^~~~~~~~~~~~~~~~~~~~~~~
Compiling .pio/build/min/src/ui/watchface/modulesDraw.cpp.o
Compiling .pio/build/min/src/ui/watchface/watchFaceDraw.cpp.o
src/ui/manager.cpp:126:66: note: suggested alternative: 'loopGeneralDebugDisplay'
         managerLaunchFunc(batteryDebug, initBatteryDebugDisplay, loopBatteryDebugDisplay);
                                                                  ^~~~~~~~~~~~~~~~~~~~~~~
                                                                  loopGeneralDebugDisplay
Compiling .pio/build/min/src/ui/watchface/watchFaceLogic.cpp.o

I had a compiling error on the stable e34f8529a960b9838434c077e5ca38ed commit version (Switched via a git hard reset and git clean), and when i had DEBUG_MENUS set to 0.

  1. git clone https://github.com/Szybet/InkWatchy
  2. cd InkWatchy
  3. git reset --hard e34f8529a960b9838434c077e5ca38ed && git clean -f
  4. cd resources && ./generate.sh
  5. Edit src/defines/config.h according to :
    - #define DEBUG_MENUS 0
    • #define BITCOIN_MODULE 0
    • #define SMALL_BTC_MODULE 0
      And edit src/defines/confidential.h as :
    • #define WIFI_SSID1 "SSIDNAME"
    • #define WIFI_PASS1 "PASSWORD"
    • #define OPEN_WEATHER_API_KEY "APIKEY"
    • #define WEATHER_LATIT "LATTITUDE.WITHAPOINT"
    • #define WEATHER_LONGTIT "LONGITTUDE.WITHAPOINT"
    • #define WEATHER_LANG "TWOLETTERCOUNTRYISOCODE"
    • #define VAULT_PASSWORD "FOURNUMERICPINTHATDOESNTBEGINWITH0"
  6. Go back to the root of the InkWatchy project (where the untouched platformio.ini resides)
  7. pio run
    The temporary solution I found to remedy this was to comment the debug options in src/ui/manager.cpp to prevent it to be compiled
    managerLaunchFunc(batteryDebug, initBatteryDebugDisplay, loopBatteryDebugDisplay);

Missing library

I cannot compile the firmware, it miss the images.h header

In file included from src/main.cpp:1:
src/defines/defines.h:34:10: fatal error: images.h: No such file or directory

****************************************************************
* Looking for images.h dependency? Check our library registry!

convertFonts.sh output files

You mentioned a few times in your code that you only support Debian. I now have generate.sh working on windows except for convertFonts.sh.
I am still working on it but could you please provide me with the generated files from convertFonts.sh in the meantime?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.