diff --git a/apps.json b/apps.json index 0097bc483..030134ea5 100644 --- a/apps.json +++ b/apps.json @@ -959,6 +959,7 @@ "name": "Espruino Flag Raiser", "icon": "app.png", "version":"0.01", + "readme": "README.md", "description": "App to send a command to another Espruino to cause it to raise a flag", "tags": "", "storage": [ diff --git a/apps/flagrse/README.md b/apps/flagrse/README.md new file mode 100644 index 000000000..819ebde36 --- /dev/null +++ b/apps/flagrse/README.md @@ -0,0 +1,76 @@ +# Espruino Flag Raiser + +An app to send a command to another Espruino to cause it to raise a flag. + +For this to work, you need to upload the following code to another +bluetooth Espruino device (the one with the flag attached) : + +``` +var FLAG_PIN = D14; + +var s = require("servo").connect(FLAG_PIN); +s.move(1,3000); // move to position 1 over 3 seconds + +var timeout; +function flag() { + if (timeout) clearTimeout(); + s.move(0.2,2000); + timeout = setTimeout(function() { + timeout = undefined; + s.move(1,2000); + },2000); +} + +setWatch(flag, BTN, {repeat:true}); + +NRF.setServices({ + "3e440001-f5bb-357d-719d-179272e4d4d9": { + "3e440002-f5bb-357d-719d-179272e4d4d9": { + value : [0], + maxLen : 1, + writable : true, + onWrite : function(evt) { + flag(); + } + } + } +}, { uart : false }); +NRF.setAdvertising({}, {name:"Flag"}); +``` + +## Wiring + +This is designed for an [MDBT42Q Breakout board](http://www.espruino.com/MDBT42Q) +but should work on any Bluetooth LE Espruino device - you just need to change `FLAG_PIN` +to the name of the pin that's connected to the servo motor. + +However, as designed: + +* Get an [MDBT42Q Breakout board](http://www.espruino.com/MDBT42Q) +* Connect `GND` to GND (black) of a 3.7v LiPo battery +* Connect `Vin` to positive (red) of the battery +* Take a servo motor and: + * Connect the Black wire to `GND` (LiPo GND) + * Connect the Red wire to `Vin` (LiPo 3.7v) + * Connect the White wire to `D14` on the MDBT42Q + +## How does it work? + +The code above changes the advertised name of the Espruino device to be +`Flag` (which the app then searches for). + +Then, it adds a service UUID `3e440001-f5bb-357d-719d-179272e4d4d9` (this +is just a random number we made up) with characteristic `3e440002-f5bb-357d-719d-179272e4d4d9` +(the same UUID with the second 16 bits incremented). When the characteristic +is written (with any data), `flag()` is called, which raises the flag. + +`flag()` itself uses the [servo module](http://www.espruino.com/Servo+Motors) +to allow the servo motor to be controlled easily. + +You might find the [Espruino About Bluetooth LE page](http://www.espruino.com/About+Bluetooth+LE) +is useful as an introduction to services and characteristics. + +### Don't want to use a servo motor? + +No problem, just replace `flag()` with a function that controls whatever you need +it to.