事前に準備するもの
- Raspberry Pi Zero W(Wi-Fi対応) ※WHタイプはヘッダピン実装済み
- microSDカード: 容量8から32GB、速度Class 10程度
- miniHDMI変換アダプタ・HDMIケーブル
- USBホストケーブル(OTGケーブル;microUSB オス-USB A メス変換)、キーボード、給電機能付きUSBハブ、microUSBケーブル
- microUSBケーブル付き ACアダプタ
microSDカードにOSイメージを書き込み
Raspbian起動とOSの設定
- Raspberry Pi ZeroにはmicroUSBコネクタが2個あり、中央寄りがデータ用、残りは電源接続用です。キーボードに電源を供給するため給電機能付きUSBハブを経由でRaspberry Pi ZeroのUSBコネクタに接続
- 親基板の電源接続用USBコネクタにACアダプタを接続します。Raspberry Pi Zeroの電源は、ヘッダピン経由で親基板から供給されるので、Raspberry Pi Zeroの電源接続用USB端子には何も繋がなくてもOKです
- Raspberry Pi ZeroのminiHDMI端子にディスプレイを接続
- OSイメージを書き込んだmicroSDカードを装着し親基板の電源スイッチを投入
- ログインidは pi、初期passwordは raspberry
- raspi-config アプリを起動します (上下キー、TAB、ENTERで操作します)
$ sudo raspi-config
1 Change User Password
ユーザpi のパスワードを適宜変更
2 Network Options
N1 Hostname 適宜
N2 Wi-fi Country/SSID/パスフレーズ
4 Localisation Options Setup...
L2 Change Timezone: Asia - Tokyo
L3 Change Keyboard Layout: 日本語キーボードのときは適宜変更
5 Interfacing Options
P2 SSH: Enable
P4 SPI: Enable
Finishして再起動
- 再ログイン後 Wifiから割り振られたIPアドレスを確認します
$ ifconfig
- ここからはPCから作業できます。TeraTermから先ほどのIPアドレスにSSHログインします。まずはIPアドレスを固定するため、nanoエディタで dhcpcd.conf を編集します。(Ctrl+O 保存、Ctrl+X終了)
$ sudo nano /etc/dhcpcd.conf
とし、最終行に次の内容を追加
interface wlan0
static ip_address=192.168.0.x/24 ⇒ 固定したいIPアドレス
static routers=192.168.0.x ⇒ デフォルトゲートウェイ
static domain_name_servers=192.168.0.x ⇒ DNS
$ sudo reboot
$ sudo passwd root
- インストール済みソフトウエアパッケージ、パッケージ情報のアップデート
$ sudo apt update
$ sudo apt upgrade
samba をインストール
$ sudo apt-get update
$ sudo apt-get install samba
$ mkdir /home/pi/public
$ sudo nano /etc/samba/smb.conf
[global]項に以下を追記します。IPアドレスは環境に適宜合わせます。
interfaces 192.168.2. wlan0
bind interfaces only = yes
hosts allow = 192.168.2.
security = user
共有フォルダ名を「public」とするため、末尾に次のように追記します。
[public]
comment = IPRadioReceiver
path = /home/pi/public
guest ok = yes
read only = no
browsable = yes
force user = pi
$ sudo service smbd restart
- Windowsから \\192.168.2.xx\public のファイルを読み書きできればOK (2020.1.1追記)
自動シャットダウンスクリプトの準備
Pythonから利用できるGPIO制御ライブラリはいくつかありますが、標準インストールされているRPi.GPIOを使います。スクリプトは、ImageCanvas Annex "
Raspberry Pi Zero用 簡易UPSの作成"を参考にさせて頂きました。停電あるいは電源スイッチオフから3秒経過したら自動的にシャットダウンするようにします。スクリプト作成をミスると、再起動を繰り返すなど手に負えなくなる場合がありますから、事前の動作テストは必須です。
- nanoで ~/operation_panel/power_monitor.py を新規作成します。スクリプトは次のようにしました。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import time
import os
import RPi.GPIO as GPIO
GPIO_POWER_GOOD = 17
THRESHOLD = 3
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(GPIO_POWER_GOOD, GPIO.IN, GPIO.PUD_UP)
while True:
count = 0
GPIO.wait_for_edge(GPIO_POWER_GOOD, GPIO.FALLING)
while True:
state = GPIO.input(GPIO_POWER_GOOD)
if state == False:
count += 0.05
if count >= THRESHOLD:
print("[Power Monitor] SHUTDOWN NOW!")
os.system("sudo shutdown -h now")
break
if count > 0 and state == True:
break
if count == 0:
break
time.sleep(0.05)
- スクリプトを動作確認します。電源スイッチをオフにして3秒後にシャットダウンするはずです。
$ python power_monitor.py
- 無事動作したら rc.local に登録してOS起動時に自動実行させます。
$ sudo nano /etc/rc.local
- rc.localの “exit 0” の前の行に次の文を追記します。2019.11.20 ディレクトリ表記が間違っていたのを修正しました
python /home/pi/operation_panel/power_monitor.py &
- ラズベリーパイを再起動後、電源スイッチをオフにして暫くするとOSが自動シャットダウンされることを確認できればOKです。ところで、OSシャットダウン後の再起動はラズベリーパイの電源リセットが必要です。再起動させるには、親基板のLEDが消灯するのを待って、電源スイッチを再度オンにします。以上、さらりと書いてますが、不慣れゆえ、ここに到るまで結構苦労しました。
0 件のコメント:
コメントを投稿