銀の棲家

ArduinoIDEでpico/sleep.hを使う

  1. まずはじめに
    - ArduinoIDEのRaspberryPiPico環境は構築済みであること
    - Raspberry Pi Picoを使用する
    - 1.x系のArduinoIDEを使用する
    - Raspberry Pi Pico/RP2040を使用する
    - dormantモード移行までやる
  1. インストール
    pacman -Sy git cmake make

  2. pico-extrasの導入
    cd ~/.arduino15/packages/rp2040/hardware/rp2040/X.X.X/
    ./lib/platform_inc.txt-iwithprefixbefore/pico-extras/src/rp2_common/pico_sleep/includeを追加
    git clone https://github.com/raspberrypi/pico-extras.git

  3. libpico.aの導入
    cd ~/
    git clone https://github.com/earlephilhower/arduino-pico.git
    cd ~/.arduino15/packages/rp2040/hardware/rp2040/X.X.X/
    cp -r ~/arduino-pico/package/ ./
    ./pico-extras/src/rp2_common/pico_sleep/sleep.cの修正setup_default_uart();をコメントアウト
    cd ./tools/
    python get.py
    cd ./libpico/
    CMakeLists.txtにinclude(../../pico-extras/external/pico_extras_import.cmake)を追加(include(pico_sdk_import.cmake)の次など)
    CMakeLists.txtにpico_sleephardware_sleepを追加(pico_stdlib辺り)
    chmod +x make-libpico.sh
    ./make-libpico.sh
    cp ./build/libpico.a ../../lib/libpico.a

  4. サンプルコード
    #include "pico/sleep.h"
    #define EDGE_PIN 10
    void setup(){
    pinMode(LED_BUILTIN, OUTPUT);
    digitalWrite(LED_BUILTIN, HIGH);
    delay(15000);
    digitalWrite(LED_BUILTIN, LOW);
    pinMode(EDGE_PIN, INPUT);
    sleep_run_from_xosc();
    sleep_goto_dormant_until_edge_high(EDGE_PIN);
    }
    void loop(){
    digitalWrite(LED_BUILTIN, HIGH);
    delay(1000);
    digitalWrite(LED_BUILTIN, LOW);
    delay(1000);
    }

  5. 備考
    実用的にスリープモードを使用するにはクロックの復元など他の処理も必要