Identification du Pico
Dans cet exemple, le but est de savoir si l'on est en présence d'un Pico ou d'un Pico W.
Il n'y a aucun moyen direct, de type identificateur, permettant de savoir si l'on est en présence d'un Pico ou d'un Pico W. On peut toutefois le faire du fait que leurs circuits d'alimentation sont différents. Pour cela on utilise deux voies GPIO internes (Elles ne sont pas disponibles sur le connecteur du Pico). La voie GPIO25 doit être configurée en numérique sans résistance de pull down à la masse. On doit donc la configurer en entrée numérique non référencée (C'est la configuraiton standard des entrées numériques). Pour ceux qui ne connaissent pas les références d'entrées numériques, reportez vous à la rubrique Résistances Pull Up/Pull Down. La voie GPIO29 quant à elle doit être configurée et peut être lue par l'entrée 3 du convertisseur ADC (Voie non disponible sur le connecteur du Pico). La lecture de cette voie retourne alors une valeur proche de 0 pour le Pico W, alors qu'elle retourne une valeur approximativement de 1/3 de la tension d'alimentation fournie à la broche VSYS (En tous cas assez éloignée de 0).
Ci dessous les fichiers "CmakeLists.txt" et "identify.cpp" d'un projet du même nom : "identify" :
CMakeLists.txt
cmake_minimum_required(VERSION 3.13)
# Define C anc CXX standards
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
# 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(identify C CXX ASM)
# Initialise the Raspberry Pi Pico SDK
pico_sdk_init()
# Add executable. Default name is the project name
add_executable(identify identify.cpp)
# Add some info to the executable (For picotool....)
pico_set_program_name(identify "identify")
pico_set_program_version(identify "0.1")
# Where do stdio functions send their stuff
pico_enable_stdio_uart(identify 1)
pico_enable_stdio_usb(identify 0)
# Add the standard include files to the build
target_include_directories(identify 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(identify)
# Add any user requested libraries
target_link_libraries(identify
pico_stdlib
hardware_gpio
hardware_adc
)
identify.cpp
#include ‹string.h›
#include "pico/stdlib.h"
#include "hardware/gpio.h"
#include "hardware/adc.h"
int main()
{
stdio_init_all();
adc_init();
adc_gpio_init(29);
adc_select_input(3);
gpio_init(25);
gpio_set_dir(25, GPIO_IN);
float voltage = adc_read() * (3.3 / 4096);
char identifier[8];
strcpy(identifier, voltage < 0.15f ? "PICO W" : "PICO");
printf("Type : %s (Tension lue : %.4f V)\n", identifier, voltage);
}