Rationale
What problem does this solve?
Smartwatches are gaining popularity by the minute, and may as well become as commoditized as smartphones are today. To have a smartwatch, however, the only choices today are for closed or semi-closed devices that you can't fully control and tweak. They are also, in most cases, unreasonably expensive, and not very efficient (often not even being able to last for a full day without a recharge).
We think we can make a smartwatch that's different. One that is both free, inexpensive, and efficient; while being as useful as a regular commercial smartwatch!
How does it solve the problem?
We are solving the problem by scaling down the solution to just the bare essential. And by making it open so that anyone can replicate it.
Using Arduino Mini as a processor instead of a multicore high-end processor, using a simple 128X64 OLED screen, rather than a high resolution retina display, while still using Bluetooh communications with a mobile phone, so that we can use it as a "second bigger brain" to do the heavy lifting. The components have been explicitly selected optimizing for simplicity, efficiency, and prize (the cost of all of them combined is actually never more than 20USD). The design has been optimized to be easy to build and use, and we have put together detailed instructions on how to do so.
With this setup, you have everything you need to have a functional useful smartwatch. We also want to make it easy to develop and publish your own custom applications for it, making it a platform, just like the Apple or Android smartwatches are.
What's the licence?
All the code is GPLv3, and everything else (schematics, 3D models, graphics...) has a Creative Commons Attribution+Share Alike licence. Free as in freedom.
Features
New bluetooth-based apps
The main improvement over the previous version is the BLE component, that allows it communicate with an Android phone. This is incredibly powerful, as effectively makes the phone become a "second brain" which is connected to the Internet, and can provide the watch with many useful data that was previously out of it's reach.
Thanks to the Bluetooth pairing, we were able to build the following applications in the watch:
- time synchronization
- display phone notifications in the watch
- send battery status from watch to the phone, to make graphs
- watch twitter app (will show you the latest tweets from your timeline)
- watch weather app (will retrieve the weather in your location from http://forecast.io)
- watch TFL app (will tell you when the next buses/tubes will arrive based on your location in London)
The trick is that all of these apps also require an Android component in the Watchduino Android companion app, doing all the heavy lifting and simply passing Watchduino the results to display, via Bluetooth.
Notifications from the phone
The best feature in Watchduino is the capability of sending notifications from your Android phone (just like all the proper smartwatches do). By using the Notification Listener Service we can redirect any notification to the watch via Bluetooth automagically (SMS, Emails, Whatsapp, Facebook, Google Now, calendars, etc). Then, once the notification arrives to the watch, you can just press a button to dismiss that notification in your phone too.
![]() | ![]() |
New UI
Since we are using a different screen, with a better resolution (128x64), we were able to build a more flexible UI.
The top of the screen is showing a status bar, similar to what smartphones do. The 4 corners of the screen show contextual symbols that indicate what the purpose of the buttons is in every occasion.
For instance, in the main menu you can move left and right, enter or exit.
On an app, the functionality of the buttons can change. For instance, on the Twitter app you can request a reload, or navigate between tweets.
Companion App UI
The main purpose of the companion app is to run as a service on the background, where it will be listening for notifications, or doing any processing the the custom apps...
Read more »
Arduino: 1.8.9 (Windows 10), Board: "Arduino Pro or Pro Mini, ATmega328P (3.3V, 8 MHz)"
In file included from sketch\watchcore.h:109:0,
from sketch\watchcore.cpp:4:
sketch\bluetooth.h: In member function 'void Bluetooth::processMessage()':
bluetooth.h:147:31: error: 'setTime' was not declared in this scope
setTime(buffer.toInt());
^
In file included from sketch\alarmSet.h:7:0,
from sketch\watchcore.cpp:18:
sketch\drawUtils.h: In function 'void drawTime(int, int, char)':
drawUtils.h:78:23: error: 'hour' was not declared in this scope
display2digits(hour());
^
drawUtils.h:80:25: error: 'minute' was not declared in this scope
display2digits(minute());
^
In file included from sketch\watchcore.cpp:19:0:
sketch\watch.h: In member function 'void Watch::drawDigital()':
watch.h:26:27: error: 'day' was not declared in this scope
display.print(day());
^
watch.h:28:29: error: 'month' was not declared in this scope
display.print(month());
^
watch.h:34:29: error: 'hour' was not declared in this scope
display2digits(hour());
^
watch.h:36:31: error: 'minute' was not declared in this scope
display2digits(minute());
^
watch.h:41:31: error: 'second' was not declared in this scope
display2digits(second() );
^
sketch\watch.h: In member function 'void Watch::drawAnalog()':
watch.h:46:27: error: 'day' was not declared in this scope
display.print(day());
^
watch.h:48:29: error: 'month' was not declared in this scope
display.print(month());
^
watch.h:53:36: error: 'second' was not declared in this scope
int r = clock60ToDeg(second());
^
watch.h:58:32: error: 'minute' was not declared in this scope
r = clock60ToDeg(minute());
^
watch.h:63:30: error: 'hour' was not declared in this scope
r = clock12ToDeg(hour());
^
sketch\watch.h: In member function 'virtual void Watch::draw()':
watch.h:73:38: error: 'weekday' was not declared in this scope
display.print(dayStr(weekday()) );
^
watch.h:73:39: error: 'dayStr' was not declared in this scope
display.print(dayStr(weekday()) );
^
In file included from sketch\watchcore.cpp:26:0:
sketch\topbar.h: In member function 'void Topbar::printBarTime()':
topbar.h:14:22: error: 'second' was not declared in this scope
if (second() % 2 == 0 ) separator = ':';
^
sketch\watchcore.cpp: In function 'void sysinit()':
watchcore.cpp:142:24: error: 'setTime' was not declared in this scope
setTime(0,0,0,0,0,0);
^
In file included from sketch\watchcore.h:109:0,
from C:\Users\Abishek\Desktop\watchduino2-master\watchduino2-master\watch\watch.ino:13:
sketch\bluetooth.h: In member function 'void Bluetooth::processMessage()':
bluetooth.h:147:31: error: 'setTime' was not declared in this scope
setTime(buffer.toInt());
^
exit status 1
'setTime' was not declared in this scope
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
I am getting this error. someone please help!!. I have copied the libraries to the library folder. My arduino version is 1.8.9