====== BBC micro:bit ======
//Taken from the official DroidScript documentation with some more texts and API documentation.//
=====Getting Started=====
//:!: Please make sure you have the Espruino firmware file installed on your micro:bit before trying to use this plugin. See [[http://www.microbit-js.org]] for more details.//
//:!: You have to install the plugin over the plugin section within DroidScript//
=====Using the BBC micro:bit Plugin=====
In order to use the micro:bit, you must first load the plugin at the top of your script using the **LoadPlugin** method like this:
app.LoadPlugin( "MicroBit" );
Then you can create the microbit object like this:
microbit = app.CreateMicroBit();
You will need to connect to your micro:bit using Bluetooth and you can scan for it like this:
microbit = microbit.Scan();
===== MicroBit Methods =====
^ Method ^ Description ^
| [[microbit_analogread|AnalogRead( pin )]] | |
| [[microbit_connect|Connect( address )]] | |
| [[microbit_createcontroller|CreateController( size )]] | |
| [[microbit_disconnect|Disconnect()]] | Disconnects the Bluetooth link between your phone and the BBC micro:bit. |
| [[microbit_getimage|GetImage()]] | Returns full path to micro:bit top view image. |
| [[microbit_getversion|GetVersion( num, txt )]] | |
| [[microbit_oncancel|OnCancel()]] | |
| [[microbit_onconnect|OnConnect()]] | |
| [[microbit_ondevice|OnDevice( name, address, bonded, rssi )]] | |
| [[microbit_ondisconnect|OnDisconnect()]] | |
| [[microbit_onreceive|OnReceive( data )]] | |
| [[microbit_onselect|OnSelect( title, body )]] | |
| [[microbit_reset|Reset()]] | |
| [[microbit_save|Save()]] | |
| [[microbit_scan|Scan( address )]] | |
| [[microbit_scrolltext|ScrollText( text, interval )]] | |
| [[microbit_send|Send( msg )]] | |
| [[microbit_sendcode|SendCode( code )]] | |
| [[microbit_setleds|SetLEDs( bits )]] | |
| [[microbit_setonbutton|SetOnButton( callback )]] | |
| [[microbit_setonconnect|SetOnConnect( callback )]] | |
| [[microbit_setondevice|SetOnDevice( callback )]] | |
| [[microbit_setondisconnect|SetOnDisconnect( callback )]] | |
| [[microbit_setonevent|SetOnEvent( callback )]] | |
| [[microbit_setonmotion|SetOnMotion( callback )]] | |
| [[microbit_setonreceive|SetOnReceive( callback )]] | |
| [[microbit_setontemp|SetOnTemp( callback )]] | |
| [[microbit_setsplitmode|SetSplitMode( mode, p1, p2 )]] | |
| [[microbit_startscan|StartScan()]] | |
| [[microbit_stopscan|StopScan()]] | |
| [[microbit_watchaccelerometer|WatchAccelerometer( precision, interval, cancel )]] | |
| [[microbit_watchbutton|WatchButton( name, cancel )]] | |
| [[microbit_watchinput|WatchInput( pin, cancel )]] | |
===== Using MicroBitCtrl Control =====
This control shows micro:bit image which shows interactive LED array and Bluetooth indicator.
In order to use the MicroBitCtrl control, you must first load the plugin and initialize MicroBit object:
//Load the MicroBit plugin.
app.LoadPlugin( "MicroBit" );
//Called when application is started.
function OnStart()
{
//Lock screen orientation to Portrait.
app.SetOrientation( "Portrait" );
//Create our main layout.
lay = app.CreateLayout( "Linear", "VCenter,FillXY" );
lay.SetBackColor( "#222222" );
//Create the Microbit plugin.
microbit = app.CreateMicroBit();
//Create MicroBit controller.
ctrl = microbit.CreateController( 0.9 );
lay.AddChild( ctrl );
//Create horizontal layout for buttons
layButs = app.CreateLayout( "Linear", "Horizontal" );
layButs.SetMargins( 0,0.05,0,0 );
lay.AddChild( layButs );
//Create a bluetooth connect button.
btnConnect = app.CreateButton( "[fa-bluetooth-b]", 0.25, 0.15, "FontAwesome" );
btnConnect.SetTextSize( 66 );
btnConnect.SetTextColor( "#3366ff" );
btnConnect.SetOnTouch( txtBT_OnTouchDown );
layButs.AddChild( btnConnect );
//Create clear button.
btnClear= app.CreateButton( "[fa-times]", 0.25, 0.15, "FontAwesome" );
btnClear.SetTextSize( 66 );
btnClear.SetTextColor( "#ff4444" );
btnClear.SetOnTouch( btnClear_OnClick );
layButs.AddChild( btnClear );
//Add main layout to the app.
app.AddLayout( lay );
}
//Handle Bluetooth button press.
function txtBT_OnTouchDown()
{
microbit.Scan();
}
//Handle 'clear' button press.
function btnClear_OnClick()
{
ctrl.Clear();
}
===== MicroBitCtrl Methods =====
| [[microbitctrl_clear|Clear()]] | Clears LEDs to gray color. |
| [[microbitctrl_sendledstates|SendLEDStates()]] | Sends new LED states to micro:bit. |
| [[microbitctrl_setbluetoothstate|SetBluetoothState( connected )]] | If connected is true, then function sets Bluetooth indicator in blue color, if false, in gray color. |
| [[microbitctrl_setled|SetLED( x, y )]] | Sets LED in x and y position (range 0..4). It sets LED in red color. |
| [[microbitctrl_toggleled|ToggleLED( x, y )]] | Toggles LED in x and y position (range 0..4). It sets LED in red or gray color. |
| [[microbitctrl_imgtouch_ontouch|imgTouch_OnTouch( ev )]] | Custom LED array touch handler. |
=====Examples=====
====Send smiley face click to collapse contents ====
app.LoadPlugin( "MicroBit" );
function OnStart()
{
lay = app.CreateLayout( "Linear", "VCenter,FillXY" );
btn = app.CreateButton( "Smile" );
btn.SetOnTouch( btn_OnTouch );
lay.AddChild( btn );
app.AddLayout( lay );
microbit = app.CreateMicroBit();
microbit.Scan();
}
function btn_OnTouch()
{
microbit.SetLEDs( "0111010001001000010010001" );
}
====Send scrolling texts====
app.LoadPlugin( "MicroBit" );
function OnStart()
{
lay = app.CreateLayout( "Linear", "VCenter,FillXY" );
btn = app.CreateButton( "Send" );
btn.SetOnTouch( btn_OnTouch );
lay.AddChild( btn );
app.AddLayout( lay );
microbit = app.CreateMicroBit();
microbit.Scan();
}
function btn_OnTouch()
{
microbit.ScrollText( "Hello", 150 );
}
If you want to receive messages from your micro:bit, then you will need to create a function to be called when new messages are available (a callback function). You can set the name of your function like this:
microbit.SetOnReceive( MyFunc );
====Detect button presses click to collapse contents====
app.LoadPlugin( "MicroBit" );
function OnStart()
{
lay = app.CreateLayout( "Linear", "VCenter,FillXY" );
txt = app.CreateText( "Press a button on your micro:bit" );
lay.AddChild( txt );
app.AddLayout( lay );
microbit = app.CreateMicroBit();
microbit.SetOnConnect( OnConnect );
microbit.Scan();
}
function OnConnect()
{
microbit.SetOnButton( OnButton );
}
function OnButton( name, state )
{
txt.SetText( name + " : " + state );
}
====Detect movement click to collapse contents====
app.LoadPlugin( "MicroBit" );
function OnStart()
{
lay = app.CreateLayout( "Linear", "VCenter,FillXY" );
txt = app.CreateText( "Move your micro:bit" );
lay.AddChild( txt );
app.AddLayout( lay );
microbit = app.CreateMicroBit();
microbit.SetOnConnect( OnConnect );
microbit.Scan();
}
function OnConnect()
{
microbit.SetOnMotion( OnMotion );
}
function OnMotion( x, y, z )
{
txt.SetText( x + "," + y + "," + z );
}
You can also send programs to the micro:bit and have them run every time the micro:bit is powered up using the following methods (Advanced).
microbit.SendCode( code );
microbit.Save();
See http://www.espruino.com/MicroBit for more code samples that can be run directly on the micro:bit
bit
====Save code on the micro:bit click to collapse contents====
app.LoadPlugin( "MicroBit" );
function OnStart()
{
lay = app.CreateLayout( "Linear", "VCenter,FillXY" );
var code = "var text = 'Fred Blogs';\n" +
"g = Graphics.createArrayBuffer(5,5,1);\n" +
"g.flip = function(){show(this.buffer);};\n" +
"var x = 0;\n" +
"\n" +
"function draw()\n" +
"{\n" +
"if( x++ > text.length*5 ) x=0;\n" +
"g.clear();\n" +
"g.drawString( text, 5-x);\n" +
"g.flip();\n" +
"}\n" +
"\n" +
"setInterval(draw,150);\n";
txt = app.CreateTextEdit( code, 0.9, 0.7, "MultiLine" );
lay.AddChild( txt );
app.AddLayout( lay );
btnSave = app.CreateButton( "Save", 0.3, 0.1 );
btnSave.SetOnTouch( btnSave_OnTouch );
lay.AddChild( btnSave );
btnReset = app.CreateButton( "Reset", 0.3, 0.1 );
btnReset.SetOnTouch( btnReset_OnTouch );
lay.AddChild( btnReset );
microbit = app.CreateMicroBit();
microbit.Scan();
}
function btnSave_OnTouch()
{
microbit.SendCode( txt.GetText() );
microbit.Save();
}
function btnReset_OnTouch()
{
microbit.Reset();
}
===== Troubleshooting =====
There is a separate article on [[microbit:troubleshooting|Troubleshooting]] this plugin.