I don't see how your post applies?
@Robin, @hansamann is aware of that... I confidently assume, because he has puck specific forum posts since quite a while ago. In this conversation he asks about an issue connecting to MDBT42 (on puck, pixl or plain MDBT42) from a raspi using python 2.7 / 3.5.
@hansamann, I had some heavy exposure to python in the apple heart study in 2018, but that was 2.7. Did not venture into 3.5. From the error it looks you pass a string (
command[0:20]). A string looks to me usually as a byte (array) object, but with uni-code other than 8-bit, it may be a word (16-bit word) object. May be you have to pass a 8-bit byte array? ...the 20 first chars as 8-bit of this
commandstring as a byte object? - ...my take from this stack trace...
Just to be sure, you're using this code? https://www.espruino.com/Interfacing#python
As-is, or did you tweak
command? It's possible that there's some edge case if
commandwas exactly a multiple of 20 characters (or something like that)?
Visit google. Type in
TypeError: a bytes-like object is required, not 'str',
I'd say replacing decode by encode might fix the error.
Thx all, trying this out next time I am close to my pixl.js, might have a chance to try on a puck earlier.
that's the code I used - initially. I added some () for the prints to make them python3 compatible, the version I have on the pi is 3.5 (not the latest, also complicated, as string substitution with these fStrings - yeah - is not possible for example...).
I'll give the python3 recommendations a try back in the office (wed), for now I tried to go with useing node.js - to start with I wanted to use my macbook with mojave. So the whole noble lib seems a mess - as the docs suggest I went with noble-mac now.
Interestingly, I was able to use my new pixl.js with the example - the code example found the device, connected, sent the command and disconnected. I did need to switch from : to - in the device address -somehow the devices addresses have - for me...
Now at home tried it with a puck, latest version.
pro:pixltests i511648$ node puckjs.js Noble: stateChange -> poweredOn Found device: 80-82-23-2d-de-d5 Found device: 80-82-23-2d-de-d5 Found device: ef-22-d8-d6-2e-71 BT> Connecting Found device: ef-22-d8-d6-2e-71 BT> Connecting BT> Connected BT> Connected
All I changed in my code, see below, is the device address. I connected via the web ide, NRF.getAddress() and replace the : with - so the device is found.
Really the same code (https://www.espruino.com/Interfacing#node-js) except the address line changed to:
var ADDRESS = "ef:22:d8:d6:2e:71".replace(/:/g, "-");
BTW find it super amazing that the browser with web bluetooth now seems to be the most stable BLE api you can find out there :-)
Great, thanks! So you're saying the address format for the node.js code is wrong? If so I'll change that in the docs.
It's possible they updated
nobleto change the address format for no apparent reason, in which case I could just ensure that I compare the addresses all lowercase and without separators.
I've found the python3 example code by now -but somehow this does not work on my pi:
This is on a pi with python 3.5, bluepi itself seems to work and run. Also I would like to use python3 - but I am really not an expert here. Any ideas?