Raspberry pi の覚え書き Part3

初版作成  2023.5.7
最終更新  2024.04.01


◆◆ インストール方法 ◆◆


Raspberry Pi Imager というアプリを使う。

https://www.raspberrypi.com/software/

からダウンロードし、exe ファイルをダブルクリックすると
インストールされる。

起動して「インストールする OS」「インストール先ドライブ」を
選択する。

インストール時に以下のものを設定する。

・ユーザー名とパスワード(過去との互換性をとるなら pi)
・wifi のパスワード

インストールできるラズパイ

・ラズパイ 2 以降でないと Chrome が起動しないので
 初期バージョンの無印の B は実用的ではない


◆◆ インストール直後の操作 ◆◆


GUI で操作できる。
ネットワークを固定 IP に設定する。
サブネットマスクを設定する項目はない。
default router と name server は 192.168.xxx.1  に設定する。

以下のアプリをインストールする

emacs
telnet
telnetd
ftp
ftpd
ibus-mozc  (使用前に再起動必要)

◆◆ apache2 のインストール ◆◆


# apt install apache2

(1) ユーザーディレクトリを使えるようにする

# a2enmod userdir

(2) cgi を使えるようにする

# cd /etc/apache2/mods-enabled
# ln -s ../mods-available/cgi.load .

(3) ユーザーディレクトリを html としているとき
    html ----> public_html のシンボリックリンクを張る

$ cd
$ ln -s public_html html

(4) 設定ファイルの変更点

------------- /etc/apache2/apache2.conf ------------

ServerRoot "/etc/apache2"

#<Directory /home/user-name/public_html/>
#    AllowOverride Limit Options FileInfo AuthConfig
#    Options FollowSymLinks
#    Require all granted
#</Directory>

#<FilesMatch "~$">
#    Require all denied
#</FilesMatch>

---------- /etc/apache2/sites-available/000-default.conf --------

ServerName   xxx.yyy.nara-edu.ac.jp
ServerAdmin  zzz@nara.edu.ac.jp

を設定(省略可)

Include conf-available/serve-cgi-bin.conf
を確認

---------- /etc/apache2/conf-available/serve-cgi-bin.conf --------

       <IfDefine ENABLE_USR_LIB_CGI_BIN>
                ScriptAlias /cgi-bin/ /home/pi/public_html/cgi-bin/
                <Directory "/home/pi/public_html/cgi-bin">
                        AllowOverride None
                        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                        Require all granted
                        AddHandler cgi-script .py  <---- ここに必要! なぜか mime.conf に書いても効かない
                </Directory>
        </IfDefine>

---------- /etc/apache2/mods-available/mime.conf ----

AddHandler cgi-script .py

なぜか効かない。

(5) /var/www/html/index.html の変更

以下のように書き換える。

<html>
  <head>
    <meta http-equiv="Refresh" content="0;URL=/~pi/">
    <title>top page</title>
  </head>
  <body>
  </body>
</html>

(6) apache2 の自動起動の on/off

  # update-rc.d -f apache2 remove      自動起動停止  /etc/rc2.d/... が削除
  # update-rc.d apache2 defaults       自動起動復活

apache2 の起動

  # apachectl start
  # apachectl stop
  # apachectl restart

(7) ファイルのパーミッション

~/public_html/             755
~/public_html/index.html   644
~/public_html/cgi-bin/     755
~/public_html/cgi-bin/*.py 755

(8) CGI を実行可能にする

# visudo

最後に以下を付加

www-data ALL=(ALL) NOPASSWD: ALL

◆◆ シリアル通信 ◆◆


デフォルトでは、送信は成功するが受信で文字の欠落、
文字化けが発生する。

/boot/config.txt

enable_uart=1

# raspi-config

でも設定できる。

◆◆ 外付け HDD の接続(ext4) 2019.7.31 ◆◆


参考
http://sooch.hatenablog.com/entry/2017/03/26/061032

1. デバイス名の確認

  # blkid

2. フォーマット

  # fdisk /dev/sda

  Command (m for help): d   パーティション削除
  Selected partition 1

  Command (m for help): p   確認

  Command (m for help): n   パーティション作成
                            enter を押すとデフォルト値が入る

  Command (m for help): p   確認
  Command (m for help): w   書き出して終了

  # mkfs.ext4 /dev/sda1

  enter を押すとデフォルト値が入る

3. マウント

  # mount /dev/sda1 /mnt

/etc/rc.local に書き込む

リブートした時に自動的に接続されてしまう
/etc/fstab に書くより、
mount コマンドを /etc/rc.local に書く方が
良いと思う。

◆◆ nfs の設定 ◆◆


  $ sudo apt install nfs-common         <-- client
  $ sudo apt install nfs-kernel-server  <-- server
  $ sudo apt install rpcbind            <-- server

・クライアント

----- /etc/rc.local -----

mount -t nfs machine-name:/home/user-name/dir /home/user-name/dir

--------------------------

・サーバー

----- /etc/exports ----

/home/user-name/html   macine-name(rw,sync,no_subtree_check) machine-name2(rw,sync,no_subtree_check)
/etc/apache2      machine-name(rw,sync,no_subtree_check)
/var/log/apache2  machine-name(rw,sync,no_subtree_check)

-------- /etc/rc.local --------------

service rpcbind start
service nfs-kernel-server restart

# nfs-kernel-server start ではダメ。restart
# 下記の設定でも同じ

# systemctl start rpcbind.service
# systemctl restart nfs-kernel-server.service

--------------------------------------

サーバーを動かすのに色々と苦労した。

# service nfs-kernel-server start

ではダメ。restart が必要。

export 状況の確認は

# exportfs

サービスの状況は

# service nfs-kernel-server status

で確認する。しかし、rpcbind, nfs-kernel-server ともに
active であるにもかかわらず、接続できなかった。
restart に気がつくのに時間がかかった。

参考サイト
https://hermemo.com/archives/1312

このサイトがなかったら、解決できなかった。

◆◆ samba のインストールと設定 ◆◆


linux2.txt を参照

ユーザー名を指定しての接続は

\\192.168.xx.yy\user-name

としてわざとエラーを出し、
「その他」をクリックして
「別のアカウントを使用する」を選ぶ。

windows と samba のパスワードが同一の場合は、
いきなりログイン出来てしまう。

smbpasswd でパスワードを変更すると、
linux のログインパスワードと samba のパスワードの
両方が変わる。

passwd でパスワードを変更すると、linux のパスワード
だけが変わる。

いろいろといじっているうちに、telnet でログインすると
途中で止まるようになってしまった。止まっても ^C でログイン出来る。
リブートしたらなおった。謎。

◆◆ php のインストールと設定 ◆◆


pi.txt を参照

ファイル名は ○○.php
パーミッションを 666 にすることを忘れないように!!!


◆◆ 温湿度センサ DHT11 の使い方 ◆◆


○ 接続

DHT11 の詳しい説明はデータシートを参照
http://akizukidenshi.com/download/ds/aosong/DHT11_20180119.pdf

DHT11 は 4 個端子がある。使うのは 3 個
1 Vcc
2 Data
3 NC
4 Gnd

電源 DC 3.3V ~ 5.5 V
3.3 V で運用するときはケーブルの長さは可能な限り短くする。

Data ピンは 4.7k でプルアップ

Data 端子は入出力兼用という不思議な接続法である。
Data 端子の波形をオシロで見ると、
0 V と Vcc の 2 値をとるパルスである。
Vcc = 5 V に設定すると、パルス波形の立ち上がりがなまる。

ネットを見ると、Vcc = 5 V のサイトと Vcc = 3.3 V の
サイトの 2 つの接続法がある。

実験してみると、どちらでも動作するが、ラズパイの
入力端子に 5 V をかけるのは良くないと思われるので、
私は 3.3 V で運用する。

○ ライブラリのインストール

# apt-get install git
# git clone https://github.com/szazo/DHT11_Python.git

これ以外にもライブラリがあるようだ。
https://se-lina.hatenablog.com/entry/2022/03/07/182723
によると、以下のライブラリがあるらしい。
git clone https://github.com/adafruit/Adafruit_Python_DHT.git

○ サンプルプログラム

DHT11_Python のフォルダで実行する。
import dht11 を実行すると dht11/__init__.py を見に行く。
その他のフォルダで実行するときは、__init__.py を当該フォルダ
にコピーし、ファイル名を dht11.py にリネームする。

以下のプログラムは Data は GPIO14 (8番端子) に
接続する場合である。

#!/usr/bin/python
# -*- coding: utf-8 -*-

import RPi.GPIO as GPIO
import time, datetime
import dht11

GPIO.setwarnings(True)
GPIO.setmode(GPIO.BCM)

instance = dht11.DHT11(pin=14)

while True:
    result = instance.read()
    if result.is_valid():
        temp = result.temperature
        humid = result.humidity
        print(temp, humid)
    time.sleep(1)

◆◆ 温湿度センサ DHT20 の使い方 ◆◆


DHT20 の方が精度が良いらしい。
温度 ±0.5 ℃
湿度 ±3 %

DHT11 は
温度 ±2 ℃
湿度 ±5 %

接続は I2C なので、ラズパイの設定で I2C を on に
しておく。

# raspi-config

Pi     DHT20
1 (3.3V) --- 1
3 (SDA)----- 2
5 (SCL)----- 3
9 (Gnd)----- 4

穴が空いている面を上に、下向きに端子が伸びるように
配置して左から順番に 1-4

サンプルプログラム
参照:https://s-design-tokyo.com/use-dht20-raspberrypi/

import smbus, time

send = [0xac, 0x33, 0x00]

i2c = smbus.SMBus(1)
address = 0x38

time.sleep(0.2)
ret = i2c.read_byte_data(address, 0x71)

while True:
    time.sleep(0.01)
    i2c.write_i2c_block_data(address, 0x00, send)
    time.sleep(0.08)
    data = i2c.read_i2c_block_data(address, 0x00, 0x07)

    humid = data[1] <<12 | data[2] << 4 | (( data[3] & 0xf0 ) >> 4 )
    temp = ((data[3] & 0x0f) << 16 ) | data[4] << 8 | data[5]

    humid2 = humid /  2**20 * 100
    temp2  = temp  /  2**20 * 200  - 50

    print("湿度 = {:3.0f} %    温度 = {:4.1f} 度".format(humid2, temp2))

    time.sleep(1)