Kamuycikap - SentenceDataBase

日々の勉強の記録を気分で書き綴るブログ

俺的RaspberryPi4セットアップ(2021年11月版)

汎用的なRaspberryPi4の作り方

はじめに

利用するにあたり、俺的Raspbianのイメージを作成しておく。
目的は、短時間で開発用プラットフォームを構築する事。
最初から「なんでもかんでも版」は用意せず、

くらいで押さえておく。
開発用ライブラリなどについては、必要に応じて後でインストール。

構築手順

OSセットアップ

https://www.raspberrypi.org/downloads/raspbian/
本家から、最新のRaspberry Pi OSをセットアップ。 ← このへんは割愛。
面倒ならNOOBSで構築してしまえば、待ってる時間も有効的に利用可能。

また、起動後はCLIではなくGUIにしておいて問題ないと考える。
起動後の状態については、利用シーンで各々が設定する方針とする。

ネットワーク設定

これも割愛。
初回起動時に、初期設定ウィザードが走る。
ウィザードの中に、ネットワーク設定も含まれるので、SSIDとパスワードを設定するだけ。

CapsLockをCtrlキーに

bash利用する時、キーバインドのデフォルトはEmacsになっている。
この場合、CapsLockキーがCtrlキーだとすごく使いやすい。
まずは、設定ファイルを開く

pi@raspberrypi:~ $ sudo nano /etc/default/keyboard

設定ファイル「keyboard」の最後に下記の行を追加して保存

XKBOPTIONS=ctrl:nocaps

再起動する。

pi@raspberrypi:~ $ sudo shutdown -r now
日本語入力できるように

基本的にはSSH接続利用を想定するが、HDMIディスプレイを接続して利用するシーンもあるはずなので、単体で日本語入力できるようにセットアップする。

pi@raspberrypi:~ $ sudo apt-get install ibus-mozc

しばらく待って、インストール完了後に再起動する。

pi@raspberrypi:~ $ sudo shutdown -r now
ホスト名変更

ネットワークに参加させる場合、デフォルトの状態では他のRaspberryPiと競合する。
自分一人なら問題ないが、複数の人間が同じネットワークでRaspberryPiを利用する場合はホスト名を分ける事で識別可能。
テキストエディタを使って、設定ファイルを直接編集し、再起動すればホスト名が反映されます。
変更箇所は以下の2つです。
注意点! ホスト名に記号を入れないように!(アンダーバーとかドットとか)

/etc/hosts
127.0.1.1 を 入力したホスト名に変更します。

/etc/hostname
ホスト名を入力します。

再起動にて設定内容が反映されます。

C言語開発環境構築

ここで言う開発環境とは、統合開発環境のことではない。

C言語ソースコードコンパイルできる環境を目指す。
ので、シェル上でコマンドによるコンパイルができる環境を構築する。

> 意気込んでインストールしようとしたら、デフォルトでインストールされていた。
> もしかしたら知らないうちに入れてたのか?と心配になったので、インストールコマンドをメモ_

pi@raspberrypi:~ $ sudo apt-get install build-essential
C言語開発(他言語でも使える)ライブラリインストール(GPIO、I2C、SPI)

GPIO、SPI、I2Cを叩くためのライブラリをインストール。

> WiringPiをインストールしようとしたら、デフォルトでインストールされていた。
> もしかしたら知らないうちに入れてたのか?と心配になったので、インストールコマンドをメモ
> I2Cライブラリはデフォルトでインストールされていない様子

pi@raspberrypi:~ $ sudo apt-get install wiringpi
pi@raspberrypi:~ $ sudo apt-get install i2c-tools
デバッガインストール

Linux環境でデバッグするための王道アプリをインストール【GDB

> これも意気込んでインストールしようとしたら、デフォルトでインストールされていた。
> もしかしたら知らないうちに入れてたのか?と心配になったので、インストールコマンドをメモ_

pi@raspberrypi:~ $ sudo apt-get install gdb
SSH接続できるように設定

RaspberryPiのGUI画面にて、
「左上のraspberryアイコン」→「設定」→「Raspberry Piの設定」
とクリックし、
インターフェイス」→「SSHを有効」
と設定してから、右下の「OK」をクリック

上記設定が完了すると、同ネットワークの別マシンから、SSH接続が可能になる。

bash:~ $ ssh pi@192.168.1.142
bash:~ $ pi@192.168.1.142's password: XXXXXX <- ログインパスワードを入力
pi@raspberrypi:~ $   <- 接続出来たらRaspberryPiのシェルになっているはず。
共有フォルダ作成

ファイルサーバーをセットアップ。
【注意】 インストールの初期段階でWINSによる名前解決の機能を有効にするか否かを聞かれるが、デフォルトの「いいえ」で進める事。

pi@raspberrypi:~ $ sudo apt-get update
pi@raspberrypi:~ $ sudo apt-get install samba

インストールできていたら、バージョン確認が動作するはず。

pi@raspberrypi:~ $ smbd -V
Version 4.5.16-Debian  <- インストールした時点のバージョンが表示される
pi@raspberrypi:~ $ 

別PCからソースコードや設定ファイルなどを配置できるように、共有フォルダを作成する。
/home/pi/Publicを共有フォルダとして設定する。
下記コマンドにて設定ファイルを編集。

pi@raspberrypi:~ $ sudo nano /etc/samba/smb.conf

smb.confの一番下に設定を追加

[Public]
path = /home/pi/Public
read only = No
guest ok = Yes
force user = pi

設定を有効化

pi@raspberrypi:~ $ sudo service smbd restart
pi@raspberrypi:~ $  <- 何事もなければプロンプトに戻ってくる
pi@raspberrypi:~ $ sudo systemctl restart smbd
pi@raspberrypi:~ $ sudo systemctl restart nmbd
pi@raspberrypi:~ $  <- 何事もなければプロンプトに戻ってくる

別マシンのネットワークに、コンピュータとしてRaspberryPiが表示されているはず。
RaspberryPiをダブルクリックした時、Publicフォルダが共有フォルダとして見えていれば成功。
※Windows10の場合、表示されない事があるが、パスを手入力すれば大丈夫。
例1 \\\192.168.1.191\Public
例2 \\\KmyPi\Public

VNC Serverを有効にする。

最近のRaspbianは、VNC Serverを標準で内包している様子。
ただし、設定を有効にしなければ利用できない。

RaspberryPiのGUI画面にて、
「左上のraspberryアイコン」→「設定」→「Raspberry Piの設定」
とクリックし、
インターフェイス」→「VNCを有効」
と設定してから、右下の「OK」をクリック

上記設定を有効にした後、別PCのVNC ClientからIPアドレスでアクセスすると、RaspberryPi側のGUI画面が表示されるはず。

Lチカで動作確認

C言語でWiringPiライブラリを利用したI/O制御ができるか否か、動作チェック
まずは、適当なディレクトリに下記のソースコードを作成。

■C:GPIO17_blink_test.c

#include <wiringPi.h>
#define GPIO17 17
  
int main(void) {
    int i;
  
    if(wiringPiSetupGpio() != 0) {
        return 1;
    }
  
    pinMode(GPIO17, OUTPUT);
  
    for(i=0; i<10; i++){
        digitalWrite(GPIO17, 1);
        delay(500);
        digitalWrite(GPIO17, 0);
        delay(500);
    }  
    return 0;
}

作成出来たらコンパイル
コンパイルコマンド実行ディレクトリは、ソースコードが配置されているディレクトリであることに注意。

pi@raspberrypi:~ $ gcc -g ./GPIO17_blink_test.c -lwiringPi -o GPIO17_blink_test.exe
pi@raspberrypi:~ $  <- 何事もなければプロンプトに戻ってくる

RaspberryPiのGPIO17と隣のGNDの間に、LEDと抵抗を接続。
LEDは抵抗側がアノード、GND側がカソードになるように接続する事。

GPIO17(Pin 11) → 抵抗(1Kオーム程度)→ LED → GND(Pin 9)
参考資料:https://iot.keicode.com/raspberry-pi/pinout.php

上記の接続ができたら、プログラム実行!

pi@raspberrypi:~ $  ./GPIO17_blink_test.exe

LEDが点滅すれば成功。