-
• #2
Is the OS properly up to date?
What happens if you wait for a few seconds? I think sometimes the Bluetooth stack can take a while to register a disconnection properly.
-
• #3
Actually I may have misunderstood - so you're trying to connect using your own code in Node.js, and are having trouble getting it to disconnect?
Could you share a simple bit of code where it happens for you?
-
• #4
Yes the OS ( raspbian Stretch ) is up to date, i use the noble module to scan the puck when the button is clicked , the code :
// get the mac address of new puckJS - we use noble.js to scan BLE device whose peripheral name is Puck.js then get the mac address and store it function onDiscovery(peripheral) { if (peripheral.advertisement.localName == undefined || peripheral.address == 'unknown') { return; } if (peripheral.advertisement.localName.includes("Puck.js")) { if (peripheral.address == puckJSdevice) { if (!peripheral.advertisement.manufacturerData || peripheral.advertisement.manufacturerData[0] != 0x90 || peripheral.advertisement.manufacturerData[1] != 0x05) return; var data = peripheral.advertisement.manufacturerData.slice(2); //console.log(data); if (lastAdvertising[peripheral.address] == undefined) { lastAdvertising[peripheral.address] = data.toString(); } // check for changed services if (lastAdvertising[peripheral.address] != data.toString()) { console.log(lastAdvertising[peripheral.address], data.toString()); puckClicked.onDeviceChanged(peripheral.address, data); } else { currentNumberClicked = data.readInt8(); justOnePass = 0; } lastAdvertising[peripheral.address] = data; } if (puckJSnoble) { return; } puckJSnoble = peripheral; if (puckJSdevice) { return; } else { console.log("passage config puck"); puckJSdevice = peripheral.address; //save the new PuckJS button mac address in the database in tv_config.puckjs request(serverFamily + '/1.0/tvs/addPuckJSConfig/' + process.env._MAC + '?puckjs=' + puckJSdevice, function (error, res) { console.log(error || res.message, 'puck button saved'); }); resetScriptPuck();
Then when the clicked button event is triggered i use this code to light the LED ( with espruino ) :
// send command to puck - light the LED exec('espruino -t -p ' + puckJSdevice + ' -e "LED2.set();"',function(error,stdout,stderr){ console.log("ESPRUINO LIGHT THE LED error : ", error, "stdout : ", stdout, "stderr : ",stderr); });
On node.js server start i reset and upload this code to puck :
var presses = 0; setWatch(function() { if(presses > 100){presses=0} presses++; LED2.reset(); LED3.reset(); NRF.setAdvertising({},{manufacturer: 0x0590, manufacturerData:[presses]}); }, BTN, {edge:"rising", repeat:1, debounce:50})
Sometimes it cannot light the led and i have this message : unable to connect "MAC ADDRESS"
or it stop to emit DATA from BLE ( because it still connected to my raspberry controller after the LED is turned on ).
Would it be a solution to force remove the connected puck with "bluetoothctl" before sending the expression with espruino to avoid this? or just waiting a few seconds before trying to connect ?Thanks !
-
• #5
Ok - so you call into the espruino CLI to send data to Espruino?
I imagine that would cause some problems as you have two separate processes trying to use the BLE device? Could you not use the same
espruino
package from Node.js itself? See https://github.com/espruino/EspruinoTools#npm-moduleYou may also have to explicitly call
noble.startScanning()
again after you complete the connection as well... -
• #6
OK thank you i'll try it !
-
• #7
I have tried with the npm module but i have the same problem. When i want to send an expression after uploading a JS script .. i have "Una"
-
• #8
** i have "Unable to connect"
Thank you -
• #9
could it be a battery problem ? now i have " Error Getting services/characteristics " when i send a expression with module "espruino.expr(puckJSdevice, 'LED2.set()',function(){ noble.StartScanning([],true); }).
Thank you.
-
• #10
You could try with a fresh battery just in case . You could also try
/etc/init.d/bluetooth restart
just in case the OS has got itself confused.Have to stopped scanning before calling
espruino.expr
? I guess that might help.
Hello, i have a problem with the command line Espruino and noble in my node.js server.
When i want to disconnect et reconnect my device, it often stuck in 'connecting' status.
I'm working with a Raspberry Pi 3 B+ with Raspbian Stretch OS.
my HCIDUMP when i connect device with some code sent to puck.js :
then when i want to disconnect and reconnect with another code
the Espruino command line tool STDERR :
noble warning: unknown handle 64 disconnected!
Port "c6:93:50:de:bc:bd" not found
Unable to connect!
It seems like puck.js stay connected with my bluetooth controler after a simple espruino command
"espruino -t -p c6:93:50:de:bc:bd -e 'LED3.set();'"
Thanks !