The Raspberry Pi Pico W board was launched with a WiFi 4 and Bluetooth 5.2 module based on the Infineon CYW43439 wireless chip in June 2022, and I wrote a tutorial showing how to connect to WiFi a few days after the launch, but nothing about Bluetooth.
That’s because while the Raspberry Pi Pico W hardware supports Bluetooth, we were told that Bluetooth was not enabled at the time, but might be at a later stage. Alasdair Allan, who is responsible for the Raspberry Pi documentation, said Bluetooth support was scheduled very soon, and the SDK 1.5.0 release of the Pico C SDK is now available with Bluetooth implemented using BTstack low footprint dual-mode Bluetooth stack.
Bluetooth support is still considered Beta and the SDK 1.5.0 implements the following key features and updates:
- New libraries for
- Bluetooth Low Energy (LE) support.
- Bluetooth Classic support.
- Bluetooth Sub Band Coding (SBC) encoder support.
- Bluetooth Sub Band Coding (SBC) decoder support.
- Bluetooth Network Encapsulation Protocol (BNEP) support using LwIP.
- Bluetooth Network Encapsulation Protocol (BNEP) support using LwIP with FreeRTOS for NO_SYS=0.
- Updated pico_cyw43_driver and cyw43_driver to support HCI communication for Bluetooth.
- Updated cyw43_driver_picow to support Pico W-specific HCI communication for Bluetooth over SPI.
- Updated cyw43_arch_init() and cyw43_arch_deinit() to additionally handle Bluetooth support if CYW43_ENABLE_BLUETOOTH is 1
Raspberry Pi Trading also release a range of Bluetooth code samples for Bluetooth audio, HID (keyboard/mouse), GATT client/server, Bluetooth LE, and more.
Some inquiring minds may have read the license of BTstack that reads in part:
Any redistribution, use, or modification is done solely for personal benefit and not for any commercial purpose or for monetary gain.
That would mean Bluetooth on Raspberry Pi RP2040 could only be used for personal projects, and not commercial products. But this was addressed in the related GitHub ticket and user “kilograham” said BTstack is licensed by Raspberry Pi Trading for a more permissive use on RP2040 like they did for the cyw43-driver.
Note that Bluetooth has been supported on other Raspberry Pi RP2040 boards for a while, for example, Arduino provides documentation to connect two Nano RP2040 Connect boards over BLE using an Arduino sketch. That was possible because the ESP32-based Nina W102 uBlox module found in the board was already supported in the Arduino IDE, while the Infineon CYW43439 required some more work to be added to the Pico C SDK.
Update: This post was initially published on January 4, 2023, and updated following the released of the SDK 1.5.0 on February 11, 2023
Jean-Luc started CNX Software in 2010 as a part-time endeavor, before quitting his job as a software engineering manager, and starting to write daily news, and reviews full time later in 2011.
Support CNX Software! Donate via cryptocurrencies, become a Patron on Patreon, or purchase goods on Amazon or Aliexpress
Why exactly the Bluetooth was not enabled by default on the Raspberry Pi Pico since the beginning then?
They had to write the code for it and also licensed the Bluetooth stack from a third party (BTstack).
The Pico doesn’t have WiFi or Bluetooth. They added WiFi/BT with the Pico W variant, and did so by adding a third party WiFi/Bluetooth module. WiFi was the priority, and they didn’t promise Bluetooth at launch – but suggested they would add it if they were able to. They now have.
Wondering what all can be done with this chip. TI has a couple of nice BLE chips that can be abused for many other proprietary protocols, maybe the CYW too???
Sounds like it’s a closed source stack? Bleah, there is a FOSS BT stack for Linux, I thought. I’m glad BT classic is supported since Espressif seems to have abandoned it. There are still lots of HCI devices that need it.
The link to BTstack is to its source code on GitHub. The only reason there’s a license is because it’s free for personal projects, but not for commercial products, and Raspberry Pi Trading obtained a license to cover the second case.
Bluetooth is now also supported on the MicroPython SDK.
https://github.com/micropython/micropython/commit/856e08b1931b88271816a2f60648f6ff332235b2