New functionality: Bluetooth for Pico W

In June last year, we launched Raspberry Pi Pico W, a $6 wireless-enabled variant of our Pico platform, built around our RP2040 microcontroller. In the year since, we’ve sold over half a million of these tiny boards, and they’ve found their way into countless projects, from singing fish to web servers to communicative house plants.

But one thing has been missing: Bluetooth support. Now that’s been fixed – and you don’t even need to buy a new Pico W.

Raspberry Pi Pico W, our $6 wireless-enabled variant of our Pico platform, built around our RP2040 microcontroller, now has Bluetooth support.

Pico W’s wireless functionality is provided by the Infineon CYW43439 device, which contains a 2.4 GHz radio providing both 802.11n Wi-Fi and Bluetooth 5.2, supporting Bluetooth Classic and Bluetooth Low Energy (BLE) functionality. At launch, our firmware and host-side software only enabled Wi-Fi, not Bluetooth.

Now, with the release of version 1.5.1 of the C SDK, and the latest MicroPython build, your existing Pico W has gained the ability to communicate with Bluetooth and Bluetooth LE devices. Specifically, we support Bluetooth Classic — with the temporary exception of ACL/SCO — along with both the BLE Central and Peripheral roles. Things are also configurable so you can enable Bluetooth Classic and BLE either individually, or have both of them available at the same time. Full details of supported Bluetooth protocols and profiles are available on GitHub.

Raspberry Pi Pico W, our $6 wireless-enabled variant of our Pico platform, built around our RP2040 microcontroller, now has Bluetooth support.
A temperature sensor peripheral device written in MicroPython running on a Pico W in the Punch Through LightBlue app on an iPhone, showing: advertising data (left), services (middle), and temperature service (right).

If you want to get started with Bluetooth and your Pico W the best place to start is our documentation site, and the Connecting to the Internet with Raspberry Pi Pico W book, which walks you through getting started with Bluetooth LE using both the C SDK and with MicroPython.

Update: Bluetooth support merged upstream into the official MicroPython repo.

Credits

Routing both Wi-Fi and Bluetooth traffic over the single three-pin SPI bus between RP2040 and CYW43439 has been a substantial engineering challenge. We’d like to express our thanks to our friends at Infineon, and in particular Graham Smith, for their assistance in productionising this capability.

Bluetooth Classic and BLE support in the SDK is provided by the BTstack library from BlueKitchen. Matthias Ringwald provided extensive assistance with integration and verification. Raspberry Pi Pico W customers benefit from a pre-paid commercial license for BTstack, allowing you to use Pico W as a component in your own products.

Here at Raspberry Pi, Peter Harper was responsible for the Pico W host-side software; Graham Sanderson developed the SDK; and Alasdair Allan wrote the docs.

Last, but not least, Damien George is (of course) responsible for making MicroPython work.

62 comments

Huw avatar

Thanks to all involved for your efforts!

Stewart Watkiss avatar

Excellent news – well done to all involved. Good timing as Bluetooth would be a great fit for a future project I’m planning.

Fondle avatar

Is there going to be an updated release of the book “Get Started with MicroPython on Raspberry Pi Pico”, which will include WiFi and Bluetooth?
I’d love to get my hands on that!

Liz Upton avatar

There will – it’s being written and edited at the moment. I don’t have an eta for you, but it’ll be available before the end of the year.

Fondle avatar

Fantastic <3
I'll eagerly await the release then. I'd also love to see more variety in the Raspberry swag, to support you in different ways! ;)
Thank you for the feedback and all your work!

Michael J Byron avatar

Liz,
In the new book you are writing for the PICO, please provide as much as possible re using the BLE and WIFI client by the PICO W.
Thanks

David avatar

C support?

Alasdair Allan avatar

Yes! As we said in the post, it is now supported as part of the 1.5.1 release of the C SDK.

Paul P avatar

Absolutely awesome! The low cost and incredible value of the Raspberry Pi Pico W truly makes it a revolutionary product. I’ve purchased dozens of these boards and will continue to buy more…

Ron Tsang avatar

That’s awesome. What is the current draw with bluetooth on?

Liz Upton avatar

I don’t think we’ve measured that yet – once we have it’ll be added to the documentation.

Emporer’s Clothes Missing avatar

Let’s be real. Have you not tried to buy one? There are no Rasberry Pi’s to be had.

Liz Upton avatar
Anders avatar

Talking of being real, this article is about Pico and they’ve been very available for the entire time of the shortages.

And the products that have been on shortage have started to appear in stock more often now.

Alan avatar

This article is about the Pico W which has always been fully available. ‘Full fat’ RPi products are rapidly returning too.

Samuel Earshw avatar

Will this code be open source? I mean for real, not that source available/personal use only/shared source/etc. license currently used?

Alasdair Allan avatar

What code are you talking about: the Pico C SDK, MicroPython, or BTStack? Or something else?

If it’s our own Pico C SDK, then this has been released under a BSD 3-Clause license. If you’re talking about MicroPython then that is released under an MIT license.

BlueKitchen’s BTStack is released under a non-commercial license, but we have negotiated a supplemental license which covers commercial use of BTstack with Raspberry Pi Pico W or Raspberry Pi Pico WH.

Andre Costa avatar

Hey Allan, how many BLE devices can you connect to the Pico at the same time?

Andre Costa avatar

Sorry, I meant Alasdair, not Allan.

Alasdair Allan avatar

The limits for BTstack and the hardware — the CYW4343 chip itself — are separate. It’ll be whatever the smaller of the two turns out to be.

For BTstack, it’s limited by min(MAX_NR_HCI_CONNECTIONS, MAX_NR_GATT_CLIENTS) in code, and you should be able to increase those limit in your own code.

For the chip there’s a physical scheduling limit that results from the set of current connection parameters and a hard limit in the controller (due to memory limitations). I cannot find any hard numbers in the CYW4343 datasheet for the limits on the chip itself. At this point our guess is that this number will be higher than the number of connections you’re going to get in practice.

My recollection is the BLE specification has a maximum limit of 7 (or 8) depending on how you interpret the standard. But it’s been a while since I waded through it.

In any case, it should not be much worse than other current Bluetooth controllers. The TL;DR is “some.”

Andre Costa avatar

Awesome! Thanks for the info!

Samuel Earshaw avatar

Does this include the entire code for the cyw43 driver? Or does it still have that non-free/non-osi license?

Lamarour avatar

Good news

Bill Hensley avatar

Brilliant! I love products that get better after you buy them. Especially ones that only cost $6. Y’all are awesome!

Chris Ainsley avatar

I wonder if this will allow for Bluetooth keyboards to be used with Picos that are also driving a VGA or DVI display?
A Pico driving a BBC Emulator to a TV without an additional USB cable would be brilliant.

Alasdair Allan avatar

Should be possible I think!

ukscone avatar

This is going to be really handy especially the micropython support (hope adafruit adds it to circuitpython too cuz HID) for some projects i’ve had to use non-rpi hardware for :( but now hopefully i can be pi’s all the way down and use the same webbluetooth, webserial & webhid based webapp frontend code

Liz Upton avatar

*Waves* Yoo hoo!

Ramji Patel avatar

Awesome! Thanks for informing

Max avatar

Congratulations on adding Bluetooth support! Really excited for integrating this in PiCockpit & also trying the audio playback through it :-)

JumpZero avatar

Very good! Thank you to everybody, and special thanks for making it available in MicroPython. Is the Raspberry pi foundation a MicroPython sponsor?

Alan avatar

This is an excellent addition. I note you’ve got for BTstack and handily provided a free licence – any thoughts on something similar for other Pis? I’ve been playing about with BT on the Pi0W and found it very finicky to try and get it working with not great documentation if trying to use for OBEX, etc – this looks like it might be a better route?

Dru Nelson avatar

Can you use Bluetooth and wifi at the same time?

Kalle avatar

I guess no… I had an interesting experience trying to run the sample micropython code (temp sensor). It didn’t work the first couple of attenpts, I just got an error that UUID didn’t exist…
But I am guessing that the reason is because I had a wifi app running as main.py and just hitting ‘stop’ in Thonny wasn’t enough…

So I tried flash nuke and loading the new firmware again. Then, the Bluetooth sample program worked without issue.

I am a newbie on Pico so I am probably wrong. Just my observation after half of days of fooling around.

Many thanks to be Raspberry PI team for releasing Bluetooth support, this should keep me entertained for quite some time now! ;)

Kalle avatar

It’s possible to use WiFi and Bluetooth at the same time. I managed to merge the temp sensor sample with a similar wifi program and the pico is visible both over BT and Wifi.
So, It works! 🤗

Ashley Whittaker avatar

You did NOT hang around?!

Kalle avatar

Sorry?

Ashley Whittaker avatar

Before playing with the new functionality!

Dru Nelson avatar

Thanks Kalle ! This is good to find out.

daghankee avatar

Brilliant!

Kim avatar

The liked repo says: “In Development: LE Audio and more.”
Can the CYW43439 do proper BLE Audio?

Martin avatar

I’m also interested in audio from an RP2040 (or a PiZero to be honest), and particularly if the LE Audio capability includes Auracast:
https://www.bluetooth.com/auracast/developers/

Tony Goodhew avatar

Is there a web page where we can download the code? I’m interested in the MicroPython examples.

Liz Upton avatar

Head over to the documentation that’s linked in this blog post!

Martin Cockerell avatar

It would perhaps be helpful if direct links to each example could be provided in the ‘Connecting to the Internet with Raspberry Pi Pico W’ in the same way as they are in the base Python SDK documentation – I was sure that the source code would be available somewhere, but it took me a while to find the correct github link.

Alasdair Allan avatar

Couldn’t do that until after the release as the pico-micrpython-examples repo is public so hadn’t been updated. There will be a link directly from the code in the documentation to the code in the examples repo next time I do a documentation refresh.

jesse avatar

Hi there, i was wondering will blue dot work on the pico w, if not is there a similar alternative? I was trying to use the pico w to control a robot.

Andrew avatar

Now can we get WPA3 support so we can connect these to modern wifi networks? WPA3 is recommended on wifi 6 and requires on wifi 6e and 7.

Ludovic avatar

Hi Allan,
Thank you so much for examples.
I’ve been trying IRQ_SCAN_RESULT with a regular BLE device (not with 2 pico) but I can’t get the correct ADV_DATA (especially no device name…) ? Would you give me an advice ?

Bernd Albrecht avatar

Good job, thanks to all involved.
I repeat jesse’s question which is not yet answered: Will Martin O’Hanlon’s APP BlueDot, a remote control for robot cars, be updated for MicroPython?

Liz Upton avatar

I don’t know; Martin doesn’t work at Raspberry Pi Ltd, he works over at the Foundation, which is a completely different organisation. If you’re wondering, why not open a GitHub issue?

Bernd Albrecht avatar

Thanks. Done.

Peter avatar

Excellent query. WHEN is bluedot going to be available for the Pico W ?? A GUI interface to control robots is needed – URGENTLY

Liz Upton avatar

That’s a question for the Blue Dot maintainers; have you left an issue on their GitHub?

Rhyl Cruz Kiio avatar

Hi… I’m a beginner in using microcontrollers so this might be an obvious question. I was wondering whether it’s possible to use the Bluetooth and Wifi simultaneously on the pico W.

Conrad avatar

Attempting to build the examples for micropython as shown in the “Connecting to the Internet with Raspberry Pi Pico W” book – however, there is no bluetooth library that can be found?? Any help? Are the examples 1:1 with the aioble library?

somebloke avatar

Does this work as HID? ie. can I send keypresses to an Android device via bluetooth? Any libraries or examples yet?

Parshva Patel avatar

Awesome News! However is there any example project by Raspberry pi that demonstrates to establish connection between Pico W and a Playstation controller PS3/PS4 via Bluetooth. Pico W is most likely to be used with robotic project and many of us prefer to use those gaming controller.

Ashley Whittaker avatar

Dive into these 3 pages of Pico W projects and see if inspiration hits you: https://www.raspberrypi.com/news/tag/raspberry-pi-pico-w/

The “Trekkie defects to build his first droid” post might be what you’re after.

Matthew Kitcat avatar

“Now, with the release of version 1.5.1 of the C SDK, and the latest MicroPython build, your existing Pico W has gained the ability to communicate with Bluetooth and Bluetooth LE devices. Specifically, we support Bluetooth Classic — with the temporary exception of ACL/SCO — along with both the BLE Central and Peripheral roles.”
From what I have been able to establish so far, Bluetooth Classic is not supported in MicroPython so I believe it is BLE on the Pico only, unless you are using the C SDK. It would be great if someone could prove me wrong but I wonder if this page should be amended as it strongly suggests Classic is supported.

Sammy1983 avatar

I have built a working remote control together with the Pico W. And a working robot with the Raspberry Pi 4. But I don’t know how to connect the two via Bluetooth and get the data from the remote to the robot.

Helen Lynn avatar

Head to our forums to ask this sort of question – you’re unlikely to get a useful answer by commenting on a blog post from four and a half months ago!

Comments are closed