注目キーワード

【Arduino】Raspberry Pi Pico W をArduinoでプログラミング!JSON形式データの取り扱い

すけろく
Raspberry Pi Pico Wをインターネットに接続できたが
インターネット上のサービスと連携させたいな。
げんろく
それなら、インターネット上のサービスから
データを取得する際によく使う形式があるので
そこを押さえてからだな。
すけろく
お!
JSON形式だな!
げんろく
そのとおり。
今回は、Raspberry Pi Pico WでJSON形式データを
取り扱う方法をおさえていこう。
今回は記事では、「Raspberry Pi Pico W」をArduinoでプログラミングして、「JSON形式データ」を取り扱う方法について紹介します。
JSON形式データ」は、インターネット上にあるいろんなサービスからデータを取得する際に、よく使われるデータ形式です。
Raspberry Pi Pico W」での扱い方をおさえることで、インターネットサービスとの連携がしやすくなります。
この記事の前提となる「Raspberry Pi Pico W」のはじめかたについては、次の記事で紹介しています。
関連記事

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

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

ピンヘッダ実装済み
created by Rinker
ノーブランド品
¥2,190 (2024/04/14 12:15:13時点 Amazon調べ-詳細)
ピンヘッダを自分ではんだ付けするもの
created by Rinker
Raspberrypi
¥1,656 (2024/04/14 03:14:19時点 Amazon調べ-詳細)

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

JSONって何?

JSONとは?

JSONとは「JavaScriptのオブジェクト記法を用いたデータ交換フォーマット」です。

Python、PHP、JavaScript、C++、Javaなど様々な言語でサポートされています。

JSONを間に挟むことで各プログラミング言語間のデータの受け渡しがとても簡単にできます。

インターネット上のWebサービスからデータを取得する際の形式もJSON形式のものが多いので、例えば、天気情報をWebサービスから取得する際に使用できます。

JSONの表記方法

JSONは以下の形式で表記されます。

[
{“id” : “1”, “name” : “tanaka”},
{“id” : “2”, “name” : “morita”}
]

Arduino でJSONを使用する場合、マイコンのメモリに一時ロードされるため、メモリを事前に予約する必要があります。

どのくらいメモリ確保を行えばよいかを計算できるツールがありますのでそちらを使いましょう!

JSONを扱う際のメモリサイズを計算する

Raspberry Pi Pico Wは、ARMCortex M0 +プロセッサを使っているので、系統が同じなSTM32で計算しています。

以下のページでArduino IDEでJSONを扱う際のメモリサイズを計算できます。

ArduinoJson

The ArduinoJson Assistant is an online tool that computes th…

メモリ量の計算手順

所要時間:5分程度

「Step1:Configuration」画面で以下の通り選択します。
 Processor  :「STM32」
 Mode     :「Deserialize」
 Input Type    :「String」

【Next:JSON】を選択して次の画面に移ります。


「Step2:JSON」画面にて今回使いたいJSONデータを入力します。
【Next:Size】を選択して次の画面に移ります。

前の画面で入力したJSONデータをもとに必要なメモリサイズが計算され、画面に表示されます。
※この例ではトータルで「96」必要なことがわかります。
【Next:Program】を選択して次の画面に移ります。

Arduino IDE用のプログラム例が表示されます。
※先ほどの画面で必要となるサイズとして表示されていた内容をプログラムで指定する方法が記載されています。

StaticJsonDocument<96> doc;

以上でJSON形式データを使用する際のメモリ計算は完了です。

Raspberry Pi Pico WでJSONデータを取り扱ってみよう

それでは、実際にプログラミングしてみましょう。

今回は、基本的な使い方を確認するため、プログラムの中でJSONデータを定義して、それをRaspberry Pi Pico Wで処理し、シリアルモニタに表示させてみます。

使用するJSON形式データ

プログラム内で定義するJSON形式データは、次の通りです。

[
{“Name” : “genroku”, “Site”:”Karakuri-musha.com”}
]

実際にArduino IDEで記述すると次のようになります。

各要素を記載する際の、二重引用符「”」は、プログラム中では、「\」をつける必要があります。

String JsonData = "{ \"name\": \"genroku\", \"site\": \"Karakuri-musha.com\" }";

 

ライブラリを追加する

今回は、JSON形式データを取り扱うため、次のライブラリをインストールします。

使用する情報 設定値(バージョン)
ライブラリ名 ArduinoJSON (6.21.1)

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

関連記事

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

JSON形式データの取り扱いプログラム

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

 Arduino IDE スケッチ例

ちょこっと解説
(1)シリアル接続の開始後の待機時間
Raspberry Pi Pico Wでシリアル接続を開始[Serial.begin()]後の待機時間は、3000ms(3秒)くらいが良いようです。Arduinoでの500msでは、足りません。(2)JSON形式の取り扱い
プログラム中では、JSON形式データの処理を以下の流れで行っています。

①JSON形式データの定義 [String JsonData =…]
②JSON用メモリの確保 [ StaticJsonDocument<96> n_jsondata;]
③JSON形式データの読み込みとエラー情報の取得 [DeserializationError error = deserializeJson(n_jsondata, JsonData);]
④JSON形式データの取り出し [i_name = n_jsondata[“name”];]

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. 「スケッチ」メニューから「マイコンボードに書き込む」を選択します。

 プログラム実行結果

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

JSON Data Test Start

Name : genroku
Site : Karakuri-musha.com

JSON Data Test End

 編集後記

今回は、JSON形式データの取り扱いについて、ご紹介しました。

これで、インターネット上のサービスから取得したJSON形式データを、「Raspberry Pi Pico W」内で処理できます。

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

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

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

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

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

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

ピンヘッダ実装済み
created by Rinker
ノーブランド品
¥2,190 (2024/04/14 12:15:13時点 Amazon調べ-詳細)
ピンヘッダを自分ではんだ付けするもの
created by Rinker
Raspberrypi
¥1,656 (2024/04/14 03:14:19時点 Amazon調べ-詳細)

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

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

すけろく うーむ。 どうしたものか。 げんろく どうした。 暗い顔をして。 すけろく カーモデルのウィンカー点滅を再現したくてな。 明滅回路を作ろうか悩んでおる。 げんろく ん!? そんなときは、メインプロセッサと切り離して 動作するPIOの出番ではないのか! この記事では、「Raspberry Pi  Pico/W」に実装されている「PIO(Programmable I/O」を実際に使ってみます […]

すけろく Raspberry Pi Pico/WのPIO機能を使ってUARTの送信には成功した。 しかし、まだ受信側ができていないのぉ。 げんろく そうだな。 今度は受信側を試してみるか。 すけろく どうせなら、パソコンから送った文字を返すような やり取りができるといいな。 げんろく よし。 UART送受信を実装してみよう。 この記事では、「Raspberry Pi  Pico/W」に実装されてい […]

すけろく Raspberry Pi Pico/WのPIO機能については前回調べた。 今度は実際に使ってみたいの~ げんろく そうだな。 実際にプログラムする際の注意事項などを見ていこう。 すけろく Arduino IDEでも使用できるのか? げんろく ああ。 使えるぞ! Arduino IDEで使う場合を例にやっていこう。 この記事では、「Raspberry Pi  Pico/W」に実装されている […]

すけろく Raspberry Pi Pico/Wには、PIOという機能があるらしいな。 げんろく そうだ。 UARTなどのインタフェース不足や、実装されていない機能を GPIOに対してプログラムできる機能だ。 すけろく Raspberry Pi Pico/Wをもっと知るために PIOを調べてみたい。 げんろく よし! PIOについて少し調べてみるか! この記事では、「Raspberry Pi  P […]

すけろく うーむ。 げんろく どうした浮かない顔して。 すけろく これまで、Raspberry Pi Pico / Wをいろいろ確認してきたが 外付けのボタンの認識ってやったかぇ? げんろく たしかに!まだ取り上げていない基本的なものがあるな よし、今回はボタン押下時の状態を Raspberry Pi Pico / Wで認識してみよう。 この記事では、「Raspberry Pi  Pico W」を […]

すけろく 宅内で使っているリモコンは、どういった仕組みで テレビなどをつけているのかな~? げんろく 赤外線を使って信号を送っているのだ。 すけろく しかし、たくさんある機器のリモコンが混信しないのは どういった仕組みなのかぇ? げんろく よし、今回は赤外線リモコンの通信を 調査してみるか! この記事では、「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のデバッグができるぞ! やっとできたプログラムを動かしてみると […]