Raspberry Piの初期設定

Raspberry Pi 2/3/4 に Ubuntu Server 20.4をインストールして、MIDIのプログラムを書くまでの初期設定を記載します。Raspberry Pi 2 の場合、32bit版のみインストールできます。、Pi 3/4 は32bit版、64bit 版の両方がインストール可能です。

Ubuntu Server 20.4をMicro SDカードに書き込む手順は、Raspberry Pi財団の公式ページを参照して下さい。

Raspberry Piに、Micro SDカードを差し込み、ディスプレイとUSBキーボードを接続します。電源を入れると、しばらく初期設定が始まります。Login:が表示されてログイン待ちとなります。Ubuntuは初期状態では以下のLogin IDとパスワードでログインできます。

> Login:ubuntu
> Password:ubuntu

ログインすると、パスワードを変更するように促されます。Currentにはubuntuと入力します。その後、新しいパスワードを入力して下さい。

you are required to change your password immediately
> Current password:ubuntu
> New password:
> Retype new password:

パッケージのインストール

C, C++の開発環境を整えます。

> sudo apt install net-tools
> sudo apt install gcc g++ make cmake
> sudo apt install libi2c-dev git-core

GPIOを使いたいのでWiringPiをインストールします。

> git clone https://github.com/WiringPi/WiringPi.git
> cd WiringPi
> ./build

ASIOの開発環境をインストールします。

> sudo apt install libasound2 libasound-dev

これで、MIDIのプログラムをコンパイルできます。続いてaconnectとpmidiを使いたいので以下をインストールしておきます。

> sudo apt install alsa-utils pmidi

ついでにjackの環境をインストールします。

  > sudo apt install jackd2 libjack-jackd2-dev

日本語キーボードの設定

日本語キーボードの設定には、raspi-configを使える場合と使えない場合があります。何が違うのか良くわかっていません。

> sudo apt install raspi-config

raspi-configがインストールできない場合は以下のコマンドを試してみてください。

> sudo dpkg-reconfigure keyboard-configuration
*
WiringPiでLチカ

Raspberry PiにLEDを接続して点滅させるLチカ、WiringPiのライブラリを使ってC言語のプログラムを書く時、多少悩みましたので記録しておきます。 Raspberryの物理的なピンは40ピンあり、それぞれのピンに以下のような役割が配置されています。試しに、右下の3つのピン、 GPIO.16, GPIO.20, GPIO.21にLEDを接続します。物理的ばピンの番号は、36,38,40です。



3V3 power125V power
GPIO2(SDA)345V power
GPIO3(SLC)56Ground
GPIO4(GPCLK0)78GPIO14(TXD)
Ground910GPIO15(RXD)
GPIO171112GPIO18(PCM_CLK)
GPIO271314Ground
GPIO221516GPIO23
3V3 power1718GPIO24
GPIO10(MOSI)1920Ground
GPIO9(MISO)2122GPIO25
GPIO(SCLK)2324GPIO8(CE0)
Ground2526GPIO7(CE1)
GPIO0(ODSD)2728GPIO1(ID_SC)
GPIO52930Ground
GPIO63132GPIO12(PWM0)
GPIO13(PWM1)3334Ground
GPIO19(PCM_FS)3536GPIO16
GPIO263738GPIO20(PCM_DIN)
Ground3940GPIO21(PCM_DOUT)

WiringPiを使って、Lチカするためのピンの番号は16,20,21でも、36,38,40でもなく、 readallコマンドで操作するピン番号を調べる必要があります。 Termialでreadallを入力すると以下のように表示が出ます。wPiと書かれている欄が制御するピン番号です。 GPIO.16, GPIO.20, GPIO.21は、ピン27, 28 ,29 を制御します。

> gpio readall
+-----+-----+---------+------+---+---Pi 2---+---+------+---------+-----+-----+
| BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
|     |     |    3.3v |      |   |  1 || 2  |   |      | 5v      |     |     |
|   2 |   8 |   SDA.1 |   IN | 1 |  3 || 4  |   |      | 5v      |     |     |
|   3 |   9 |   SCL.1 |   IN | 1 |  5 || 6  |   |      | 0v      |     |     |
|   4 |   7 | GPIO. 7 |   IN | 1 |  7 || 8  | 1 | ALT0 | TxD     | 15  | 14  |
|     |     |      0v |      |   |  9 || 10 | 1 | ALT0 | RxD     | 16  | 15  |
|  17 |   0 | GPIO. 0 |   IN | 0 | 11 || 12 | 0 | IN   | GPIO. 1 | 1   | 18  |
|  27 |   2 | GPIO. 2 |   IN | 0 | 13 || 14 |   |      | 0v      |     |     |
|  22 |   3 | GPIO. 3 |   IN | 0 | 15 || 16 | 0 | IN   | GPIO. 4 | 4   | 23  |
|     |     |    3.3v |      |   | 17 || 18 | 0 | IN   | GPIO. 5 | 5   | 24  |
|  10 |  12 |    MOSI |   IN | 0 | 19 || 20 |   |      | 0v      |     |     |
|   9 |  13 |    MISO |   IN | 0 | 21 || 22 | 0 | IN   | GPIO. 6 | 6   | 25  |
|  11 |  14 |    SCLK |   IN | 0 | 23 || 24 | 1 | IN   | CE0     | 10  | 8   |
|     |     |      0v |      |   | 25 || 26 | 1 | IN   | CE1     | 11  | 7   |
|   0 |  30 |   SDA.0 |   IN | 1 | 27 || 28 | 1 | IN   | SCL.0   | 31  | 1   |
|   5 |  21 | GPIO.21 |   IN | 1 | 29 || 30 |   |      | 0v      |     |     |
|   6 |  22 | GPIO.22 |   IN | 1 | 31 || 32 | 0 | IN   | GPIO.26 | 26  | 12  |
|  13 |  23 | GPIO.23 |   IN | 0 | 33 || 34 |   |      | 0v      |     |     |
|  19 |  24 | GPIO.24 |   IN | 0 | 35 || 36 | 0 | IN   | GPIO.27 | 27  | 16  |
|  26 |  25 | GPIO.25 |   IN | 0 | 37 || 38 | 0 | IN   | GPIO.28 | 28  | 20  |
|     |     |      0v |      |   | 39 || 40 | 0 | IN   | GPIO.29 | 29  | 21  |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
| BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
+-----+-----+---------+------+---+---Pi 2---+---+------+---------+-----+-----+

wPiの欄が、ピン番号として必要な情報です。プログラムは以下のようになります。

  #include <wiringPi.h>

    #define GPIO16 27 
    #define GPIO20 28 
    #define GPIO21 29 
    
    int main (void)
    {
      wiringPiSetup () ;
      pinMode (GPIO16, OUTPUT) ;
      pinMode (GPIO20, OUTPUT) ;
      pinMode (GPIO21, OUTPUT) ;
    
      digitalWrite (GPIO16, LOW) ;	//消灯
      digitalWrite (GPIO20, LOW) ;	//消灯
      digitalWrite (GPIO21, LOW) ;	//消灯
    
      while (1)
      {
        digitalWrite (GPIO21,  LOW) ;	//GPIO21消灯
        digitalWrite (GPIO16, HIGH) ;	//GPIO16点灯
        delay (1000) ;	                //1秒待つ
        digitalWrite (GPIO16,  LOW) ;	//GPIO16消灯
        digitalWrite (GPIO20, HIGH) ;	//GPIO20点灯
        delay (1000) ;	                //1秒待つ
        digitalWrite (GPIO20,  LOW) ;	//GPIO20消灯
        digitalWrite (GPIO21, HIGH) ;	//GPIO21点灯
        delay (1000) ;	                //1秒待つ
      }
      return 0 ;
    }