-
You could probably combine NFC and BLE to do it. I've already implemented BLE payments with DroidScript and Paypal on an Android tablet acting as a BLE server/advertiser... but I used a Puck as my test server before I got hold of the tablet. You might be able to trigger off the BLE comms process using the NFC and then authorise a payment using PayPal or Stripe after some handshaking over BLE
-
Just use this code on DroidScript (make sure you install the Puck.js plugin on DroidScript first)
app.LoadPlugin( "PuckJS" ); function OnStart() { lay = app.CreateLayout( "Linear", "VCenter,FillXY" ); txt = app.CreateText( "Press your puck" ); lay.AddChild( txt ); app.AddLayout( lay ); puck = app.CreatePuckJS(); puck.SetOnConnect( OnConnect ); puck.SetOnButton( OnButton ); puck.Scan( "Puck" ); } function OnConnect() { puck.WatchButton( true ); } function OnButton( state ) { txt.SetText( "Hello World" ); }
-
Actually the easiest way is to use free coding tool DroidScript with the free Puck.js plugin.
Here is the code (taken from the Puck.js plugin docs)app.LoadPlugin( "PuckJS" ); function OnStart() { lay = app.CreateLayout( "Linear", "VCenter,FillXY" ); var code = "digitalWrite( LED1, 1 )"; txt = app.CreateTextEdit( code, 0.9, 0.8, "MultiLine" ); lay.AddChild( txt ); app.AddLayout( lay ); layHoriz = app.CreateLayout( "Linear", "Horizontal" ); lay.AddChild( layHoriz ); btnSend = app.CreateButton( "Send", 0.3, 0.1 ); btnSend.SetOnTouch( btnSend_OnTouch ); layHoriz.AddChild( btnSend ); btnSave = app.CreateButton( "Save", 0.3, 0.1 ); btnSave.SetOnTouch( btnSave_OnTouch ); layHoriz.AddChild( btnSave ); btnReset = app.CreateButton( "Reset", 0.3, 0.1 ); btnReset.SetOnTouch( btnReset_OnTouch ); layHoriz.AddChild( btnReset ); microbit = app.CreatePuckJS(); microbit.Scan( "Puck" ); } function btnSend_OnTouch() { microbit.SendCode( txt.GetText() ); } function btnSave_OnTouch() { microbit.Save(); } function btnReset_OnTouch() { microbit.Reset(); }
-
Here is a more sophisticated solution that does not require a constant (battery draining) connection:-
http://forum.espruino.com/conversations/298102/#comment13448826
-
Hi Guys, You can easily do this in DroidScript with the BLE plugin
Here is the Puck.js code:-
function advertise(url) { var d = [0x03, 0x03, 0xAA, 0xFE, 0x13, 0x16, 0xAA, 0xFE, 0x10, 0xF8, 0x03 ]; d.push.apply(d,url.toString().split("")); d[4] = d.length-5; NRF.setAdvertising(d, {interval:100}); } advertise( "call.false"); function makeCall( call ) { advertise( "call."+call ); digitalWrite( LED3, call?1:0 ); } setWatch(function() { makeCall( true ); setTimeout( function() { makeCall(false) }, 5000 ); }, BTN, {edge:"rising", debounce:50, repeat:true});
And Here is the DroidScript code:-
app.LoadPlugin( "BluetoothLE" ); function OnStart() { //Create a text control to show debug log. lay = app.CreateLayout( "Linear", "VCenter,FillXY" ); txt = app.CreateText( "", 1, 1, "Log" ); lay.AddChild( txt ); app.AddLayout( lay ); //Create Bluetooth LE object. ble = app.CreateBluetoothLE(); ble.SetOnDevice( OnDevice ); //Check for Puck button presses every 3 seconds setInterval( CheckForButtonPress, 3000 ); txt.Log( "ready" ); calling = false; } function CheckForButtonPress() { //Do a brief scan to check for puck button press. ble.StartScan(); setTimeout( function(){ble.StopScan()}, 1000 ); } //Called when any BLE device is found by the scan. function OnDevice( name, address, bonded, rssi, data ) { txt.Log( name + ": " + data.url ); if( data.url=="https://call.true" ) MakeCall(); } //Make the call (limit to one every 5 seconds). function MakeCall() { if( calling ) return; txt.Log( "calling", "red" ); calling = true; app.Call( "01359555222" ); setTimeout( function(){calling=false;}, 5000 ) }
You could optionally put the DroidScript code inside a DroidScript service and have it always running in the background on your phone too :)
-
FYI: The ASUS ZenPad Z380M works as a GATT Server. The best app to test BLE server capability is the Nordics "nRF Connect" app on Google Play. You need devices with Android 5 or higher and hardware support included.
Worth mentioning that DroidScript has a BLE Beacon/Server plugin in beta (if you ask on the forum then you can probably get hold of it)
https://groups.google.com/forum/#!forum/androidscript
These devices supposedly also support BLE advertising:-
Phones and tablets
Google Pixel [XL], Pixel C, Nexus 6P, 6, 5X, 9, patched Nexus 5
Alcatel One Touch Idol 3 [Dual SIM], Fierce XL
Asus Zenfone 2 [Laser], Zenpad 8
Blackberry Priv
HTC 10, One M9, Desire (530/626s/820)
Huawei Ascend Y550, Honor 5X, Union
Lenovo K3 Note, Vibe P1m, Vibe K4 Note
LG:
G5, G4 [Stylus], G3, G Flex2, G Vista 2
V10, K10, L Bello, Lancet, Leon, Magna, Optimus Zone 3, Spirit, Tribute 5
Moto X Play, X Style, X2, G2, G3, G4, Z Droid, Droid Turbo 2
Nextbit Robin
OnePlus 2, 3
OPPO A33f
Samsung Galaxy:
S7 [Edge] - up to 8 concurrent running BLE advertisers
S6 [Active/Edge/Edge Plus], S5 [Active/Neo]
Note 5, Note Edge, Note 4
Tab S2 (8.0/9.7), Tab S (8.4/10.5), Note Pro, Tab A 9.7, Tab E
A5 2016 [Duos]
J5, J3 Duos
Alpha, Core Prime, Grand Prime, On7
Sony Xperia E5, X, Z5 [Compact/Premium], C5 Ultra, C3, M4 Aqua [Dual]
Xiaomi Redmi 3, Note 2, Note 3, Mi 4, Mi 4i, Mi 5, Mi Max
ZTE Maven, ZMAX 2, Zmax Pro, Warp Elite
Android TVs
Sony Bravia 2015 -
-
OK, I was wrong. It took 2 minutes :)
Here is the code:-
app.LoadPlugin( "PuckJS" ); function OnStart() { lay = app.CreateLayout( "Linear", "VCenter,FillXY" ); txt = app.CreateText( "Press your puck" ); lay.AddChild( txt ); app.AddLayout( lay ); puck = app.CreatePuckJS(); puck.SetOnConnect( OnConnect ); puck.SetOnButton( OnButton ); puck.Scan( "Puck" ); } function OnConnect() { puck.WatchButton( true ); } function OnButton( state ) { app.Call( "01359555555" ); }
-
-
-
Hi Guys,
I've just released a DroidScript plugin that you can use to easily make native Android apps (using JavaScript) that control and program your Puck. This plugin also works with older Android devices (as long as they support BLE), so you probably won't need to upgrade your phone :)
The plugin allows you to easily perform common tasks such as controlling the LEDs, reading the battery level, detecting button presses and getting the temperature, setting the NFC url etc. It also allows you to send complete JavaScript programs to the puck and read the console output(check out the 'Save code on the Puck' example which you can run straight from the docs)
It only takes 1 minute to install DroidScript and download the PuckJs plugin, so please give it a go and let me know what you think of it and if you have any suggestions for improvement.
https://play.google.com/store/apps/details?id=com.smartphoneremote.androidscriptfree
Regards
David -
Hi Guys, a new Puck.js plugin now available for DroidScript.
You can now very easily make Android apps using JavaScript to remotely control and program your Puck. This plugin also works with older Android devices (as long as they support BLE).
You can use the plugin in your apps to remotely control all functions of your Puck by sending JavaScript code to the interpreter inside the Puck via bluetooth. You can also receive the console output of your Puck programs to get information back to your app.
Although you can send raw JavaScript code to the Puck using the SendCode method, in many cases you may prefer to use the built-in convenience methods provided by this plugin. These methods allow you easily perform common tasks such as controlling the LEDs, reading the battery level, detecting button presses and getting the temperature, setting the NFC url etc.
The plugin docs also contains convenient run-able samples, including a simple Puck programmer.
Download DroidScript an have a go... it's free and incredibly easy to use.
Please give us feedback regarding the Puck.js plugin on the DroidScript forum:-
https://groups.google.com/forum/?fromgroups=#!forum/androidscriptRegards
David
Hi Guys,
I thought that you might be interested to know that the latest beta version of DroidScript now lets you target Espruino as a project type.
This allows programming of Espruino micro-controller boards directly from your Android Phone/Tablet using an OTG cable. It works completely off-line (even with Espruino modules), so you can use DroidScript as an in-the-field programming device even when you have no mobile signal. A USB serial terminal will popup when you run this type of project and allow debugging and testing etc too :)
This version of DroidScript is currently in beta and the APK can be directly downloaded here:-
http://androidscript.org/beta/DroidScript_157b1
(If you join the beta program then it will be available to you through Google Play too)
I would be grateful for feedback on the current functionality before I do a public release. If you would like to join the DroidScript beta forum, then please send a request to david@droidscript.org
Thanks
David