Raspberry pi の覚え書き Part2 (NOOBS_v2_1_0)

初版作成  2016.11.30
最終更新  2024.09.27


◆◆ 凡例 ◆◆


  $  または %  は pi の権限で実行する。
  #  は root の権限で実行することを示す。

  root 権限を得るには

  $ sudo -s       設定ファイルは読み込まない
  $ sudo -i       /root/.profile を読み込む

  /root/.profile の中に /home/pi/.bashrc を読み込むよう書いておけば、
  sudo -i で pi の環境で作業できる。

◆◆ Raspberry Pi 2/3 への NOOBS 2.1.0 のインストール ◆◆


NOOBS を展開して micro SD カードのトップディレクトリに
コピーする。

一度 Raspbian をインストールした micro SD カードは
SDFormatter あるいは SD Card Formatter で
フォーマットする必要がある。

起動するとインストールが始まる。

Language: English
Keyboard: jp        <---- 効かないようだ

でインストールする。


◆◆ まずやること ◆◆


> ネットワークに接続する

最初は有線で接続するのが無難

> Terminal の設定を変える

foreground ---- 白
font size  ---- 11
                12 にするとアンダースコアが表示されないというバグがある。

> 設定

Menu --- Preferences -- Raspberry Pi Configuration

Localization
   Timezone    Asia  Tokyo
   keyboard    Japan Japanese(OADG 109A)
   Wifi Country  Japan

System
   Boot: To CLI       起動時に X は起動しない
                      必要ならstartx で起動させる
   Overscan: Disable  1920x1080 ディスプレイ使用時、画面一杯使う

> アップデートする

  $ sudo -s
  # apt update
  # apt upgrade

> wifi の設定

右上のネットワークのアイコンを左クリック
パスフレーズを入れる

◆◆ インストール済パッケージのリスト ◆◆


# apt list --installed
# dpkg -l

◆◆ .bashrc の設定 ◆◆


.bashrc の末尾に以下のように書く

# ctrl と caps の入れ換え

setxkbmap -option ctrl:swapcaps

# esc と 全角半角の切り替え

xmodmap /home/pi/keyfile

----- ~/keyfile の内容 -----
keycode 49 = Escape
keycode  9 = Zenkaku_Hankaku
----------------------------

export TERM=vt100
export CANNAHOST=192.168.xx.yy

# alias
alias rm='rm -i'
alias cp='cp -p'
alias ls='ls -F --color=never'
alias ne='emacs -nw'
alias sc='. ~/.bashrc'

export PATH=$PATH:.
export CDPATH=~:/etc:mypath1:mypath2

◆◆ 基本ソフトのインストール ◆◆


  $ sudo -s
  # apt install tcsh ftpd ftp telnetd telnet emacs


◆◆ 日本語入力 ◆◆


Teraterm で遠隔ログインするときは Windows の IME を使えばよい。
コンソール作業時の日本語入力を可能にする。

  # apt install fonts-takao ibus-mozc

menu --- Preferences
--- mozc settings      特にすることはなさそうだ
--- ibus preferences   mozc のデーモンをスタートさせる
--- ibus preferences --- input method --- add --- Japanese

--- input Method ---- ibus にチェックを入れる

menu --- Preferences
--- Kefyboard and Mouse --- Keyboard --- Keyboard Layout
    Country = Japan,  Variant = Japanese (OADG 109A)
    になっていることを確認

右上の US アイコンをクリックすると mozc のアイコンに変化する。

mozc アイコンをクリック
  Input Mode --- Hiragana
  Tools --- Properties --- Reset to defaults --- Apply --- OK

変換は「半角/全角」キー(私の場合は入れ換えているので Esc)


◆◆ Wifi で外部からアクセスする ◆◆


Pi2 に wifi アダプタを付けると、デフォルトでは省電力モードに入り、
外からアクセスできない。Pi3 は以下の設定は不要なようだ。

/etc/modprobe.d/8192cu.conf

というファイルを作成し、その中に以下のように書き込む。

# Disable power saving
options 8192cu rtw_power_mgnt=0


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


  # apt install texlive-lang-cjk xdvik-ja latexmk texlive
  # apt install ghostscript-x

上記のインストールで latex が正常に使えるようになった。
漢字コードは UTF-8

ubuntu で現れた xdvi の不具合(eps ファイルが重なって表示
される)は現れない。


◆◆ CUI によるシステムの変更 ◆◆


  # raspi-config


◆◆ IP アドレスの固定 ◆◆


> GUI を使った設定

右上のネットワークアイコンを右クリック --- Wireless & Wired Network Settings
Configure: interface  wlan0

IP Address, Router, DNS Servers (プライベートネットのときは 192.168.0.1)
の 3 つを設定する。

上記の結果は /etc/dhcpcd.conf に保存され、以下のようになる。

無線 LAN の場合

interface wlan0
inform 192.168.xx.yy
static routers=192.168.xx.1
static domain_name_servers=192.168.xx.1

有線の場合

interface eth0
inform 192.168.xx.yy
static routers=192.168.xx.1
static domain_name_servers=202.236.aa.bb

(注意!)

以前は固定 IP の設定は /etc/network/interfaces で行っていたが、
今は /etc/dhcpcd.conf で設定する。

> CUI による設定

/etc/dhcpcd.conf

の末尾に上記の設定をエディタで書き込む。

以下の記述方法でも有効なようだ(2 行目のみ異なる)。

interface wlan0
static ip_address=192.168.0.202
static routers=192.168.0.1
static domain_name_servers=192.168.0.1


◆◆ メニューの日本語化 ◆◆


menu --- Preferences --- Raspberry Pi Configuration
--- Localization --- Locale : ja, JP, UTF-8

キーボードの設定が変わってしまうようなので、
Japan Japanese(OADG 109A) に戻す。

export LANG=ja_JP.UTF-8

を設定すると、エラー発生時の表示が日本語になる。

man コマンドは日本語化されない。


◆◆ login 途中で止まる ◆◆


denki2 の Teraterm で telnet すると login できるが、
eclipse から telnet すると login 途中で止まる(C-c すれば login できる)。

  % unsetenv TERM DISPLAY

してから telnet すると、login 途中で止まる現象はなくなる。


◆◆ 新規ユーサーの作成 ◆◆


1. /etc/passwd へのユーザーの追加

useradd, adduser というコマンドもあるようだが、
古典的な vipw を使う。

  $ sudo -s
  # vipw

pi の行を参考にして、新規ユーザーの行を作成する。
新規ユーザーの名前を sinki とする。

2. group の作成

/etc/group

を編集して sinki が所属するグループを作成する。

sinki が root の権限を持てるよう、
sudo のグループに sinki を加える。

3. ホームディレクトリの作成

  # cd /home
  # mkdir sinki
  # chown -R sinki sinki
  # chgrp xxxxx sinki

4. パスワードの作成

  # passwd sinki

5. 設定ファイルのコピー

  # su sinki
  $ cp ../pi/.profile .   <---- これを忘れると .bashrc が実行されない
  $ cp ../pi/.bashrc .
  $ cp ../pi/.emacs .

6. passwd なしで sudo できるようにする

  $ sudo visudo

末尾に以下の 1 行を付け加える。

sinki ALL=(ALL) NOPASSWD: ALL

◆◆ サンプルプログラム(Lチカ) ◆◆


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

import time
import RPi.GPIO as GPIO

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)

out1 = 17

GPIO.setup(out1, GPIO.OUT)

i = 0

while True:
    if i % 2 == 0:
        print "on"
        GPIO.output(out1, GPIO.HIGH)
    else:
        print "off"
        GPIO.output(out1, GPIO.LOW)

    i = i + 1
    time.sleep(1)


◆◆ サンプルプログラム(入力) ◆◆


#!/usr/bin/python
# -*- coding: utf-8 -*-
#
#  入力を読み取る
#

import time
import RPi.GPIO as GPIO

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)

in_port = 2

GPIO.setup(in_port, GPIO.IN)

while True:
    ret = GPIO.input(in_port)
    if ret == 0:
        print "input: 0V"
    else:
        print "input: 3.3V"

    time.sleep(1)


◆◆ AD コンバータの使用 ◆◆


(参考 URL)
http://tekitoh-memdhoi.info/views/745
https://qiita.com/f_nishio/items/4b9723c4e622a51aaeb5

SPI 通信を使って AD コンバータ MCP3002 と通信する。

(1) # raspi-config を使って SPI を有効にする

    リブートして設定を反映させる(リブート不要かもしれない)。

    $ lsmod | grep spi

    で spi_bcm2835 というモジュールが入っていることを確認する。

(2) SPI を操作するための python のモジュールをインストールする

(2a) python-dev のインストール

$ sudo apt install python-dev

(2b) py-spidev のインストール

https://github.com/doceme/py-spidev

をブラウザで開き、右上の緑ボタンの「code」--->「Download zip」
をクリックし、zip ファイルをダウンロードする。

$ cd ~/Downloads
$ unzip py-spidev-master.zip
$ cd py-spidev-master
$ sudo python setup.py install

2023.7.11  追記
setup.py で setuptools がないというエラーが出る。
pip install setuptools を実行してもエラーが解消されない。
しかし、py-spidev-master を入れなくてもサンプルプログラムは
実行できた。

(3) 配線

3002       Pi
1 CS   --- CE0   24
2 CH0
3 CH1
4 Vss  --- Gnd    6 or 20 or 30 or 34 ....
5 Din  --- MOSI  19
6 Dout --- MISO  21
7 CLK  --- SCLK  23
8 Vdd  --- 3.3V   1 or 17

19 番目のピンの場所を数え間違わないように注意!

(3) サンプルコード

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

import spidev
import time
import subprocess

spi = spidev.SpiDev()
spi.open(0, 0)
spi.max_speed_hz = 5000

try:
    while True:
        rasp = spi.xfer2([0x68, 0x00])   # CH0     CH1 は 0x78
        value = (rasp[0] * 256 + rasp[1]) & 0x3ff
        print(value)
        time.sleep(1)
except KeyboardInterrupt:
    spi.close()


(注意!)

spi.max_speed_hz = 5000 を省略してはいけない。
max_speed_hz = 5000 を怠った場合

   /etc/debian_version が 8.0 のラズパイは正しく動く

   /etc/debian_version が 9.1 のラズパイは
   プログラムは動くが、返ってくる値がおかしい

という現象が発生する。
なぜ、SPI が動かないのか悩まされた。

以下のサイトに教えてもらって解決した。

https://www.raspberrypi.org/blog/raspbian-stretch/


◆◆ opencv ◆◆


  # apt update
  # apt install libcv2.4
  # apt install libcv-dev
  # apt install libopencv-photo2.4
  # apt install libopencv-photo-dev
  # apt install libopencv-contrib-dev

◆◆ python で opencv ◆◆


  # apt install libopencv-dev
  # apt install python-opencv

◆◆ nfs client の設定 2019.7.14 ◆◆


# apt install nfs-common

サーバーが FreeBSD のとき

# mount -f nfs -o nolock machine:/dir/dir /dir/dir

のように -o nolock が必要


◆◆ 不要なサービスの停止 2019.7.16 ◆◆


# apt install chkconfig
# chkconfig --list
# chkconfig apache2 off


◆◆ nslookup を使えるようにする 2019.8.7 ◆◆


# apt install dnsutils

◆◆ postfix の設定 2019.11.15 ◆◆


デフォルトで Postfix が動作している。
設定ファイルは

/etc/postfix/main.cf

以下の行を付け加える

relayhost = [192.168.xxx.yyy]  あるいは  [mail_server_name.nara-edu.ac.jp]
mynetworks_style = subnet

以下の行はコメントアウトする

#mynetworks = 127.0.0.0/8 ...(略)

main.cf を書き換えたときは

# /etc/init.d/postfix restart

(参考資料)
http://www.postfix-jp.info/trans-2.3/jhtml/BASIC_CONFIGURATION_README.html#mydestination


◆◆ apt update が失敗する 2019.12.29 ◆◆


名前の解決ができないというエラーがでる。

/etc/resolv.conf

に奈良教育大学のネームサーバの IP アドレスを書き込む。

nameserver 202.236.xxx.yyy


◆◆ 時刻の同期を有効にする 2020.1.24 ◆◆


ntpdate コマンドをインストールして ntpdate コマンドを
実行すると、ソケットがすでに使われているというエラーが
でる。

ラズパイでは ntpd というデーモンがデフォルトで
動作している。その設定をすれば良いらしい。

  $ sudo -s
  # timedatectl status               状態の確認
  # timedatectl set-ntp true         ntp を有効に

  # cd /etc/systemd                  設定ファイルを編集
  # vi timesyncd.conf

--------------------------------------------------
Servers=xxx.yyy.zz.jp       を追加

日本国内の個人が使える ntp サーバーは

http://wiki.nothing.sh/page/NTP/%BF%E4%BE%A9%B8%F8%B3%AB%A5%B5%A1%BC%A5%D0

に列挙されている。
--------------------------------------------------

  # systemctl restart systemd-timesyncd.service     デーモン再起動

<参照>
https://www.コンフレッジ.com/raspberry-piraspbian%E3%81%AEntp%E3%82%B5%E3%83%BC%E3%83%90%E8%A8%AD%E5%AE%9A/
https://竹内電設.com/post/raspbian%E3%81%AE%E6%99%82%E5%88%BB%E3%81%AE%E5%90%8C%E6%9C%9F/

◆◆ ファイルシステムが満杯になる 2022.3.26 ◆◆


/var/cache/apt がふくれあがっている

# apt-get clean

で消去できる。


◆◆ シリアル通信 2023.1.7 ◆◆


send_str = "l"
send_str = send_str.encode('utf-8')
# あるいは send_str = (b"l")

rs = serial.Serial('/dev/ttyAMA0', 9600, timeout=10)
rs.write(send_str)
line = rs.readline()
rs.close()

line = line.decode('utf-8').rstrip()
val = int(line)


◆◆ X Window System を使うアプリ 2023.2.23 ◆◆


・Windows PC

- X server を起動する(XcXsrv は無料)
- WSL を起動する。
- ifconfig で ip アドレスを確認する
- $ xhost +

- ファイアウォールが接続を阻止している場合は、
 ファイアウォールの設定変更

・Raspberry Pi

$ export DISPLAY=192.168.x.yy:0.0
$ アプリ起動