見出し画像

Raspberry Pi Pico C/C++のAPI記録

Raspberry Pi Picoの使い方がいまいちまとまってないように感じたので、個人的なメモとして記録。
Arduinoに慣れて、Cに慣れてない人向けに少し優しく書いているので冗長に感じるかも。
環境構築はたくさん公開されてるのでそっちを見てくれ。
ちびちび書き加えていくつもり。Amazonのアソシエイト参加してる。


基本的な書き方

//必要なライブラリ
#include "pico/stdlib.h"
#include "hardware/gpio.h"
#include "pico/binary_info.h"


//実行される関数
void main()
{
        //初期化
    gpio_init(15);
    gpio_set_dir(15, GPIO_OUT);

    while (true)
    {
        gpio_put(15,1);
        sleep_ms(100);
        gpio_put(15,0);
        sleep_ms(100);
    }
    
}
  • void main()

    • Arduinoで言うところのvoid setup()、最初に1回実行される関数。C言語だと基本的にmainが最初に動く。Arduinoで言うところのvoid loop()をしたいときは、上記の例のようにwhile文で無限ループするとできる

  • gpio_init()とgpio_set_dir()

    • gpio_init(pin番号):初期化

    • gpio_set_dir(pin番号、方向):入出力方向の決定、方向はGPIO_OUTで出力、GPIO_INで入力

    • Arduinoで言うところのpinMode()。初期化して入力(センサーなど)として使うか、出力(LEDチカチカなど)として使うか

  • sleep_ms(ms)

    • arduinoでいうdelay。マイクロ秒停止する。

シリアル通信

#include <stdio.h>      //標準入出力
#include "pico/stdlib.h"
#include "hardware/gpio.h"
#include "pico/binary_info.h"

void main()
{
    //init
    gpio_init(15);
    stdio_init_all();//シリアル通信の初期化
    gpio_set_dir(15, GPIO_OUT);

    int cnt = 0;
    while (true)
    {
        cnt++;
        gpio_put(15,1);
        sleep_ms(100);
        gpio_put(15,0);
        sleep_ms(100);
        if(cnt%10==0){
            puts("Hello World\n");//文字列を送信
            //printf("Hello World %d\n,cnt); //でもできる
        }
    }
    
}

ビルドするときにusbやuartの設定が必要なためcmakelistsを編集
pico_playディレクトリにpico_play.cで書いている前提で進める

cmake_minimum_required(VERSION 3.12)

include(pico_sdk_import.cmake)


project(pico_play C CXX ASM)

pico_sdk_init()
add_executable(pico_play
pico_play.c
)

pico_enable_stdio_usb(pico_play 1)
pico_enable_stdio_uart(pico_play 1)

target_link_libraries(pico_play pico_stdlib
hardware_pwm)

pico_add_extra_outputs(pico_play)

いいなと思ったら応援しよう!