最終更新日:2022/7/12
Groveポートが6つ用意されています。Cytron社が提供しているMakerPiPico-NBというshieldを入手しました。マルツから1500円弱で購入出来ました。
このシールドはとてもリッチです。
使い勝手という意味ではSeeedのGroveShieldよりもいいと思います。RUNボタンがあるのはとても意味があります。
一方で配線が可成り限定されてしまいます。それを問題視しなければですが。。。
ArduinoIDE下で使おうとするとExampleがありません。GPIOの割付は情報提供されているので、使用するライブラリが判れば、そのライブラリ内のスケッチをレタッチすればいいかとおもいます。ただ、経験則としてRP2040で使える様に対策されたライブラリかどうかというのは重要です。
伯爵版のArduino-PicoにはCytronMakerPi-RP2040を選択すれば良さそうです。
以下の機能を動作確認しました。
- RGBLEDの機能確認
- Buzzerの機能確認
- 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++; } |
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); } |
免責事項
本ソフトウエアは、あなたに対して何も保証しません。本ソフトウエアの関係者(他の利用者も含む)は、あなたに対して一切責任を負いません。
あなたが、本ソフトウエアを利用(コンパイル後の再利用など全てを含む)する場合は、自己責任で行う必要があります。本ソフトウエアの著作権は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社の登録商標です。
その他の企業名ならびに製品名は、それぞれの会社の商標もしくは登録商標です。
すべての商標および登録商標は、それぞれの所有者に帰属します。