---
title: "RaspberryPi Picoに内蔵のRTCを Arduino IDE で使用する(Using the built-in RTC of Raspberry Pi Pico with Arduino)"
url: "https://maker.wiznet.io/scarlet/projects/raspberrypi-pico%E3%81%AB%E5%86%85%E8%94%B5%E3%81%AErtc%E3%82%92-arduino-ide-%E3%81%A7%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B-using-the-built-in-rtc-of-raspberry-pi-pico-with-arduino/"
markdown_url: "https://maker.wiznet.io/scarlet/projects/raspberrypi-pico%E3%81%AB%E5%86%85%E8%94%B5%E3%81%AErtc%E3%82%92-arduino-ide-%E3%81%A7%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B-using-the-built-in-rtc-of-raspberry-pi-pico-with-arduino/md"
type: "UCC: User Created Content"
author: "totuto"
author_url: "https://qiita.com/totuto/items/d3bc435d3d2f545c1c02"
editor: "WIZnet"
editor_url: "https://maker.wiznet.io/"
original_author: "totuto"
original_url: "https://qiita.com/totuto/items/d3bc435d3d2f545c1c02"
published: "2023-04-03"
language: "en"
likes: 0
views: 63
comments: 0
source: "WIZnet Makers (https://maker.wiznet.io/)"
---

# RaspberryPi Picoに内蔵のRTCを Arduino IDE で使用する(Using the built-in RTC of Raspberry Pi Pico with Arduino)

> Raspberry Pi Pico, the MCU RP2040 has a built-in RTC,

Original author: totuto (source: https://qiita.com/totuto/items/d3bc435d3d2f545c1c02)

## Documents and links

- [rtc](https://github.com/khoih-prog/Timezone_Generic) (code)

## Article

## **Pico は RTC（リアルタイム・クロック）を内蔵している！！**

私は Arduino Nano 等に RTC（リアルタイム・クロック）モジュールを接続してましたがRaspberryPi Pico では MCUのRP2040 が RTCを内蔵しているので RTCのハードウェア、つまりIC（DS1307が有名）やモジュール（シールド。基板）は不要です！！　
システムがコンパクトになり、しかも経済的と、とても有難いことです。

RP2040のブロック図：　Peripheralsの中にRTCの白いボックスがあります。
[![RP2040-RTCライブラリインストール0.JPG](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1834831%2F4ebd2712-75bf-973a-f595-3b91957f86f4.jpeg?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=ce55903507953dafd73847d993e3996a)](https://camo.qiitausercontent.com/69143bcc42a2ae3af8034ae46464d22073e090ed/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f313833343833312f34656264323731322d373562662d393733612d663539352d3362393139353766383666342e6a706567)

このRTCを動かすには下記の３つのライブラリが必要です。私の開発環境は Windows10、Arduino IDE 1.8.15で、RaspberryPi Pico は Arduino Mbed OS RP2040 版を使用してます。
このライブラリは earlephilhower版でも動作するとのことです。

(1) RP2040_RTC // <https://www.arduino.cc/reference/en/libraries/rp2040_rtc/>
(2) TimeLib // <https://github.com/PaulStoffregen/Time>
(3) Timezone_Generic // <https://github.com/khoih-prog/Timezone_Generic>

ライブラリ(ZIPファイル)の入手とインストールを経験されている方は、この情報だけで十分かと思いますが、そうでない場合は以下の手順をご覧ください。
※重要：経験者の方も［手順７］のソースファイルの修正は必要なのでご覧ください。
また、［手順８］動作確認のスクリーンショット、［手順９］改造もご参考まで。

手順一覧

```plaintext
［手順１］RP2040_RTC をダウンロードする
［手順２］TimeLib をダウンロードする
［手順３］Timezone_Generic をダウンロードする
［手順４］RP2040_RTC をインストールする
［手順５］TimeLib をインストール（手順４と同様）
［手順６］Timezone_Generic をインストール（手順４と同様）
［手順７］ソースファイルの修正
［手順８］動作確認
［手順９］改造：PCからシリアルモニタ経由で日付と時刻を設定する
```

RP2040_RTC は本家Arduinoのページ以外に Githubと作者のホームページでも公開してます。

3つのZIPファイルをダウンロードしてインストールする方法を紹介してますが、もっと簡単な方法があります。

手順１と手順４に代わって「ツール」⇒「ライブラリを管理」⇒「ライブラリマネージャ」の画面の検索ボックスに「RP2040_RTC」と入力し、検索結果で表示されるRP2040_RTCライブラリを選択します。

この方法は試してませんのでTimeLibとTimezone_Genericが同時にインストールされるのか、あるいは別途インストールする必要があるのか分かりません。

### **［手順１］RP2040_RTC をダウンロードする**

<https://www.arduino.cc/reference/en/libraries/rp2040_rtc/>
[![RP2040-RTCライブラリインストール1.JPG](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1834831%2Fefaf6a6c-b681-bad4-0a9d-ddec00a79ae2.jpeg?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=a0e20b2dca9ec1d7cbcff60f75dd6d95)](https://camo.qiitausercontent.com/b5289a3625bc4e659d2114ac9a1f9da4f1ae13f4/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f313833343833312f65666166366136632d623638312d626164342d306139642d6464656330306137396165322e6a706567)
この画面の下の「Releases」 の 「1.0.4(latest)」 をクリックするとRP2040_RTC-1.0.4.zip というファイルが Windows10 の場合はダウンロードフォルダに格納されます。

### **［手順２］TimeLib をダウンロードする**

<https://github.com/PaulStoffregen/Time>
[![RP2040-RTCライブラリインストール2.JPG](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1834831%2F6d3e4a71-f105-02ec-bc9c-a97e01b2e019.jpeg?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=5ec801123b87989d128f40c4c1885ae9)](https://camo.qiitausercontent.com/ab785772f37d88dec2c0f31478699bc3289300d2/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f313833343833312f36643365346137312d663130352d303265632d626339632d6139376530316232653031392e6a706567)
緑色の「Code」ボタンをクリックし、一番下の「Download ZIP」をクリックすると Time-master.zip というファイルが Windows10 の場合はダウンロードフォルダに格納されます。

### **［手順３］Timezone_Generic をダウンロードする**

<https://github.com/khoih-prog/Timezone_Generic>
[![RP2040-RTCライブラリインストール9.JPG](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1834831%2F12ba2edd-db1b-5e84-5acc-c6fb88c3b19a.jpeg?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=3129edc34ce0f84cd3284b2dc7f41a53)](https://camo.qiitausercontent.com/41113ae08293392d5decd2ebbdbdfb9e7b259265/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f313833343833312f31326261326564642d646231622d356538342d356163632d6336666238386333623139612e6a706567)
手順２と同様、緑色の「Code」ボタン⇒「Download ZIP」クリックでTimezone_Generic-main.zip というファイルが Windows10 の場合はダウンロードフォルダに格納されます。

### **［手順４］RP2040_RTC をインストールする**

Arduino IDE の「スケッチ」⇒「ライブラリをインクルード」⇒「.ZIP形式のライブラリをインストール」をクリックします。
[![RP2040-RTCライブラリインストール3.JPG](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1834831%2F60d569c1-061b-f7f7-4558-a7d7868a58af.jpeg?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=977c8e5be1ec5e11a2f68a7d8d49a076)](https://camo.qiitausercontent.com/b9bf624f7f506d3abb743f918f12f5ab6a80b837/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f313833343833312f36306435363963312d303631622d663766372d343535382d6137643738363861353861662e6a706567)
現れたウィンドウで先ほど格納したフォルダを指定しRP2040_RTC-1.0.4.zip ファイルをダブルクリックするとインストールされます。
[![RP2040-RTCライブラリインストール4.JPG](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1834831%2F77f535ff-4f62-d2a7-e378-02df8b876d7c.jpeg?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=4b1621da8e33e4024631c1fa0eef98a8)](https://camo.qiitausercontent.com/9753bf7998d02bc87ef5a4c5ae9e8d0b182de69c/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f313833343833312f37376635333566662d346636322d643261372d653337382d3032646638623837366437632e6a706567)

### **［手順５］TimeLib をインストール（手順４と同様）**

### **［手順６］Timezone_Generic をインストール（手順４と同様）**

### **［手順７］ソースファイルの修正**

(1) Arduino IDE の「ファイル」⇒「スケッチ例」⇒「RP2040_RTC」⇒「Time」⇒「RP2040_RTCTime」をクリックすると、スケッチのウィンドウが表示されます。
[![RP2040-RTCライブラリインストール5.JPG](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1834831%2Fba54e90f-1c4f-b7fa-8d06-d10840987952.jpeg?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=0251ffd32ed5f4d119b2a0947431f4d3)](https://camo.qiitausercontent.com/dd5e42cde8b5eaacc57945a3623ec3bb5fd0b9f7/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f313833343833312f62613534653930662d316334662d623766612d386430362d6431303834303938373935322e6a706567)
(2) ■■■■重要■■■■
プログラムに #include &lt; TimeLib.h > という行を追加します。
[![RP2040-RTCライブラリインストール6.JPG](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1834831%2Fb2a8be4d-dc44-08ff-2272-18152a8e4c13.jpeg?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=408d5d0d2ea913bc7938ee5dd681eced)](https://camo.qiitausercontent.com/9916449bf6d1a77a8cbd93f14a59fea4e6bb56ba/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f313833343833312f62326138626534642d646334342d303866662d323237322d3138313532613865346331332e6a706567)

### **［手順８］動作確認**

(1) 「ツール」⇒「ボード」⇒「ボードマネージャー」⇒「Arduino Mbed OS RP2040」⇒「Raspberry Pi Pico」を選択
[![RP2040-RTCライブラリインストール7.JPG](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1834831%2Ffc08cc86-8362-75c1-aea3-703e90652abd.jpeg?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=e3d7f5dfc3ef93720a515b058720d7c2)](https://camo.qiitausercontent.com/cb1c6ebdc2d8b67ab0a9557c0e12b8408b85df23/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f313833343833312f66633038636338362d383336322d373563312d616561332d3730336539303635326162642e6a706567)
(3) [⇒]ボタン（マイコンボードに書き込む）をクリック
(4) Picoへの書込みが終了したら、画面右上の虫眼鏡のボタン（シリアルモニタ）をクリックするとシリアルモニタに下記のように表示されます。
[![RP2040-RTCライブラリインストール8.JPG](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1834831%2F729ece02-36f4-553b-8216-39220ccbff5e.jpeg?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=7e4000911395db1ee2b0db1e84c1a29b)](https://camo.qiitausercontent.com/ab3c1d618ac98382044a9b13643bd2b6b6329d13/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f313833343833312f37323965636530322d333666342d353533622d383231362d3339323230636362666635652e6a706567)

### **［手順９］改造：PCからシリアルモニタ経由で日付と時刻を設定する**

【スケッチの変更】
新たに set_datetime_fromPC() という関数を作成しました。
これを void loop() から呼び出すようにします。

変更前

```plaintext
void loop()
{ 
  displayRTCTime();
}
```

変更後

```plaintext
void loop()
{ 
  set_datetime_fromPC();
  displayRTCTime();
}
//--------------------------------------------------------------------
// set Date & Time from PC (Serial Monitor)
//     setting parameter:  "t yyyy mmdd w hhmmss"
//     w：Day of The Week（0:Sun 1:Mon 2:Tue 3:Wed 4:Thr 5:Fri 6:Sat）
//     ex："t 2021 0907 2 235900" = 2021/09/07 Tue 23:59:00
void set_datetime_fromPC()
{
  int16_t year ;
  int8_t  month;
  int8_t  day  ;
  int8_t  dotw ;  // Day of The Week
  int8_t  hour ;
  int8_t  min  ;
  int8_t  sec  ;

  if(Serial.available()) {
    if (Serial.read() == 0x74) {    // "t"=0x74
      Serial.println("t command received");
      Serial.read();
      year   = (Serial.read() & 0x0F) *1000;
      year  += (Serial.read() & 0x0F) *100;
      year  += (Serial.read() & 0x0F) *10;
      year  += (Serial.read() & 0x0F) ;
      Serial.read();
      month  = (Serial.read() & 0x0F) *10;
      month += (Serial.read() & 0x0F);
      day    = (Serial.read() & 0x0F) *10;
      day   += (Serial.read() & 0x0F);
      Serial.read();
      dotw   = (Serial.read() & 0x07);    // Day of The Week
      Serial.read();
      hour   = (Serial.read() & 0x0F) *10;
      hour  += (Serial.read() & 0x0F);
      min    = (Serial.read() & 0x0F) *10;
      min   += (Serial.read() & 0x0F);
      sec    = (Serial.read() & 0x0F) *10;
      sec   += (Serial.read() & 0x0F);

      if ((month >= 1 ) && (month <= 12 ) &&
          (day >= 1 )   && (day <= 31 ) &&
          (dotw >= 0 )  && (dotw <= 6 ) &&
          (hour >= 0 )  && (hour <= 23 ) &&
          (min >= 0 )   && (min <= 59 ) &&
          (sec >= 0 )   && (sec <= 59 )) {
        datetime_t pcTime = { year, month, day, dotw, hour, min, sec };
        rtc_set_datetime(&pcTime);
        Serial.print(pcTime.year); 
        Serial.print("/"); 
        Serial.print(pcTime.month);
        Serial.print("/");
        Serial.print(pcTime.day);
        Serial.print(" ");
        Serial.print(pcTime.dotw);
        Serial.print(" ");
        Serial.print(pcTime.hour);
        Serial.print(":");
        Serial.print(pcTime.min);
        Serial.print(":");
        Serial.println(pcTime.sec);
       } else {
         Serial.println("Illegal data! Cannot set the clock.");      
       }
    }
  }
}
```

【使用法】
シリアルモニタの送信データ入力ボックスに下記フォーマットで入力し「送信」ボタンをクリックします。

"t yyyy mmdd w hhmmss"（最初と最後の「"」は入力する必要はありません）

「w」は曜日 (Day of The Week)
0:日Sun 1:月 2:火 3:水 4:木 5:金 6:土

例："t 2021 0907 2 235900" ⇒ 2021/09/07 火曜 23:59:00

入力した値の妥当性をチェックしていて間違ったデータを送信するとエラーメッセージをシリアルモニタに表示します。但し、チェックは厳密でなく、月に関係なく日は1～31ならOKになります。

例えば 0931（9月31日）と入力してもエラーメッセージは出ません。これをそのままRTCにセットすると10月1日になり、同様に日付を0230（2月30日）と入力すると3月2日になりました。ちょっと賢いですね。
[![RP2040-RTCライブラリ改造後の動作.JPG](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1834831%2Fff46afac-db35-dc9a-caf2-4a79ec76e2c5.jpeg?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=82afa173f82c07a6fcff4e113c2c3c1e)](https://camo.qiitausercontent.com/46f6563ecb8cf8cd7ed53b476ab58c0ffd449f0b/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f313833343833312f66663436616661632d646233352d646339612d636166322d3461373965633736653263352e6a706567)

## **余談：その他のサンプルプログラム（スケッチ）**

手順７のスケッチ例で「RP2040_RTC」の下には下記６つのプログラム（スケッチ）があります。

```plaintext
RP2040_RTC_Alarm
RP2040_RTC_Alarm_Ethernet
RP2040_RTC_Alarm_WifiNINA

RP2040_RTC_Time
RP2040_RTC_Time_Ethernet
RP2040_RTC_Time_WifiNINA
```

「Time」は現在時刻を表示し、「Alarm」は指定した時間になると指定した関数（コールバック関数）を呼び出します。

「Ethernet」と「WifiNINA」は、インターネットに接続してNTP サーバからUTCタイムを取得して時刻合わせをします。「Ethernet」は W5x00 イーサネットシールドを使用し、「WifiNINA」は、WifiNINA を搭載した NANO_RP2040_CONNECT 用です。

### **NINAとは？**

NINAは、u-bloxというスイスの会社の NINA-W10 シリーズ(NINA-W101, NINA-W102)というWi-Fi/Bluetooth接続ができるdual core 32bit MCU モジュールのことです。下記のArduino ボードに搭載されているようです。
・Arduino UNO WiFi Rev.2
・Arduino NANO 33 IoT
・Arduino MKR 1010
・Arduino MKR VIDOR 4000 WiFi
・Arduino Nano RP2040 Connect

参考：スイッチサイエンスのページでArduino MKR WiFi 1010が紹介されてます。
<https://www.switch-science.com/catalog/7384/>

### **Arduino Nano RP2040 Connect**

RP2040にU-bloxのWi-Fi／Bluetoothモジュール NINA-W102を搭載したこのボードは、2021年5月に発売されました。他に、6軸IMU（慣性計測ユニット）、マイクロフォン、RGB LED なども搭載してラズパイPicoよりも小型のサイズです。

550円と格安のラズパイPicoに比べるとちょっと高価ですが、これだけのものを積んでいるのでコスパは良く、お買い得かもしれません。

参考： Arduino＋Raspberry Pi——「RP2040」を搭載した「Arduino Nano RP2040 Connect」を発表
<https://fabcross.jp/news/2021/20210521_arduinonano_rp2040connect.html>
[![RP2040-RTCライブラリインストール11.JPG](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F1834831%2Fedc1fafd-d718-1135-dadb-91d52ba551a7.jpeg?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=7ee9576ded897ad0078de9bf868e2134)](https://camo.qiitausercontent.com/6806ce3b1a497692d9134de90c0f2c43cefb6dc0/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f313833343833312f65646331666166642d643731382d313133352d646164622d3931643532626135353161372e6a706567)

## **おまけ（というかゴミ）**

ところで全くど～～でもＥことだけど、なんか気になる「NINA」ってなに？
（あっ、回文だ。になてなに。小学生レベル）
これ↓かなぁ？？？　気象庁：よくある質問（エルニーニョ/ラニーニャ現象）
<https://www.data.jma.go.jp/gmd/cpd/data/elnino/learning/faq/faq4.html>

---

Source: https://maker.wiznet.io/scarlet/projects/raspberrypi-pico%E3%81%AB%E5%86%85%E8%94%B5%E3%81%AErtc%E3%82%92-arduino-ide-%E3%81%A7%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B-using-the-built-in-rtc-of-raspberry-pi-pico-with-arduino/
