Raspberry pi の覚え書き Part2 (NOOBS_v2_1_0)

初版作成  2016.11.30
最終更新  2019.07.16


◆◆ 凡例 ◆◆

  $  または %  は 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 の設定

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


◆◆ .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

◆◆ pi 以外のユーザーで mathematica を使う ◆◆

root, pi 以外のユーザーが mathematica を起動すると、
アクティベーションを要求してくる。
Activate online というウィンドウが開く。

これを回避するには、

/etc/group

を root 権限で開き、グループ video にユーザー名を
追加する。

video:x:44:pi,user-name

のように書く。一旦ログアウトし、再ログインすると
使えるようになっている。


◆◆ サンプルプログラム(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-get install python-dev

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

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

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

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

(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

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

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