Today, 30th June 2022, great news was raised from the web: a new Raspberry PI microcontroller has been released.
There’s something really important in this new product. While in Jan 2021 the Foundation entered into the microcontrollers world with the RPI Pico (see Raspberry PI Pico: Foundation entering the micro-controllers universe article for the launch news), the experts have noted since the first time that something was missing. The RPI Pico was a great board, really flexible and able to perform a great number of tasks. The compatibility both with C++ and MicroPython made it the perfect development board for those wishing to reuse their experience both from other microcontrollers (like Arduino) and from the Raspberry PI Computer boards, where Python is a milestone in programming with the GPIOs.
The main feature missing was that the new Raspberry PI Pico wasn’t able to connect with a network as there wasn’t any networking capability like WiFi, Ethernet or even a basic Bluetooth.
This has been a strong limitation, as the RPI Pico has a very competitive form factor and wide potential use in the IoT world.
For this missing feature, many industry producers had tried to fill the gap by putting in the market external solutions (like, for example, the WIZnet Ethernet HAT or even connecting the ESP32 to Raspberry PI Pico (this last resulting in 2 microcontrollers collaborating for what a single microcontroller can perform without problems).
From today, the Raspberry PI Pico W solves all of these problems with a microcontroller capable to connect to a WiFi network.
From the size point of view, nothing has changed. The old RPI Pico was 51mm x 21mm. The new one keeps the same dimensions:
The more expert eyes will note that a difference came for the debug PINs. They were previously at the bottom side of our board, while they have been moved just upon the WiFi module in the new configuration, keeping the same pinout:
Raspberry Pi Pico W uses the Infineon CYW4343 to get a single-band 2.4GHz wireless interface (802.11n). So, for the moment the 5GHz connection is not supported. It can use WPA3 authentication, which is one of the most common WiFi authentication methods currently in the home routers.
Looking at the official Infineon CYW4343 page, it seems that the chip is also capable to support a Bluetooth communication. I may suppose, for the moment, that the MicroPython firmware to support Raspberry PI Pico Bluetooth is still not developed and the market need for WiFi connection has been so big that the Raspberry PI Foundation decided to start with the WiFi only.
One limitation comes from the WiFi module using one of the 2 SPI channels available from Raspberry PI Pico. This means that when using WiFi you will be able to connect only 1 more SPI device. This can be a limitation only for those projects requiring 2 external devices able to use only SPI communication, but it will rarely impact a classic DIY project. What is missing, from a first look, is an indication of what SPI channel is used from WiFi (SPI0 or SPI1?)
Finally, the Foundation gives a few recommendations to get the best performance from the WiFi connection. For this the Foundation warns that “putting metal under or close by the antenna can reduce its performance both in terms of gain and bandwidth. Adding grounded metal to the sides of the antenna can improve the antenna’s bandwidth.”.
How to Use the Raspberry Pi Pico W WiFi with Micropython
At the moment, the default MicroPython firmware (to be clear, the one available from Thonny IDE) doesn’t support the Raspberry PI Pico W WiFi.
You will need to download the specific Foundation firmware from this link: UF2 image with networking support and install it manually (connect the Pico to USB with the Bootsel button pressed to your PC, wait for the external storage appearing and then copy there the UF2 image).
In the next future, the Foundation assures it’s commitment to upstream the changes to the main MicroPython repository soon.
With this firmware, the network scan will be as simple as using the following MicroPython commands:
import network wlan = network.WLAN(network.STA_IF) wlan.active(True) print(wlan.scan())
Stay tuned to peppe8o for the next news!
We are sorry that this post was not useful for you!
Let us improve this post!
Tell us how we can improve this post?