Giter Site home page Giter Site logo

open-smartwatch / open-smartwatch-os Goto Github PK

View Code? Open in Web Editor NEW
984.0 32.0 161.0 9.33 MB

The Open-Smartwatch Operating System.

Home Page: https://open-smartwatch.github.io

License: GNU General Public License v3.0

C++ 31.71% C 67.49% SWIG 0.07% Python 0.38% Lua 0.08% Shell 0.09% CMake 0.18%

open-smartwatch-os's Introduction

HowTo Run

Please read the documentation on the website!

Prerequirements

  1. Install PlatformIO Core or PlatformIO IDE (which installs PlatformIO core automatically), as well as the packages specified in scripts/requirements.txt (e.g. pip install -r scripts/requirements.txt).
  2. For LUA-scripting support (see env:LIGHT_EDITION_DEV_LUA): Install SWIG (also available in most package managers, e.g. brew install swig or apt install swig)
  3. Then clone this repository:
    $ git clone --recurse-submodules https://github.com/Open-Smartwatch/open-smartwatch-os.git
    As this repository contains binary data (e.g. schematics or images), make sure to have git-lfs installed! Cloning this repository without git-lfs will result in missing or broken files.
  4. To update the sources later on, run:
    $ git pull
    $ git submodule update --init --recursive

Build

OSW-OS OSW-EMULATOR OSW-FEATURE OSW-OS auto-format

The master branch is a stable version and the develop branch is our beta version. Recommended is, that you upload the master branch - except if you want to help us by testing the next release or need (very) new features ๐Ÿ˜‰.

Visual Studio Code

Open the cloned repo in VSCode:

$ code open-smartwatch-os

You may rename the file include/config.h.example to include/config.h and adapt the values according to your requirements. That config is only applied once after you wiped the flash of the watch or changed the config-version numer in osw_config.h (...).

CLI

Alternatively, you can go to the repo folder with your terminal and run...

$ pio run -t upload

If you want to compile for a specific model, you can use the -e flag with an env name from the platformio.ini file.

Hack it!

To get started, take a look into the examples in the src/apps/examples folder - or just into any other app. If you want to compile the examples or other (by default) excluded applications, take a look into the main.cpp file and add the respective flags to the platformio.ini file.

CLI

If you want to print out the log for debugging (also including decoded exception traces), use the following command:

$ pio device monitor

In this serial console you also have the ability (beside much more) to configure the watch - just type in help to get started:

OSW > help
Available commands:
  configure - enter configuration mode
  help      - show this help
  hostname  - show the device hostname
  lock      - lock the console
  reboot    - warm-start the device forcefully
  time      - show current UTC time
  wipe      - format NVS partition and reset configuration

Creating Screenshots of your Apps

  • Wi-Fi needs to be able to connect for this to work.
  • You will need bash and ImageMagick for the helper scripts to work
  • You'll need to enable the respective feature flag to enable it (see below)

The raw screenserver runs in the background and should report via serial:

Started RAW ScreenServer under http://.../api/screenserver

HowTo

  • Add -D RAW_SCREEN_SERVER to your build flags in platformio.ini
  • Build + Flash + Reboot the watch
  • Connect + wait for the server to be started (see msg above)
  • Run bash fetchScreen.sh <IP_OF_WATCH> screenshot.png
  • Run bash composeScreen.sh screenshot.png screenshot_composed.png

If there is no curl, it must be installed.

$ apt install curl -y

The fetchScreen.sh downloads the raw image buffer from the running screen server, and converts the image to png. The composeScreen.sh creates the image with a surrounding smartwatch "overlay" (light edition).

The fast way (recommended)

Run the following inside the open-smartwatch-os directory:

$ cd scripts/screen_capture/
$ ./createScreenshot.sh <IP_OF_WATCH> <SCREENSHOT>
  • The captured file can be found in the screenshot/ folder inside the open-smartwatch-os directory.

Troubleshooting

For more information on troubleshooting, see Wiki.

Arduino_TFT.h: No such file or directory

You did not clone the repository with the --recursive-submodules flag.

Failed to connect to ESP32: Timed out waiting for packet header

You did not hold down BTN1(FLASH) and then tap the RESET button on the watch whilst platform.io was trying to connect.

OSW Emulator

emulator

The OS itself can be executed as a regular program on your machine. This saves you time compiling for the watch and flashing the OS, every time you make a minor change - e.g. while developing the UI or a game, which not explicitly depend on the hardware of the watch.

This also implies some limitations what you can do with the emulator, as we had to hack and reimplement some of the Arduino-specific libraries and their (conflicting) simplifications. This also means, that it maybe necessary to extend those extensions down the road as we (likely) missed that one specific function you try to use... ๐Ÿ˜‰

Build (cmake)

The emulator can be build using the CMakeLists.txt file - you may need to install additional libraries to be able to use it.

Here is a small example running on "Ubuntu 22.04 LTS":

$ sudo apt install libsdl2-dev libsdl2-image-dev g++ gcc cmake make build-essential
$ mkdir build && cd build
$ cmake ..
$ make -j $(nproc)
$ ./emulator.run

You also may extend the cmake-command with -DCMAKE_BUILD_TYPE=Release to get an even faster and smaller binary.

With Docker

If a library is unavailable, you can still use the emulator using docker (e.g. on Ubuntu 20.04 SDL2 is too old). Proceed with a typical docker installation. Showing an application running in docker requires some additional steps:

Host PC

Tested on Ubuntu 20.04.

$ xhost +
$ xauth list # Copy the result of the command. 
$ docker run --net=host -e DISPLAY -v /tmp/.X11-unix -d --name OSW -p 22:22 -it --privileged ubuntu:22.04

Docker

$ xauth add <'xauth list' command result>

Testing

After making some changes to the code, you should test the application by running our unit and UI tests.

Note: our tests do not cover 100% of the application. If you want to see which parts are covered by tests take a look at emulator/src/unitTests and emulator/src/uiTests.

Unit tests

Run all unit tests:

$ ./emulator.run --unit_tests

List all unit tests, one per line:

$ ./emulator.run --list_tests

UI tests

Run the emulator with UI tests window:

$ ./emulator.run --ui_tests

IMPORTANT: If you add some new features, it is strongly recommended to write unit and UI tests for them.

License

Everything in this repository is under a GPL-3.0 license, see here for more details.

open-smartwatch-os's People

Contributors

actions-user avatar akmal-threepointsix avatar apfelwurm avatar bohdancodes avatar criscrafter avatar daschr avatar eliroberts5 avatar gpaddle avatar ich2a avatar iksi4prs avatar jlevy-dev avatar lorenzosciacca avatar matti04 avatar max9901 avatar morthersmort avatar mpegg4 avatar onegneissguy avatar rawsignal avatar richtepa avatar rickseiden avatar rickthad avatar ruffalolavoisier avatar schl3nk3 avatar seanreg avatar simonmicro avatar thet3o avatar tyler-scripps avatar uvwxy avatar xasz avatar zwim 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  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  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  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 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  avatar

open-smartwatch-os's Issues

WiFi service

  • when the wifi service exists (and it creates an ap on missing connection) we can also remove any need to preconfigure the config.h and make its use optionally
  • auto-ntp (when connected to wifi, auto-pull ntp; should be integrated into the service โ†‘)
  • if the wifi is not connectable -> create a wifi hotspot
  • generate wifi password dynamically (once ;) ) and display on screen

This TODO came up while working on #54

Twist wrist to turn on display

Hello,

I was looking at the accelerometer to see if I could add a twist wrist to turn on display feature like you see in the "Major Brands", but I'm not sure it can be done the way the OSW OS is written.

I noticed that in main.cpp, if the app is the watchface app, and the timeout interval hits, it puts the system into deep sleep with

hal->deepsleep()

And that in turn eventually calls the line

esp_deep_sleep_start()

which puts the esp unit into a deep sleep that can only be woken up on GPIO_NUM_0 going low.

If I understand all of this right, which would surprise me if I did, that means that the system isn't doing anything except waiting for that GPIO_NUM_0 to go low, and all the shaking and twisting in the world won't make a difference.

But then I think about the step counter. That's got to be running while the display is off, otherwise it's no good.

Is it possible to wake the unit from something other than GPIO_NUM_0 going low when the unit is in deep sleep?

Watchface changes to default analog when tapped after wakeup

Hi, not sure if this is a known issue, but I've noticed that if I select the digital or binary watchface, the OSW will remember what it was set to, unless the watch is tapped or jostled more than is required to wake it up in which case it resets back to the analog watchface. Was experimenting trying to figure out if perhaps it switching back had anything to do with the step counter being triggered but could not confirm. Willing to try and investigate further when I get a chance.

Rise to wake not working

I have configured the rise to wake threshold as low as 0 and as high as 255, and the watch does not wake when I bring up my arm and twist my wrist.

Central OTA Service

It would be great if it could be managed to build the firmware centrally (maybe with different app combinations) and ship OTA updates via a central service. The osw than could access it directly via wlan without the need of accessing the ofw from a browser or a smartphone. This feature should include firmware signatures or/and https support

No charging indication

There's no indication of the watch being plugged in to charge. I think we could setup an interrupt to wake the watch up when the power is plugged in, then adjust main.cpp to check what interrupt woke it up, and if it's the watch being plugged in, go to a charging animation app instead of the watch face app. The charging app wouldn't even have to be in the cycle of apps normally shown. The app could be as simple as the word "CHARGING" with a percentage of battery power, or it could be a battery icon that shows how much charge is there.

Removed apps come back

I commented out the snake and water level apps in main.cpp and uploaded it to my watch. The first time through the apps. those two apps are missing. It goes watch face, stop watch, time config, gui congif and back to watch face. But if I keep going after I get back to watch face, I get snake, stop watch and water level in that order.

Here's a video that demonstrates what I'm seeing.

Compiling for Windows

I use VS Code in windows10 & installed PlatformIO,
Do I have to make certain settings before compiling the code?
for Example add some Define?
or add another lib?

Errors:

.pio\libdeps\pico32_LIGHT_EDITION\TFT_eSPI\Processors/TFT_eSPI_ESP32.h:79:36: fatal error: SPIFFS.h: No such file or directory
.
.
.
src\apps\_experiments\runtime_test.cpp:10:23: error: 'MINI_IOT_DEVICENAME' was not declared in this scope
src\apps\_experiments\runtime_test.cpp:10:44: error: 'MINI_IOT_SERVER' was not declared in this scope
src\apps\_experiments\runtime_test.cpp:10:61: error: 'WIFI_SSID' was not declared in this scope
src\apps\_experiments\runtime_test.cpp:10:72: error: 'WIFI_PASS' was not declared in this scope

Reset gfx on App change

I run into some problems with apps on messed up positionioning, font, size, color.
After a ton of stupid testing i figured that my code works fine, but if i change the app and come back to mine one, some stuff like alignment and font size got messy.
We should add an gfx->resetToDefault() and the appswitcher should call that before an app switch happens, so every app has the same starting point.
Otherwise for example if u don't set the font size and use the "default" size, and a other app does, it really can get messed up :)

Show the own wifi AP password

The watch has a feature called "Auto AP". This is nice to use, but the password is only shown on the command line during creation. We should consider expanding the successor of the config mgnt app to also display this information (beside the ui user & password).

ClearFont option in gfx_2d_print

add a way to clear a custom font.

//to reset the font.
Graphics2DPrint::clearfont();

This is my first "larger" github project and i will use this fairly simple issue as a way to see if i get the gist of the workflow.

Firmware problem at runtime

The firmware is building and flashing sucessfully, but when the RESET button is pressed, the new firmware is used extremely briefly, then it revert back to the old one.

For example, the only change I made is to change the color or the second clock hand from red to blue.
In that case, a blue line is showed, but immediately replaced by the red one.

Step counter does not reset at the end of the day

The step counter never resets. It should reset every day at midnight.

Another thing about the step counter...

The target is hard coded at 360. It would be good if we could put the default value of something more realistic like 10,000 or 5,000 in config.h. Additionally, if we store the target in the flash memory using Preferences library, we could also write an app to adjust the goal right on the watch.

Change the drawThickLine function

Can we change the following in this function:

void drawThickLine(int32_t x1, int32_t y1, int32_t x2, int32_t y2, uint8_t radius, uint16_t color)

all entries of:
drawCircle(x, y, radius - 1, color);
to
fillCircle(x, y, radius - 1, color);

Rework watchface UI

Here just some ideas - I would be happy to implement them!

  • Analog/digital faces
    • Digital with different designs (maybe even showing dates?!)
  • Configurable colors
  • More prominent status-icons support (like wifi connected? ble? -> later on maybe media (on the possibly connected device) playing?)
  • Primarily configured on compile-time, anything else will need something like a storage HAL and respective data structures

-> Do you guys have some inputs to this?

Feature requests and contrib

So eventually, this app will need support of a companion app to sync data to the cloud or to a smartphone.

I have a few suggestions in this regard:

  1. Creating a standard format in which the data can be converted and loaded or streamed into apps to keep a historical track.

  2. Companion app should have features such as ability to provide OTA updates directly to the user. This will require some hardware mods such as the inclusion or a I2C or SPI parent controller which will write the new streamed code.

  3. I recommend creating this app using a cross platform technology like a progressive web app or flutter. I can create a few pull requests if this interests you. But please be specific about what features will be expected from the app (tracking exercises, acitivity, sleep etc.). Your data can be encrypted and stored on the cloud or locally and there will be no social media logins to reduce security risks

  4. Heart rate tracking: my experience in optics and mechanical design, and the possibility of having an added SPI connection, I can suggest a few accurate but affordable, low power heart rate sensor modules.

This is a great project, and I would love to be a part of it, let me know if this is of interest to the community and the development open source app will begin asap.

Make LUA support optional

We have currently very limited resources running on the watch and there are currently no (?) apps using lua for this os. So I would like to see a way to #define it out via the config. Later on we could re-add it, but for now this should help us focus on the core problems: Random crashes & and a stable os.
This would also remove the need to install swig always when compiling the os, as only users with the need for lua would use it.

I'm creating this issue, as I have currently no idea how swig integrates and where I would need to start (also no time :P).

Fitness tracking

There should be a screen that shows steps, calories burned,goals and other things fitness related. ๐Ÿคทโ€โ™‚๏ธ

extra light release

Would like to propose an extra light release without connectivity for just the time watchface and manual time setting.

Download center for watchfaces, 3D cases and more

Hello all,

Given user base is growing by the day and OSW offers a very high degree of customization I think a place to showcase each user creativity could be great. The idea would be to have a place we can download watchfaces and integrate them easily (maybe redo code so its a single file to replace?). It could also be used for 3d cases or apps later on. Something like an "OSW store" but all free with credit to creators of course.

Any thoughts? Happy to assist

mini ui library / util class

Add a utility class / libary / .. to collect UI related draw utils

  • labels for buttons
  • centered time string
  • date formatting
  • list view / settings view (an object oriented structure with callbacks to add menu elements and then react to toggle states or button presses on the element)

Set time manually

Given some hardware boards have wifi issues, an option to set the time manually would make them usable.

Combine config & time-config

According to the new App-Switcher we could combine the config app (config_mgmt) and time-config app (time_config) into a single settings app. This way it only uses one tile in the AppSwitcher.

Is this change desired? If so, I would like to do that.

Possibility to develop without the board?

Hello,

This seems like an awesome and interesting project, and I personally would be interested to play around and maybe even contribute.

But it would be nice to know if development and testing(at least somethung) can be achieved without having a board? For example with Qemu or similar.

Auto-Build osw_wrap.cxx

See: #26

Following can be used to regenerate the osw_wrap.cxx This should maybe be automated as part of the build process?
swig -c++ -lua -I../../include -I../../lib/Arduino_GFX osw.i

Improve Text Print in gfx_2d_rint

Currently, gfx_2d_print.h only has very hacky helper functions to align text properly:

  uint16_t textCharXOffset(uint16_t numChars) {  // works with defaut font only
    return numChars * 6 * textsize_x;
  }
  uint16_t textCharYOffset(uint16_t numRows) {  // works with defaut font only
    return numRows * 8 * textsize_y;
  }

Suggestions to be added (idea from discord / maxe ):

printleft() // print from the cursor position the string to the left for better alignment of text. 

getStringwidth() // to be able to determine the width given any font the user selects. 

It might also be practical to have a

printCentered()

Extend Graphics2D to Circular2DGraphics2D to improve memory consumption

Currently we waste around 25% of buffer for the invisible corners around the 240*240 circular display.

Two places that need to be changed for this to work is:

  • the constructor needs to change the width of the allocated chunks
  • drawPixelPreclipped needs to be adapted to dynamic chunk sizes

App Idea: Remote Control

I can see me needing some sort of remote control app for robotics some years down the line. There's no reason it can't be made open enough for other applications. (Sorry, not sure how to add tags)

No autosleep while buttons pressed

I often get confused by the watch going do deep sleep if i want to switch a face.
I am not sure if i just press too long and it is already handled or i just get the perfect timing of deep sleep auto timer is triggered while i hold down the button, when i want to switch a face :)

rtc_module.c:155 (rtc_gpio_deinit):RTC_GPIO number error

When uploading the latest version of open-smartwatch-os I get this exception:

ets Jun  8 2016 00:22:57

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 188777542, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0018,len:4
load:0x3fff001c,len:1044
load:0x40078000,len:8896
load:0x40080400,len:5828
entry 0x400806ac
E (36) RTC_MODULE: /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/driver/rtc_module.c:155 (rtc_gpio_deinit):RTC_GPIO number error

And when I try to connect to the WiFi my serial monitor crashes with this exception:

Exception in thread rx:
Traceback (most recent call last):
  File "/Users/matteo/.platformio/penv/lib/python3.9/site-packages/serial/serialposix.py", line 575, in read

--- exit ---
    buf = os.read(self.fd, size - len(read))
OSError: [Errno 6] Device not configured

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/matteo/.platformio/python3/lib/python3.9/threading.py", line 954, in _bootstrap_inner
    self.run()
  File "/Users/matteo/.platformio/python3/lib/python3.9/threading.py", line 892, in run
    self._target(*self._args, **self._kwargs)
  File "/Users/matteo/.platformio/penv/lib/python3.9/site-packages/serial/tools/miniterm.py", line 499, in reader
    data = self.serial.read(self.serial.in_waiting or 1)
  File "/Users/matteo/.platformio/penv/lib/python3.9/site-packages/serial/serialposix.py", line 581, in read
    raise SerialException('read failed: {}'.format(e))
serial.serialutil.SerialException: read failed: [Errno 6] Device not configured

And the watch restarts.

I saw that there is a closed issue similar to this one: #4
That issue was solved by changing the platform version from 3.1 to 3.0.
I have tried platform version 3.2, 3.1 and 3.0 but I always get the same results.

General Conception of Apps/Menus and usage design.

As i follewed and saw on Github there are many people including me testing around with menues and diferrent types of apps/watches and app switching.

I would love to setup a "design" language for all of us and an technical one as well.

Current Concept:

We have Apps. Everything is a App and can to whatever it wants to.
Btn1 is the app-switch by long press and no app can change that.

My Idea:

I would split up everything in 3 parts:

Part 1: Launchers
A provides the functinality to present Aps in Faces, in whatever way it chooses to. The Launcher itself can use all 3 availible Buttons to switch to Menues/Faces/Apps. A Launcher although is used to show overlays or "UI" specific things.

Part2: Faces
A Face can be a Watchface itself or any infomational like stepcounter/calendar/stopwatch whatever, but it is limited to exctly 1 button press. and thats chooses not by the face, but instead by the launcher. The Launcher sends this trigger to the face.
The abstract face class would also provde easy access for get Current Date/Time/Information that nobody needs to right these things over and over themself in each face.

Part3: Apps
A App is started by launcher and has full control over everything but also have to be able to have a "back to launcher button".

Full Example:

Launcher: xaszLauncher
My Launcher decides that it toggels between Faces on Btn1 and Bt3.
Btn2 is the trigger for Faces. Every Other Launcher could use other buttons or a combinations.

My Face1: Watchface
My custom or your custom Watchface what i like to have on my wrist. The Trigger Action could Start my Faverite configred App or go to the Main Menu

My Face1: Fitness
Shows my current Stepcounter and the triggerpress could start/stop and workout timer.

App: Settings
There should be a general Settings App for the launcher itself and "Display/Settings".

App: RandomOne
At some point i want to make a game :)

The Essential part of this is the convention of who has control over what.
If we setup a construct of abstract classes for Launcher (I am on it) and Face and App and who has the button control we could easy swap out one for #another.
There could be many Faces which are compatible with every launcher and if you don't like the launcher but your faces, just use another one.

I have thought about the concept alot and i think we are limited with 3 buttons but i think to have well working launchers/faces/app in the community we need this kind of convention and technial abstract classes everyone can then use.

Like
osw_launcher
osw_face
osw_app

If you like the idea or the concept i would be happy to code the ground construct and pull it again.
I think it would be very nice for all of us and makes swapping apps/faces much more easier in the future.

If u have any ideas or question :) I am happy to discuss

Brightness

increase / decrease brightness hal functions don't actually do anything.

Configuration Abstraction + Configuration UI

This should store minimal key - value pairs using Preferences.h.

Store some things like:

  • Last open app (so when we crash again, the user will not notice too much)
  • Last connected BLE device (to reconnect on boot)
  • App data? Stopwatch stuff?
  • Boot count & flash write counts
  • Storage version (if version increase, wipe storage on boot & populate with defaults)

All keys are handled by a enum, available inside the respective HAL. This eliminates any name collisions & minimizes the nvs use (as we only need to store one char for the first 26*2+10 keys)...

But we should somehow minimize the write cycles on this part (only static data?), otherwise we literally kill the memory over time -> therefore every write operation must explicitly be enabled...

Setting of wake sensibility

Latest releases leave the OSW most of the time on which increases power consumption. Manual setting of this setting to each user's taste would be a nice addition

Discord invite does not work

Hello,

I had a few questions about what Mini IOT is and how to use it, but they aren't issues, so I didn't want to leave it here. I tried following the Discord invite posted here (https://open-smartwatch.github.io/4_flashing/) and I was told that the invite was invalid. I found out later that the invite starts with a 9 not a g so I was able to get in.

Rick

Browser config does not keep 24 hours setting

When I use the browser config and uncheck the Use 24h time format? option, then save the settings, this setting is not saved.

Steps to reproduce

  1. Go to the Configuration UI app and click Connect
  2. Use your browser to login in using the settings displayed on the watch.
  3. Scroll to the bottom and uncheck Use 24h time format?
  4. Click Save
  5. Note the Saved message
  6. Reload the page
  7. Note that Use 24h time format? is checked again.

Tamagotchi-like game app

Do you remember Tamagotchi?

Because I do and I think it would be cool to have a similar game for the open smartwatch. The main idea is to have a virtual pet that moves around the screen and "lives" inside of the watch. Every certain amount of days the creature might "grow" and become a new one based on it's stats. Usually the stats are things like:

  • Intelligence
  • Discipline
  • Strength
  • Food meter
  • Happiness

And the way you increase these stats are by interacting with the pet, something you can do so by:

  • Playing mini-games
  • Feeding it
  • Turning on/off the "house light" (not an LED in the watch, just how the screen render colors)
  • Giving medicine to the pet when it's sick

Additionally, since the watch is going to include a steps counter service and other health metrics (kCal, distance, etc) we could use that information to also affect the stats for the creature. Usually with tamagotchis and virtual pets you need to pay a lot of attention on the creature, specially when it just "gets born" or "hatched from the egg". so we could adapt the idea so that the pet requires some input of the user but not to the point of getting annoying. Additionally, I don't remember if the watch has anything to make sounds, if it does we could also have simple sounds when interacting with the creature. if there is no sound capabilities then let's just ignore this functionality

Additional (optional) ideas that might not be required:

  • Only certain pets can be acquired if you are in certain parts of the world (being near beaches, deserts, mountains, etc).
  • The pet can die and get sick.
  • The pet can battle or interact with other pets using Bluetooth or wifi (this might be too hard to implement, really something I'm not expecting to be develop).
  • Display a list or some wort of showcase of the creatures you have found so far.

Some resources about tamagotchis and virtual pet:

Since the original idea for digimon was basically Bandai trying to make the tamagotchi a toy for boys, I'm also going to include information about the digivice as well:

Correct src/www/*.html names

Okay, somehow the ota code ended up inside the config.html... This is a little bit confusing. maybe it should also be called update.html...

OswApp: OTA Updater

For those who want to use OTA updates (which limits the available flash to 2MB instead of 4MB) , we need an OTA updater that connects to wifi (BTN3) if there is a wifi to connect to or starts a local wifi hotspot instead.

see lib-miniwifi for helper functions to join/create a wifi.

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.