MAKER PI PICOを入手しました。

最終更新日:2022/7/12


Cytron社が提供しているMakerPiPico-NBというshieldを入手しました。マルツから1500円弱で購入出来ました。
このシールドはとてもリッチです。

Groveポートが6つ用意されています。
  • TFスロット L/R 
  • AudioOut
  • Buzzer
  • RGBLED
  • ESP-01ソケット(ESP8266接続用)
  • RUNボタン
  • 汎用ボタン×3

    使い勝手という意味ではSeeedのGroveShieldよりもいいと思います。RUNボタンがあるのはとても意味があります。
    一方で配線が可成り限定されてしまいます。それを問題視しなければですが。。。

    ArduinoIDE下で使おうとするとExampleがありません。GPIOの割付は情報提供されているので、使用するライブラリが判れば、そのライブラリ内のスケッチをレタッチすればいいかとおもいます。ただ、経験則としてRP2040で使える様に対策されたライブラリかどうかというのは重要です。

    伯爵版のArduino-PicoにはCytronMakerPi-RP2040を選択すれば良さそうです。

    以下の機能を動作確認しました。

    1. RGBLEDの機能確認
    2. Buzzerの機能確認
    3. TFスロットの機能確認
    RGBLEDの機能確認】

    MakerPiPicoにはNeoPixelが1基装備されています。接続ポートはGP28です。
    実行結果ですが1秒毎にR/G/Bの点灯を確認出来るはずです。明るいLEDなので輝度は128に制限してあります。
    またデバッグのためシリアルモニタを使います。シリアルモニタを開かないとSetup()で停まります。

    /*
     *  2022年7月14日 T.Wanibe
     *  CytronMakePiPicoを購入し、RPiPicoを載せてArduinoIDE環境で使おうとしたところ、Cytron社からはArduino用のExampleが
     *  提供されていないことが判ったので、個々の機能に対してのサンプルスケッチを作成し検証しようと考えた
     *  このスケッチはNeoPixelに対する動作確認
     *  NeoPixelは WS2812と云うデバイスで制御回路とRGBチップが統合されたインテリジェント制御LED光源です。テープリールで供給され、
     *  リフレッシュレートにもよりますが カスケード数は1024ポイント以上です。可能です。
     *  CytronMakePiPicoには1個しか配置されていません。
     *  ライブラリはAdafruit_NeoPixel_Masterを使います。最新のライブラリにはRP2040サポートが謳われています。
     *  接続先はGPIO28です。輝度は0−255で指定します。FULLカラー対応です。
     *  最大2093056バイトのフラッシュメモリのうち、スケッチが60584バイト(2%)を使っています。
     *  最大262144バイトのRAMのうち、グローバル変数が11216バイト(4%)を使っていて、ローカル変数で250928バイト使うことができます。
     */
    #include <Adafruit_NeoPixel.h>
    #define PIN             28
    #define NUMPIXELS       1
    byte    RV, GV, BV;
    int     Count = 0;
    char    buf[80];
    //インスタンスの設定(実際の使用環境の設定の事)
    //   NEO_RGB     Pixels are wired for RGB bitstream※補足情報
    //   NEO_GRB     Pixels are wired for GRB bitstream※補足情報
    //   LEDテープの制御ICがWS2812ならNEO_KHZ800 / WS2811ならNEO_KHZ400
    //   NEO_KHZ400  400 KHz bitstream (e.g. FLORA pixels)※補足情報
    //   NEO_KHZ800  800 KHz bitstream (e.g. High Density LED strip)※補足情報
    //Adafruit_NeoPixel(LEDの使用個数、Arduinoのピン番号、色の並び+データの転送速度)
    Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ400);
    void setup() {
            Serial.begin(115200);
            while(!Serial){;}
            pixels.begin();
            pixels.show();          // Initialize all pixels to 'off'
            delay(1000);
    }
    void loop() {
            Serial.println(Count);
            int DevIndex = 0;
            pixels.clear();
            pixels.setPixelColor(DevIndex, pixels.Color(0, 128, 0));       //緑
            pixels.show();
            delay(500);
            pixels.setPixelColor(DevIndex, pixels.Color(128, 0, 0));       //赤
            pixels.show();
            delay(500);
            pixels.setPixelColor(DevIndex, pixels.Color(0, 0, 128));       //青
            pixels.show();
            delay(500);
            //pixels.setPixelColor(i, pixels.Color(RV, GV, BV));
            //i=0から始まるエレメントのアドレスを指定します。
            //RV, GV, BVは各色の輝度値0-255
            for (RV = 0;RV<8;RV++){
                    for (GV = 0;GV<8;GV++){
                            for (BV = 0;BV<8;BV++){
                                    pixels.setPixelColor(DevIndex, pixels.Color(16*RV, 16*GV, 16*BV));
                                    pixels.show();
                                    delay(10);
                                    sprintf(buf,"R=%03d,G=%03d,B=%03d",RV,GV,BV);
                                    Serial.println(buf);
                            }
                    }
            }
            Count++;
    }

    Buzzerの機能確認】

    MakerPiPicoにはBUZZERが1基装備されています。接続ポートはGP18です。
    このコードはXIAO2040で動作したコードを出力ポートを変更しただけです。
    実行結果ですがちゃんと音は鳴ります。

    /*
     * 2022年7月14日 T.Wanibe
     * rp2040 ToneHappyBirthday をMakerPiPi用にレタッチしました。
     * 最大2093056バイトのフラッシュメモリのうち、スケッチが62176バイト(2%)を使っています。
     * 最大262144バイトのRAMのうち、グローバル変数が11220バイト(4%)を使っていて、ローカル変数で250924バイト使うことができます。
     */
    #include <Arduino.h>
    // pin_buzzerは、サポートされているバリアント(CPlay BluefruitやCLUEなど)で定義する必要があります。
    // それ以外の場合は、トーン出力に使用するピンを定義してください
    #define PIN_BUZZER      18
    // このトーンの例で定義されているいくつかの音符の周波数:
    //   https://www.arduino.cc/en/Tutorial/toneMelody
    #define NOTE_C4         262
    #define NOTE_CS4        277
    #define NOTE_D4         294
    #define NOTE_DS4        311
    #define NOTE_E4         330
    #define NOTE_F4         349
    #define NOTE_FS4        370
    #define NOTE_G4         392
    #define NOTE_GS4        415
    #define NOTE_A4         440
    #define NOTE_AS4        466
    #define NOTE_B4         494
    #define NOTE_C5         523
    #define NOTE_CS5        554
    #define NOTE_D5         587
    #define NOTE_DS5        622
    #define NOTE_E5         659
    #define NOTE_F5         698
    #define NOTE_FS5        740
    #define NOTE_G5         784
    #define NOTE_GS5        831
    #define NOTE_A5         880
    #define NOTE_AS5        932
    #define NOTE_B5         988
    // 音符の長さを定義します。 全音符の時間を調整するだけで、他の音符は直接細分化されます。
    #define WHOLE           2200            // 全音符(つまり、フルバー)のミリ秒単位の時間の長さ。
    #define HALF            WHOLE/2
    #define QUARTER         HALF/2
    #define EIGHTH          QUARTER/2
    #define EIGHTH_TRIPLE   QUARTER/3
    #define SIXTEENTH       EIGHTH/2
    uint8_t const           pin_buzzer      = PIN_BUZZER;
    // 指定された周波数と指定された期間のノートを再生します。
    // Holdは、この音符をもう少し長く保持するかどうかを指定するオプションのブール値です。つまり、8分音符が一緒に結ばれている場合です。
    // ノートが再生されるのを待っている間、waitBreath遅延機能が使用されるため、ブレス検出とピクセルアニメーションが実行され続けます。
    // スライドスイッチが-/offの位置にあるか、すべてのキャンドルが吹き消されている場合、トーンは再生されません。
    void playNote(int frequency, int duration, bool hold = false, bool measure = true) {
            (void) measure;
            if (hold) {
                    // 保持されているノートの場合は、指定された長さより少し長く再生して、次のトーンに溶け込みます
                    // しかし、次の音を聞くにはまだ少し遅れがあります
                    tone(pin_buzzer, frequency, duration + duration / 32);
            } else {
                    // 保持されていないノートについては、指定された期間だけ再生してください。
                    tone(pin_buzzer, frequency, duration);
            }
            delay(duration + duration / 16);
    }
    //----------ろうそくが吹き消されたときに再生する曲。
    void celebrateSong() {
            // Play a little charge melody, from:
            //  https://en.wikipedia.org/wiki/Charge_(fanfare)
            // Note the explicit boolean parameters in particular the measure=false
            // at the end.  This means the notes will play without any breath measurement
            // logic.  Without this false value playNote will try to keep waiting for candles
            // to blow out during the celebration song!
            playNote(NOTE_G4, EIGHTH_TRIPLE, true, false);
            playNote(NOTE_C5, EIGHTH_TRIPLE, true, false);
            playNote(NOTE_E5, EIGHTH_TRIPLE, false, false);
            playNote(NOTE_G5, EIGHTH, true, false);
            playNote(NOTE_E5, SIXTEENTH, false);
            playNote(NOTE_G5, HALF, false);
    }
    //----------
    void setup() {
            // Initialize serial output and Circuit Playground library.
            Serial.begin(115200);
            while(!Serial);
            pinMode(pin_buzzer, OUTPUT);
            digitalWrite(pin_buzzer, LOW);
    }
    //----------
    void loop() {
            // Play happy birthday tune, from:
            //  http://www.irish-folk-songs.com/happy-birthday-tin-whistle-sheet-music.html#.WXFJMtPytBw
            // Inside each playNote call it will play a note and drive the NeoPixel animation
            // and check for a breath against the sound sensor.  Once all the candles are blown out
            // the playNote calls will stop playing music.
            playNote(NOTE_D4, EIGHTH, true,false);
            Serial.println(F("NOTE_D4"));
            playNote(NOTE_D4, EIGHTH);
            Serial.println(F("NOTE_D4"));
            playNote(NOTE_E4, QUARTER);       // Bar 1
            Serial.println(F("NOTE_E4"));
            playNote(NOTE_D4, QUARTER);
            Serial.println(F("NOTE_D4"));
            playNote(NOTE_G4, QUARTER);
            Serial.println(F("NOTE_G4"));
            playNote(NOTE_FS4, HALF);         // Bar 2
            Serial.println(F("NOTE_FS4"));
            playNote(NOTE_D4, EIGHTH, true,false);
            Serial.println(F("NOTE_D4"));
            playNote(NOTE_D4, EIGHTH);
            Serial.println(F("NOTE_D4"));
            playNote(NOTE_E4, QUARTER);       // Bar 3
            Serial.println(F("NOTE_E4"));
            playNote(NOTE_D4, QUARTER);
            Serial.println(F("NOTE_D4"));
            playNote(NOTE_A4, QUARTER);
            Serial.println(F("NOTE_A4"));
            playNote(NOTE_G4, HALF);          // Bar 4
            Serial.println(F("NOTE_G4"));
            playNote(NOTE_D4, EIGHTH, true,false);
            Serial.println(F("NOTE_D4"));
            playNote(NOTE_D4, EIGHTH);
            Serial.println(F("NOTE_D4"));
            playNote(NOTE_D5, QUARTER);       // Bar 5
            Serial.println(F("NOTE_D5"));
            playNote(NOTE_B4, QUARTER);
            Serial.println(F("NOTE_B4"));
            playNote(NOTE_G4, QUARTER);
            Serial.println(F("NOTE_G4"));
            playNote(NOTE_FS4, QUARTER);      // Bar 6
            Serial.println(F("NOTE_FS4"));
            playNote(NOTE_C5, QUARTER);
            Serial.println(F("NOTE_C5"));
            playNote(NOTE_C5, EIGHTH, true);
            Serial.println(F("NOTE_C5"));
            playNote(NOTE_C5, EIGHTH);
            Serial.println(F("NOTE_C5"));
            playNote(NOTE_B4, QUARTER);       // Bar 7
            Serial.println(F("NOTE_B4"));
            playNote(NOTE_G4, QUARTER);
            Serial.println(F("NOTE_G4"));
            playNote(NOTE_A4, QUARTER);
            Serial.println(F("NOTE_A4"));
            playNote(NOTE_G4, HALF);          // Bar 8
            Serial.println(F("NOTE_G4"));
            celebrateSong();
            // ループを繰り返して再生する前に1秒間休止します
            delay(1000);
    }

    TFスロットの機能確認】

    機能確認】


    戯言(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社の登録商標です。
    その他の企業名ならびに製品名は、それぞれの会社の商標もしくは登録商標です。
    すべての商標および登録商標は、それぞれの所有者に帰属します。