注目キーワード

【Arduino】Raspberry Pi Pico W をArduinoでプログラミング!時刻同期する

すけろく
前回の記事で、Raspberry Pi Pico Wを
Wi-Fi接続できた。
げんろく
ああ。インターネットへのアクセスが
できるようになったな。
すけろく
これで、Raspberry Pi Pico Wの時刻を
正確に合わせることもできるな!
げんろく
よし。インターネット上の
NTP(時刻提供)サーバと時刻同期してみるか!
今回は記事では、「Raspberry Pi Pico W」をArduinoでプログラミングして、インターネット上の時刻提供サーバ(NTPサーバ)と時刻同期してみます。
Raspberry Pi Pico W」を時刻同期することで、正確な時刻を元にデータ取得や、命令の実行を行うことができます。
この記事の前提となる「Raspberry Pi Pico W」のはじめかたについては、次の記事で紹介しています。
関連記事

すけろく ついに、国内でもRaspberry Pi Pico Wを手に入れたぞ! げんろく Wi-Fiモジュールがついているので、 国内の技適取得が必要だったからな。 すけろ[…]

前回の記事はこちら
関連記事

すけろく Raspberry Pi Pico W がArduinoで プログラムを書き込めることは確認できた。 げんろく ああ。無事、初回書き込みが出来て、 COMポートとしても認識されたな。 […]

記事内でご紹介する「Raspberry Pi Pico W」はこちら!

ピンヘッダ実装済み
created by Rinker
ノーブランド品
¥2,190 (2024/02/20 20:48:50時点 Amazon調べ-詳細)
ピンヘッダを自分ではんだ付けするもの
created by Rinker
Raspberrypi
¥1,330 (2024/02/20 17:27:31時点 Amazon調べ-詳細)

Arduino、C/C++、MicroPythonに対応している組み込み開発キットです。
正確なタイマ機能、温度センサーなどを備えたモデルです。ディスプレイ等がないため、消費電力を抑えた構成をとることができます。いろいろ遊べますよ~

時刻同期とは?

Webサイトを構成するサーバやパソコン、スマートフォンなどでも内部に時刻を持っていますよね。インターネットに接続する各機器で内部に持っている時刻がずれていたら、正確な処理や履歴が残せないといったことが起こります。

そこでインターネットには、標準時刻の提供サービスを行う場所があります。それがNTPサーバです。スマートフォンやパソコンでもNTPサーバを使って時刻同期することができます。

また、一度時刻同期を行っても機器内部の時刻をカウントしているクロックの微細なずれが積み重なって時刻がずれていきますので定期的な時刻同期が必要です。

日本国内の環境にて時刻同期をする際に使用できるNTPサーバは以下のものがあります。

  • 独立行政法人情報通信研究機構(NICT)
    NTPサーバー:ntp.nict.jp
  • MFEED時刻情報提供サービス
    NTPサーバ:ntp.jst.mfeed.ad.jp

今回は、「MFEED」の公開NTPサーバーを使用したいと思います。

Raspberry Pi Pico Wの時刻を同期させよう!

それでは早速、時刻同期のプログラムを記述していきます。

Wi-Fiアクセスポイントへの接続後、「MFEED」の公開NTPサーバーとの時刻同期を行います。

この手順を行う際には、事前に「Raspberry Pi Pico W」に対して、Arduino IDEで初回書き込みを行い、COMポートとして認識させておく必要があります。

「Raspberry Pi Pico W」への初回書き込みついては、次の記事を参照してください。
関連記事

すけろく ついに、国内でもRaspberry Pi Pico Wを手に入れたぞ! げんろく Wi-Fiモジュールがついているので、 国内の技適取得が必要だったからな。 すけろ[…]

時刻管理用ライブラリの追加

今回は、以下のライブラリを追加します。

このライブラリは、NTPサーバと同期した時刻を、日本時間に変換して、管理するために使用します。

使用する情報 設定値(バージョン)
ライブラリ名 Time By Michael Margolis (1.6.1)

ライブラリのインストール手順については、次の記事を参考にしてください!

関連記事

「Arduino IDE」では、使用する機能やセンサー、ボードを使用するプログラムで使用できる有効なライブラリが公開されています。 ライブラリを使用すると、効率的かつ品質を確保したプログラミングが可能です。 この記事では、Ar[…]

時刻同期プログラム

Arduino IDEを起動して、「ファイル」メニューから「新規ファイル」を選択し、表示されるスケッチに以下のように記述します。

 Arduino IDE スケッチ例

ちょこっと解説
時刻同期を行う処理は、スケッチ内の以下の関数で記述しています。
関数:void setClock(const char* ntpsrv, const long gmt_offset)

関数内には、同期するNTPサーバ(ntpsrv)と時刻オフセット(gmt_offset)が入力されます。
オフセットは、日本時間に合わせるために標準時間からずれている時間(9時間)を指定してあります。処理としては以下の流れで行います。
① NTPサーバとの時刻同期
② NTP同期待ち
③ 同期後の時間の取得(time_t型)    :time()
④時刻情報の変換(time_t型 ➡tm構造体):gmtime_r()
⑤tm構造体から時刻管理用に値をセット  :setTime()
⑥時刻を日本時間に変更         :
adjustTime()
⑦時刻の表示

Raspberry Pi Pico Wへの書き込み

2回目以降

  1.  Raspberry Pi PicoをパソコンにUSB接続します。
  2.  Arduino IDEで前述のプログラムを記載して、 「ファイル」メニューから「名前を付けて保存」で任意の名前を付けて保存します。
  3. 「ツール」メニューから「ボード」情報を確認し、次のものを選択します。
    「Raspberry Pi Pico/RP2040」-「Raspberry Pi Pico W」
  4. 「シリアルポート」にマイコンを接続したCOMポートが指定されているかも確認します。
  5. 「ツール」メニューから「シリアルモニタ」を選択してシリアルモニタを起動します。(転送速度は「9600」です)
  6. 「スケッチ」メニューから「マイコンボードに書き込む」を選択します。

 プログラム実行結果

シリアルモニタ上に以下の通り表示されれば成功です。

Connecting to your-ssid

WiFi connected
IP address: 192.xxx.xxx.xxx
Current time: 2023-03-30 21:01:05
Disconnect from WiFi

WiFi disconnected
Current time: 2023-03-30 21:01:10  ※5秒おきに出力される
Current time: 2023-03-30 21:01:15
Current time: 2023-03-30 21:01:20
Current time: 2023-03-30 21:01:25
Current time: 2023-03-30 21:01:30
Current time: 2023-03-30 21:01:35

編集後記

さて、これでWi-Fiアクセスポイントに接続して、時刻同期を行うことができました。

Raspberry Pi Pico W」のプログラミングといえば、「microPython」と考えていましたが、Arduino IDEでプログラムできるとうれしいです。

これで、他のマイコンと同じArduino IDEで開発できます!

Raspberry Pi Pico W」と同じRP2040というチップを搭載している機器にも使えるので応用ができそうです。

今回の記事は以上になります。

最後までご覧いただき、ありがとうございました。

記事内でご紹介した「Raspberry Pi Pico W」はこちら!

ピンヘッダ実装済み
created by Rinker
ノーブランド品
¥2,190 (2024/02/20 20:48:50時点 Amazon調べ-詳細)
ピンヘッダを自分ではんだ付けするもの
created by Rinker
Raspberrypi
¥1,330 (2024/02/20 17:27:31時点 Amazon調べ-詳細)

Arduino、C/C++、MicroPythonに対応している組み込み開発キットです。
正確なタイマ機能、温度センサーなどを備えたモデルです。ディスプレイ等がないため、消費電力を抑えた構成をとることができます。いろいろ遊べますよ~

Raspberry Pi Pico Wの他の記事はこちらからどうぞ!

すけろく うーむ。 対応付けが難しいな。 げんろく どうした? Raspberry Pi Picoで悩んでいるようだな。 すけろく Raspberry Pi PicoやPico Wの GPIOピンの情報がボード上にプリント されていないから資料との対応付けがやりづらくてな。 げんろく そうか。そういう課題があるのだな。 よし、解決するグッツを作って提供してみよう! 皆さんは、「Raspberry […]

すけろく うーむ。 モーターを毎回同じくらい回転させることはできんのかな。 げんろく DCモーターや、サーボモーターだと、 回転量を正確に制御することは難しいぞ。 すけろく では、何か解決策はあるのかぇ? げんろく ステッピングモーターというものがある。 モーターの回転をステップとして制御できる。 今回はこのあたりを動かしてみるか。 この記事では、「Raspberry Pi  Pico W」を使っ […]

すけろく 以前の記事で、Raspberry Pi Pico Wを Picoprobe経由でデバッグすることができた。 しかし、シリアルの入出力がArduino IDEで 読み込めないのだ。 げんろく そうだな。 Raspberry Pi PicoやRaspberry Pi Pico Wでは、 シリアル出力用の「Serial.println」では、 Picoprobe経由で取得できない。 すけろく […]

すけろく ん~。 このエラーの時の変数の値が知りたいな~ げんろく どうした? プログラムがうまく動かないのか? すけろく そうなのだ。 Raspberry Pi Pico Wでもデバック機能が使えると いいのだが。。。 げんろく ちなみに、Arduino IDE 2.1.0 のデバッグ機能で Raspberry Pi Pico / Wのデバッグができるぞ! やっとできたプログラムを動かしてみると […]

すけろく Raspberry Pi Pico WのBluetoothを 使ってみたいの~ げんろく うむ。そうだな。 そろそろ試してみてもよかろう。 すけろく しかしどんなことができるかの? げんろく Serial通信をBluetooth経由でやってみるのはどうだ? せっかくなのでLEDを遠隔で操作してみよう。 今回は記事では、「Raspberry Pi Pico W」をArduinoでプログラミ […]

すけろく うぬぬ。 げんろく どうした? 何かあったのか? すけろく Raspberry Pi Pico W にArduinoから プログラムが書き込めないのだ・・・ げんろく そうか。 前回書き込み時にバグを仕込んだな。 再初期化の方法を教えよう。 今回は記事では、「Raspberry Pi Pico W」をArduinoでプログラミングする際に発生する問題について、解決方法を紹介します。 発生 […]

すけろく Raspberry Pi Pico Wは、Wi-Fi接続できる。 ということは、ブラウザで接続できるな! げんろく そうだな。 ブラウザからRaspberry Pi Pico Wを 制御することもできる。 すけろく じゃあ、ブラウザから指示を出すことが できるな。 げんろく よし、スマホやパソコンからブラウザ経由で Raspberry Pi Pico Wを制御してみよう。 今回は記事では […]

すけろく Raspberry Pi Pico Wが、Arduinoでプログラミング できることは分かった。 げんろく そうだな。 意外とArduinoのライブラリで動く。 すけろく ああ。 ここらへんで、たくさんのLEDでも光らせてみないか? げんろく よし、LEDストラップを光らせてみるか! 今回は記事では、「Raspberry Pi Pico W」をArduinoでプログラミングします。 M5 […]

すけろく 最近、透明なディスプレイが出てきたな。 げんろく ああ。透過型ディスプレイというやつだな。 すけろく Raspberry Pi Pico Wでも使えるのか? げんろく 手元にあるものはSPI通信を使うタイプだから Raspberry Pi Pico Wでも使えるぞ。 Arduino でプログラムしてみるか! 今回は記事では、「Raspberry Pi Pico W」をArduinoでプロ […]

すけろく Raspberry Pi Pico Wでお天気情報を インターネットから取得できたな。 げんろく うむ。 お天気情報を取り込むことができたな。 すけろく 次は、お天気情報をディスプレイに 表示させたいな。 げんろく よし。 ならば、e-Paper(電子ペーパー)に表示してみるか! 今回は記事では、「Raspberry Pi Pico W」をArduinoでプログラミングします。 インター […]