Exemple Blink sur un Pico W

J'ai très souvent vu sur les forums des utilisateurs poser la question : "J'ai un Pico W, le premier programme d'exemple donné dans la doc : blink ne fonctionne pas...". Comme tout le monde, je me suis moi même posé la question. La raison est simple. Si, sur le Pico la diode est cablée sur une sortie GPIO, ce n'est pas le cas sur le Pico W ou elle est cablée sur le chip Wifi. Pour activer cette diode, il faut donc utiliser la librairie traitant du wifi sur le Pico W. Elle se nomme "cyw43_arch". Donc, voici le fichier "CmakeLists.txt" et le fichier "blinkw.cpp" d'un projet du même nom : "blinkw" :

CMakeLists.txt

# CMake version we need
cmake_minimum_required(VERSION 3.13)

# Define C anc CXX standards
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)

# If we use a Pico W
set(PICO_BOARD pico_w)

# Pull in Raspberry Pi Pico SDK (must be before project)
include($ENV{PICO_SDK_PATH}/external/pico_sdk_import.cmake)

if (PICO_SDK_VERSION_STRING VERSION_LESS "1.4.0")
  message(FATAL_ERROR "Raspberry Pi Pico SDK version 1.4.0 (or later) required. Your version is ${PICO_SDK_VERSION_STRING}")
endif()

# Declare the project name and languages
project(blinkw C CXX ASM)

# Initialise the Raspberry Pi Pico SDK
pico_sdk_init()

# Add executable. Default name is the project name
add_executable(blinkw blinkw.cpp)

# Add some info to the executable (For picotool....)
pico_set_program_name(blinkw "blinkw")
pico_set_program_version(blinkw "0.1")

# Where do stdio functions send their stuff
pico_enable_stdio_uart(blinkw 1)
pico_enable_stdio_usb(blinkw 0)

# Add the standard include files to the build
target_include_directories(blinkw PRIVATE
  ${CMAKE_CURRENT_LIST_DIR}
  ${CMAKE_CURRENT_LIST_DIR}/.. # for our common lwipopts (Pico W) or any other standard includes, if required
)

# create map/bin/hex/uf2 file etc.
pico_add_extra_outputs(blinkw)

# Add any user requested libraries
target_link_libraries(blinkw
  pico_stdlib
  pico_cyw43_arch_none
)

blinkw.cpp

#include "pico/stdlib.h"
#include "pico/cyw43_arch.h"

int main()
{
  stdio_init_all();
  cyw43_arch_init();

  while (true)
  {
    cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, 1);
    sleep_ms(250);
    cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, 0);
    sleep_ms(250);
  }
}