IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Voir le flux RSS

Le blog de f-leb

[Actualit�] [Raspberry Pi Pico][SDK C/C++][Linux] Comment d�marrer rapidement en langage C/C++ avec le kit officiel (SDK)

Note : 6 votes pour une moyenne de 2,33.
par , 20/04/2023 � 20h20 (10335 Affichages)
Pour programmer la carte Raspberry Pi Pico en langage C/C++, la fondation Raspberry Pi propose un kit de d�veloppement : le Raspberry Pi Pico C/C++ SDK.
Si vous voulez tester ce kit sous Linux, et sans trop d'efforts, ce tutoriel est peut-�tre fait pour vous...

Nom : 20230419_182324.jpg
Affichages : 24101
Taille : 141,0 Ko

La Raspberry Pi Pico que j'utilise est mont�e sur une petite plaque de c�blage, avec un bouton-poussoir entre les broches (28)GND et (30)RUN. Ce bouton-poussoir sert � faire un Reset de la carte (sic), et �vite ainsi les nombreuses connexions/d�connexions du c�ble USB pendant la mise au point de vos programmes.
Le kit est install� sur un Linux Ubuntu (et m�me test� avec succ�s sur une machine virtuelle Lubuntu mont�e avec VirtualBox).

1) Installation du kit et des outils

Pour installer la derni�re version du kit sur votre dossier personnel ~/pico-sdk, il faut cloner le d�p�t sur le Github officiel de la fondation :
Code bash : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
$ cd ~
$ git clone https://github.com/raspberrypi/pico-sdk.git

Et si la commande git ne r�pond pas, c'est qu'il faut d'abord installer le gestionnaire : sudo apt-get install git.

Par anticipation, il faut compl�ter le kit avec des sous-modules. Pour les installer :
Code bash : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
$ cd ~/pico-sdk
$ git submodule update --init

il faut maintenant installer le compilateur et l'utilitaire CMake (attention : + de 2 Go de fichiers) :
Code bash : S�lectionner tout - Visualiser dans une fen�tre � part
$ sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib

Il faut ensuite que le syst�me connaisse le chemin (path) vers le kit. Vous pouvez par exemple �diter le fichier ~/.bashrc, avec l'�diteur nano :
Code bash : S�lectionner tout - Visualiser dans une fen�tre � part
$ sudo nano ~/.bashrc
Et rajouter � la fin du fichier la ligne :
Code bash : S�lectionner tout - Visualiser dans une fen�tre � part
export PICO_SDK_PATH=~/pico-sdk
Sauvegardez le fichier, et red�marrez votre session Linux pour prendre en compte les modifications. Le kit est maintenant install�...

2) Un premier projet : le blink

Pour un premier programme, vous allez faire clignoter la LED int�gr�e en surface de la carte Raspberry Pi Pico (comme c'est original !!).
Commencez par cr�er le dossier du projet, par exemple :
Code bash : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
$ cd ~
$ mkdir essai-blink-pico
$ cd essai-blink-pico

Avec votre �diteur de sources pr�f�r�s, cr�ez le fichier source blink.c en langage C (d'apr�s pico-examples/blink) :
Code c : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
#include "pico/stdlib.h"
 
int main() {
    const uint LED_PIN = PICO_DEFAULT_LED_PIN;
    gpio_init(LED_PIN);
    gpio_set_dir(LED_PIN, GPIO_OUT);
    while (true) {
        gpio_put(LED_PIN, 1);
        sleep_ms(250);
        gpio_put(LED_PIN, 0);
        sleep_ms(250);
    }
}

Les �tapes de construction (build) du projet qui suivent sont plus d�licates � comprendre. Vous trouverez les d�tails au paragraphe Quick-start your own project.

Le script de compilation est produit par l'utilitaire CMake. Pour comprendre CMake, je vous recommande l'excellent tutoriel : Utiliser CMake pour compiler un projet par Alexandre Laurent (aka LittleWhite).

Nom : compilation_cmake.png
Affichages : 10217
Taille : 13,2 Ko
Fonctionnement de CMake
Image reproduite d'apr�s https://alexandre-laurent.developpez...toriels/cmake/
avec l'aimable autorisation de LittleWhite

Ainsi, le dossier du projet complet ~/essai-blink-pico comportera les fichiers et dossier suivants :
~/essai-blink-pico
   |__ blink.c
   |__ build
   |__ CMakeLists.txt
   |__ pico_sdk_import.cmake
  • Le fichier pico_sdk_import.cmake est une copie de celui pr�sent dans le sous-dossier d'installation du kit ~/pico-sdk/external. Voir aussi pico-sdk/external/pico_sdk_import.cmake.
  • Le fichier g�n�rique CMakeLists.txt qui produira le script de compilation aura le contenu suivant :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    cmake_minimum_required(VERSION 3.13)
    
    # initialize the SDK based on PICO_SDK_PATH
    # note: this must happen before project()
    include(pico_sdk_import.cmake)
    
    project(blink)
    
    # initialize the Raspberry Pi Pico SDK
    pico_sdk_init()
    
    # rest of your project
    add_executable(blink
        blink.c
    )
    
    # Add pico_stdlib library which aggregates commonly used features
    target_link_libraries(blink pico_stdlib)
    
    # create map/bin/hex/uf2 file in addition to ELF.
    pico_add_extra_outputs(blink)
  • Il vous reste � cr�er un dossier build o� seront stock�s les fichiers de construction du projet.


3) G�n�ration du projet

Placez-vous dans le dossier ~/essai-blink-pico/build et lancez CMake :
Code bash : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
$ cd ~/essai-blink-pico/build
$ cmake ..

Si tout se passe bien, le compte-rendu se termine par des messages triomphants, du genre :
...
-- Configuring done
-- Generating done
-- Build files have been written to: /home/fleb/essai-blink-pico/build
Il reste � compiler et produire les fichiers binaires avec l'utilitaire make :

4) Flasher le fichier binaire uf2 dans la carte

Le fichier avec l'extension uf2 qui nous int�resse, � flasher dans la carte, est dans le dossier ~/essai-blink-pico/build : blink.uf2.

Quand la carte est connect�e par le c�ble USB, ex�cutez la s�quence suivante :
  • appuyez sur le bouton BOOTSEL de la carte ;
  • appuyez sur le bouton Reset (plac� entre les broches (28)GND et (30)RUN, voir plus haut) ;
  • rel�chez le bouton Reset ;
  • rel�chez le bouton BOOTSEL.

La carte passe alors en mode USB et se comporte comme une cl� USB. Un dossier mont� devrait appara�tre comme ci-dessous :

Nom : mnt-rpi_usb.png
Affichages : 10294
Taille : 35,8 Ko

Il reste � flasher le binaire par glisser-d�poser du fichier blink.uf2 dans ce dossier.

Un dernier Reset, et le miracle du blink se produit...

5) Sitographie


Et sur Developpez.com :

En compl�ment :

Envoyer le billet � [Raspberry Pi Pico][SDK C/C++][Linux] Comment d�marrer rapidement en langage C/C++ avec le kit officiel (SDK) � dans le blog Viadeo Envoyer le billet � [Raspberry Pi Pico][SDK C/C++][Linux] Comment d�marrer rapidement en langage C/C++ avec le kit officiel (SDK) � dans le blog Twitter Envoyer le billet � [Raspberry Pi Pico][SDK C/C++][Linux] Comment d�marrer rapidement en langage C/C++ avec le kit officiel (SDK) � dans le blog Google Envoyer le billet � [Raspberry Pi Pico][SDK C/C++][Linux] Comment d�marrer rapidement en langage C/C++ avec le kit officiel (SDK) � dans le blog Facebook Envoyer le billet � [Raspberry Pi Pico][SDK C/C++][Linux] Comment d�marrer rapidement en langage C/C++ avec le kit officiel (SDK) � dans le blog Digg Envoyer le billet � [Raspberry Pi Pico][SDK C/C++][Linux] Comment d�marrer rapidement en langage C/C++ avec le kit officiel (SDK) � dans le blog Delicious Envoyer le billet � [Raspberry Pi Pico][SDK C/C++][Linux] Comment d�marrer rapidement en langage C/C++ avec le kit officiel (SDK) � dans le blog MySpace Envoyer le billet � [Raspberry Pi Pico][SDK C/C++][Linux] Comment d�marrer rapidement en langage C/C++ avec le kit officiel (SDK) � dans le blog Yahoo

Mis � jour 14/05/2023 � 14h08 par f-leb

Cat�gories
Raspberry Pi , Programmation , C , C++ , Raspberry Pi Pico

Commentaires

  1. Avatar de Artemus24
    • |
    • permalink
    Bonjour � tous.

    Comme d'habitude, bravo pour tes explications tr�s bien d�taill�s !

    Normalement, quand tu envoies l'ex�cutable dans le microcontr�leur, il �crase l'existant.
    Je n'ai pas compris l'utilit� de ce bouton poussoir.
    N'y aurait-il pas une autre astuce pour �viter cela ?

    Cordialement.
    Artemus24.
    @+
  2. Avatar de f-leb
    • |
    • permalink
    Merci Artemus

    Le probl�me est que par d�faut, la Pi Pico se comporte comme une cl� USB o� tu dois copier le fichier binaire uf2. Une fois le binaire transf�r� et flash� (l'ancien programme est �cras� bien s�r), la Pi Pico est �ject�e automatiquement, comme quand tu �jectes une cl� USB
    Pour flasher un nouveau programme, si tu n'as pas de bouton Reset, il faut d�brancher et rebrancher le c�ble USB pour que la Pi Pico soit � nouveau reconnue comme une cl� USB, ce qui n'est pas tr�s pratique.

    On peut aussi forcer un reset de la carte en envoyant une commande avec OpenOCD (voir ce billet pour l'installation) en passant par le port SWD.

    Je me suis rendu compte apr�s qu'avec l'EDI Arduino (il y a un portage pour la Pi Pico) sous Windows, il y avait un reset lors du t�l�versement pour passer en mode USB. Le moyen existe donc avec une commande et en passant par le port USB, mais je n'ai pas creus� davantage...
  3. Avatar de JMMO59
    • |
    • permalink
    Bonjour
    Ce post est parfait pour prendre pied sur la programmation C++ pour Pico. Tout est tr�s clair et limpide.
    Je sugg�rerais toutefois une suite.
    En effet, moi qui suis en train de d�marrer avec le C++, j'avoue avoir beaucoup de mal avec les biblioth�ques. Il existe bien des forum ou des description des biblioth�ques mais ce sujet reste confus et surtout, on ne voit jamais :
    • l'arborescence des r�pertoires adapt�e aux biblioth�ques (quels fichiers implanter et o�)
    • les pr�cisions relatives au fichiers � y implanter (faut-il par exemple ne mettre localement que les .h ou les .c etc... ou alors faut-il implanter tout ce que le github donne, les r�pertoires, les fichiers etc...?)
    • les modification de param�trages � effectuer sur l'environnement pico-sdk (par exemple CmakeList.txt) pour les prendre en compte dans la compilation.


    Ce sujet est souvent trait� mais pas avec la p�dagogie n�cessaire pour comprendre et assimiler.
    Est-ce envisageable?

    Un grand merci
  4. Avatar de f-leb
    • |
    • permalink
    Bonsoir JMMO59,

    Merci pour ton appr�ciation et ton soutien.

    Pour la gestion des biblioth�ques, il y a en a d�j� pas mal d'utilis�es avec des exemples dans la doc du kit (Raspberry Pi Pico C/C++ SDK) avec les fichiers � inclure et le contenu du CmakeList.txt. Pr�s de 500 pages, c'est extr�mement bien document�, o� est le probl�me ?

    Tu �cris aussi :
    Citation Envoy� par JMMO59
    Ce sujet est souvent trait� mais pas avec la p�dagogie n�cessaire pour comprendre et assimiler.
    Souvent trait� ? O� par exemple ? Je ne vois pas bien ce qui te bloque. Aurais-tu un probl�me sur une biblioth�que en particulier ?
  5. Avatar de JMMO59
    • |
    • permalink
    Bonjour
    Merci pour ta r�ponse rapide.
    En effet je connais bien ce document . Il pr�sente bien une liste importante de librairies disponibles, il d�crit aussi les fonctions de chacune d'entre elles, il donne des exemples d'utilisation de ces fonctions mais, sauf si j'ai loup� une marche, il n'explique pas comment amener dans l'environnement de d�veloppement les fichiers constituant une biblioth�que.
    Un exemple pour illustrer. Prenons la 1�re de la liste hardware_adc
    le document d�crit le r�le de cette biblioth�que :
    .....................................................................
    Analog to Digital Converter (ADC) API
    ...
    ....................................................................................

    puis il y a un exemple de programme commen�ant par les fameux include dont le #include "hardware/adc.h" (on peut d'ailleurs s'interroger sur la forme de ce include, pourquoi harwdware/adc et non hardware_adc puisque c'est le nom de la librairie?) et utilisant certaines fonctionnalit�s du type adc_gpio_init().

    Tout ce ci est en effet limpide MAIS la question qui me taraude c'est :
    comment implanter sur mon PC sous ubuntu la fameuse biblioth�que hardware_adc.h pour qu'une compilation de l'exemple donn� fonctionne sans g�n�rer des erreurs du type "non d�fini" ou "pas de fichier ou de repertoire existant"?

    Alors, j'ai commenc� � r�fl�chir. O� se trouvent les librairies (physiquement). J'ai fouill� dans l'arborescence de mon kit SDK et j'y trouve certains r�pertoires sugg�rant que les librairies sont l�. Il y a en particulier un qui s'appelle lib. Mais manifestement ce n'est pas l�.
    J'ai tent� le repertoire src. L� aussi plusleurs sous-r�pertoires assez myst�rieux. Je tente le sous-repertoire host (entre autres). C'est d�j� plus prometteur car on y trouve une douzaine de sous-repertoires intitul�s hardware_xxx
    Ca parait bien.
    J'examine comment ces suppos�es biblioth�ques sont implant�es.
    on y trouve un r�pertoire include, un fichier cmakeFiles.txt et un xxxx.c (probablement le source en c de la biblio).
    dans le include on y trouve un s/s/rep hardware qui contient lui m�me un fichier xxxx.h

    je me dis que je suis sur la bonne voie. Si j'imite cette implantation pour une nouvelle bblioth�que dont j'aurai besoin, �a devrait fonctionner.

    Alors j'ai tent� avec une librairie winingPi. J'ai retrouv� cette librairie dans le github.com J'y ai puis� les quelques fichiers suppos�s � implanter et j'ai test� en compilant un bout de prog C++ ultra limit�.
    Mais non. Ce n'est visiblement pas si simple.

    Alors en r�sum� le document (et les autres que j'ai lus) n'expliquent pas vraiment de mani�re claire comment importer ou implanter une librairie dans le pico-sdk, comment modifier les cmakeFiles.txt ad'hoc, comment libeller les include � mettre au d�but du programme c++ du projet. Mon interrogation est sans doute le reflet de mon inexp�rience en C++

    Esp�rant avoir pu poser mon probl�me de fa�on explicite. Encore merci pour ton aide et ton �clairage sur ce sujet.
  6. Avatar de f-leb
    • |
    • permalink
    Je pense que ton souci ne concerne pas la RPi Pico en particulier, mais sur l'organisation d'un projet C/C++ en g�n�ral (programmation modulaire), et il doit y avoir de nombreux cours/tutoriels sur ce sujet (voir https://c.developpez.com/cours/ entre autres).


    Citation Envoy� par JMMO59
    Un exemple pour illustrer. Prenons la 1�re de la liste hardware_adc...

    puis il y a un exemple de programme commen�ant par les fameux include dont le #include "hardware/adc.h" (on peut d'ailleurs s'interroger sur la forme de ce include, pourquoi harwdware/adc et non hardware_adc puisque c'est le nom de la librairie?) ...
    "hardware/adc.h" est un chemin relatif vers adc.h. Depuis le dossier racine de la librairie standard, il y a donc un sous-dossier "hardware" o� se trouve le fichier "adc.h".

    Dans le fichier CMakeLists.txt, il y a une ligne du type :
    Code make : S�lectionner tout - Visualiser dans une fen�tre � part
    target_link_libraries(hello_adc pico_stdlib ...)
    qui fait le lien avec les emplacements de la librairie standard de la Pico (variable pico_stdlib d�finie quelque part dans tout le fatras).


    Citation Envoy� par JMMO59
    comment implanter sur mon PC sous ubuntu la fameuse biblioth�que hardware_adc.h pour qu'une compilation de l'exemple donn� fonctionne sans g�n�rer des erreurs du type "non d�fini" ou "pas de fichier ou de repertoire existant"?

    Alors, j'ai commenc� � r�fl�chir. O� se trouvent les librairies (physiquement). J'ai fouill� dans l'arborescence de mon kit SDK et j'y trouve certains r�pertoires sugg�rant que les librairies sont l�. Il y a en particulier un qui s'appelle lib. Mais manifestement ce n'est pas l�.
    J'ai tent� le repertoire src. L� aussi plusleurs sous-r�pertoires assez myst�rieux. Je tente le sous-repertoire host (entre autres). C'est d�j� plus prometteur car on y trouve une douzaine de sous-repertoires intitul�s hardware_xxx
    Ca parait bien.
    J'examine comment ces suppos�es biblioth�ques sont implant�es.
    on y trouve un r�pertoire include, un fichier cmakeFiles.txt et un xxxx.c (probablement le source en c de la biblio).
    dans le include on y trouve un s/s/rep hardware qui contient lui m�me un fichier xxxx.h

    je me dis que je suis sur la bonne voie. Si j'imite cette implantation pour une nouvelle bblioth�que dont j'aurai besoin, �a devrait fonctionner.
    Ah oui, mais l�... Tu ne vas tout de m�me pas t'amuser � modifier la librairie standard du kit... enfin, pas tout de suite en tout cas. Si tu as besoin d'une librairie personnalis�e, tu peux aussi la mettre dans un sous-dossier de ton projet et la trouver avec un #include "........".


    Citation Envoy� par JMMO59
    Alors j'ai tent� avec une librairie winingPi. J'ai retrouv� cette librairie dans le github.com J'y ai puis� les quelques fichiers suppos�s � implanter et j'ai test� en compilant un bout de prog C++ ultra limit�.
    Mais non. Ce n'est visiblement pas si simple.
    wiring pi ? Cette biblioth�que d�pr�ci�e depuis des ann�es ? Et qui n'est absolument pas pr�vue pour la RPi Pico ? Mauvais exemple...

    Citation Envoy� par JMMO59
    Alors en r�sum� le document (et les autres que j'ai lus) n'expliquent pas vraiment de mani�re claire comment importer ou implanter une librairie dans le pico-sdk, comment modifier les cmakeFiles.txt ad'hoc, comment libeller les include � mettre au d�but du programme c++ du projet. Mon interrogation est sans doute le reflet de mon inexp�rience en C++
    Je n'ai plus le kit sous la main, mais pour une librairie personnelle, la mettre dans un sous-dossier du projet et faire un #include "nom_du_sous_dossier/nom_du_fichier_entete.h" est un bon point de d�part, non ?
  7. Avatar de f-leb
    • |
    • permalink
    En fait, il y a un chapitre d�di� dans la documentation ( Chapter 2. SDK architecture, page 10) :
    All libraries within the SDK are INTERFACE libraries. (Note this does not include the C/C++ standard libraries provided by the compiler)...
    Bon... Je n'ai jamais eu besoin de creuser tout �a non plus...
  8. Avatar de JMMO59
    • |
    • permalink
    Un grand merci.
    Je vais creuser tout �a calmement.
    En fait j'aime bien comprendre ce que je fais plut�t que d'appliquer "b�tement" des recettes. D'o� mon interrogation multiple.

    Et ceci dit, c'est aussi parce que j'ai test� plusieurs essais et � chaque fois j'ai des erreurs de compil ce qui me pousse encore davantage � essayer de comprendre...
    J'ai vu en effet le chapitre sur les librairies. J'avoue que j'avais du le parcourir un peu vite. Je vais revoir �a et tenter d'avancer.
    En tous les cas merci pour ton aide et ta patience.
    Bonne soir�e.