-
• #2
Try using the Espruino code from https://www.espruino.com/BLE+Advertising#python
And then use:
#!python3 # Scans for and outputs BLE advertising containing manufacturer data 0x0590 # needs: `pip install bleak` import asyncio import array from bleak import BleakScanner from bleak import BleakClient async def main(): stop_event = asyncio.Event() def callback(device, advertising_data): # print(advertising_data) # debug if advertising_data.manufacturer_data and (0x0590 in advertising_data.manufacturer_data): d = advertising_data.manufacturer_data[0x0590] print("Found Espruino Manufacturer data", device) if advertising_data.local_name: print(" Name: ", advertising_data.local_name); print(" Data: ", ", ".join(hex(b) for b in d)) # You could call stop_event.set() here if you found the device you want # and scanning will be stopped pass async with BleakScanner(callback) as scanner: await stop_event.wait() # Start scanning asyncio.run(main())
(I'll update the above link with the Bleak example - previously it only included code for Python Bluepy).
It should be pretty straightforward to modify it to output accelerometer data, but let me know if you have any issues
-
• #4
Just use
NRF.setAdvertising(..., {interval:20})
on the Puck - 20ms is the fastest I think (50 times/sec) -
• #5
I did:
NRF.setTxPower(4);
NRF.setConnectionInterval(20);
NRF.setAdvertising({}, { manufacturer: 0x0590, manufacturerData: [pushbuttonCounter] },{interval:20});but still get the same result (or actually a tiny slower). I get a burst of 5 lines printed every second or so. Would I need to change something on the bleak side?
-
• #6
You need:
NRF.setAdvertising({}, { manufacturer: 0x0590, manufacturerData: [pushbuttonCounter], interval:20});
It's meant to go in the second argument, not the third - then hopefully things will work better
-
• #7
but still get the same result
and BTW, if you expect the
[pushbuttonCounter]
to magically update the advertising data automatically when it changes then it won't do that -
• #8
Thanks!
got it working, as blemidi on osx is broken in term of auto reconnection I am basically making a workaround with advertisements. I am using the motion example, is there a way to advertise at interval 20 but only when the device is moving?here is the code:
NRF.setTxPower(4); //NRF.setConnectionInterval(20); function rescaleToMidiCC(value, oldMin, oldMax) { var newMin = 0; var newMax = 127; var rescaled = Math.round((value - oldMin) * (newMax - newMin) / (oldMax - oldMin) + newMin); rescaled = Math.min(127, Math.max(0, rescaled)); return rescaled; } require("puckjsv2-accel-movement").on(); var idleTimeout; Puck.on('accel',function(a) { LED.set(); if (idleTimeout) clearTimeout(idleTimeout); idleTimeout = setTimeout(function() { idleTimeout = undefined; LED.reset(); //active = false ; },500); const accel = Puck.accel(); var x = ((accel.acc.x/128000)*10) *127; var y = ((accel.acc.y/128000)*10) *127; x = rescaleToMidiCC(x, -120, 120); y = rescaleToMidiCC(y, -120, 120); print(x + " " + y); NRF.setAdvertising({}, { manufacturer: 0x0590, manufacturerData: [x,y], interval:20}); });
-
• #9
Yes - looks like you're using
require("puckjsv2-accel-bigmovement")
anyway and even have the idle timeout, so all you need is:NRF.setAdvertising({}, { manufacturer: 0x0590, manufacturerData: [x,y], interval:375});
inside your
idleTimeout = setTimeout(function() {
function
Hello,
is annoying out there managed to read accelerometer datas of the puckjs thru advertisement (manufacturer data) using the bleak python library?
I tried all the different tutorial on the subject but not luck :/