BANGLE.JS BANGLE.JS CREATING A SMART WATCH WITH JAVASCRIPT - - PowerPoint PPT Presentation

bangle js bangle js
SMART_READER_LITE
LIVE PREVIEW

BANGLE.JS BANGLE.JS CREATING A SMART WATCH WITH JAVASCRIPT - - PowerPoint PPT Presentation

BANGLE.JS BANGLE.JS CREATING A SMART WATCH WITH JAVASCRIPT CREATING A SMART WATCH WITH JAVASCRIPT Gordon Williams, @Espruino https://youtu.be/BjgFC0M3iMk NRF52832 NRF52832 Bluetooth LE on-chip ARM Cortex M4 @ 64 MHz 64kB RAM, 512kB Flash


slide-1
SLIDE 1

BANGLE.JS BANGLE.JS

CREATING A SMART WATCH WITH JAVASCRIPT CREATING A SMART WATCH WITH JAVASCRIPT Gordon Williams, @Espruino

slide-2
SLIDE 2
slide-3
SLIDE 3
slide-4
SLIDE 4

https://youtu.be/BjgFC0M3iMk

slide-5
SLIDE 5
slide-6
SLIDE 6
slide-7
SLIDE 7
slide-8
SLIDE 8

NRF52832 NRF52832

Bluetooth LE on-chip ARM Cortex M4 @ 64 MHz 64kB RAM, 512kB Flash (reprogrammable)

slide-9
SLIDE 9
slide-10
SLIDE 10
slide-11
SLIDE 11
slide-12
SLIDE 12
slide-13
SLIDE 13

SPECS SPECS

nRF52 ARM Cortex-M4 with Bluetooth LE 240x240x16 bit touchscreen LCD GPS (GPS, Glonass, Beidou) 3 Axis Compass 3 Axis Accelerometer 4MB flash Heart Rate Monitor

slide-14
SLIDE 14
slide-15
SLIDE 15
slide-16
SLIDE 16
slide-17
SLIDE 17
slide-18
SLIDE 18
slide-19
SLIDE 19
slide-20
SLIDE 20
slide-21
SLIDE 21
slide-22
SLIDE 22
slide-23
SLIDE 23
slide-24
SLIDE 24
slide-25
SLIDE 25
slide-26
SLIDE 26

$ unzip -l F7_dfu_g095cb_C07_v1.66.15.zip | grep hex 47436 1980-00-00 00:00 res/raw/ble_app_hrs_dfu_s110_v7_1_0.hex 54064 1980-00-00 00:00 res/raw/ble_app_hrs_s110_v6_0_0.hex 60460 1980-00-00 00:00 res/raw/ble_app_hrs_s110_v7_0_0.hex 52620 1980-00-00 00:00 res/raw/ble_app_rscs_s110_v6_0_0.hex 59052 1980-00-00 00:00 res/raw/ble_app_rscs_s110_v7_0_0.hex 2600 1980-00-00 00:00 res/raw/blinky_arm_s110_v7_0_0.hex 1916 1980-00-00 00:00 res/raw/blinky_s110_v7_1_0.hex

slide-27
SLIDE 27

0000000 fa58 2000 c5b1 0001 c5b9 0001 c5bb 0001 0000010 c5bd 0001 c5bf 0001 c5c1 0001 0000 0000 0000020 0000 0000 0000 0000 0000 0000 c5c3 0001 0000030 c5c5 0001 0000 0000 c5c7 0001 c5c9 0001 0000040 c5cb 0001 c5cb 0001 0995 0002 0271 0002 0000050 02a1 0002 c5cb 0001 f881 0001 00a5 0002 0000060 05f5 0002 0609 0002 c5cb 0001 c5cb 0001 0000070 c5cb 0001 c5cb 0001 c5cb 0001 c5cb 0001 0000080 0a89 0002 008d 0002 c5cb 0001 c5cb 0001 0000090 02c9 0002 c5cb 0001 02cd 0002 c5cb 0001 00000a0 c5cb 0001 c5cb 0001 c5cb 0001 c5cb 0001 00000b0 c5cb 0001 c5cb 0001 0000 0000 0000 0000 00000c0 c5cb 0001 c5cb 0001 c5cb 0001 c5cb 0001 00000d0 c5cb 0001 c5cb 0001 c5cb 0001 0000 0000

slide-28
SLIDE 28
slide-29
SLIDE 29

0x2000fa58 -> Initial stack pointer 0x0001c5b1 -> Reset vector (entrypoint) 0x0001c5b9 -> NMI 0x0001c5bb -> Hardfault handler ...

0000000 fa58 2000 c5b1 0001 c5b9 0001 c5bb 0001

slide-30
SLIDE 30
slide-31
SLIDE 31
slide-32
SLIDE 32
slide-33
SLIDE 33
slide-34
SLIDE 34
slide-35
SLIDE 35
slide-36
SLIDE 36
slide-37
SLIDE 37

CHROME LITE MODE CHROME LITE MODE

slide-38
SLIDE 38

OTHER ENGINES OTHER ENGINES

V7 Duktape JerryScript ...

slide-39
SLIDE 39

ESPRUINO ESPRUINO

JS interpreter for Microcontollers Open Soure MPLv2 Can run in 128kB Flash under 6kB RAM Not 100% ES5, but RegEx, Classes, Promises, Arrow fns, Template Literals http://www.espruino.com/Features

slide-40
SLIDE 40

Typical PC Typical BLE Microcontroller CPU 3GHz x2 64MHz x1 RAM 8 GB 64 kB ROM 256 GB 512 kB Bytes / MHz 44 0.01

slide-41
SLIDE 41

MEMORY FRAGMENTATION MEMORY FRAGMENTATION

A is allocated |AAAA | Allocate BCDEFG... |AAAABCDEFGHIJLKMNOPQRSTUVWXYZ | De-allocate odd items |AAAA C E G I L M O Q S U W Y | 15 memory elements free, but max we can allocate is 3!

slide-42
SLIDE 42

FIXED SIZE VARIABLES FIXED SIZE VARIABLES

Offset Name STRING STR_EXT NAME_STR NAME_INT INT DOUBLE OBJ/FUNC/ARRAY ARRAYBUFFER 0 - 3 varData data data data data data data nativePtr size 4 - 5 next data data next next

  • data

argTypes format 6 - 7 prev data data prev prev

  • data

argTypes format 8 - 9 first data data child child

  • first

stringPtr 10-11 refs refs data refs refs refs refs refs refs 12-13 last nextPtr nextPtr nextPtr

  • last
  • 14-15

Flags Flags Flags Flags Flags Flags Flags Flags Flags

slide-43
SLIDE 43

CODE SIZE CODE SIZE

Based on code to create a Mandelbrot fractal:

Format Size (Bytes) Normal JS 300 Minified JS 167 Minified Tokenised JS 155 Spidermonkey Bytecode 270 GCC -Os 290

slide-44
SLIDE 44

64 blocks, 11 bytes/block => 700 bytes

slide-45
SLIDE 45
slide-46
SLIDE 46

WEB BLUETOOTH WEB BLUETOOTH

Access Bluetooth LE from a Web Page Chrome/Opera/Edge Windows 10, Mac OS, Chromebook, Android, Linux, Pi WebBLE app for iOS Packages for Web Bluetooth on Node.js Espruino for Microcontrollers

slide-47
SLIDE 47

Tools

slide-48
SLIDE 48

App Store

slide-49
SLIDE 49

Speedometer

Bangle.setGPSPower(1); Bangle.setLCDMode("doublebuffered"); var lastFix = {fix:0,satellites:0}; function onGPS(fix) { lastFix = fix; g.clear(); g.setFontAlign(0,0); g.setFont("6x8"); g.drawString(fix.satellites+" satellites",120,6); if (fix.fix) { var txt = (fix.speed<20) ? fix.speed.toFixed(1) : Math.round(fix.speed); var s = 80; g.setFontVector(s); g.drawString(txt,120,80); g.setFont("6x8",2); g.drawString("km/h",120,80+16+s/2); } else { g.setFont("6x8",2); g.drawString("Waiting for GPS",120,80); } g.flip(); }

  • nGPS(lastFix);

Bangle.on('GPS', onGPS);

slide-50
SLIDE 50

Emulation

slide-51
SLIDE 51

BANGLE.JS BANGLE.JS

Currently on pre-order, shipping end of March.

slide-52
SLIDE 52
slide-53
SLIDE 53

banglejs.com

BANGLEJS.COM BANGLEJS.COM ESPRUINO.COM ESPRUINO.COM

@ESPRUINO @ESPRUINO