I want to be able to read out information about connected Bluetooth Low Energy HID devices in Windows 8. My main application uses Qt, but I thought it could be much easier to get help from a Python script. Since Windows 8.1 supports Bluetooth Low Energy natively, I connect my mouse to it and tried using the pywinusb package, but it doesn't seem to be able to read out this wirelessly connected device, only connected HID devices.
How can I read out information about my BLE device with Python?
Related
I want to read gyroscope and acceleration values from an Arduino Nano 33 BLE board by using Bleak on a Windows OS. The code to make the discovery is the default Bleak code (see here). On Arduino I use a code similar to this one, except that I work with the gyroscope and the accelerometer.
Using the Android nRF Connect application I can view the device and the characteristic. Using Bleak instead I can't see any device.
Is it possible to have a problem with permissions on Windows?
I tried to connect it via Bluetooth to the pc first, but Windows 10 says: try to connect your device again. But the Arduino sketch sees the connection attempt as a Central BLE device connecting, in fact he enters the while loop and starts sending data.
How to solve it?
I am programming a EV3 in microPython 2. I have another python 3 program running on a laptop and this program should send data to the EV3 wirelessly. Is it possible via bluetooth? If it isn't possible how should I do it?
I don't know the answer to this and I don't have an EV3 brick to try this with. As you haven't said what you have tried, I thought I would share some ideas for experiments to try.
I looked at the ev3-micropython documentation about Bluetooth and my search gave me this:
https://pybricks.github.io/ev3-micropython/messaging.html
This looks like the Bluetooth communication might be based on Bluetooth Serial Port Profile (SPP) so it might be worth seeing if SPP clients can communicate.
A first experiment might be to start a BluetoothMailboxServer on the EV3 and see if are you able to pair with it from your PC? (By the way, what OS are you running on your laptop?).
If you have Windows, do these instructions from this URL help:
https://www.instructables.com/id/Raspberry-Pi-Bluetooth-to-PuTTY-on-Windows-10/
On your Windows 10 Desktop/ Laptop first enable the Bluetooth
transceiver. Select Start, Settings, then Devices. At this point
resist the intuitive temptation to Add bluetooth or other device.
Instead, scroll down to 'Related settings', and select Devices and
printers. Find your Desktop/ Laptop under 'Devices', right click it,
then select Bluetooth settings from the pop up menu. This brings up
the 'Bluetooth settings dialogue:
Select the COM ports tab, then select Add... to bring up the 'Add COM
port' dialogue. Here we select the 'Outgoing' radio button, and then
click on Browse... This will yield the 'Select Bluetooth Device'
dialogue. All going well, you should see your Raspberry Pi listed as a
discovered device. Select the Raspberry Pi device listed, and click OK
twice. This should take you back to the COM ports tabbed dialogue, and
list a COM port that is now associated with the Windows 10/ Raspberry
Pi pairing. Take note of which COM port has been assigned.
On a Linux laptop, does creating a client this way work:
http://blog.kevindoran.co/bluetooth-programming-with-python-3/
Another alternative on Linux, is create a client this way:
https://bluedot.readthedocs.io/en/latest/btcommapi.html#bluetoothclient
If you have an Android phone, you could try pairing with the EV3 service from the phone and then trying to connect with this SPP app:
https://play.google.com/store/apps/details?id=de.kai_morich.serial_bluetooth_terminal
The other alternative is that the BluetoothMailboxServer might be using Bluetooth Low Energy (BLE). If that is the case, then you can find more information if you have a recent version of the Chrome browser on your laptop. Go to the URL chrome://bluetooth-internals/#devices and do a start scan. Does the EV3 device turn up?
About communication between EV3 and python code running on a laptop,
First we need to install the module python-ev3dev2 with the command:
pip install python-ev3dev2
About its usage, you can refer to ev3dev2.
Ensure that your ev3dev device is turned on and has a network connection to the host computer. Here Bluetooth works and there's a demo you can refer to: vscode-hello-python.
I have a device with USB interface which I can connect to both my Ubuntu 18.04 machine and my Windows 10 machine. On Windows 10 I have to install the CP210x driver and manually attach it to the device (otherwise Windows tries to find the device manufacturer's driver - it's a CP210x serial chip), and in Linux write the vendorID and productID to the cp210x driver to allow it to attach to ttyUSB0. This works fine.
The Windows driver is from SiliconLabs - the manufacturer of the UART-USB chip in the device.
So on Windows it is attached to COM5 and Linux to ttyUSB0 (Ubuntu, Raspbian)
Using Wireshark I can snoop the usb bus successfully on both operating systems.
The USB device sends data regularly over the USB bus and on Windows using Wireshark I can see this communication as "URB_INTERRUPT in" messages with the final few bytes actually containing the data I require.
On Linux it seems that the device connects but using Wireshark this time I can only see URB_BULK packets. Examining the endpoints using pyusb I see that there is no URB_Interrupt endpoint only the URB_Bulk.
Using the pyusb libraries on Linux it appears that the only endpoints available are URB_BULK.
Question mainly is how do I tell Linux to get the device to send via the Interrupt transfer mechanism as Windows seems to do. I don't see a method in pyusb's set_configuration to do this (as no Interrupt transfer endpoints appear) and haven't found anything in the manufacturer's specification.
Failing that, of course, I could snoop the configuration messages on Windows, but there has to be something I'm missing here?
Disregard this, the answer was simple in the end: Windows was reassigning the device address on the bus to a different device.
I have set up a pyperclip script in python 3.6.3 which allows me to control my computer with keyboard requests. Is it possible to send these requests to another computer with python installed via USB, so that these actions are now carried out on the second computer?
It is possible to link two computers via USB and to communicate via USB using python. You have to use a special USB cable (https://www.quora.com/Is-it-possible-to-connect-2-computers-with-a-USB-cable), and you can use a library like pyusb to achieve that.
However it might be complicated as the USB protocol works as master/slave and a computer is not designed to be a slave on an USB bus (it is the master). A simpler solution if you computers are connected on a network would be to use sockets (https://docs.python.org/3/library/socket.html), or even a python HTTP server/client application (https://docs.python.org/3/library/http.server.html).
I am really frustrated and have no idea where to search for an answer.
Currently I am working on a project to detect drowsiness with an ECG device (Zephyr Bioharness 3). The device works but I can't find it with windows (For example like this). I tried several things:
Find the device with my Smartphone -> works
Find the device with an Ubuntu on the same Laptop -> works
Connect directly on Win7 via Bluetooth with this Python Script: Gist -> connects and sends data
Find other Bluetooth devices with my Laptop on Win7 -> Bluetooth radio is dound
COM port for (virtual) serial connection to a bluetooth device (device manager)
What I am trying, is getting this script to work: ZephyrApp. Beside some compatibility problems with QT and serial (which I was able to fix), the programm hangs here protocol.py. I suspect the problems of not finding the device relates to the problems with the program. I know this is very special case, but hope anyone has an idea, how to fix this.
Regards,
paul
EDIT: Another PC with Win7 can't detect the device as well, it seems it is a Windows problem.
The device can't be detected with Win7, but I found a way to connect via bluetooth directly: https://gist.github.com/darkopetrovic/2127217