Skip to content

The Pico/W In C: A Higher Join

Web page 1 of three

The Pico W has WiFi and getting began is less complicated than you would possibly suppose from the documentation. However how do you get linked? This is not a matter of solely join – there’s extra to do! That is an extract from our newest guide all concerning the Pico/W in C.

Programming the Raspberry Pi Pico In C.

By Harry Fairhead

Purchase from Amazon.


  • Preface
  • Chapter 1 The Raspberry Pi Pico – Earlier than We Start
  • Chapter 2 Getting Began
  • Chapter 3 Getting Began With The GPIO
  • Chapter 4 Easy Output
  • Chapter 5 Some Electronics
  • Chapter 6 Easy Enter
  • Chapter 7 Superior Enter – Occasions and Interrupts
  • Chapter 8 Pulse Width Modulation
    Extract: Fundamental PWM
  • Chapter 9 Controlling Motors And Servos
  • Chapter 10 Getting Began With The SPI Bus
  • Chapter 11 A-To-D and The SPI Bus
  • Chapter 12 Utilizing The I2C Bus
  • Chapter 13 Utilizing The PIO
    Extract: A 1-Wire PIO Program
  • Chapter 14 The DHT22 Sensor Implementing A Customized Protocol
  • Chapter 15 The 1‑Wire Bus And The DS1820
  • Chapter 16 The Serial Port
  • Chapter 17 Utilizing the Pico W
    Extract: Easy Internet Consumer
    Extract: A Higher Join ***NEW!
  • Chapter 18 Direct To The {Hardware}

The Pico and the Pico W are very comparable and, except something that makes use of the built-in LED, all the packages offered to date work on each fashions. The vital distinction between them is that the Pico W has further {hardware} that permits it to make use of WiFi. From the programming standpoint, nevertheless, the duty is to learn to use the brand new WiFi driver and the LwIP library that gives higher-level networking. That is made harder than want be by the insufficient documentation offered for each. This can most likely enhance over time.

In chapter however not on this extract

Wi-Fi Stack

The Pico W has further libraries to make it attainable to work with the WiFi {hardware} with out having to work on the stage of the SPI interface. You may consider these libraries as forming a set of ranges. The bottom stage is the cyw43_driver which offers an interface to the {hardware} by way of the SPI interface. Typically you may ignore the capabilities on this module aside from those involved with scanning for entry factors and energy administration.

The pico_cyw43_arch library offers higher-level capabilities principally involved with organising the WiFi and making connections. That is documented and is an efficient place to begin.

The pico_lwip is a set of wrapper capabilities across the LwIP open supply IP stack. This has been ported to the Pico and works with IP by way of the WiFi drivers. There’s virtually no documentation of pico_lwip however the unique LwIP undertaking is totally, if not notably clearly, documented.

The WiFi {hardware} wants periodic consideration and when used with an working system that is often taken care of by multithreading, however the Pico does not have an working system except you put in one. The pico_cyw43_arch library offers three alternative ways of attaining the common consideration that the {hardware} wants. The primary depends on polling, the second makes use of interrupts and the third makes use of the threads offered by the FreeRTOS working system.

The mode used relies on which library you hyperlink to in CMakeLists.txt. There are three selections, the primary being pico_cyw43_arch_lwip_poll. Utilizing this library the consumer program has to name cyw43_arch_poll() on occasion to permit it to run the WiFi software program in order that it could possibly name callbacks and usually transfer knowledge. This can be a quite simple association as it’s fully synchronous and there’s no hazard of a race situation and therefore no want for locking of any type. It has the drawback that it isn’t multi-core nor interrupt-safe. That’s, in case you are working code on the second core or in case you are making use of interrupts, the networking code will be interrupted in ways in which corrupt knowledge.

The second selection is, pico_cyw43_arch_lwip_threadsafe_background. On this case there’s nothing the consumer program has to do and the driving force and LwIP code is known as by an interrupt. That is multi-core and interrupt-safe, however provided that you utilize locking once you name LwIP code. All callbacks are referred to as in interrupt mode. Any code not run by LwIP needs to be bracketed by the directions cyw43_arch_lwip_begin and cyw43_arch_lwip_end. These apply locks which cease interrupts and different cores working the code on the similar time. You do not have to bracket calls to LwIP made inside callbacks as a result of these are being run by LwIP, however in the event you have they got no impact.

Whereas you should utilize the threadsafe_background mode with freeRTOS, the popular mode is to make use of it with pico_cyw43_arch_lwip_sys_freertos, the third library. The freeRTOS working system provides the power to run a number of duties at totally different ranges of precedence – it offers a primary “threads” functionality. This permits the LwIP software program to run independently and in an organized approach along with your customized code. The set up and use of freeRTOS is a giant enterprise and most often it’s best averted for easy WiFi functions.

The freeRTOS method to WiFi is finest taken if you wish to use freeRTOS to construction your total software. In the remainder of this chapter the examples will use the threadsafe_background mode, however it’s simple to transform them to polling mode by including calls to cyw43_arch_poll(). You will need to discover you can solely use LwIP sockets in case you are additionally utilizing freeRTOS. With out free RTOS you might be restricted to the “uncooked” LwIP APIs.

There’s additionally a mode, set by utilizing the pico_cyw43_arch_none library, which disables WiFi however permits entry to the onboard LED. That is what was utilized in Chapter 2 to flash the onboard LED.


Leave a Reply

Your email address will not be published. Required fields are marked *