If you like this please consider supporting Espruino, or buying an Open Source Bangle.js watch (which will "just work")... Or contributions to improve the accuracy of info here or features of the Espruino build would be hugely appreciated.
The SMA Q3 can be a bit hard to get hold of - if there's enough interest I could sort out some kind of bulk purchase, so please let me know if so.
- nRF52840 (BLE 5, 64MHz, 256kB RAM, 1MB Flash)
- LPM013M126 sunlight-readable 176x176 8 color LCD, with full touch
- One button, IP68 waterproof
- 8MB SPI Flash
- Accelerometer, Compass, Pressure/Temperature sensor
- Heart rate sensor
There is a build of Espruino for the watch that exposes Bangle.js functionality to the point where some apps from the App Loader can but run. What does work:
- LCD & terminal on LCD
- Compass, Accelerometer, Gestures
- Touchscreen (X/Y not reported as an event yet)
What doesn't work:
- External flash memory doesn't wake up from sleep reliably enough to use it to store program code
- Heart Rate monitor not implemented at all - while we can communicate and read data from JS, some work is needed to: adjust HRM interval, light output/sensitivity, and using the analog readings to work out HRM. If someone has any code/datasheets for the VC31 it'd be a massive help!
- Pressure sensor not implemented internally but this is pretty trivial as Espruino has a BMP280 driver anyway.
- No bootloader implemented
- Display could have a fake 240x240 16bpp mode to provide support for standard Bangle.js apps
- Touchscreen can be put to sleep when display 'locked', and probably some other sources of excess power drain can be squashed.
The Espruino firmware can be built pretty easily with:
https://github.com/espruino/Espruino source scripts/provision.sh SMAQ3 BOARD=SMAQ3 RELEASE=1 make flash
SWD - the 4 pads on the rear of the watch are GND, SWDIO/SWDCLK, VCC. The charge cable has wires for all 4 leads brought out to the USB connector, so the easiest method is just to attach wires from a USB socket to an nRF52DK
LCD - LPM013M126C
PRESSURE - BMP280, I2C 0x3C(0x1E)
TOUCH - Hynitron CST816S, I2C 0x2A(0x15)
Hynitron CST816S https://wiki.pine64.org/index.php/PineTime#Touch_panel
Can write 0x03,0xe5 to turn off
HRM - VCare VC31, I2C 0x66(0x33)
No source or datasheets. Seems to produce raw ADC values
ACCEL - Kionix KX022, I2C 0x3C(0x1E)
COMPASS - GMC303, I2C 0x18(0x0C)
Battery voltage analog
Memlcd_CS (active high)
Needs to be toggled at 5ms or 250ms in sleep all the time
1=disp on, 0=disp off
out, pulsed high
In_pullup, edge detect
GPS power, active=1
TOUCH_RESET (active low)
TOUCH_INT (active low)