汎用的なRaspberryPi4の作り方
はじめに
利用するにあたり、俺的Raspbianのイメージを作成しておく。
目的は、短時間で開発用プラットフォームを構築する事。
最初から「なんでもかんでも版」は用意せず、
- GPIO用ライブラリ【WiringPi】
- C言語開発【GCC】
- デバッガ【GDB】
- エディタ【Vim、nano、Zile、Emacs】
- sshを有効
- samba有効
- 無線LAN設定接続
- VNCサーバー【RealVNC Server】
くらいで押さえておく。
開発用ライブラリなどについては、必要に応じて後でインストール。
構築手順
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
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が点滅すれば成功。