初版作成 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 になったことが原因のようだ。