I am currently working on a project which required a connect to a VB.NET application via Bluetooth, using the VEX IQ Smart Radio to receive/send commands to the VEX IQ Brain.
Does anybody know whether this is possible and if there are any libraries / online resources that could facilitate the process?
VB.NET isn’t much of the problem, but the platform is.
The brain with smart radio behaves as BTLE Master/Central. Whatever device that wants to communicate with the brain needs to became a BTLE peripheral, announce itself. and wait for the brain to talk to it. This is possible on iOS, would be doable on Linux, and maaaayyybeeee in the latest Win10, see Bluetooth LE Peripheral Archives - Windows Developer Blog
I have never tried programming for Windows, the less then in VB.NET, but I think you could start with BluetoothAdapter Class (Windows.Devices.Bluetooth) - Windows UWP applications | Microsoft Learn
Try BluetoothAdapter.IsPeripheralRoleSupported to verify it might work for your system. Then you can follow this:
Bluetooth GATT Server - UWP applications | Microsoft Learn
The challenge would be to properly advertise for the brain to connect to you. For the details, please consult the SmartRadio SDK, a download attached to the product page:
Smart Radio - VEX Robotics
Thanks for the reply Nenik. I have in fact been reviewing Windows UWP BLE Peripheral based information published by Microsoft, but very little is available at this stage. I have done some tests but had no luck in successfully advertising to receive a reply from the brain.
By any chance you wouldn’t know if there is any other alternative to BLE to send/receive messages from/to the Brain and a windows device?
AFAIK that’s the only way. The key to get recognized by the brain and connected to is to advertise with a name containing the brain id.
The name has a format like “35544-1-5-1-1”, where 35544 is the brain ID (you need to check it using the brain UI.)
The other is to export proper service with proper properties. For programming data channel, I am using service UUID of 08590F7E-DB05-467E-8757-72F6FAEB13B5
and properties 08590F7E-DB05-467E-8757-72F6FAEB13F5 (rx) and 08590F7E-DB05-467E-8757-72F6FAEB1306 (tx). They form a virtual serial port - whenever you want to send data to the brain,
your peripheral sends a notification on the RX property. The brain sends its responses by writing to your TX property.
Once you have this virtual channel working, you’d need to dive deeper into the higher-level VEX protocol, but at this stage it’s the same protocol as used over the USB-serial link, so you can observe the commands and framing by using RobotC UI with the USB link and enabled message logging (RobotC would then display all the packets in the log window).
But you can learn more about the protocol from the VEXSmartRadio SDK, namely the iPhone implementation of VexCDCUtils.m (no, I can’t really code in ObjectiveC either, but it’s readable enough).
I do have a fully working communication between a brain and a little embedded device. The published documents I have linked above were good enough to enable me doing it.