初版作成  2015.8
最終更新  2024.04.01
$ または % は pi の権限で実行する。 # は root の権限で実行することを示す。 root 権限を得るには $ sudo -s
(参照) 日経 Linux 2015.7 p.65- https://www.raspberrypi.org/ から download ---> NOOBS NOOBS Download ZIP を選択して zip ファイルを ダウンロードする。 展開し、すべてのファイルとディレクトリを micro SD カードにコピーする。 その micro SD カードを Raspberry Pi に差し、 電源を入れると起動する。 NOOBS が起動したら、Language は English のまま、 Raspbian にチェックを入れて install インストール完了後 Raspbian が起動する。 4 Internatilnalization Options -- I2 Change Timezone -- Asia -- Tokyo 4 Internatilnalization Options -- I3 Change Keyboard Layout -- Generic 105-key (Intel PC) -- Japanese - Japanese (OADG 109A) -- The default for the keyboard layout -- No compose key 4 Internatilnalization Options -- I1 Change Locale -- ja_JP.UTF-8 UTF-8
id: pi pass: raspberry
% sudo -s
「Raspberry Pi」で作る電子工作 工学社 p.104 に以下の記述がある。 GPIO を司る BCM2835 の端子の入出量は、起動直後は 8mA である。 これを超えると故障する恐れがある GPIO を操作するプログラムは root 権限が必要 (sudo)。
# raspi-config
起動 startx 終了 ctrl + alt + BS (注意!!) login 直後の bash の状態で startx すること。 tcsh を起動してから startx を実行すると、LXterminal で日本語が 文字化けする。
# apt-get update パッケージのリストの更新 まず、これを行うこと # apt-get updrade アップグレードする # apt-cache search tcsh パッケージ名の検索 # apt-get install tcsh インストール # apt-get remove tcsh 設定ファイルは残す # apt-get purge tcsh 全て消す # dpkg -l インストール済パッケージのリスト パッケージの管理は GUI ツールの方が楽 # apt-get install synaptic % sudo synaptic あるいは「menu」--->「設定」--->「synaptic」
$ setxkbmap -option ctrl:swapcaps .bashrc に書き込む
% xev でキー番号を調べる 半角/全角 49 ESC 9 % xmodmap key-file で設定する。key-file の中身は keycode 49 = Escape keycode 9 = Zenkaku_Hankaku ターミナルを 1 個新規に立ち上げる たびに、元に戻ってしまう。 .bashrc に書き込む。
# apt-get install ibus ibus-anthy startx の直後は IME が動いていない。 menu ---> 設定 ---> Ibus の設定 でデーモンが起動する。 日本語フォントを入れる(役に立っているか否か分からない) # apt-get install fonts-vlgothic
-fn fontname -lsp -fg -bg
% setenv TERM vt100
2 行目で # coding: UTF-8 # coding: EUC-JP # coding: SHIFT_JIS # -*- coding: utf-8 -*- など
# apt-get install i2c-tools # apt-get install libgd-gd2-perl # apt-get install libgd-graph-perl # apt-get install python-dev # apt-get install python-pip % wget http://sourceforge.net/projects/webiopi/files/WebIOPi-0.7.1.tar.gz % tar xvf WebIOPi-0.7.1.tar.gz % cd WebIOPi-0.7.1 % patch -p1 < ../WebIOPi-0.7.1-RPiAll.patch % sudo ./setup.sh
なぜか、
  % git clone git://git.drogon.net/wiringPi
    (綴り注意  dragon ではなく drogon)
はエラーが出て失敗する。
下記の url をクリックする。
  https://git.drogon.net/?p=wiringPi;a=summary
shortlog と書いてあるの行の次の行の右端の
「snapshot」をクリックすると
  wiringPi-5edd177.tar.gz
がダウンロードできる。
  $ tar zxf wiringPi-5edd177.tar.gz
  $ cd wiringPi-5edd177
  $ ./build
で構築される。
ルートの権限を持っていないにもかかわらず、
なぜか /usr/local/lib に
  libwiringPi.so@       libwiringPiDev.so@
  libwiringPi.so.2.25   libwiringPiDev.so.2.25
ができている。makefile の中で sudo している
ようだ。リンクは
  -lwiringPi
  -lwiringPiDev
である。makefile のサンプルが ここ にある。
examples ディレクトリにサンプルプログラムがある。
wiringPi のピン番号とラズベリーパイの GPIO 番号は異なる
  % gpio readall
で確認する。
---------------------------- 端 --------------- 端 -------------------------------+
   +-----+-----+---------+------+---+--B Plus--+---+------+---------+-----+-----+ |
   | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM | |
   +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+ |
   |     |     |    3.3v |      |   |  1 || 2  |   |      | 5v      |     |     | |
   |   2 |   8 |   SDA.1 |   IN | 1 |  3 || 4  |   |      | 5V      |     |     | |
   |   3 |   9 |   SCL.1 |   IN | 1 |  5 || 6  |   |      | 0v      |     |     | |
   |   4 |   7 | GPIO. 7 |   IN | 1 |  7 || 8  | 1 | ALT0 | TxD     | 15  | 14  | | 端
   |     |     |      0v |      |   |  9 || 10 | 0 | OUT  | RxD     | 16  | 15  | |
   |  17 |   0 | GPIO. 0 |  OUT | 1 | 11 || 12 | 0 | IN   | GPIO. 1 | 1   | 18  | |
   |  27 |   2 | GPIO. 2 |  OUT | 1 | 13 || 14 |   |      | 0v      |     |     | |
   |  22 |   3 | GPIO. 3 |   IN | 0 | 15 || 16 | 1 | OUT  | GPIO. 4 | 4   | 23  | |
   |     |     |    3.3v |      |   | 17 || 18 | 0 | IN   | GPIO. 5 | 5   | 24  | |
   |  10 |  12 |    MOSI |   IN | 0 | 19 || 20 |   |      | 0v      |     |     | |
   |   9 |  13 |    MISO |   IN | 0 | 21 || 22 | 0 | IN   | GPIO. 6 | 6   | 25  | | 端
   |  11 |  14 |    SCLK |   IN | 0 | 23 || 24 | 1 | IN   | CE0     | 10  | 8   | |
   |     |     |      0v |      |   | 25 || 26 | 1 | IN   | CE1     | 11  | 7   | |
   |   0 |  30 |   SDA.0 |   IN | 1 | 27 || 28 | 1 | IN   | SCL.0   | 31  | 1   | |
   |   5 |  21 | GPIO.21 |   IN | 1 | 29 || 30 |   |      | 0v      |     |     | |
   |   6 |  22 | GPIO.22 |   IN | 1 | 31 || 32 | 0 | IN   | GPIO.26 | 26  | 12  | |
   |  13 |  23 | GPIO.23 |   IN | 0 | 33 || 34 |   |      | 0v      |     |     | |
   |  19 |  24 | GPIO.24 |   IN | 0 | 35 || 36 | 1 | OUT  | GPIO.27 | 27  | 16  | |
   |  26 |  25 | GPIO.25 |   IN | 0 | 37 || 38 | 0 | IN   | GPIO.28 | 28  | 20  | |
   |     |     |      0v |      |   | 39 || 40 | 0 | IN   | GPIO.29 | 29  | 21  | |
   +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+ |
   | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM | |
   +-----+-----+---------+------+---+--B Plus--+---+------+---------+-----+-----+ |
                                                                                  |
------------------------------------- 端-----------端-----------------------------+
   +-----+-----+---------+------+---+-Model B2-+---+------+---------+-----+-----+ |
   | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM | |
   +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+ |
   |     |     |    3.3v |      |   |  1 || 2  |   |      | 5v      |     |     | |
   |   2 |   8 |   SDA.1 |   IN | 1 |  3 || 4  |   |      | 5V      |     |     | |  端
   |   3 |   9 |   SCL.1 |   IN | 1 |  5 || 6  |   |      | 0v      |     |     | |
   |   4 |   7 | GPIO. 7 |   IN | 1 |  7 || 8  | 1 | ALT0 | TxD     | 15  | 14  | |
   |     |     |      0v |      |   |  9 || 10 | 1 | ALT0 | RxD     | 16  | 15  | |
   |  17 |   0 | GPIO. 0 |   IN | 0 | 11 || 12 | 0 | IN   | GPIO. 1 | 1   | 18  | |  端
   |  27 |   2 | GPIO. 2 |   IN | 0 | 13 || 14 |   |      | 0v      |     |     | |
   |  22 |   3 | GPIO. 3 |   IN | 0 | 15 || 16 | 0 | IN   | GPIO. 4 | 4   | 23  | |
   |     |     |    3.3v |      |   | 17 || 18 | 0 | IN   | GPIO. 5 | 5   | 24  | |
   |  10 |  12 |    MOSI |   IN | 0 | 19 || 20 |   |      | 0v      |     |     | |
   |   9 |  13 |    MISO |   IN | 0 | 21 || 22 | 0 | IN   | GPIO. 6 | 6   | 25  | |
   |  11 |  14 |    SCLK |   IN | 0 | 23 || 24 | 1 | IN   | CE0     | 10  | 8   | |
   |     |     |      0v |      |   | 25 || 26 | 1 | IN   | CE1     | 11  | 7   | |
   +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+ |
   |  28 |  17 | GPIO.17 |   IN | 0 | 51 || 52 | 0 | IN   | GPIO.18 | 18  | 29  | |
   |  30 |  19 | GPIO.19 |   IN | 0 | 53 || 54 | 0 | IN   | GPIO.20 | 20  | 31  | |
   +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+ |
   | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM | |
   +-----+-----+---------+------+---+-Model B2-+---+------+---------+-----+-----+ |
                                                                                  |
ライブラリの中身を見ると
digitalRead ではシステムコール lseek( ) read(  ) を呼んでいる。
digitalWrite では何らかのアドレス(ポインタ型変数)に値を代入している。
emacs で UTF-8 で ¥ の半角は c2(194) a5(165) の 2 バイトであり、 \ の 5c(92) とは異なる。 ゆえに改行してくれず、¥ と n が出力される。
1920 x 1080 の画面の周囲に黒い領域がある。 これを解消したい。 # raspi-config 8. ---> A1 で disable に設定する。 リブートすると画面全体を使うようになった。
% ssh -l user-name machine-name % ssh user-name@machine-name % sftp user-name@machine-name
フォントサイズ 10 --> 11 foreground color 灰色 ---> 白
% sudo -s # raspi-config 8. Advanced Options A4 SSH を選択し、enable を選ぶ
/etc/network/interfaces を書き換える。 以下のようにすると、有線 LAN が固定 ip になった。 auto eth0 allow-hotplug eth0 #iface eth0 inet manual iface eth0 inet static address 192.168.xx.yy netmask 255.255.255.0 gateway 192.168.xx.1 /etc/resolv.conf にネームサーバーの情報を書き込む nameserver 202.236.xx.yy これを怠ると、外部が見えなくなり、$ sudo apt-get update で エラーが発生する。 再動起すると固定 ip が有効になる。
色々な無線 LAN ルータに接続する場合、DHCP にしておき、
ルータ側で DHCP の固定 IP 割り当て機能を使うのがよい。
<参考サイト>
http://momijiame.tumblr.com/post/91958442191/raspberry-pi-%E3%81%A7%E7%84%A1%E7%B7%9A-lan-%E3%82%A2%E3%83%80%E3%83%97%E3%82%BF%E3%82%92%E4%BD%BF%E3%81%86
% sudo -s
# lsusb
  usb に接続されているデバイスの状況を調べる。
  Bus 001 Device 009: ID 0411:01a2 BUFFALO INC. ... Wireless LAN Adapter
  と表示される。
# ip link show
 現在の netowrk の接続状況を見る。
 lo  eth0  wlan0 の 3 つが見つかる。lo は自機、etho0 は有線、
  wlen0 は無線を表す。wlen0 は state DOWN となっている。
# cat /etc/network/interfaces
 インターフェースの設定ファイル。
 USB 無線 LAN アダプタを接続すると、自動的に項目が追加されるようだ。
そのままでよい。なお、固定 IP にするときは、以下のようにする。
有線の部分も含めて、以下のようにした。xx, yy, zz は
数値が入る。
--------- 固定 IP の場合 ここから -----------------
auto lo
iface lo inet loopback
auto eth0
allow-hotplug eth0
#iface eth0 inet manual
iface eth0 inet static
address 192.168.xx.yy
netmask 255.255.255.0
gateway 192.168.xx.1
allow-hotplug wlan0
#iface wlan0 inet manual
iface wlan0 inet static
address 192.168.xx.zz
netmask 255.255.255.0
gateway 192.168.xx.1
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
当初、wlan0 の部分を書くのに eth0 の部分をコピーし、
iface の行を wlan0 に書き換えるのを忘れていたたため、
うまくいかなかった。書き換え忘れに注意。
--------- 固定 IP の場合 ここまで -----------------
/etc/wpa_supplicant/wpa_supplicant.conf
の中に暗号の情報を書き込む。
  % wpa_passphrase <ssid> <passphrase>
の出力を上記のファイルに付け足す。
タイプミスに注意!!!
何回もタイプミスのために接続できないという現象に苦しんだ。
wpa_supplicant.conf の内容は以下の通り。
------- ここから -------
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
        ssid="my-ssid"
        #psk="pass phrase"
        psk=xxxxxxxxxxxxxxxxx
}
------- ここまで -------
  # ifdown wlan0
  # ifup wlan0
    ( しばらく時間をおく )
  # ifconfig
複数の設定を記述することができる。
この場合、上から順番にトライしてゆくようだ。
# apt-get install telnet
ポートの状況を調査するためのツールが nmap である。 # apt-get install nmap % nmap localhost
(注意!) 最初に受け入れ側で xhost + 192.168.xx.yy を実行するのを 忘れないように。 setenv DISPLAY :0.0 OK unset DISPLAY NG setenv DISPLAY localhost:0.0 NG setenv DISPLAY 127.0.0.1:0.0 NG setenv DISPLAY 192.168.xx.yy:0.0 (自分) NG setenv DISPLAY 192.168.xx.zz:0.0 (自分以外) OK X が 6000 番台の port を listen しないようだ。 cygwin の X とはオプションが異なるので、 startx を書き換える方法はダメ。 raspberry pi X server listen tcp option で検索すると、 www.raspberrypi.org のサイトに答えが書いてある。 2 つの方法があると書いてある。 1. 非公式なオプション -nolisten tcp が 書かれているスクリプトを見つける。 /etc/X11/xinit/xserverrc exec /usr/bin/X -nolisten tcp "$@" ---> exec /usr/bin/X "$@" 2. socat を使う。エレガントな方法とある。 # apt-get install socat alias so 'socat -d -d -d -d TCP-LISTEN:6000,fork,reuseaddr,range=192.168.xx.0/24 UNIX-CONNECT:/tmp/.X11-unix/X0' X は inet ドメインの通信はできず、unix ドメインのソケット の通信しか行わない。socat が 6000 番台の通信を受けて、 unix ドメインで接続した X とソケットに流し込むという しくみらしい。 通信ののたびに、大量のログが端末に出力される。 コマンドの末尾に > /dev/null & をつけてもダメ。 標準エラー出力のようだ。 1. の方法を用いることにする。
# apt-get install telnetd でインストールされ、必要な設定を行い、 inetd を再起動する。 telnetd に関する設定は /etc/inetd.conf のようだ。
# apt-get install ftp
接続実績があるのは以下の 3 つ Buffalo 型番不明 IO DATA WN-G150UMK Planex GW-USNANO2A Buffalo の無線 LAN アダプタは滅茶苦茶熱くなる。 ネットでも多くの人がそう言っている。 ワットチェッカーを取り付けると、LAN アダプタなしで 1W, LAN アダプタありで 3W となる。私が使用している 5V の AC アダプタは 2A まで 出せるので、10W までは OK である。 IO Data のと Planex のはそれほど熱くならないので、 これらの方が良さそうにみえる。
# apt-cache search opencv # apt-get install libcv2.4 # apt-get install libcv-dev # apt-get install libopencv-photo2.4 # apt-get install libopencv-photo-dev カメラの画像を表示するだけのプログラム、makefile を ここ に置く。
Arduino は 5V, Studuino (アーテック社製) は 3.3V なので、
Studuino の方が簡単である。直結できる。
Arduino はプルアップ抵抗の罠があり、非常に苦労した。
(1) 準備作業
ログインシェルがシリアルポートを使わない
ように設定する。
これを怠ると、奇妙な現象に悩まされるので、忘れないよう注意!!!
# raspi-config
8 Advanced Options --- A8 Serial を no
以上の結果
/boot/cmdline.txt
が変更される。
(2) 送信
機能  ピン
 Tx    8
 Rx   10
 Gnd  9, 25, 39, 6, 14, 20, 30, 34
Rapberry Pi と Studuino を接続するケーブルは、
常時接続することはできない。
Studuino に PC から USB 経由でプログラムを書き込む
ときは、Pi ---- Studuino の接続を物理的に切断する
必要がある。そうでないと、書き込みエラーが発生する。
レベル変換回路を挿入した場合、Pi --- Arduino を接続したままで、
PC から書き込みができることもある
(外したほうがよいかもしれない)。
(3) 内蔵プルアップ抵抗の無効化
Raspberry Pi の Rx 端子はデフォルトで 40kΩ 程度の
プルアップ抵抗が入っている。
ゆえに、10k と 20k で分圧して Rx に入力すると、
0 を入力するとき、0V にならず 0.5V 程度になる。
10k と 20k の並列で 7k。7k と40k で 3.3V を分圧するので、
3.3 × 7 / ( 7 + 40 ) = 0.5V
これで動くので問題ないが、オペアンプによるバッファを
入れるか、内蔵プルアップ抵抗を無効化した方が良いかも
しれない。
C から wiringPi を使う場合、
    pullUpDnControl(16, PUD_OFF);
でプルアップ抵抗を無効化できる。
    pinMode(16, INPUT);
は入れてはならない。これを入れると、Rx 端子からの入力を
受け取らなくなる。pinMode(16, OUTPUT); もダメ。
今のところ、リブートするしか方法がない。
GPIO は INPUT, OUTPUT, ALT0 の 3 つのモードがあり、
シリアル通信を行うには ALT0 のモードにする必要があるらしい。
python から import RPi.GPIO を使う場合、プルアップ抵抗を
無効化する方法が分からない。
GPIO.setup(15, xxxx , pull_up_down = GPIO.PUD_OFF)
として、xxxx の部分をシリアル通信モードに設定したいのだが、
GPIO.IN, GPIO.OUT のどちらかしか設定できない。
ソースファイルを見ると、py_gpio.c の中に、
   if (direction != INPUT && direction != OUTPUT) {
      PyErr_SetString(PyExc_ValueError, "An invalid direction was passed to setup()");
      return 0;
   }
とあるので、シリアルモードに設定できないようだ。
wiringPi の python 版を使うとできそうだが(C 版ではできる)
なぜか、インストールしても使えない。謎
Pi に samba をインストールし、外付けハードディスクを接続する 日経 Linux 2015.10 p.68
出典 日経Linux 2015.10 p.77 GPIO にはデフォルトでプルアップ・プルダウン抵抗が入っている。 2 -- 8 プルアップ 9 -- 26 プルダウン 2,3 1.8 k ohm 4 以降 50 k ohm Vcc --- R --+-- sw --- Gnd Vcc --- sw -+--- R --- Gnd というパターンで + の電圧を入力するとき、 R = 10 k に設定しておけば、プルアップ・プルダウンの 区別なく入力できるように思われる。 R に大きな抵抗を使ってはいけないようだ。
Raspberry Pi B にインストールする。 (参考) 日経Linx 2015.12 p.64- 記事の通りにインストールする。 有線 LAN で DHCP 接続してパッケージをインストールする。 無線 LAN の設定は最後に回す。 以下のパッケージをインストールする tcsh emacs ftp telnet telnetd ----- 設定不要 すぐ使える 以前インストールした raspberry pi から以下のファイルを 取ってくる。 .cshrc .emacs .emacs.fundmode .bashrc はだいぶ異なるので、上書きはしない。 .bashrc の先頭に setxkbmap -option ctrl:swapcaps xmodmap /home/pi/xkey の 2 行を付加する。 なお、コンソールでは setxkbmap は効かない。 X を起動してからである。
# apt-get install fonts-takao ibus-mozc Menu ---- Preferences --- iBus Preferences --- Input Method Add ---- Anthy 半角/全角 キーで日本語が使えるようになる。 私の場合は esc と入れ換えているので、esc で変換する。
インストール
   # apt-get install apache2
(参照)  http://qiita.com/aryoa/items/2c28b466e911a3dd101d
デフォルトの設定
ルートディレクトリ   /var/www/html
cgi 用ディレクトリ   /usr/lib/cgi-bin/   <---- ? 実行できない
は使いにくいので、以下のようにする。
(1) ユーザーディレクトリを可能にする
$ sudo -s
# a2enmod userdir
(2) cgi を使えるようにする
# cd /etc/apache2/mods-enabled
# ln -s ../mods-available/cgi.load .
(3) 設定ファイルの編集
/etc/apache2/sites-available/000-default.conf
  // 以下のコメントを外す
  Include conf-available/serve-cgi-bin.conf
  ServerName  のコメントを外し設定する
  ServerAdmin を設定する
/etc/apache2/mods-available/mime.conf
   AddHandler cgi-script .cgi .py .pl
/etc/apache2/conf-available/serve-cgi-bin.conf
   ScriptAlias /cgi-bin/ /home/pi/public_html/cgi-bin/
   <Directory "/home/pi/public_html/cgi-bin">
(4) リスタート
# /etc/init.d/apache2 restart  あるいは
# apachectl restart
(5) おまけ
サーバーの名前でアクセスしたときのために、
/var/www/html/index.html
の内容を以下のようにする。/~pi/ のトップディレクトリ
へジャンプする。
<html>
  <head>
  <meta http-equiv="Refresh" content="0;URL=/~pi/">
    <title>top page</title>
  </head>
  <body>
  </body>
</html>
(1) インストール # apt-get install php5 # apt-get install libapache2-mod-php5 (2) apache2 の設定変更 $ cd /etc/apache2/mods-enabled # vi mime.conf AddHandler php5-script .php # vi php5.conf 末尾の <IfModule mod_userdir.c> ..... </IfModule> をコメントアウトする。 # /etc/init.d/apache2 restart (3) php の設定ファイル $ cd /etc/php5/apache2 $ sudo -s # vi php.ini date.timezone = "Asia/Tokyo"
# update-rc.d -f apache2 remove 自動起動停止 /etc/rc2.d/... が削除 # update-rc.d apache2 defaults 自動起動復活 ログ /var/log/apache2
cgi は www-data というユーザー名で実行され、実行時のカレント ディレクトリはデフォルトでは ~pi/public_html/cgi-bin/ である。 ファイルを作成するときは、以下の方法がある。 (1) ファイルを作成するディレクトリの許可情報を 777 に しておく。ファイルの所有者は www-data になる。 (2) suexec を可能にすると、ファイルの所有者の権限で 実行される。suexec を可能にする方法は以下の通り。 # apt-get update # apt-get install -y apache2-suexec-custom # a2enmod suexec # systemctl restart apache2 ファイルを作成するディレクトリのパーミッションは 755 としておく。 apache2 のバージョン(設定?)によっては 777 ではエラーが出る。
(1) GPIO にアクセスするコマンドは root 権限が必要である。
    2 つの方法がある。
  (a) ユーザ www-data が sudo でコマンドを実行するときに、
      パスワードを必要としないよう設定しておく。
      $ sudo visudo
      で最後の行に以下の記述を加える
      www-data ALL=(ALL) NOPASSWD: ALL
  (b) 実行するコマンドの所有者を root にして、sticky bit をたてる。
     # chown root filename
     # chmod u+s filename
(2) cgi から実行する「コマンドの標準出力」の扱い
perl と python からコマンドを実行する場合、微妙な違いがある。
(a) perl
perl から system 関数でプログラムを実行すると、
system 関数で実行したプログラムが
標準出力に出した文字は、ブラウザへ送られる。
ゆえに、perl の cgi は以下のようになる。
print "Content-type: text/html\n";
print "\n";
print "<html>\n";
print "<head>\n";
print "<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">\n"\
;
print "<title>cgi のテスト</title>\n";
print "</head>\n";
print "<body>\n";
print "<p>\n";
$ret = system("ここにコマンドを書く");
print "<p> return code = %ret</p>\n";
print "</body>\n";
print "</html>\n";
(b) python
python から同様に os.system(cmd) とすると、apache2 は
# Bad header: yyyy
というエラーを発生させる。command.getoutput(cmd) を使って、
出力を一旦変数に入れる必要がある。
print "Content-type: text/html"
print ""
print "<html>"
print "<head>"
print "<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">"
print "<title>cgi のテスト</title>"
print "<style>"
print "body,p { font-size: x-large; margin: 20px; }"
print "</style>"
print "</head>"
print "<body>"
cmd = "ここに実行したいコマンドを書く"
print "<p>コマンド: " + cmd + "<br>"
ret = commands.getoutput(cmd)
print ret
print "</body>"
print "</html>"
raspberry pi は遠隔ログインして使うことも多い。 teraterm で接続すると、カラーがかかって見づらいこと が多い。 恐らく (3) が効いていると思われるが、以下の設定をした。 (1) tcsh において setenv TERM vt100 (2) teraterm.ini において TermType=vt100 ちなみに行間を空ける方法は VTFontSpace=0,0,6,0 (3)「表示」→「その他の設定」→「表示」で右下の チェックボックスを全て外す。
wpa_gui というソフトがあるらしい。 (情報源) http://s2jp.com/2013/12/raspberry-pi-with-internet/
Raspberry Pi で使った SD カードは windows では使えないらしい。 SD Card Association の SD Card Formatter を使う。 詳しくは以下のサイトへ。 (情報源) http://s2jp.com/2013/11/reuse-raspbian-sdcard/
shutdown を選ぶと、shutdown / exit to command line / reboot の 3 つが選べる。
.bashrc の中に以下のように書くとメニューが日本語化される LANG=ja_JP.UTF-8 その一方で、LXTerminal の表示がずれる。 しかし、これを怠ると EUC ファイルが化ける。 startx は bash から起動する。 LXTermial から tcsh を起動し、.cshrc の中に setenv LANG ja_JP.UTF-8 を書く。
Win32DiskImager を使う。 Read 時にファイル名を指定するとき、フォルダマークを クリックしてフォルダを選び、絶対パスで指定すること。 相対パスで指定すると、終わった後、ファイルがどこにもない。 同じ容量の SD カードでも微妙な差があるらしい。 16GB 同士でコピーを試みた。 A: Silicon Power microSDHC 16GB class10 B: GreenHouse microSDHC 16GB class4 C: SanDisk Extreme midroSDHC 16GB 1の記号 A から image ファイルを作り、B, C にコピーしようと したところ、B は NG、C は OK だった。 Raspberry Pi で使う micro SD カードは統一しておいた方が良い。 8GB ---> 16GB は OK である。 16GB の SD カードを 8GB の容量として使うことになるが、 raspi-config を使うと、16GB に拡張できるらしい。 8GB SD ---> 8GB micro Sd では Trancend ---> Kingston はダメだった。 容量が異なる場合でも、正しくコピーする方法は 別の項目で示す。
/etc/hostname /etc/hosts を編集する。
8GB の SD カードを別の 8GB SD カードにコピーしようとして、
Win32DiskImager を使うと、コピー先のディスクの容量が小さいと
言って怒られ、コピーできない。同じ 8GB の SD カードでも
微妙な差があるようだ。8GB --> 16GB ならコピーできるが、
その次に 16GB をコピーするときに困る。
Linux マシン (ubuntu) で操作する
(1) 容量を縮める
   # apt-get install gparted
で gparted をインストールする。
コピー元 SD カードを接続し、df コマンドで接続されたことを
確認する。
   # tcsh
   # setenv DISPLAY unix:0.0
   # /usr/sbin/gparted
あるいは、ubuntu の場合「アプリケーション」→「システムツール」
→「GParted パーティション編集ツール」
右端のアイコンの ▲▼ をクリックして SD カードにする。
全ての領域を「右クリック」→「アンマウント」
(a) /dev/sdc?  ext4  のサイズを、少し減らす (ex. 200MiB )。
(b) その領域を含むパーティションのサイズを減らす (ex. 199MiB)。
    200 MiB 減らすよう指定しても、自動的に
    199 MiB に訂正されてしまう。
「チェックのマーク」をクリックして、その変更を
適用する。
(2) 容量の確認
gparted で容量を確認する。
パーティションごとに、領域を右クリックする。
今回の SD カードの場合、以下のようになった。
未使用領域   4MiB
/dev/sdc1    1145 MiB
/dev/sdc2    6347 MiB
未使用領域   残り
バックアップ対象となるサイズは 4 + 1145 + 6347 = 7496 MiB である
(3) バックアップ
  # dd if=/dev/sdc of=./rasp.img bs=1048576 count=7500
  1024 * 1024 = 1048576
  count は 7496 よりちょっと多め
  約 8 分
(4) リストア
  # dd if=./rasp.img of=/dev/sdd bs=1048576 count=7500
   約 14 分
gparted で見ると、元の SD カードのように、第 2 パーティションは
いくつかに分割されておらず、1 つのパーティションとして見える。
しかし、一旦外して、差し直すと、第 2 パーティションの中の
分割の様子も再現される。
SD カードをラズパイに差すと正常に動作する。
これで良さそうである。
ラズパイ上で動作させている web サーバにアクセスすると、 応答しない。 何回か ping すると、復活する。 原因は wifi アダプタがデフォルトでは省電力モードで動作し、 スリープ状態にはいることのようだ。 解決法が http://denshikousaku.net/fix-sluggish-response-of-raspberry-pi-wifi-adaptor http://forums.adafruit.com/viewtopic.php?f=50&t=44171&p=220622#p220593 に書いてあった。 /etc/modprobe.d/8192cu.conf というファイルを作成し、その中に以下のように書き込む。 # Disable power saving options 8192cu rtw_power_mgnt=0
$ sudo -s # apt-get install git-core # apt-get install python-setuptools # apt-get install python-dev $ git clone https://github.com/WiringPi/WiringPi-Python.git $ cd WiringPi-Python $ git submodule update --init $ sudo python setup.py install C 版のインストールは以下の通り $ cd WiringPi/ $ ./build $ cd ../ インストールしたが、使ってみると、反応しない。謎。
/etc/rc.local に自作アプリの起動を書き込み、 最後に & をつけるのを忘れると、 起動途中で止まるようになってしまった。 ^C ^D ^Z なども効かない。 シングルユーザーモードで操作して、解消する。 起動時に shift を押し、cmdline.txt を編集する。 以下の設定を加える。 init=/bin/sh シングルユーザーモードで起動直後は、ファイルシステムが read-only なので、 以下のコマンドを実行する。 # mount -o rw,remount / その後、/etc/rc.local を vi で編集する。
/etc/rc.local に書き込むときは、最後に絶対に & を忘れないように。 これを怠ると、起動途中で止まる。 シングルユーザーモードにして復旧作業をする羽目になる。 正統派のやりかたは以下の通り。ただし、煩雑である。 (情報源)http://mower.hateblo.jp/entry/2015/05/08/111025 (1) sysv-rc-conf が入っていない場合は # apt-get install sysv-rc-conf でインストールしておく。 (2) 自動起動用のファイルを作成する。 # cd /etc/init.d # cp skeleton my-program # chmod 755 my-program my-program の中身を編集する。 全てコメントアウトし、最後の 1 行に 自作のプログラム名を記述する。 (3) 自動起動するよう設定する。 # sysv-rc-conf my-program on /etc/rc[2345].d の中に S20my-program というファイルが作成され、 /etd/init.d/my-program へのシンボリックリンクが作成される。
python で cgi も使える簡易 web server をたてることができる。
  $ cd
  $ cd public_html
  $ sudo python -m CGIHTTPServer 80
起動したディレクトリがルートディレクトリになる。
http://192.168.xx.yy
に接続すると
/home/pi/public_html/index.html
を読み込む。以前に、同じサイトで /~pi/ を見ていたとき、ブラウザが
勝手に /~pi/ を付け加えるので、ファイルがないというエラーが出る。
そのときは、
http://192.168.xx.yy/index.html
と指定する。cgi は cgi-bin というディレクトリに置く。
cgi から command.getoutput(cmd) で外部コマンドを実行すると、
nobody の権限で実行されるので GPIO, Serial に
アクセスするときは、sudo visudo で以下のように設定する。
      nobody ALL=(ALL) NOPASSWD: ALL
/etc/rc.local に自動起動の記述する。
( cd /home/pi/public_html; python -m CGIHTTPServer 80 >> /var/tmp/web.log 2>&1 & )
/tmp に書き込むとブート時に削除されるが、/var/tmp は残る。
ログの位置は /home/pi/public_html でも良いかもしれない。
(1) インストール # apt-get install motion (2) 設定ファイルの書き換え /etc/default/motion start_motion_daemon=yes /etc/motion/motion.conf daemon = on webcam_localhost off (3) 起動 # sudo service motion start (4) ブラウザからアクセス 192.168.xx.yy:8081 なぜか、IE からは見れない。 Firefox か Chrome のみ。 リアルタイム性はかなり低い。 opencv の方が良いかも。
$ sudo visudo
  www-data ALL=(ALL) NOPASSWD: ALL     ユーザー限定 全てのコマンド
  www-data ALL=(ALL) NOPASSWD: /home/pi/public_html/cgi-bin/action.py
                                       ユーザー限定 コマンド限定
$ lsof -p 1010 pid=1010 のプロセスが開いているファイル $ lsof /home/pi/file /home/pi/file を開いているプロセス $ lsof -i 6000 6000 番ポートを開いているプロセス
# service --status-all + 記号が付いているのが起動されているサービス
Raspberry Pi 3 にバージョンが新しい Raspbian (uname -a を実行し、4.4.11 以降は新しい。4.1.17 は古いとみなす)を インストールした場合、Tx, Rx 端子が使えない。 Tx, Rx 端子を使ってシリアル通信をする(UART を使う)には 以下の操作が必要。 /boot/config.txt の末尾に以下の行を追加 dtoverlay=pi3-miniuart-bt
Windows から Raspbian の画面に接続することができる。 Raspberry Pi に xrdp をインストールする。 インストールすると xrdp が起動し、起動時にも自動的に xrdp が 起動するよう設定されるようだ。 $ sudo -s # apt-get install xrdp Windows からリモートデスクトップで接続する。 Windows8 の場合 タイル状のスタート画面の ↓ を押す アプリのリストの中の「リモートデスクトップ接続」 Windows7 の場合 スタートボタン --- 全てのプログラム --- アクセサリ --- リモートデスクトップ接続 キーボードが英語配置になっている。日本語配置にするには 以下のように操作する。 $ cd /etc/xrdp $ sudo -s # wget http://w.vmeta.jp/temp/km-0411.ini # chown root:root km-0411.ini # ln -s km-0411.ini e0200411.ini # ln -s km-0411.ini e0010411.ini # service xrdp restart
# apt install texlive-lang-cjk xdvik-ja latexmk # apt install texlive ところが、何が原因か分からないが、デスクトップが ゴミ箱だけになってしまった。 リブートして startx すると、デスクトップはのっぺらぼう になってしまった。 もう一度リブートして # apt remove gnome-panel # apt install gnome-panel する。 root で startx するとパネルは表示されるが、 pi で startx するとのっぺらぼうである。 .gconf .local をリネームしてもダメ。 df すると、/dev/root が満杯になっており、Available が 0 に なっている。 # apt remove texlive-base すると、400 MB 空きが生じた。この状態で startx すると、 パネルが表示された。tex のインストールにより空き容量が 0 になったことが原因のようだ。