ラズベリーパイで遊ぶ その3 WAV音源ピアノ USBキーボード編
ラズパイ4に接続したUSBキーボードを使いwav音源ピアノを弾く!
前回紹介のI2CKeyPadに替えてUSBキーボードを使った方法です。 こちらの方が外付け部品が要らずにキーボードの
テンキーを使って疑似ピアノが楽しめます。下はラズパイ4にアンプ付きスピーカーとUSBキーボードを繋いだテストの様子

ここで使えるUSBキーボードはフルサイズのテンキー付きの他、ショートサイズでNumlockキーを押すと一部のキーが
テンキーとして使えるタイプ、専用テンキーボードなどです。
USBキーボードのテンキーをラズパイの外部スイッチとして使う方法は、ラズパイの実験に応用すれば重宝すると思います。
このアイデアは、AnitesさんのRaspberry PiのUSBキーボードを応用にさせて頂きました。
USBキーボードを使う準備
Pythonプロジェクトには「evdev」が既に入ってるので、コマンドラインから「pip3 install evdev」を実行します。
使用するキーボードのDEVICE名を調べる方法。
ラズパイにキーボードをセットしてコマンドラインから「ls /dev/input/by-id/」を実行するとDEVICE名が表示されます。
ソースコードのDEVICE = "/dev/input/by-id/に続けて調べたDEVICE名を記入します。

音源のwavファイルのダウンロードについては前回I2CKeyPadの記事を参考にして下さい。
wavファイルはフォルダーwav_datに格納して以下のkeymap.py、usb_kb.piano.pyと同じディレクトリーに置きます。
キーコードマップ 注意:キーボードによってコードが少し異なる場合が有ります。
keymap.py
ソースコード
usb_kb_piano.py
動画をご覧下さい。
曲が弾けないのでドレミだけですがご覧下さい。
前回紹介のI2CKeyPadに替えてUSBキーボードを使った方法です。 こちらの方が外付け部品が要らずにキーボードの
テンキーを使って疑似ピアノが楽しめます。下はラズパイ4にアンプ付きスピーカーとUSBキーボードを繋いだテストの様子

ここで使えるUSBキーボードはフルサイズのテンキー付きの他、ショートサイズでNumlockキーを押すと一部のキーが
テンキーとして使えるタイプ、専用テンキーボードなどです。
USBキーボードのテンキーをラズパイの外部スイッチとして使う方法は、ラズパイの実験に応用すれば重宝すると思います。
このアイデアは、AnitesさんのRaspberry PiのUSBキーボードを応用にさせて頂きました。
USBキーボードを使う準備
Pythonプロジェクトには「evdev」が既に入ってるので、コマンドラインから「pip3 install evdev」を実行します。
使用するキーボードのDEVICE名を調べる方法。
ラズパイにキーボードをセットしてコマンドラインから「ls /dev/input/by-id/」を実行するとDEVICE名が表示されます。
ソースコードのDEVICE = "/dev/input/by-id/に続けて調べたDEVICE名を記入します。

音源のwavファイルのダウンロードについては前回I2CKeyPadの記事を参考にして下さい。
wavファイルはフォルダーwav_datに格納して以下のkeymap.py、usb_kb.piano.pyと同じディレクトリーに置きます。
キーコードマップ 注意:キーボードによってコードが少し異なる場合が有ります。
keymap.py
|
ソースコード
usb_kb_piano.py
|
動画をご覧下さい。
曲が弾けないのでドレミだけですがご覧下さい。
皆様の参考になれば幸いです。
スポンサーサイト
ラズベリーパイで遊ぶ その2 WAV音源ピアノ I2CKeyPad編
ラズパイ4にI2C接続したキーパッドを使いwav音源ピアノを弾く!

私は音痴で子供のころから楽器で遊んだことが無く音楽とは無縁でした。
ラズパイを始めてから電源+2本の線を繋ぐだけでGPIOが節約出来るI2C通信に興味を持ち、安価なI2C
エキスパンダーPCF8574を入手しました。
このエキスパンダーに4X4マトリックスキーボードを付けたので何かに応用したいと思い、ヒントを探してたら
ラズベリーパイORGの「今日は何を作りたいですか?」コーナーにGPIO music boxが目に
留まりました。ここでは、4個のボタンスイッチをGPIOに接続し、ボタンを押すとドラムの音を再生する簡単な
仕組みでしたが、I2Cを使えばGPIOの数に制限されずに簡単にボタンを増やすことが出来ます。
そこで、今回は16個まで使えるキーパッドを使って模擬ピアノを試しました。但し、ピアノ音源のwavソースが
ドレミファソラシドの8音階しか入手出来なかったのでほんのお遊び程度です。
キーパッドの使い方やソースコードはKI04.comのチュートリアルを参考にさせて頂きました。
必要な部品
ラズベリーパイ:Pi4を使ってテストしました。
I2CエキスパンダーPCF8574:通販で1個150円程度です。
このエキスパンダーはアドレスの設定をジャンパーピンを差し替えることで0x20から0x27を選べます。
余談ですが、エキスパンダーのアドレスを変えて直列接続(daisy chain)すればもっと多くのキーボードが使えます。
I2Cのアドレスを調べる方法は前回のLCDメッセージボードを参考にして下さい。
4X4マトリックスキーボード:通販で1個125円でした。
I2CエキスパンダーPCF8574と4X4マトリックスキーボードの接続図

wav音源の準備
先ずは、先に紹介しましたGPIO music boxのtutorialを一通りご覧下さい。音源の再生にpygameを使います。
私はフリー音楽素材魔王魂トップページのピアノ(wav)1-1ド~1-8ドをダウンロードして使わせて頂きました。
ダウンロードしたwavファイルはフォルダーwav_datに格納して次の16key_Piano.pyと同じディレクトリーに置きます。
ソースコード
動画をご覧下さい。
撮影のセットが悪く3脚とテーブルが接触してノイズが入ってしまった!。
次回はキーパッドに替え、ラズパイ4につないだUSBキーボードを使う方法を紹介します。

私は音痴で子供のころから楽器で遊んだことが無く音楽とは無縁でした。
ラズパイを始めてから電源+2本の線を繋ぐだけでGPIOが節約出来るI2C通信に興味を持ち、安価なI2C
エキスパンダーPCF8574を入手しました。
このエキスパンダーに4X4マトリックスキーボードを付けたので何かに応用したいと思い、ヒントを探してたら
ラズベリーパイORGの「今日は何を作りたいですか?」コーナーにGPIO music boxが目に
留まりました。ここでは、4個のボタンスイッチをGPIOに接続し、ボタンを押すとドラムの音を再生する簡単な
仕組みでしたが、I2Cを使えばGPIOの数に制限されずに簡単にボタンを増やすことが出来ます。
そこで、今回は16個まで使えるキーパッドを使って模擬ピアノを試しました。但し、ピアノ音源のwavソースが
ドレミファソラシドの8音階しか入手出来なかったのでほんのお遊び程度です。
キーパッドの使い方やソースコードはKI04.comのチュートリアルを参考にさせて頂きました。
必要な部品
ラズベリーパイ:Pi4を使ってテストしました。
I2CエキスパンダーPCF8574:通販で1個150円程度です。
このエキスパンダーはアドレスの設定をジャンパーピンを差し替えることで0x20から0x27を選べます。
余談ですが、エキスパンダーのアドレスを変えて直列接続(daisy chain)すればもっと多くのキーボードが使えます。
I2Cのアドレスを調べる方法は前回のLCDメッセージボードを参考にして下さい。
4X4マトリックスキーボード:通販で1個125円でした。
I2CエキスパンダーPCF8574と4X4マトリックスキーボードの接続図

wav音源の準備
先ずは、先に紹介しましたGPIO music boxのtutorialを一通りご覧下さい。音源の再生にpygameを使います。
私はフリー音楽素材魔王魂トップページのピアノ(wav)1-1ド~1-8ドをダウンロードして使わせて頂きました。
ダウンロードしたwavファイルはフォルダーwav_datに格納して次の16key_Piano.pyと同じディレクトリーに置きます。
ソースコード
#!/usr/bin/env python |
動画をご覧下さい。
撮影のセットが悪く3脚とテーブルが接触してノイズが入ってしまった!。
次回はキーパッドに替え、ラズパイ4につないだUSBキーボードを使う方法を紹介します。
皆様の参考になれば幸いです。
ラズベリーパイで遊ぶ その1 Blynk LCD Message Board 後編
Blynk LCD Message Board 後編 (前編と併せてご覧下さい)
ソフトウエアの説明
下の画像はアクリル板を加工して作ったLCDメッセージボードで、ラズパイZeroとHAT基板を載せてます。
スマホアプリBlynkの設定について
先ず、iPhone(App Store)又はAndroid(google Play)からスマホにBlynk-IoT for Arduino, ESP32をダウンロードして
インストールを行います。使用するパーツ(Widget)を沢山使うと有料になりますが、ここで扱う程度は無料です。
左上から順番に①・・・
lcdsample.confのI2Cアドレス等の設定
Blynk_LCD_Messageのソースコード
同じディレクトリーにBlynk_LCD_Message.py、BlynkLib.py、HD44780.py、conf/lcdsample.confを入れます。
Blynk_LCD_Message.py
使い方
①左側画像のようにスマホBlynkアプリのText Input Boxにメッセージを入力して送信します。
メッセージに使える文字はHD44780.pyに定義したアルファベットの大文字、小文字、英数記号、カタカナ
のみですが、カタカナ入力は全角で入力しても半角カタカナに変換して表示されるのでとても便利です。
間違えてひらがなや漢字を入力しても、定義された文字以外はパスして表示せずにエラーが出ません。
16文字を超える文字はオーバフローして表示しません。
②メッセージが届いたら確認ボタンを押すと、右画像のようにスマホ側へメッセージが届いたことを知らせます。

スマホから届いたメッセージがLCDの2行目にに表示されると同時にブザーが鳴って着信を知らせます。
1行目の年月日と時刻は常時表示としました。

ソフトウエアの説明
下の画像はアクリル板を加工して作ったLCDメッセージボードで、ラズパイZeroとHAT基板を載せてます。
スマホアプリBlynkの設定について
先ず、iPhone(App Store)又はAndroid(google Play)からスマホにBlynk-IoT for Arduino, ESP32をダウンロードして
インストールを行います。使用するパーツ(Widget)を沢山使うと有料になりますが、ここで扱う程度は無料です。
左上から順番に①・・・
①インストルール初期画面のアカウント作成を選択します。
②メールアドレスとパスワードを登録します。
②メールアドレスとパスワードを登録します。
③この画面の一番下Email allをクリックすると登録したEメールに「AUTH TOKEN」が送られてきます。
注意:この「AUTH TOKEN」が後で作成するソースコードに必要となります。
④プロジェクト名の入力とデバイス選択をRaspberry pi Zero Wが無いのでRaspberry pi 3Bを選びCreateボタンを押す。

⑤プロジェクト画面が開いたら右上の丸✙のを選択するとwidget Boxが開きます。
⑥widget Boxの下の方にText inputを選択しするとText input Setting画面が開きます。
⑦Text input Setting画面ではPINを選択します。
⑧次にSelect pinのVitualとV0を選択してOKをクリックするとText input Settin画面に戻ります。

⑨この画面下側のCHARACTER LIMIT枠に50から100位を入力し、一番上左端の←をクリックします。
⑩プロジェクトと画面に表示されたText inputボックスを見易い位置に移動と幅の調整をします。
⑪次はWidget Boxを開き、着信をスマホに通知するパーツNotificationを追加します。
⑫NotificationをText input Boxの下辺りに配置します。Notificationは、メッセージが届いた後、本体拡張基板に
追加したタクトスイッチを押すと、スマホの画面に確認のメッセージが表示され、メッセージが届いたことを通知します。
通知はOKをタップすると消えます。

Blynkライブラリーのダウンロード
BlynkLib.pyのダウンロード先URL
カタカナを表示のの準備
もんごんたさんのホームページ「LCD1602Aや2004AをI2C接続で使いこなす」
ハード編とソフト編を参考にカタカナの表示に必要なソースコードHD44780.pyを使わせて頂きました。感謝!
必要なソースファイルは次のGitHubからClone出来ます。 GitHub mongonta0716/hd44780
LCDモジュールの設定やラズパイの設定もハード編、ソフト編で詳しく説明されているので参考にして下さい。
注意:この「AUTH TOKEN」が後で作成するソースコードに必要となります。
④プロジェクト名の入力とデバイス選択をRaspberry pi Zero Wが無いのでRaspberry pi 3Bを選びCreateボタンを押す。




⑤プロジェクト画面が開いたら右上の丸✙のを選択するとwidget Boxが開きます。
⑥widget Boxの下の方にText inputを選択しするとText input Setting画面が開きます。
⑦Text input Setting画面ではPINを選択します。
⑧次にSelect pinのVitualとV0を選択してOKをクリックするとText input Settin画面に戻ります。




⑨この画面下側のCHARACTER LIMIT枠に50から100位を入力し、一番上左端の←をクリックします。
⑩プロジェクトと画面に表示されたText inputボックスを見易い位置に移動と幅の調整をします。
⑪次はWidget Boxを開き、着信をスマホに通知するパーツNotificationを追加します。
⑫NotificationをText input Boxの下辺りに配置します。Notificationは、メッセージが届いた後、本体拡張基板に
追加したタクトスイッチを押すと、スマホの画面に確認のメッセージが表示され、メッセージが届いたことを通知します。
通知はOKをタップすると消えます。




Blynkライブラリーのダウンロード
BlynkLib.pyのダウンロード先URL
カタカナを表示のの準備
もんごんたさんのホームページ「LCD1602Aや2004AをI2C接続で使いこなす」
ハード編とソフト編を参考にカタカナの表示に必要なソースコードHD44780.pyを使わせて頂きました。感謝!
必要なソースファイルは次のGitHubからClone出来ます。 GitHub mongonta0716/hd44780
LCDモジュールの設定やラズパイの設定もハード編、ソフト編で詳しく説明されているので参考にして下さい。
lcdsample.confのI2Cアドレス等の設定
[lcd] |
Blynk_LCD_Messageのソースコード
同じディレクトリーにBlynk_LCD_Message.py、BlynkLib.py、HD44780.py、conf/lcdsample.confを入れます。
Blynk_LCD_Message.py
#!/usr/bin/python3 |
使い方
①左側画像のようにスマホBlynkアプリのText Input Boxにメッセージを入力して送信します。
メッセージに使える文字はHD44780.pyに定義したアルファベットの大文字、小文字、英数記号、カタカナ
のみですが、カタカナ入力は全角で入力しても半角カタカナに変換して表示されるのでとても便利です。
間違えてひらがなや漢字を入力しても、定義された文字以外はパスして表示せずにエラーが出ません。
16文字を超える文字はオーバフローして表示しません。
②メッセージが届いたら確認ボタンを押すと、右画像のようにスマホ側へメッセージが届いたことを知らせます。


スマホから届いたメッセージがLCDの2行目にに表示されると同時にブザーが鳴って着信を知らせます。
1行目の年月日と時刻は常時表示としました。

皆様の参考になれば幸いです。
Raspberry pi 用便利HATの紹介 その2
ラズパイ用HAT基板 その2
先に作ったラズパイZero用のHAT基板を差し替えて共用してたが、ラズパイ4専用として少し大きいHAT基板に
4チャンネル I2C ロジック レベル変換双方向モジュールを組み込んで組み立てました。
回路図

完成したHAT基板
圧電ブザーの右横が 5個290円(送料込み)で購入したロジックレベル変換双方向モジュールです。
このモジュールは4チャンネルですが、ここでは2チャンネルのみ使用。コネクターは3.3V系と5V系を夫々に設けました。
これで、5V系のI2C 機器を安心して使えるようになりました。使用したHAT基板は秋月電子にて150円で購入しました。

皆様の参考になれば幸いです。
先に作ったラズパイZero用のHAT基板を差し替えて共用してたが、ラズパイ4専用として少し大きいHAT基板に
4チャンネル I2C ロジック レベル変換双方向モジュールを組み込んで組み立てました。
回路図

完成したHAT基板
圧電ブザーの右横が 5個290円(送料込み)で購入したロジックレベル変換双方向モジュールです。
このモジュールは4チャンネルですが、ここでは2チャンネルのみ使用。コネクターは3.3V系と5V系を夫々に設けました。
これで、5V系のI2C 機器を安心して使えるようになりました。使用したHAT基板は秋月電子にて150円で購入しました。

皆様の参考になれば幸いです。
ラズベリーパイで遊ぶ その1 Blynk LCD Message Board 前編
Blynkのメッセージ表示にI2C 16X2LCDを使う
先に紹介しました。Blynkを使った8X8X8 LEDドットマトリックスメッセージボードを安価なI2C16X2 LCD表示器に
置き換えてみました。
Blynkを使ってスマホからメッセージを送るとラズパイに接続した16文字2行のLCD表示器にメッセージが届きます。
1行目には年月日と時刻を表示し、2行目に英数記号とカタカナのメッセージを表示します。
スマホから間違って英数記号やカタカナ以外の文字を送ってもエラーとならず、その部分のみ表示しません。

使用部品は、1602 LCD表示器+I2C変換モジュール(セット物と別売が有り、何れも数百円程度にて入手)
私があまり気にしないので5V駆動のLCDを使いましたが、気になる方は3.3V駆動のLCDを使うかI2Cラインに
双方向ロジックレベル変換モジュールを挿入してください。

上の画像では、先に作った便利HATを使ってますが、下のFritzing接続図では必要部分のみ結線しています。

I2Cインターフェースを使うための準備
Rasbianのdesktopがインストールされている場合は、設定⇒Raspberry piの設定⇒インターフェースを開き、
I2Cを有効にチェックした後に再起動するとI2Cが使えます。

もし、動かない場合はコマンドラインから”sudo raspi-config”と入力すれば下図のraspi_config画面が開きます。
5番目のInterfacing Options選択します。

P5 I2Cを選択します。

yes(はい)を選択します。

OK(了解)を選択してfinish(終了)します。

LCDのI2C変換モジュールのアドレスを調べる方法
LCDの各Vcc,GND,SDA,SCLを接続後起動、コマンドラインからi2cdetect -y 1と入力すると下図のようにアドレスが
表示されます。この場合は27即ち0x27だと解ります。

次回、後編ではソフトウェアについて説明します。
皆様の参考になれば幸いです。
先に紹介しました。Blynkを使った8X8X8 LEDドットマトリックスメッセージボードを安価なI2C16X2 LCD表示器に
置き換えてみました。
Blynkを使ってスマホからメッセージを送るとラズパイに接続した16文字2行のLCD表示器にメッセージが届きます。
1行目には年月日と時刻を表示し、2行目に英数記号とカタカナのメッセージを表示します。
スマホから間違って英数記号やカタカナ以外の文字を送ってもエラーとならず、その部分のみ表示しません。

使用部品は、1602 LCD表示器+I2C変換モジュール(セット物と別売が有り、何れも数百円程度にて入手)
私があまり気にしないので5V駆動のLCDを使いましたが、気になる方は3.3V駆動のLCDを使うかI2Cラインに
双方向ロジックレベル変換モジュールを挿入してください。

上の画像では、先に作った便利HATを使ってますが、下のFritzing接続図では必要部分のみ結線しています。

I2Cインターフェースを使うための準備
Rasbianのdesktopがインストールされている場合は、設定⇒Raspberry piの設定⇒インターフェースを開き、
I2Cを有効にチェックした後に再起動するとI2Cが使えます。

もし、動かない場合はコマンドラインから”sudo raspi-config”と入力すれば下図のraspi_config画面が開きます。
5番目のInterfacing Options選択します。

P5 I2Cを選択します。

yes(はい)を選択します。

OK(了解)を選択してfinish(終了)します。

LCDのI2C変換モジュールのアドレスを調べる方法
LCDの各Vcc,GND,SDA,SCLを接続後起動、コマンドラインからi2cdetect -y 1と入力すると下図のようにアドレスが
表示されます。この場合は27即ち0x27だと解ります。

次回、後編ではソフトウェアについて説明します。
皆様の参考になれば幸いです。
Raspberry pi 用便利HATの紹介
先月、初めてラズパイしZeroを購入してPythonの勉強を始め、最近Raspi4を入手しました。
各種センサーやI2Cモジュールを繋いで遊んでますが、有れば便利なHAT(拡張基板)を作りました。
ここに使ったHAT基板は秋月電子にて1枚100円で購入出来ます。基板左側の4pinコネクターはI2C用です。

回路図
LED8個、タクトスイッチ3個、圧電ブザー1個、I2C用コネクター1個の簡単な回路です。
自作が苦手な方は、スイッチサイエンスにて販売のMaker pHAT(1252円)を購入して下さい。
LEDをスクロールさせたり出来るサンプルコードが提供されていて、初めて使う方にも有効だと思います。

HAT側面の様子
ケースに入れると本体基板の40Pinプラグまで届かないので、ラズパイ用スタッキングコネクターで下駄をはかせてます。
このスタッキングコネクターは秋月電子にて1個150円でした。
右上の黒い棒状の突起物はI2Cの電源電圧5Vと3.3V切り替え用のジャンパーピンです。

お気に入りのアクリルケースに載せて使います。
HAT基板は差し込んでるだけで固定していません。スペーサーはスイッチを押した時に基板がたわむのを防ぐために
取り付けています。

アクリルケースの手前側から見た様子
HAT基板にも40pinヘッダーを取り付けてあるので、ブレッドボードにリボンケーブルを繋いで実験する時もコネクターの
取り外しが簡単で利便性が有ります。

アクリルケースの後ろ側から見た様子
特にI2C用の専用コネクターを取り付けたのでLCDや各種センサーのテストにはとても便利です。

皆様の参考になれば幸いです。
各種センサーやI2Cモジュールを繋いで遊んでますが、有れば便利なHAT(拡張基板)を作りました。
ここに使ったHAT基板は秋月電子にて1枚100円で購入出来ます。基板左側の4pinコネクターはI2C用です。

回路図
LED8個、タクトスイッチ3個、圧電ブザー1個、I2C用コネクター1個の簡単な回路です。
自作が苦手な方は、スイッチサイエンスにて販売のMaker pHAT(1252円)を購入して下さい。
LEDをスクロールさせたり出来るサンプルコードが提供されていて、初めて使う方にも有効だと思います。

HAT側面の様子
ケースに入れると本体基板の40Pinプラグまで届かないので、ラズパイ用スタッキングコネクターで下駄をはかせてます。
このスタッキングコネクターは秋月電子にて1個150円でした。
右上の黒い棒状の突起物はI2Cの電源電圧5Vと3.3V切り替え用のジャンパーピンです。

お気に入りのアクリルケースに載せて使います。
HAT基板は差し込んでるだけで固定していません。スペーサーはスイッチを押した時に基板がたわむのを防ぐために
取り付けています。

アクリルケースの手前側から見た様子
HAT基板にも40pinヘッダーを取り付けてあるので、ブレッドボードにリボンケーブルを繋いで実験する時もコネクターの
取り外しが簡単で利便性が有ります。

アクリルケースの後ろ側から見た様子
特にI2C用の専用コネクターを取り付けたのでLCDや各種センサーのテストにはとても便利です。

皆様の参考になれば幸いです。