RaspberryPiPicoをArduinoIDEで使用する

最終更新日 2023年3月29日

※Arduino IDE で コンパイルエラー status 3 が出てしまいコンパイル出来ません。


RaspberryPiPicoをやっとのことで入手しました。ArduinoIDEで開発すべく環境整備を始めます。

RaspberryPiPicoがリリースされた後、Arduino環境で使える様手を組むと云った報道がありました。その時点でArduinoIDEでRaspberryPiPicoの開発を進めるには二通りの選択肢がありました。Arduino公式とearlephilhower氏方式です。
Arduino公式はArduino Mbed OS RP2040 Boards ライブラリをインストールする事になります。
earlephilhower氏方式では RaspberryPiPico/RP2040 ライブラリをインストールすることになります。※Arduino-Picoと呼ばれています。

※ボードマネージャに【RaspberryPiPico/RP2040】を表示させるには、ArduinoIDEの環境設定 追加ボードに以下のURLを追加する必要があります。

https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json

Mbedベースというのに抵抗がある自分としてはearlephilhower氏方式を選ぶ事にします。当時は1.0.3というバージョンでしたが、この日時点では1.13.0まで更新されています。そしてWiznetW5100S-EVB-Picoをサポートしています。
Exampleもそこそこ増えているようです。一つ一つ確かめるような事はせず、これまでに作成したコードの移植作業をして動作確認する事にしたいと思っています。
※2023年2月22日現在2.7.3に至っています。また、リンクしているコンパイラのバージョンは更新されていないように思われます。
1.0.1-base-3a57aed のままのようです。

開発環境の準備がほぼ出来たらPCとPiPicoをUSB接続しています。多分ですがシリアルポートとして認識出来ないのでは無いでしょうか?
先人の書かれている記事にもあります。

こんな感じで ほかのデバイス:RP2 BootだとかPicoArduinoと云う名前でドライバのインストールに失敗します。
Windows7だからかと思いました。が、Windows10でも発生します。とはいうものの、強引に書込は出来るみたいです。
シリアルポートを選択せず、ボードへの書込を実行すると、書込前にUSBストレージデバイスが自動認識され、書込のメッセージが表示された後プログラムが動き出します。USBストレージも自動でdisconnectされます。

最大2093056バイトのフラッシュメモリのうち、スケッチが59184バイト(2%)を使っています。
最大262144バイトのRAMのうち、グローバル変数が11188バイト(4%)を使っていて、ローカル変数で250956バイト使うことができます。
C:\Users\ToolsBox\AppData\Local\Arduino15\packages\rp2040\tools\pqt-python3\1.0.1-base-3a57aed/python3 -I C:\Users\ToolsBox\AppData\Local\Arduino15\packages\rp2040\hardware\rp2040\1.13.0/tools/uf2conv.py --serial COM42 --family RP2040 --deploy C:\Users\ToolsBox\Documents\Arduino\tmp/Fade.ino.uf2 
Converting to uf2, output size: 131584, start address: 0x2000
Flashing I: (RPI-RP2)
Wrote 131584 bytes to I:/NEW.UF2

例えばFadeというスケッチを書き込むとビルトインLEDが暗->明->暗を繰り返し実行するので確認出来るのかと思います。
ただ、この場合シリアルモニタによるデバッグが出来ません。やはりCOMポートが固定されないと使いづらいと思います。
とりあえず使えればいいのであれば、ドライバソフトウエアの更新で コンピュータ上でドライバを参照>ドライバの一覧から選択>AtmelCorpを選んで実行すれば仮想シリアルドライバが登録されるはずです。難点は登録名ですね。

Seeedのユーザフォーラムには

  1. Atmel_USB_CDC_Virtual_COM_Driver をダウンロード 解凍
  2. atmel_devices_cdc.inf を 適当なファイル名に変更
  3. 中身をちょっと弄って名称だけPiPico等に変更
  4. ドライバの更新でこのファイルを選択してインストール

上記を実行すると以下のようになります。多少は便利ですし、シリアルモニタも出来ます。

手元環境ではSeeed社の『Pi Pico v1.0用Grove シールド』および『M5Stack用温湿度気圧センサユニット Ver.3(ENV V)』があるのでセンサ値をシリアルポートに表示するコードを書いておきます。
M5Stack用温湿度気圧センサユニット Ver.3は温度/湿度/気圧センサでデバイスとしてSHT30/QMP6988が搭載されています。
※インクルードするライブラリはUNIT_ENV-master.zipをインクルードしています。ただしSHT30の取り込みにはAdafruitのライブラリのほうが使いやすいと思いました。QMP6988用のライブラリはなかなか見つからずENV Vのライブラリを利用しています。ただし、#include <UNIT_ENV.h>はコンパイルエラーになりますので注意してください。

※I2C0に接続した場合は

Wire.setSDA(8);
Wire.setSCL(9);
Wire.begin();

I2C1に接続した場合は

Adafruit_SHT31 sht30(&Wire1);
・・・・

Wire1.setSDA(6);
Wire1.setSCL(7);
Wire1.begin();
・・・・

qmp6988.init(0x70,&Wire1);

の変更が必要です。

/*
 * 2022/03/22 T.Wanibe
 * PiPicoの動作確認の為にExampleをレタッチして実行確認しています。
 * このスケッチはPicoをGroveShieldに装着し、I2C1にM5StackのセンサUNIT_ENV3を接続して
 * 温度、湿度、圧力計測するモノです。
 * UNIT_ENV3にはI2C: SHT30(0x44), QMP6988(0x70)です。
 * I2Cアドレスが指定出来るライブラリを使わないとうまくデータ取得出来ませんね。
 * UNIT_ENV3のライブラリ SHT3X.h QMP6988.h はPiPicoでうまく使えないようです。
 * Adafruit_SHT31.hはSHT30も共通で使える様です。Adafruitのライブラリはしっかりしているみたいです。
 * またQMP6988のライブラリは限られるようです。
 * I2C1のポートに接続しましたが、Wire.setSDA(6);Wire.setSCL(7);の設定を怠るとデータが取得出来ません。
 * ポート番号はSeeedStudioが提供するShield回路図を必ず確認する必要があります。
 * 最大2093056バイトのフラッシュメモリのうち、スケッチが66560バイト(3%)を使っています。
 * 最大262144バイトのRAMのうち、グローバル変数が12256バイト(4%)を使っていて、ローカル変数で249888バイト使うことができます。
 */
#include <Wire.h>
#include "Adafruit_SHT31.h"
#include "QMP6988.h"                                            //UNIT_ENV3に含まれています。
Adafruit_SHT31 sht30(&Wire1);
QMP6988 qmp6988;
float   tmp             = 0.0;                                  //なぜかNaNが認められない
float   hum             = 0.0;
float   pressure        = 0.0;
float   tmpOnPico       = 0.0;
int     count           = 0;
//--------------
void setup() {
        Serial.begin(115200);
        pinMode(LED_BUILTIN, OUTPUT);
        digitalWrite(LED_BUILTIN, HIGH);
        Wire1.setSDA(6);                                        //RP2040にはI2C0の組み合わせが6通りあるので設定しておくのが無難です。
        Wire1.setSCL(7);
        Wire1.begin();                                          //ENV IIのgroveコネクタ接続pin設定
        sht30.begin(0x44);                                     // sht30 I2C address: 0x44 or 0x45
        qmp6988.init(0x70,&Wire1);
        qmp6988.setpPowermode(QMP6988_NORMAL_MODE);
        qmp6988.setFilter(QMP6988_FILTERCOEFF_OFF);
        Serial.println(qmp6988.deviceCheck());
        Serial.println(F("ENV Unit III test"));
}
//--------------
void loop() {
        delay(1000);
        if(count++ % 2){
                digitalWrite(LED_BUILTIN, HIGH);
        }else{
                digitalWrite(LED_BUILTIN, LOW);
        }
        tmpOnPico       =       analogReadTemp();
        pressure        =       qmp6988.calcPressure()/100;     //qmp6988のデータを取得します。
        tmp             =       sht30.readTemperature();        //SHT30のデータを取得します。
        hum             =       sht30.readHumidity();           //SHT30から得られた湿度を代入します。
        Serial.printf("OnPicoTemp: %2.1f[℃]\nTemp: %2.1f[℃]\nHumi: %2.0f[%%]\nPressure:%5.0f[hPa]\n", tmpOnPico,tmp, hum, pressure);
}


戯言(nonsense)に戻る


問い合わせ頁の表示


免責事項

本ソフトウエアは、あなたに対して何も保証しません。本ソフトウエアの関係者(他の利用者も含む)は、あなたに対して一切責任を負いません。
あなたが、本ソフトウエアを利用(コンパイル後の再利用など全てを含む)する場合は、自己責任で行う必要があります。

本ソフトウエアの著作権はToolsBoxに帰属します。
本ソフトウエアをご利用の結果生じた損害について、ToolsBoxは一切責任を負いません。
ToolsBoxはコンテンツとして提供する全ての文章、画像等について、内容の合法性・正確性・安全性等、において最善の注意をし、作成していますが、保証するものではありません。
ToolsBoxはリンクをしている外部サイトについては、何ら保証しません。
ToolsBoxは事前の予告無く、本ソフトウエアの開発・提供を中止する可能性があります。

商標・登録商標

Microsoft、Windows、WindowsNTは米国Microsoft Corporationの米国およびその他の国における登録商標です。
Windows Vista、Windows XPは、米国Microsoft Corporation.の商品名称です。
LabVIEW、National Instruments、NI、ni.comはNational Instrumentsの登録商標です。
I2Cは、NXP Semiconductors社の登録商標です。
その他の企業名ならびに製品名は、それぞれの会社の商標もしくは登録商標です。
すべての商標および登録商標は、それぞれの所有者に帰属します。