Raspberry PiでWordPressを動かす

WordPressでHP開発を行うのだがPC環境にインストールするのがいやなので,手持ちのRaspberry Piで動かして開発を進めることにする。

projects.raspberrypi.org

日本語訳はこちら。 igarashi-systems.com その他,参考にしたサイト。 semodeler.life deviceplus.jp qiita.com

まずは,お決まりの更新。

sudo apt update
sudo apt upgrade

次いで,apache2のインストール。

sudo apt install apache2 -y

正常にインストールされていると,Rpiブラウザのアドレスに「localhost」と入力すると,何か表示される。ドキュメントルートは「/var/www/html」にある。 また,ネットワーク内の別のPCからも「192.168.?.?」とIPアドレスをブラウザに入力すると何か表示される。なお,IPアドレスはRpiのターミナルで「hostname -I」で確認できる。

次いで,PHPのインストール。

sudo apt install -y php libapache2-mod-php

動作確認。index.htmlは不要なので削除。

cd /var/www/html
sudo rm index.html
sudo leafpad index.php

<?php echo "hello world"; ?>と入力して保存。ブラウザを更新すると「hello word」と表示される(はず)。

次いで,MySQLのインストールし,Apacheを再起動。

sudo apt install mysql-server php-mysql -y
sudo service apache2 restart

WordPressのダウンロード。ルートフォルダのファイルを削除⇒ダウンロード・展開⇒展開ファイルをルートフォルダに移動⇒不要ファイルを削除⇒所有権の変更

cd /var/www/html
sudo rm *
sudo wget http://wordpress.org/latest.tar.gz
sudo mv wordpress/* .
sudo rm -rf wordpress latest.tar.gz
sudo chown -R www-data: .

WordPressの設定。まず,MySQLの設定。

sudo mysql_secure_installation
  • Enter current password for root (enter for none):⇒Enterキーを押す
  • Set root password?⇒Y
  • New password:⇒パスワードを入力(暫定として今日の日付)
  • Remove anonymous users⇒Y
  • Disallow root login remotely⇒Y
  • Remove test database and access to it⇒Y
  • Reload privilege tables now⇒Y

で設定完了。ついでWordPressデータベースの作成。

sudo mysql -uroot -p

パスワードを入力。「MariaDB [(none)]>」となるので,WordPressデータベースを作成。

create database wordpress;
GRANT ALL PRIVILEGES ON wordpress.* TO 'ユーザー'@'localhost' IDENTIFIED BY 'パスワード';
FLUSH PRIVILEGES;

上記,ユーザーとパスワードは自身の環境に応じて設定(今回はユーザ:master,PW:今日の日付)。Ctrl+Dで終了。

WordPressの設定。 ブラウザでlocalhostと入力すると,言語選択画面が出るので,日本語を選択すると,welcome画面が表示される。接続画面が出たら,次の内容で設定。

  • Database Name: wordpress
  • User Name:
  • Password:
  • Database Host: localhost
  • Table Prefix: wp_

「インストール実行」をクリック。必要情報の入力を求められるので入力(ユーザ名とパスワード(ここだけ西暦4桁)は上記と同じ)。「WordPressをインストール」をクリック。インストールが完了すると,ログイン画面がでるので,上記のユーザ名とPWを入力してログインするとWordPressの管理画面が表示される。「http://localhost/wp-admin」とブラウザに入力すると,管理画面のログイン画面がでる。

なお,このままの設定ではネットワーク内の別のPCからアクセスするとCSSが崩れていたり,管理画面にログインできなかったので,管理画面-一般設定のWordPressアドレス(URL)とサイトアドレス(URL)をlocalhostからIPアドレスに変更する。これで,別のPCからも「http://IPアドレス/wp-admin」で管理画面のログイン画面が出る。

以上,めでたしめでたし。

Rasbperry PiにOpenCVを入れなおす

次のプログラムを導入しようとしたら・・・

github.com

CV2がないと言われたので,OpenCVを入れ直す(以前入れていたはずなんだけど・・・)。参考にしたのは次のページ。

www.pyimagesearch.com

qiita.com

まずはmicroSDからメモリのスワップスワップ容量は次のコードで確認できる。

free -h

nanoを用いて"/etc/dphys-swapfile" を編集。

sudo nano /etc/dphys-swapfile

"CONF_SWAPSIZE=1024"(たぶん100となっている)として,control + Xで終了,Yで編集内容を保存,Enterで離脱。次のコードでスワップメモリの変更を反映。

sudo /etc/init.d/dphys-swapfile stop
sudo /etc/init.d/dphys-swapfile start

で,しなくてもいいのだが,空き容量を作るため,wolframとLibreOfficeを削除

sudo apt-get purge wolfram-engine
sudo apt-get purge libreoffice*
sudo apt-get clean
sudo apt-get autoremove

次に必要なライブラリなどをインストール

sudo apt-get update 
sudo apt-get upgrade
sudo apt-get install build-essential cmake pkg-config
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-dev
sudo apt-get install libgtk2.0-dev libgtk-3-dev
sudo apt-get install libatlas-base-dev gfortran
sudo apt-get install python2.7-dev python3-dev

OpenCVをダウンロード。ここではversion 3.4.5を選択。

cd ~
wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.4.5.zip
unzip opencv.zip
get -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.4.5.zip
unzip opencv_contrib.zip

pipをインストールして仮想環境を構築。このコードはpython3の環境。python2は最後の行の「python3」をpython2に変えるだけ。

wget https://bootstrap.pypa.io/get-pip.py
sudo python get-pip.py
sudo python3 get-pip.py
sudo pip install virtualenv virtualenvwrapper
sudo rm -rf ~/.cache/pip
echo -e "\n# virtualenv and virtualenvwrapper" >> ~/.profile
echo "export WORKON_HOME=$HOME/.virtualenvs" >> ~/.profile
echo "export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3" >> ~/.profile
echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.profile
source ~/.profile
mkvirtualenv cv -p python3

ここまで来るとターミナルを終了しても,次のコードで仮想環境に入れる。仮想環境に入れていたら,コンソールのpi@raspberypiの前に(cv)と書かれている。

source ~/.profile
workon cv

で,Numpyを入れる。

pip install numpy

いよいよOpenCVコンパイル

cd ~/opencv-3.4.5/
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.4.5/modules \
    -D BUILD_EXAMPLES=ON ..

コンパイルが終了するとインストール。

sudo make install
sudo ldconfig

はてなブログでソースコードを「見やすく」貼り付ける

はてなブログソースコードを貼り付けるときに,これまでは「見たままモード」にそのまま貼り付けてきたので見にくかったので,方法を調べてみた。

kurokinomizuiwa.hatenablog.com

はてな記法」または「Markdown記法」モードで貼り付ける

基本はこちらで,ブログを書く際の記法そのものを変更して行う。記法の違いは,次のブログを参考に。
はてなブログで使うべき“記法”はどれ?h2タグを使いたいなら◯◯記法モード! - たわしの帖
「はてな記法」と「Markdown記法」の比較 - Milkのメモ帳

ちなみに,見たままモードで作成したページをこれらの記法に切り替える方法は次の記述を参考に(自動更新はできず,かなりの力技)。
hatebu-memo.scriptlife.jp

はてな記法ソースコードを貼り付ける

スーパーpre記法を使って、プログラムコードなどの構文を色付け(ハイライト)することができる。

nagoyanofes.hatenadiary.jp

hatenadiary.g.hatena.ne.jp

Markdown記法でソースコードを貼り付ける

バッククォートを3個で囲んだ部分がプレ要素になり,その後ろにプログラミング言語の名前を記述すると シンタックスハイライトが適用される。

hatebu-memo.scriptlife.jp

「見たまま」モードで貼り付ける

この場合も力技で,「見たままモード」で作成中のページとは別に「はてな記法」か「Markdown記法」で作成したコードを貼り付けるみたい。

www.dreamark.tokyo

SSPライブラリでRaspberry Pi Camera Moduleを動かしてみる

インターフェース誌で2016年12月号から3号連続で特集されているSSPライブラリを導入してみる。イメージセンサーの素の画像データ(RAWデータ)を取り出すことで,基本的な画質調整から試せるだけでなく,RAWデータの保存と画像処理を分離することで,撮影不能時間を短くしたり,raspivid以上の高速/高解像度の動画撮影が可能になる(らしい)。

hendigi.karaage.xyz

環境構築

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

インストール法は次のページを参考。概ね書いてあるとおりに実行していけばインストールできた。

www.visionproc.org

ただし最新のバージョンでは,ラズパイにOpenCVをインストールする方法にあるとおり,ファイル拡張は不要(というかできない)。

インストールできたかは次のコマンドで確認

$ cd ~/libssp/1.31/sample/

$ sudo stillsample/stillsample profiles/IMX219\(1280x720@60Hz\).xml stillsampletest.raw

$ ls -l stillsampletest.raw

実際に画を見るには,windowsでダウンロードページにあるRAWViwer1.3.exeを使う。

VisionProcessingFramework(VPF) 環境構築

まず,GUIで必要なgtkパッケージを入れる(VPFではgtk2を使うようで,gtk3だけでは不可)。

$ sudo apt-get install libgtk2.0-dev libgtk-3-dev

次に,OpenCVを入れる。なお,OpenCVのインストールに関してはraspberry pi opencv ビデオで顔認識(コンパイルなし!) - KOKENSHAの技術ブログも参考。

$ sudo apt-get install libopencv-dev

続いて,次のページに書いてあるとおりに実行。
www.visionproc.org

 ASTROの導入

 VPFでも解像度が小さいうちはいいが,大きいとRpiの画面(実際にはVNC viewer内)に入りきらず不便なので,Gain(感度;実際にはアナログゲインとデジタルゲイン),Coarse Integration Time(露出時間)を指定できるように変更したプログラムを利用する。Vision Processing Community:Downloadからastro_20171201.zipをダウンロードし,「~/libssp/1.31/astro」に展開。

ここまで来れば,例えば,次のコードで,3200X2400pxのJPGとRAWファイルが出力される(アナログゲイン:200,デジタルゲイン:300,露出時間:600)。

$ cd ~/libssp/1.31/sample/

$ ./still.sh output 200 300 600

これをPCへ移行させればよいのだが,RAWViwer1.3.exeではRAWファイルを読めなかった。RawTherapeeでは読める。ただし,このソフトでは最初の画素がBから始まることを仮定しており,チャネルミキサでRとBを入れ替える。

RPi-Cam-Web-Interface

※ しばらく前に書いた記事。最近の環境では不明だがとりあえずUPしておく。

Raspberry piのカメラを動かすための方法は以前に書いた(Pi NoIR Camera V2をひとまず使えるようにする - input-R)が,ここではraspberry piに特化したRPi Cam Web Interface を使う。

http://elinux.org/RPi-Cam-Web-Interface

参考にしたサイト

raspberry pi zero W にRPi-Cam-Web-Interfaceで監視カメラ製作 | 興味本位の Trial 安堵 Error

NoIR V2 - Video Streaming Baby Monitor | element14 | Raspberry Pi Projects

Raspberry With Cam in Birdhouse: 11 Steps (with Pictures)

インストール

RPi-Cam-Web-Interface - eLinux.orgに書かれている。

とりあえず使ってみる 

[record video start/stop] 現在のカメラ画像の動画録画をスタート・ストップ

[record image] 現在のカメラ画像の静止画をキャプチャー

[tamelapse start/stop] 現在のタイプラプス撮影をスタート・ストップ
 撮影間隔はCamera Settings-Timelapse-Intervalで秒単位(0-3200s)で設定可能。

[motion detection start/stop] 動体検知録画をスタート・ストップ
 動体検知を行うにはCamera Settingsで Motion detect modeをInternalにする。なお,このボタンを押して動体検知を始めるには,Schedule SettingsでDayModeをAllDaysとし,Motion Startにca 1,Motion Stopにca 0が入力されていることを確認しておく。

[Download Videos and Images] 保存されている動画・静止画をダウンロード
 撮影した画像は/var/www/html/mediaに保存されている。

各種の設定

Schedule Settings

指定した時間にコマンドを実行するための設定ができる。デフォルトは, 24時間休みなく動体検知したときに動画を記録する設定になっており,トップ画面のmotion detection startボタンをクリックすると動体検知録画が始まる。起動と同時に動体検知する場合には,Period Startにmd 1を書き込む。

次の欄にコマンドを入力して,スケジュールを設定する。DayModeはAllDay,Fixed Times,Sunbasedから選べる。

Motion Start:モーショントリガの開始が受信されたときに行う動作
Motion Stop:モーショントリガが停止したときに行う動作
Period Start:ある時間が来たときに行う動作

実行できるコマンドはCommand referenceのボタンを押すと説明がでてくる。例えば,md(動作検知),ca(動画録画),im(静止画キャプチャー),tl(タイプラプス撮影),それぞれ1でスタート,0でストップ。

例えば,18時に動画録画をスタートして1時間後にストップ,それ以降は動作検知して,動作があれば録画をしたければ,次の通りにする。

18:00 Period Start: ca 1

19:00 Motion Start: ca 1, Motion Stop: ca 0, Period Start md 1

録画したファイルがSDカード容量を超えるのを防ぐために,ファイル削除も可能。PurgeVideo_Hours, PurgeLapse_Hours, PurgeImage_Hours:それぞれ動画,タイプラプス画像,静止画が指定時間以上古いファイルを消去する

PurgeSpace_ModeEx:Min Space(%:使用可能ファイル容量の最小値), Max Usage(% :使用済ファイル容量の最大値),Min Space(GB:使用可能ファイル容量の最小値),Max Usage(GB:使用済ファイル容量の最大値)のいずれかで設定。

なお,これらのコマンドはManagement_Intervalで設定された間隔ごとに実行される(標準は3600秒=1時間)。

Camera Settings

いじりそうなものだけをピックアップ。

[Resolution] 解像度の設定。

[Buffer] 動体検知してから動画録画を行うまでにタイムラグがあるので,画像のバッファリングを行っておく(でないと,動作検知後の場面しか写らない)。

[MP4 Boxing mode] h.264をmp4に変換するかどうか。長時間録画の場合,これをoffにしないと,Rpiがoffになることがある。offにすると,そのままでは見られないので,VLC media playerなどで見ることになる。

 [Motion detect mode] 動体検知モード

Motion Settings

保存先の変更

Raspberry Piに使っているmicroSDカードの容量が小さいため,外付HDDに保存先を変える。ただし,HDDを接続していないときにはSDカードに保存させたい。

保存先フォルダの変更

まず,保存先のフォルダを ../mediaから../media/rpicamに変更する(保存がHDD直下で良ければ,無視してよい)。

保存先のフォルダを作る

 sudo mkdir /var/www/html/media/rpicam

フォルダの所有者を変更する

 sudo chown -R www-data:www-data /var/www/html/media/rpicam

保存先を変える

 sudo leafpad /etc/raspimjpeg

 image_path, lapse_path, video_pathの記述を変える

再起動後には,ここまでで保存先フォルダが変更されているはず。

外付HDDをマウント

次に,/var/www/html/mediaにマウント先を変更。一回限りで良ければ,管理者権限でアンマウントしてから,マウントしたいフォルダにマウントすればよい。

起動時に自動マウントするなら,/etc/fstabを管理者権限で開き,次の行を追加して保存。再起動するとOK。

UUID="XXX" /var/www/html/media      ntfs-3g defaults,nofail 0      0

マウントの詳細な手順は次のサイトを参考に。

白執事の徒然なる日々 Raspberry Pi にUSBメモリをマウント

Raspberry Pi 2でファイルサーバを作るまでのまとめ - Qiita

(余談1)マウント先は重複できるみたい。どう使うかはよく考えてないが。

unshare -m とか mount --make-shared とか - Qiita

(余談2)HDDへの供給電流にも注意

Raspberry Piに3TBのUSB HDD(HD-AC30TK)を追加してみた | あっかぎのページ

Pi NoIR Camera V2のケーブルを長くする

Raspberry Piのカメラ用ケーブルを長くする必要があったので,次の商品を購入 

 で,次のサイトに載っている方法でケーブルを差し替える。要は黒い部分を引けば,ケーブルを引き抜ける。本体側も同様に引き抜ける(ただし,一旦ケースから外さないといけない)。

www.modmypi.com

 

決まった時間にLEDの明るさを変える:Arduinoを使う

input-r.hatenablog.jp

以前,こんなページを書いたが,これを実行中にRaspberry Piがお亡くなりになるという不幸があったので,別の方法を考えてみる。

PWM調光はArduinoで対応することにして,Raspberry Piからシリアル通信で明るさを変えるようにする。

Arduinoで明るさを変える

analogWrite()で変えられる。UnoのようにATmega328Pを搭載しているArduinoボードでは,デジタルピン3,5,6,9,10,11で使える。5,6番ポートは約980Hzで,残りは約490Hzで出力する。

Arduino 日本語リファレンス

Raspberry PiからArduino経由でLEDの明るさを変える

参考にしたのは次のサイト。

karaage.hatenadiary.jp

まず,Arduinoのプログラム。

#define LED_PIN (3)
byte val;
void setup(){
  // Serial Setting
  Serial.begin(9600);
  // Port Setting
  pinMode(LED_PIN, OUTPUT);
  analogWrite(LED_PIN, 0);
}
void loop(){
  if(Serial.available() > 0){
    val=Serial.read();
    Serial.write(val);
    if(val == 'A'){
      analogWrite(LED_PIN, 255);
    }
    if(val == 'B'){
      analogWrite(LED_PIN, 0);
    }
  }
}
Raspberry Piは上記サイトの設定,プログラムをそのまま利用。

決まった時間にLEDの明るさを変える

cronを利用する。
crontab -eで設定ファイルを開き,下の内容を入力。ctrl+X→Y→Enterで上書き保存して終了。
#毎日18時に,上記のRaspberry Piのプログラムを実行する。
00 18 * * * python /home/hoge/script1.py
以上で,18時にLEDの明るさを変えられる(はず)。