2021-02-15

ラズパイ設定メモ

 ゼミでは、様々な形でラズパイを使用することがあるが、それぞれの設定がまちまちで引き継ぎなどに苦労している。そこで、統一したやり方で設定するために、標準の設定をメモとして残しておくことにした。

ゼミで使用しているラズパイはこれだけの種類がある。

3B、4B、ZW、AIY Voice Kit、AIY Vision Kit

AIYシリーズのOSはGoogleさんからDLしたものを使用するとして、ドノーマルなラズパイは基本的に同様の設定をすればSDを差し替えて使用できそうなので、後々の管理が楽になると思われる。もちろん、AIYシリーズもSDを作成した後の設定は同じように行うこととする。

また、設定に先立ち、USB電源、マウスやキーボード、HDMIディスプレイ、必要に応じてUSBやHDMIの変換コネクタは必要なので、書いていないからいらないというわけではない。

 OSイメージ(SDカード)の作成

マイクロSDは8GB以上あればOKらしいが、最近では100均での16GBを500円で売っている世の中なので16GB以上を標準とする。
昔はOSイメージをSDに書き込む作業が初心者には難しかったらしいが、RasPi ImagerでSDを作成→セットして電源ON→即緑LED点灯、点滅で起動OK
ここで、赤LED点滅→おかしいのでUSBケーブルなどを確認
実際にあった経験として、USB電源のパワーに問題ないのに起動後に「雷マーク」(電圧低下)が出るのでチェックしたら、100均の充電用USBケーブルに問題があったようで、多くの電流を流せなくて低下したようだった。電源ケーブルには注意!

初期起動設定

  • ロケール→Japanなど日本語に設定
  • パスワード→(ゼミ共通設定に)
  • Display、Wifiは適宜
  • 初期アップデートは実行→かなり時間がかかる→リブート
    以前はコマンドで初期アップデートをかけていたが、今は自動でやってくれるらしい

起動後の設定

 メニューからRasPiの設定で最低限必要なもの
  • システム→ホスト名
    (他のマシンと区別するために必要であとで必要になるので必ずメモる)
  • ディスプレイ→接続するディスプレイに合わせて設定
  • インタフェース→SSHを有効に→以降はSSHを中心に操作
  • 以前はオプション扱いだった「日本語化」と「mDNS」はすでに導入済み

SSHによるリモート操作

  • コマンドプロンプトでpi@マシン名.localでSSH接続(Win10では.local不要かも)例:>ssh pi@karakuripi.local

ラズパイをシャットダウン後、電源を切ってよいかを簡単に確認する設定

ラズパイは、確実にシャットダウンして電源が切れる状態にしないと、むやみに電源を切ることはできない。ラズパイ上の緑色の ACT LEDは、デフォルトでは SDカードへのアクセス時に点滅するが、それをハートビート点滅に変更することで確認しやすくする。

下記の設定をする事で、緑色の ACT LEDの動作がハートビート動作になり 1秒程度の一定間隔で点滅動作をする。シャットダウンしてラズパイの CPUの動作が停止するとハートビート動作も停止するので緑色の ACT LEDは点灯したままとなる。これによって CPUの動作の停止を確認出来るのでコンセントからの給電をオフにできる

$ sudo nano /boot/config.txt
 で /boot/config.txtに下記を追加して再起動
dtparam=act_led_trigger=heartbeat

ちなみにシャットダウンしたあとにGPIO3をGNDに接続すると起動する。

ミニHDMIモニターに対応(必要なら)

秋月で売っているHDMIモニター(↓こんなやつ)に対応させるためには、解像度を調整しないといけないので、以下の設定を必要に応じて実行する。

ラズパイ用として売っているLCDは解像度がHDであったりしてデフォルトの設定があったりするのだが、こいつは1366x768と結構特殊なので、設定を追加する必要がある。

$ sudo nano /boot/config.txt
 で /boot/config.txtに下記を編集して再起動

hdmi_group=2
#hdmi_mode=85   #1920x1080 for Full HD Monitor 通常はこれ
hdmi_mode=81   #1366x768 for Mini HDMI Monitor

シャットダウンボタンの設置

マウスやキーボードはおろか、画面も無いようなラズパイでシャットダウンのためだけにリモート接続してシャットダウンするのは非常に面倒である。そこで、シャットダウン用のスイッチをつけて長押しによるシャットダウンを実現させる。

さて、スイッチをつけるにしてもどこにつけるかが問題で、ネットで検索するといろんなGPIOにつけている例を見かけるのだが、ここではGPIO23につけることにする。

実は、このG23はAIYシリーズの2機種とも(↓)上についているボタンに接続されており、最初からスイッチが付いているので都合がよい。


ほかのHAT類をいくつか調べてみたが、結構このG23は空いていることが多かったので採用することにした。こことGNDの間にスイッチを接続するのだが、マザーボード用のコネクタの付いたスイッチ(↓)が便利で、写真のような2ピンなら下図のようにG23と左のGND、3ピンならG23と2つ右のGNDへ刺せば簡単に実現できる。

このスイッチ長押しでシャットダウンボタンにするための設定は下記のとおり。
  • ローカルにあるシャットダウンボタンスクリプトなど(下記)をラズパイにコピー
    >scp .\shutdownbutton.py pi@karakuripi.local:~
    >scp .\shutdownbutton.service pi@karakuripi.local:~
ラズパイ上でsystemdのサービスを登録
  • ~/shutdownbutton.pyのスクリプトを755(実行権限付加)に
    $chmod 755 ~/shutdownbutton.py
  • ~/shutdownbutton.serviceを/etc/systemd/system/へコピー
    $sudo cp ~/shutdownbutton.service /etc/systemd/system/
  • 設定ファイルをリロード
    $sudo systemctl daemon-reload
  • サービスを起動時に有効化
    $sudo systemctl enable shutdownbutton.service
  • サービスを開始
    $sudo systemctl start shutdownbutton.service
  • 正しく動作しているか確認
    $sudo systemctl status shutdownbutton.service

shutdownbutton.py

#!/usr/bin/python
# coding:utf-8
#
import time
import RPi.GPIO as GPIO
import os

GPIO.setmode(GPIO.BCM)

#GPIO23pinを入力モードとし、pull up設定とします
GPIO.setup(23,GPIO.IN,pull_up_down=GPIO.PUD_UP)

while True:
	GPIO.wait_for_edge(23, GPIO.FALLING)
	sw_counter = 0

	while True:
		sw_status = GPIO.input(23)
		if sw_status == 0:
			sw_counter = sw_counter + 1
			if sw_counter >= 100:
				os.system("sudo shutdown -h now")
				break
		else:
			break
		time.sleep(0.01)

shutdownbutton.service

[Unit]
Description=Shutdown raspberry pi by GPIO button input
Wants=network.target

[Service]
ExecStart=/home/pi/shutdownbutton.py
Restart=on-failure
RestartSec=10s

[Install]
WantedBy=multi-user.target

これでとりあえず最低限の設定はできたことにする。

次はLAMPにするための設定が待っている。つづく・・・

リアルRPGシステム第1弾「宝箱と魔法のリング」

リアルRPGシステムとは? ロールプレイングゲーム中では不思議な現象に出会うことも多いでしょう。でも、これは所詮は画面の中の話。元々誰かが作ったプログラムなんだから、そんなんできて当たり前!と思っていたんじゃつまらない!リアルな世界でもRPGに見られる現象を再現してみようというこ...