Ham Radio


Windows PC

Raspberry Pi


 Raspberry Pi 3 Model B+ を購入
2018年6月3日
 3月14日にイギリスで発売となった Raspberry Pi 3 Model B+ の総務省技術適合証明手続きが5月17日に完了し、国内でも内蔵のWiFiが使えるようになったようなので早速購入してみることにしました。ネットで安いところを探してみましたが、国内では4,980円+送料とまだ少し高いようです。イギリスのネットショップを検索してみると26.67ポンド(現在のレートで約3,900円)とかなり安い。送料5.5ポンド(804円)を足しても合計32.17ポンド(約4,700円)なのでこのショップ(Primoroni  LTD)で買うことにしました。ただし、PayPalで支払ったら4%の為替手数料をとられて合計4,913円になってしまいました。到着まで5〜10日かかるとのことです。

2018年6月11日
 6月4日に発送の連絡メールがあり、6月11日に届きました。1週間で届いたことになります。低額商品なので関税等はかかっていませんでした。






 Raspberry Pi の初期設定
2018年6月12日
 Raspberry Pi 3 Model B+ に Raspbian をインストールする手順を残しておきます。(追記:Raspberry Pi 1 〜 4 も同じ手順)


 Windows10 パソコンを使って Raspbian を「Download Raspbian for Raspberry Pi」からダウンロードします。次に、ダウンロードした ZIP ファイルを 7-Zip 等の解凍ソフトを利用して展開します。展開すると .img ファイルが現れるので、これをDDforWindows 等でSDカードに書き込みます。これで Raspbian の準備ができました。Raspberry Pi にモニタとキーボード、マウスを接続しSDカードを挿入します。電源は5V2.5Aを推奨しているようですが、電源容量1Aのものでも問題ないようです。電流計を挿入して消費電流を測ってみましたが0.35A程度しか流れていません。電源を入れるとGUIで立ち上がり自動ログインします。起動時間がRaspberry Pi 3Bに比べて早くなった印象です。

 まず、「Raspberry Pi 」の設定をします。画面左上の Raspberry Pi アイコンから設定メニューを選び、ロケールの設定、タイムゾーンの設定、キーボードの設定、無線LANの国設定を行い再起動します。これでGUIが日本語表示になり無線LANも使えるようになりました。無線LANは右上のLANアイコンをクリックして受信できている WiFi アクセスポイントを選択しパスワードを入力します。5GHzの WiFiも利用できます。

 さらに、Raspberry Pi の設定メニューからインターフェースを選択し SSH を有効にします。その他利用したいインターフェースがあればこれも有効にします。次にシステムを選択しユーザー(pi)のパスワードの変更やホスト名の変更を行い、ブートをCUI に変更します。再起動すると SSH でのリモートログインが可能となります。リモートログインで利用する前にIPアドレスを固定にしておきます。

#vi /etc/dhcpcd.conf

   interface wlan0

   static ip_address=192.168.xx.xx/24  : 割り振るIPアドレス

   static routers=192.168.xx.xx    : ルーターのIPアドレス

   static domain_name_servers=192.168.xx.xx  : DNSサーバがあればこれのIPアドレス

 以上で無線LANを使用して Raspberry Pi をリモートログイン利用するための準備は完了です。


root パスワードの変更とユーザーの追加をします。

rootパスワードの変更

#passwd root

ユーザーの追加

#useradd -m XXXX

#passwd XXXX

追加ユーザーの所属グループを pi の所属グループと同じにします。(追記:2022年以降のRaspberry Pi OSにはデフォルトでユーザー:pi は設定されていません。)

#groups pi

   pi : pi adm diaout cdrom sudo audio video plugdev games users input netdev spi i2c gpio

#usermod -G adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,input,netdev,spi,i2c,gpio <ユーザー名>


Raspberry Pi のファームウェアとOSカーネルのバージョンアップをします。(必要な場合のみ、通常は不要)

#rpi-update

#reboot


パッケージ情報のアップデートとパッケージのアップグレードをします。

#apt update

#apt upgrade


不要なファイルを削除します。

#apt autoremove -y

#apt autoclean

#reboot


以上で Raspberry Pi 3 Model B+ の初期設定は完了です。



 Raspberry Pi に各種パッケージをインストール(nmap ftp ftpd apache2 php)
2018年6月13日
既にインストールされているパッケージの確認

#dpkg -l


===> nmapのインストール : ポート確認ツール

#apt-get install nmap

#nmap localhost


===> ftp、ftpdのインストール : FTPサーバ

#apt-get install ftp ftpd

ffftpなどの FTPクライアントで接続確認します。


===> apache2、php7.0のインストール : ウェブサーバ

#apt-get install apache2 php

ウェブブラウザで http://192.168.xx.xx/ を開いてみます。apache2の Default Page が表示されればOKです。

デフォルトのドキュメントルートは /var/www/html となっています。


php のテスト用スクリプトファイルを作成します。

#vi /var/www/html/info.php

   <?php  phpinfo();  ?>

ウェブブラウザで http://192.168.xx.xx/info.php を開きます。「PHP Version 7.0.27- ・・・・」の画面が表示されればOKです。


(2019/8/27追記) PHPの最新バージョンは、PHP7.3です。

(2022/11/17追記)PHPの最新バージョンは、PHP7.4です。


次にapache2のベーシック認証が利用できるように設定をします。

 ・ベーシック認証の対象ディレクトリー:/var/www/html/htdocs

 ・パスワードファイル:/etc/apache2/.htpasswd

 ・設定ファイル:/etc/apache2/conf-available/basic-auth.conf


ベーシック認証対象ディレクトリーの作成

#mkdir /var/www/html/htdocs


テスト用のHTMLファイルを /var/www/html/htdocs へコピー

#cp /var/www/html/index.html /var/www/html/htdocs/index.html


.htpasswdの作成

#htpasswd -m -c /etc/apache2/.htpasswd xxxx


続けてログインIDを作成する場合は以下のとおり。

#htpasswd -m /etc/apache2/.htpasswd xxxx


ベーシック認証用設定ファイルの作成

#vi /etc/apache2/conf-available/basic-auth.conf

   <Directory /var/www/html/htdocs>

         AllowOverride None

         AuthType Basic

         AuthName Documents

         AuthBasicProvider file

         AuthUserFile /etc/apache2/.htpasswd

         Require valid-user

   </Directory>


ベーシック認証用ファイル basic-auth.conf の有効化

#a2enconf basic-auth


apache2のリロード

#service apache2 reload  または、#systemctl reload apache2


(2022/11/17追記)ベーシック認証用設定ファイルの場所とファイル名が変更になってました。


ベーシック認証用設定ファイルの作成

#vi /etc/apache2/apache2.conf  (または #vi /etc/apache2/sites-available/000-default.conf  でもよい)

<DIrectory /var/www/html/htdocs>

             AuthUserFIle /etc/apache2/.htpasswd

             AuthName "basic"

             AuthType Basic

             Require varid-user

</Directory>


apache2の再起動


#service apache2 reload


ウェブブラウザで http://192.168.xx.xx/htdocs/ を開いてみます。ベーシック認証のポップアップ画面が出て、設定したIDとパスワードで認証でき apache2の Default Page が表示されればOKです。


続いて、CGIスクリプトが利用できるようにします。CGIスクリプトを置くディレクトリィーは/usr/lib/cgi-bin

000-default.confの編集

#vi /etc/apache2/sites-available/000-default.conf

   <Directory "/usr/lib/cgi-bin">  (DocumentRoot /var/www/html の下あたりに追加)

        Options +Indexes +FollowSymLinks +MultiViews +ExecCGI

        AllowOverride All

        Require all granted

   </Directory>

    ・・・・・・・・・・・・・・・・・・・・・

   Include conf-available/serve-cgi-bin.conf (アンコメント)


シンボリックリンクの作成

#ln -s /etc/apache2/mods-available/cgi.load /etc/apache2/mods-enabled/cgi.load


mime.confの編集

#vi /etc/apache2/mods-available/mime.conf

   AddHandler cgi-script .cgi (アンコメント)


apache2の再起動

#service apache2 restart


ディレクトリィー /usr/lib/cgi-bin/ にテスト用perlスクリプト(serverck.txt)をダウンロードして動作確認をします。

#cd /usr/lib/cgi-bin

#wget http://www.tonaru.net/download/serverck.txt


ダウンロードした serverck.txt ファイルの拡張子を txt → cgi に変更

#cp serverck.txt serverck.cgi

#rm serverck.txt

serverck.cgi ファイルの属性変更

#chmod 655 serverck.cgi


ウェブブラウザで http://192.168.xx.xx/cgi-bin/serverck.cgi を開いてみます。表示されればOKです。



 Raspberry Pi に各種パッケージをインストール(postfix dovecot)
2018年6月14日
===>  postfix、dovecotのインストール : メールサーバ

#apt-get install postfix


SASL認証用にsasl2-binをインストール

#apt-get install sasl2-bin


OP25B対策のため自宅で利用しているプロバイダー(eo光)のメールサーバでメールリレーさせます。

(追記)2023/12  eoメールのセキュリティ強化実施により、独自のメールアドレスでのメールリレーがブロックされました。gmailメールリレーなどに変更が必要です。

saslの認証ファイルを作成

#vi /etc/postfix/sasl_passwd

   [smtpauth.eonet.ne.jp]:587 xxx@xxx.eonet.ne.jp:<passward>

作成した認証ファイルをpostfixに反映

#postmap /etc/postfix/sasl_passwd


postfixのリロード

#/etc/init.d/postfix reload


次にpostfixのmain.cfを変更

#vi /etc/postfix/main.cf

   myhostname = xxx.xxx (変更)

   mydestination = $myhostname, xxx.xxx,  raspi3p, localhost.localdomain, localhost (変更)

   relayhost = [smtpauth.eonet.ne.jp]:587 (変更)

   mynetworks = 192.168.xxx.0/24, 127.0.0.1 (変更)

   mailbox_size_limit = 0

   recipient_delimiter = +

   inet_interfaces = all

   inet_protocols = ipv4 (変更)

   home_mailbox = Maildir/ (追加)

   smtp_sasl_auth_enable = yes (追加)

   smtp_sasl_mechanism_filter = plain, login, cram-md5 (追加)

   smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd (追加)

   smtp_sasl_security_options = noanonymous (追加)


postfixの再起動

#service postfix restart


さらにpopサーバとしてdovecotをインストール

#apt-get install dovecot-pop3d

dovecot.confの編集

#vi /etc/dovecot/dovecot.conf

   listen = * (変更)

   disable_plaintext_auth = no  (追加)


10-mail.confの編集

#vi /etc/dovecot/conf.d/10-mail.conf

   mail_location = maildir:~/Maildir (変更)


dovecotの再起動

#service dovecot restart


以上でメールサーバのインストールが完了しました。メーラーでメールの送受信テストをして動作確認をします。


メールエイリアスの設定

root宛のメールをユーザーに転送できるようメールエイリアスを設定しておきます。

#vi  /etc/aliases

  root:    user1 (追記)

#newaliases



 Raspberry Pi に各種パッケージをインストール(samba)
2018年6月15日
===>  sambaのインストール : ファイルサーバ

#apt-get install samba

ファイルを置くディレクトリーの作成

#mkdir /home/samba

#chmod 777 /home/samba


smb.confファイルの編集

#vi /etc/samba/smb.conf

以下を修正または追加

   workgroup = HOME  (変更)

   interfaces = 127.0.0.1 192.168.xx.0/24 (変更)

   bind interfaces only = yes (アンコメント)

   [public] (これより下追加)

   comment = public

   path = /home/samba

   public = yes

    browsable = yes

   writable = yes

   guest ok = yes

   guest only = yes


sambaの再起動

#service smbd restart


Windows PC等でファイルサーバへのアクセスとファイルの読み書きができるか確認をします。

Windowsエクスプローラーで \\<hostname> を入力するとファイルサーバーが表示されます。


Windows10のアップデートで機能更新プログラムをインストールした後、sambaサーバへのアクセスができず、「エラーコード0x80070035ネットワークパスが見つかりません」と表示されることがよくあります。この場合、一旦ネットワークを切断して再接続するか、ネットワークリセット([Windowsの設定]→[ネットワークとインターネット]→[ネットワークのリセット])を行うとsambaサーバへのアクセスが可能となります。




 Raspberry Pi に各種パッケージをインストール(unbound)
2018年6月16日
===>  unboundのインストール : DNSサーバ

#apt-get install unbound

unbound.confファイルの新規作成

#vi /etc/unbound/unbound.conf.d/unbound.conf

   server:

       interface: 0.0.0.0

       access-control: 127.0.0.1 allow

       access-control: 192.168.xx.0/24 allow

       local-data: "raspi3.xxxxxx.net IN A 192.168.xx.xx"

        ・・・・・・・・・・・・

       local-data: "xx.xx.168.192. in-addr.arpa PTR raspi3.xxxxxx.net"

        ・・・・・・・・・・・・

   forward-zone:

       name: "."

       forward-addr: 8.8.8.8

       forward-addr: 8.8.4.4


unboundの再起動

#service unbound restart


hostまたはnslookupコマンドで動作確認をします。

正引きのテスト

#host raspi3.xxxxxx.net

逆引きのテスト

#host 192.168.xx.xx


名前解決ができていれば完了です。




 Raspberry Pi に各種パッケージをインストール(logwatch)
2018年6月16日
===>  logwatchのインストール : サーバのログレポート

#apt-get install logwatch

configファイルの作成

デフォルトのlogwatch.conf が /usr/share/logwatch/default.conf にあるので /etc/logwatch/conf へコピーします。

#cp /usr/share/logwatch/defoult.conf/logwatch.conf /etc/logwatch/conf/logwatch.conf


logwatch.confの編集

#vi /etc/logwatch/conf/logwatch.conf

   MailTo = xxxx (メールの宛先、ユーザー名、root等)

   Detail = Med (情報の詳細レベル、Low/Med/Highを好みで)


logwatchの標準出力テスト

#logwatch --output stdout

/var/cache/logwatch のディレクトリーがないと次のエラーメッセージが出ます。

  /var/cache/logwatch No such file or directory at /usr/sbin/logwatch line 643.

ディレクトリーを作成します。

#mkdir /var/cache/logwatch


再度、テストします。

#logwatch --output stdout


何も表示されません。


デフォルトの設定では昨日のログを表示しますが、昨日のログが無いようなので今日のログを表示してみます。

#logwatch -range today

レポートが出力されればOK


次に、レポートのメール送信テストを行います。

#logwatch --output mail

レポートが設定したメール送信先へ届けばOK


cronにlogwatchの起動設定がされているので、毎朝06:25にレポートがメール送信されます。




 Raspberry Pi に各種パッケージをインストール(mrtg)
2018年6月16日
===>  mrtgのインストール : サーバの監視ツール(CPU温度)

#apt-get install mrtg

mrtgを出力するディレクトリィの作成

#mkdir /var/www/html/mrtg


mrtg.cfg の編集

#vi /etc/mrtg.cfg

   WorkDir: /var/www/html/mrtg (変更)

   # CPU temperature (以下追加)

   Target[cputemp]: `cat /sys/class/thermal/thermal_zone0/temp|cut -c1-2 && cat /sys/class/   thermal/thermal_zone0/temp|cut -c1-2 && echo && uname -n`

   MaxBytes[cputemp]: 70

   Title[cputemp]: CPU Temperature Log

   PageTop[cputemp]: CPU Temperature Log

   Options[cputemp]: gauge,growright,absolute,noinfo,nopercent,unknaszero,integer

   Unscaled[cputemp]: dwmy

   YLegend[cputemp]: Temperature

   ShortLegend[cputemp]: deg-C

   LegendI[cputemp]: CPU Temp

   LegendO[cputemp]: CPU Temp

   Legend1[cputemp]: CPU Temp

   Legend2[cputemp]: CPU Temp


mrtg の起動

#env LANG=C mrtg /etc/mrtg.cfg

警告が出なくなるまで2回起動する。


ウェブブラウザで http://192.168.xx.xx/mrtg/cputemp.html を開いて動作確認をします。




 Raspberry Pi に各種パッケージをインストール(webalizer)
2018年6月18日
(追記)webalizerは既に廃止になっています。

===>  webalizerのインストール : アクセスログ解析ツール

#apt-get install webalizer

webalizerを出力するディレクトリィの作成

#mkdir /var/www/html/webalizer


webalizer.conf の編集

#vi /etc/webalizer/webalizer.conf

   OutputDir /var/www/html/webalizer (変更)

   Incremental yes (変更)

   HostName www.tonaru.net (必要あれば変更)

   DNSCache dns_chache.db (アンコメント)

   DNSChildren 5 (アンコメント)

   HTMLHead <META HTTP-EQUIV="content-Type" CONTENT="text/html;charset=UTF-8">

   (追加)

   SearchEngine .yahoo.  p= (変更)

   SearchEngine bing.co  q= (追加)


DNSキャッシュの作成

#webazolver


ログファイルの解析実施

#webalizer -c /etc/webalizer/webalizer.conf /var/log/apache2/access.log.4.gz

#webalizer -c /etc/webalizer/webalizer.conf /var/log/apache2/access.log.3.gz

#webalizer -c /etc/webalizer/webalizer.conf /var/log/apache2/access.log.2.gz

#webalizer -c /etc/webalizer/webalizer.conf /var/log/apache2/access.log.1

#webalizer -c /etc/webalizer/webalizer.conf /var/log/apache2/access.log


ウェブブラウザで http://192.168.xx.xx/webalizer/ を開いて動作確認をします。




 Raspberry Pi 3 Model B+ をSSDで起動
2018年6月18日
 Raspberry Pi をサーバとして長期間連続使用する上で、microSDによる運用は信頼度面で不安があります。このため、メインディスクをSSDに変更することにしました。


最初に、ファイルシステムをSSDに切り替える前にSSDのトラブル等に備えmicroSDでの起動に必要な cmdline.txtファイルを他のPCなどを利用してバックアップ・コピーしておきます。次に、microSDをRaspberry Piに戻して Raspbianを起動し、SSDをSTA-USB変換アダプターを介して接続します。


SSDのID確認

#fdisk -l

   「/dev/sda1」などと表示されます、


SSDのフォーマット

#fdisk /dev/sda

/dev/sda1にLinux(83)を設定

#mke2fs -j /dev/sda1

#e2fsck /dev/sda1


SSDをアンマウント

#umount /dev/sda1


ファイルシステムのコピー

#mkdir /tmp/usd /tmp/ssd

#mount /dev/mmcblk0p2 /tmp/usd

#mount /dev/sda1 /tmp/ssd

#(cd /tmp/usd;tar --backup -c *)|tar -C /tmp/ssd -xv


起動時のファイルシステムのパーテション変更

#mkdir /tmp/boot

#mount /dev/mmcblk0p1 /tmp/boot


cmdline.txt の編集

#vi /tmp/boot/cmdline.txt

   root=PARTUUID=9c21e37e-02 を root=/dev/sda1 に変更

       ( PARTUUID=9c21e37e-02)などマシンによって異なる


メモリー内データを同期して再起動

#sync

#reboot


これでSSD起動します。念のためディスクの空き容量を確認しておきます。

#df


 なお、SSDのトラブルなどで Raspberry Pi が起動しなくなった場合、保存しておいた cmdline.txtファイルを他のPCでmicroSDへ上書きするか、エディタで元の内容に書き戻せばmicroSDにて起動することができます。




 動画ストリーミング MJPG-Streamer
2019年8月28日
 動画ストリーミングソフト MJPG-Streamerをインストールしてみました。


USBカメラは手持ちのロジクールのC270を使用します。まず、MJPG-Streamerに必要なパッケージをインストールします。

#apt-get install subversion libjpeg-dev imagemagick


MJPG-Streamerのソースコードを取得します。

#cd home/pi

#svn co https://svn.code.sf.net/p/mjpg-streamer/code/mjpg-streamer mjpg-streamer

#cd mjpg-streamer


ソースコードをgccでコンパイルします。

#make

次のエラーメッセージが出てコンパイルに失敗しました。

  make: *** [<ビルトイン>: utils.o] エラー 1


Raspverry Pi のOSは、Raspbianの最新OS Busterです。試しに、古いOS Raspbian Stretchをインストールしている別のRaspberry Piでは問題なくコンパイルできました。


原因調査に時間がかかりそうなので、Raspberian Stretch OSを使用しているマシンの/hone/pi/mjpg-streamer配下ににあるすべてのファイルをBusterのマシンに丸ごとコピーしたら問題なくMJPG-Streamerが動作したのでこれを利用することにしました。


コンパイル済のファイルをFTP等で転送しMJPG-Streamerをインストールします。

#cd /home/pi/mjpg-streamer

#make install


 (追記)その後、よく調べてみたらコンパイル時に utils.o ファイルが見つからないようです。


Raspberian Stretch OS マシンの /home/pi/mjpg-streamer 配下に utils.o ファイルがあったので、それをコピーして持ってきたらコンパイルが正常に終了しました。


MJPG-Streamerの起動スクリプトを作成します。

#vi start-mjpg.sh

#!/bin/sh

PORT="8080"

SIZE="960x720"

FRAMERATE="15"

export LD_LIBRARY_PATH=/usr/local/lib

/home/pi/mjpg-streamer/mjpg_streamer -i "input_uvc.so -f $FRAMERATE -r $SIZE -d /dev/video0 -y -n" -o "output_http.so -w /usr/local/www -p $PORT" -b


MJPG-Streamerを起動します。

#sh start-mjpg.sh


ウェブブラウザでhttp://アドレス:8080/で表示されればOKです。


Respberry Piを起動したときに自動でMJPG-Streamerを立ち上げるには、/etc/rc.localに以下の記述を追加します。

#vi /etc/rc.local

  sh /home/pi/mjpg-streamer/start-mjpg.sh


MJPG-Streamerのスナップショット(静止画)をウェブ上に残すために、以下のスクリプトを作成します。

# vi /home/pi/snapshot.sh

  #!/bin/bash

  FILENAME=`date +%Y%m%d%H%M`

   wget -O /var/www/html/webcam/$FILENAME.jpg http://192.168.0.**:8080/?action=snapshot


#mkdir /var/www/html/webcam


crontabに登録

#crontab -e

   MAILTO=""


  1-59/5 * * * * sh /home/pi/snapshot.sh


以上で5分毎のスナップショットが記録されます。




 監視カメラのパン・チルトをサーボモーターで制御する雲台の製作
2019年9月1日
 MJPG-Streamerで動画ストリーミングを行っていますが、カメラの向きが固定で使い勝手が悪いため、安価なサーボモーターを利用してパン・チルトを遠隔で制御できる電動雲台を製作してみました。

 ネットで検索してみると、サーボモーター:SG90、SG90用雲台:A838、サーボモーターコントローラー:PCA9685を利用した電動雲台の記事がたくさん出てきます。これらの機材をAmazonで調達し組み立ててみました。プログラムはネットからダウンロードしました。最初、木材を加工した箱の中にコントローラーを納めて箱の上に雲台とUSBカメラを設置しましたが、サーボーモーターを動かしたとき、雲台を設置した箱がひっくり返ってしまうので鉄のアングルを組み合わせて重たくしました。

 Raspberry PiからサーボコントロールのためのI2C信号線を引き出しているので、気圧、温度、湿度計測用のセンサーAE-BME280も箱の上に取り付けました。








 Raspberry Pi 起動不能 Karnel Panic
2019年10月17日
 監視カメラに使用していたRaspberry Pi のアップデートをしていたところ、パッケージの更新中にエラーが出て     アップグレードに失敗しました。そこで、Raspberry Pi をリブートしたところ起動できなくなりました。起動の途中   にKarnel Panickのエラーが出て先へ進みません。一部のファイルがクラッシュしたようです。

SDカードを他のLinuxマシン(Debian)にUSBカードリーダーを介して接続し、fsckを実行してファイルシステム の修復を試みてみました。


SDカードがどのデバイスとして認識されているか調べます。

#ls /dev

USBカードリーダーを抜き差ししてデバイス名を比較すると、sdg1とsdg2が認識されました。


fsckを実行します。

#fsck -af /dev/sdg1

#fsck -af /dev/sdg2


エラー修正があれば実行するか否かyes,noを聞いてくるので、ひたすらYキーを押し続けます。


sdg2にエラー修正が大量にありました。しかし、SDカードをRaspberry Pi に戻し、起動してみたら Karnel Panic のエラーが再度出て起動できません  でした。お手上げです。OSを再インストールすることにします。




 Motion動体検知監視カメラ
2020年6月20日
 動体検知で撮影した映像を保存できるMotionを入れてみました。

USBカメラはUVCタイプのものを使用します。


必要なパッケージをインストールします。

#apt-get install motion


映像を保存するための任意のディレクトリーを作成。保存ファイルをウェブからダウンロードできるようにします。

#mkdir /var/www/html/motion/log


motionの設定ファイルmotion.confを編集します。

#vi /etc/motion/motion.conf

以下の項目を変更します。

   daemon on

   width 960

   height 720

   framerate 30

   threshold 3000

   event_gap 10

   target_dir /var/www/html/motion/log

   stream_localhost off

   webcontrol_localhost off


自動起動の設定

#vi /etc/default/motion

   start_motion_daemon=yes


Raspberry Pi起動時にmortion起動させます。

#vi /etc/rc.local

   motion & を一行追加


#motion & にて起動テストします。

http://<Raspberry PiのIPアドレス>:8081/ を閲覧して表示できればOKです。


長時間運用すると録画された映像ファイルが大きくなるので定期的に削除するcronを設定します。

ファイルを削除するスクリプトを作成します。

#vi /home/pi/delete_motionfile.sh

   #!/bin/bash

   find /var/www/html/motion/log -name "*.mkv" -mtime +1 -delete

   exit 0

   (注) 「+1」は1日変更がないファイルを削除。半日の場合は「+0.5」とします。


ファイルの属性を変更します。

#chmod 755 /home/pi/delete_motionfile.sh


crontab に登録します。

#crontab -e

   0 0 * * * sh /home/pi/delete_motionfile.sh




 Raspberry Pi 4 8GB に64bit版OSを入れてみる
2020年6月21日
 Raspberry Pi 4B 8GB が手に入ったので、Raspberry Pi OS の64bit版をインストールしてみました。現時点ではbetaテスト版です。


イメージファイルは、https://downloads.raspberrypi.org/raspios_arm64/images/よりダウンロードします。

現時点での最新ファイルは、 2020-05-27-raspios-buster-arm64.zip です。

ファイルをダウンロードして解凍し、マイクロSDにイメージをコピーすればOKです。


SDカードをRaspberry Pi にセットし電源を入れたら問題なく起動しました。


32bit版の推奨ソフトが入ったものよりパッケージソフトがだいぶ少ないみたいで、日本語入力もできません。

#apt-get install fcitx-mozc  を実行し日本語入力が可能になりました。


bata版のためか動作が不安定で、WiFiが時々つながらなくなりrebootしなければならないこともことも時々あります。レスポンス感は32bit版と変わらないようです。使い倒すには正式版がリリースされるまで待った方がよさそうです。


(追記)

Raspverry Pi 4をUSBからbootするには以下の確認と設定をします。

bootloaderのバージョン確認

#vcgencmd bootloader_version

bootloaderのアップデート

#rpi-eeprom-update -a

#reboot

bootの優先順位確認、設定

#raspi-config

「Advanst Options」 → 「Boot Order」 → 「USB Boot」を選択




 Raspberry Pi 4 8GB に Ubuntu20.10を入れてみる
2020年11月16日
 Raspberry Pi4 8GB 向けに Ubuntu20.10 64bit Desktop OS がリリースされたのでインストールしてみました。


 Raspberry Pi Imager を利用してSDカードにイメージファイルをコピーするだけで準備完了です。SDカードをRaspberry Piにセットし電源を入れるだけで問題なく起動しました。初期設定もRaspberry Pi OSよりもわかりやすいように感じました。

 さすがに完成度が高いOSで、使い勝手が非常に良いように思います。SDカードでも結構サクサクと動作しデスクトップパソコンとして十分利用できます。ただ、Buluetoothの動作が不安定で接続して直ぐに切断されます。使用したBluetooth機器はエレコムのワイヤレスキーボードです。いろいろ調査した結果、「bluetooth.service」を手動で再起動すると接続できることがわかりました。

#systemctl restart bluetooth.service


 そこでOS起動時にこのコマンドを自動実行させることにしました。rc.localに書こうと思ったら、/etc/rc.localがありません。どうやら最近のubuntuにはrc.localがないようですが、ファイルを作成すれば利用できるようなので、新たにファイルを作成し目的のコマンドを記述しました。

#touch /etc/rc.local

#chmod 744 /etc/rc.local

#vi /etc/rc.local

  #!/bin/sh

   systemctl restart bluetooth.service


さらに、bluetoothが切断されても自動的に再接続させるように「bluetoothctl」で接続したい機器の信頼設定をしました。

#bluetoothctl

  >devices

  >trust xx:xx:xx:xx:xx:xx:xx:xx

#exit

#reboot


次にUSB接続のSSDで動作させてみることにしました。

Raspberry PiにSSDを接続しパーティションを作成します。

#lsblk

SSDが認識されているデバイスを確認 → /dev/sda1

#fdisk /dev/sda

/dev/mmcblk0p2にUbuntuが入っているのでこれをまるごとSSDにコピーします。

#dd if=/dev/mmcblk0p2 of=/dev/sda1 bs=16M conv=noerror,sync


SSDのパーティションラベルを変更します。

現在のパーティションラベルを確認

#e2label /dev/sda1

パーティションラベルをUbutuに変更

#e2label /dev/sda1 Ubuntu


カーネルコマンドラインのブートパーティションを変更する。

#vi /boot/firmware/cmdline.txt

  root=LABEL=writable を root=LABEL=Ubuntu に変更

再起動します。

#reboot


かなり速くなりました。


micrSDカードなしでUSB接続SSDを起動する方法も試してみました。

Raspberry Pi 4 のboot EEPROMが2020-09-03以降のものであればUSBから起動できるようなので、EEPROMのバージョンを確認します。

Raspberry Pi 4をSDカードからRaspberry OSで起動します。

#vcgencmd bootloader_version

2020-09-03以前であればEEPROMを更新します。

#apt update

#apt full-upgrede

#reboot


EEPROMに書かれているboot orderを確認して、ブート順序を確認します。

#vcgencmd bootloader_config

BOOT_ORDER=0xf41 となっていればUSBで起動され起動できなければSDで起動されます。


UbuntuはWindous PCでRaspberry Pi Imagerを利用してSSDにイメージファイルをコピーします。Raspberry Pi 4のUSBに接続するだけで問題なくubuntu20.10が起動できました。




 Raspberry Pi(64bit) に JTDX をインストール
2022年3月10日
 Raspverry Pi OSの64ビット版が先般正式リリースされたので早速Raspverry Pi 4にインストールしてみました。RaspverryPi  Imagerを利用してSSDにOSイメージをコピーするだけなのでインストールはいたって簡単です。Raspberry Pi 4のUSBコネクタにOSイメージをコピーしたSSDを接続し電源ONで直ぐに起動しました。

 以前からRaspberry PiにJTDXをインストールして常時稼働のFT8モニターシステムつくろうと考えていたこともあり、今回RaspiOS(64bit)でJTDXを動かすことにトライしてみました。JTDXのダウンロードサイトではRaspverry Pi 64bit版のソフトウエアが未公開なので、ソースコードをダウンロードしてRaspberry Pi上でコンパイルすることにしました。ネット検索すると、「Raspi4にUbuntu20.04LTS+JTDX-rc150+CQRLOG2.4.0+TQSLをインストール」という記事がヒットしたのでこれを参考にJTDXをインストールしてみました。


JTDX本体とJTDXの設定に必要な無線機のライブラリー Hamlibをインストールします。

最初に、コンパイルに必要な各種のライブラリーソフトをインストールします。

#apt update

#apt full-upgrade

#apt install build-essential cmake automake libtool gfortran pkg-config asciidoc asciidoctor qttools5-dev-tools qtmultimedia5-dev libqt5serialport5-dev libudev-dev libfftw3-dev gitlibhamlib-dev libhamlib-utilsportaudio19-dev libqt5multimedia5-plugins coderay dialog libsamplerate0-dev python3-pip python3-tk python-devpython3-numpypython3-setuptoolspython3-dev subversion texinfo libfreetype6-dev libgtk-3-dev libgtk2.0-dev libjprg-devliblcms2-dev libtiff5-dev libwebp-dev tcl8.6-dev tk8.6-dev libusb-dev libusb-1.0-0-dev.libboost-all-dev libqt5webscockets5-dev


Hamlibをインストールします。

インストール先は、/home/pi 配下とします。

#mkdir /home/pi/hamlib-prefix

#cd /home/pi/hamlib-perfix

#git clone https://github.com/jtdx-project/jtdxhamlib src

#cd src

#./bootstrap

#mkdir ../build

#cd ../build

#HOME='/home/pi'

#../src/configure --prefix=$HOME/hamlib-prefix

上記はCAT機能を使わない場合です。CAT機能を使う場合はコンパイルオプションを以下のように変更します。

#../src/configure --prefix=$HOME/hamlib-prefix--disable-shared --enable-static --without-cxx-binding --disable-winradio  CFLAGS="-g -O2 -fdata-sections -ffunction-  sections" LDFAGS="-WL,--gc-sections"

#make

#vi /etc/ld.so.conf

nclude /etc/ld.so.conf/*.conf

/home/pi/hamlib-prefix/lib (一行追加)

#make install-strip

#ldconfig

#ldconfig -p | grep libham*


JTDXをインストールします。

#mkdir -p /home/pi/jtdx-prefix/build

#cd /home/pi/jtdx-prefix

#git clone https://github.com/jtdx-project/jtdx src

#cd /home/pi/jtdx-project/build

#cmake -D CMAKE_PREFIX_PATH=/home/pi/hamlib-prefix -D CMAKE_INSTALL_PREFIX=/home/pi/jtdx-prefix ../src

#cmake --build .

#cmake --build . --target install


これでJTDXのインストールが完了しました。

#/home/pi/jtdx-prefix/bin/jtdx でJTDXが起動します。

JTDXのバージョンはv2.2.159でした。2022/3/1 にリリースされた最新版です。


なお、QSOログwsjtx.log、wsjtx_log.adiの保存先は以下のディレクトリィです。

/home/pi/.local/share/JTDX


(追記)2023/12

JTDXをUbuntu Desktop 23.10(64-bit)にインストールしたところ、#cmake -D CMAKE_PREFIX_PATH=/home/pi/hamlib-prefix -D CMAKE_INSTALL_PREFIX=/home/pi/jtdx-prefix ../srcの実行で以下のエラーがでました。


そこで、libqt5websockets5-dev をインストールしたところエラーが解消しました。コンパイルに必要なライブラリーを入れ忘れたようです。

#apt install libqt5websockets5-dev

Ubuntu Desktop 23.10(64-bit)でもJTDXが動作することが確認できました。


 Raspberry Piにはマイク入力端子がないので受信機からの音声信号を取り込むことができません。そこで、USBオーディオ変換ケーブルを利用して音声信号を取り込むことにしました。少し古い機種ですが、BUFFALOのBSHSAU01BKという変換ケーブルが手持ちにあったのでRaspberry Piにつないでみました。ドライバーのインストール無しで問題なく動作しました。






次にJTDXの起動アイコンを作成します。

JTDXのアイコン画像はネット上にあるフリーのアイコン素材を提供しているサイトからJTDXのマークによく似たアイコン素材をダウウンロードしました。




アイコン画像(jtdx.bmp)は/home/pi/Picturesに置きました。

#mkdir /home/pi/Pictures

desktopファイルを作成します。

#vi JTDX.desktop

  [Desktop Entry]

  Type=Apprication

  Encoding=UTF-8

  Name=JTDX

  Comment=JTDX V2.2.159

  Exec=/home/pi/jtdx-prefix/bin/jtd

  Categories=Network;WebBrowser;

  Icon=/home/pi/Pctures/jtdx.bmp

  Terminal=false

#cp JTDX.desktop /usr/share/applications/JTDX.desktop

#chmod 775 /usr/share/applications/JTDX.desktop

#reboot


これでJTDXの起動アイコンが作成できました。


(追記)2023/12

Ubuntuのデスクトップに上記起動アイコンを置く場合は、/home/pi/Desktop配下にJTDX.desktopファイルを置きます。
表示されたアイコンを右クリックして「起動を許可する」をクリックするとアイコンの右下の×印が消えます。

この状態で起動アイコンをクリックするとJTDXを起動することができます。


 Raspberry Pi (64bit) でSDRソフトウェアラジオを動作させる
2022年3月15日
 10年近く前にWindows PCでSDRドングル(RTL2832U)とアップコンバータを利用した短波帯の無線受信を実験していたときの機材が残っていたので、これを活用してRaspberry PiでSDRソフトウエアラジオを動作させてみました。SDRドングルはDVT-T+DAB+FMという型番で、アップコンバーター(100MHzアップ)はHF Conv/RTl SDR v1.7という型番です。






ソフトウエアはGqrxというパッケージを使います。

Gqrxのインストール

#apt update

#apt full-upgrade

#apt install gqrx-sdr


これでインストールが完了です。デスクトップアイコンも自動で作成されています。

Raspberry PiにSDRドングルを接続して、これが認識されているか確認します。

#lsusb


GUI画面でアイコンをクリックしてGqrxを起動し、I/O inputやAudiooptput等の設定を行えば受信可能となります。






 受信出力を既にインストールしているJTDXに入力すれば、FT8等のデジタル通信をRaspberry Piのみでモニタできます。Gprxの音声出力(Raspiのオーディオ端子またはUSBオーディオ変換ケーブルのオーディオ出力端子)とJTDXのマイク入力(USBオーディオ変換ケーブルのマイク入力端子)をオーディオケーブルで接続します。受信感度は非常にすばらしく、通常使用しているFTDX101MP+Windows11PCよりも微弱な信号がデコードできていま






PSK-Reporterにもレポートできているので、省電力の常時運用モニターとして活用できます。


 


 防犯カメラ映像モニター用ソフトウェアのインストール
2022年11月7日
 Amazonのタイムセールで中華製の屋外防犯カメラが4500円で販売されていたいたので試しに買ってみました。DEKCOというブランドの商品で値段の割には機能が豊富です。映像の監視や様々な操作はスマートフォンのアプリ(CloudEdge)でできます。

 この製品は Onvif に対応しているので、パソコンで映像監視するには iSpy というフリーのソフトウェアを利用することができます。常時監視するのであれば、Windowsパソコンより
 Raspberry Piが電力消費の面で有利なので、手持ちのRaspberrry Pi4にインストールしてみました。

OSはRaspverry Pi OS 64bitです。まず、curlというパッケージをインストールする必要があるようです。

#apt install curl

curlは既にインストールされていました。

#bash <(curl -s "https://raw.githubusercontent.com/ispysoftware/agetn-install-scripts/main/v2/install.sh")

ソースコンパイルにかなりの時間がかかり、インストール完了までに1時間以上必要でした。


Onvifを利用するには、CloudEdgeの設定画面から「Onvifの設定」を開いてパスワードを設定しOnvifを有効にします。

iSpyはウェブブラウザ上で起動します。ウェブブラウザを立ち上げて、http://localhost:8090/を開けばiSpyの画面が出てきます。Onvif設定画面で必要な設定を行えばOKです。





         


 温湿度、気圧センサーBME280を使用しWeb画面にデータを表示する
2022年11月27日
 以前、GooglrChartを使用して温湿度、気圧センサーBME280のデータをWeb画面に表示するシステムを構築していましたが、残念ながら2019年にGoogleChartのサービスが終了しシステムが動作しなくなりました。このため、別の方法で再構築することにしました。Webで検索したところ、「MBE280で取得した温湿度気圧をWeb画面に表示する」というブログ記事を見つけたのでこれを参考に再構築しました。


構築環境は以下のとおりです。

Raspverry Pi モデル:Raspverry Pi odel B Pulus Rev 1.2

OS:Raspbian GNU/Linux 11 (bullseye)

Apache:Apache/2 .4.54 (Raspbian)

Python:Python 3.9.2


インストール手順のみ記録しておきます。


bme280の計測データ取得

#apt install libapache2-mod-wsgi-py3

#pip3 install wiringpi

#pip3 install Flask

wiringoi-python-bme280からiringpi-python-bme280-main.zipをダウンロードし/home/xxxに転送します。

#unzip wiringpi-python-bme280-main.zip

#cd /home/xxx/wiringpi-python-bme280-main/opt

#chmod 755 bme280.py

#./bme280.py

/var/log/bme280log 配下にYYYYMMDD.logが作成されていればOK.


自動起動の設定

#cd /home/XXX/wiringpi-python-bme280-main/opt

# cp -p bme280.py bme280_inc.py lcd1602_inc.py /opt/

# vi /etc/rc.local

 exit 0 の前に /opt/bme280.py を追加


Web画面へグラフを表示するプログラムの配置

#cd /home/xxx/wiringpi-python-bme280-main

# cp html/bme280.html /var/www/html

#cp -r js /var/www/html

#mkdir /var/www/flask

#cp py/app.wsgi /var/www/flask

#cp py/app.py /var/www/flask

#cp py/getlogdata.py /var/www/flask

#chown -R www-data:www-data /vaw/www/html /var/www/flask /var/log/bme280log


apacheの設定


#vi /etc/apache2/sites-available/flask_wsgi.conf

  <VirtualHost *:80>

  ServerName 192.168.0.XX

  ServerAdmin 192.168.0.XX

  DocumentRoot /var/www/html

  WSGIDaemonProcess app user=www-data group=www-data threads=5

  WSGIScriptAlias /flask /var/www/flask/app.wsgi

  WSGIChunkedRequest On

  ErrorLog ${APACHE_LOG_DIR}/error.log

  CustomLog ${APACHE_LOG_DIR}/access.log combined

  <Directory /var/www/flask/>

     WSGIProcessGroup app

     WSGIScriptReloading On

     Require all granted

     Options FollowSymLinks

     AllowOverride All

  </Directory>

  </VirtualHost>


設定の反映

#a2ensite flask_wsgi

#systemctl restart apache2


http://192.168.0.XX/bme280.htmlにアクセスし画面が表示されればOK。








 Raspberry Pi をHTTPSに対応させる
2023年2月21日
 HomeServerをRaspberry Pi 4にアップグレードするついでに、WebサーバーをHTTPSに対応させることにしました。

Let's Encryptのデジタル証明書を自動的にドメイン名と紐づけしてくれるパッケージソフトをインストールします。

#apt install certbot python3-certbot-apache


 certbotを利用してデジタル証明書を得るには、Apache2が動作している必要があります。また、ルーターのポート変換設定(TCPポート80)が対象とするHomeServerに設定されていることを確認しておきます。インターネット側からHomeServerにポート80でアクセスできないと以下の作業でエラーが出ます。

#certbot --apache

証明書の紐づけにあたり、対話形式で入力を求められるので適宜必要な入力を行います。

入力がうまくいくと、「Congratulations! You have successfully enabled https://xxxx.xxxx」の表示が返ってきます。これで証明書の紐づけは完了です。


HomeServerのWebサイトをhttps://www.xxxx.yyy/とhttps://xxxx.yyy/両方でアクセスできるようにしてあるので、証明書を両者に対応させるため以下のコマンドを実行します。

#certbot certonly --webroot -w /var/www/html -d xxxx.yyy -d www.xxxx.yyy

要求を実行しますか?と聞かれるので E と入力します。


Apache2のHTTPSを有効化し、Apache2を再起動します。

#a2ensite default-ssl

#systemctl restart apache2


ルーターのポート変換設定(TCPポート443)をHomeServerに設定します。


これでインタネット側からHTTPSでアクセスできるようになりました。

WiFiをOFFにしたスマホからアクセスし、URLの左側に南京錠のマークが出ればOKです。また、無料のサーバー監視サービスを提供しているCMANのSSLチェック機能を利用すればSSLの正常動作確認ができます。


Let's EncryptのSSL証明書の有効期限は3ヶ月ですが、certbotには自動更新の機能があるので特別なことをする必要はありません。


自動更新機能が正しく動作しているかは、以下のコマンドで確認できます。

#systemctl status certbot.timer




 ホームページアイコンを作成する
2023年3月14日
 まず、アイコンのデザインを作成する必要がありますが、面倒なのでフリーのアイコン素材サイトを利用することにしました。非常に多くのアイコン素材を提供しているICON MONOから気に入った画像をダウンロードすることにしました。

次にダウンロードした画像をホームページアイコン用に変換する必要があります。Favicon.ico & App Icon Generatorというオンラインツールを利用して変換します。






 変換したい画像ファイルを選択して変換し、変換されたファイルをダウンロードします。サイズ違いのファイルが多く作成されますが、この中から以下のファイルを選択して保存します。

 favicon.ico  android-icon-192x192.png  apple-icon-180x180.png


これらのファイルをホームぺージの index.html ファイルを置くディレクトリー(/var/www/html)に転送します。


次に、 index.html ファイルの最初にある <head> と </head> の間に以下の行を追加します。

  <link rel="shortcut icon" href="favicon.ico" type="image/x-icon">

  <link rel="apple-touch-icon" href="apple-icon-180x180.png" size="180x180">

  <link rel="icon" type="image/png" href="android-icon-192x192.png" size="192x192">


以上でアイコンが作成されました。ウェブブラウザでアイコンが表示されることを確認します。




 Let's Encryptから証明書の有効期限切れの通知が届いた
2023年5月1日
 本WebサーバーをHTTPSに対応させるためにLet's Encryptのデジタル証明書を利用していますが、Let's Encryptからその有効期限が切れますという通知メールがきました。メールのタイトルは、「Let's Encrypt certificate expiration notice for domain "tonaru.net"」です。メールの内容を読むと、有効期限が切れるまで19日となっているので証明書の有効期限を更新してくださいとのことです。

最新のLet's Encryptのcertbotには自動更新の機能があるので更新の操作をする必要がないと思っていましたが、念のため手動で更新操作をしてみました。




certbotから証明書の期限は7月20日まであるので更新できませんでしたと返ってきました。期限が1か月以上あると更新できないからです。

ブラウザの南京錠マークを右クリックして「接続がセキュリティで保護されています」を開き、右上の証明書マークをクリックすると証明書ビューアーが表示されるので、これで確認すると有効期限が7月20日となっています。4月21日に自動更新されていたようです。なにもしなくてよいみたいです。






 Raspberry Piに小型OLEDをつないでみる
2023年8月20日
 安価なOLED(有機EL小型ディスプレイモジュール)が手に入ったので、Raspberry Piのコンソールにしてみました。

OLEDは128x64ドット、0.96インチ、コントローラチップがSSD1306です。Raspberry PiのモデルはRaspberry Pi Zero W、OSはRaspberry Pi OS Lite(32-bit)を使いました。

OLEDをRaspberry Piのコンソールにする」というサイトを参考にしました。


OLEDのピンGND、VCC、SCL、SDAをそれぞれRaspberry PiのGPIOのピン6、1、5、3に接続します。

次にI2C通信を有効にします。

#raspi-config

OLEDデバイスが認識されているか確認します。

#apt install i2c-tools

#i2cdetect -y 1



"3C"が表示デバイスのアドレスになります。


上記サイトから自動設定スクリプトを含むoled.zipファイルをダウンロードして、Raspberry Piの任意のディレクトリーに転送します。

zipファイルを解凍します。

#unzip oled.zip

自動設定スクリプトInstall.shを実行します。

#sh Install.sh




/bin/oledが存在しないようなので、zipファイルを解凍した中にあるoledファイルを/bin配下にコピーし実行権限を与えます。

#cp oled /bin/oled

#chmod 755 /bin/oled

再度Install.shを実行します。

#sh Install.sh




Raspberry Piを再起動します。

#reboot



OELDにRaspberry Piのログイン画面が表示されました。


リモート端末よりコンソール(/dev/tty1)にテキストをリダイレクト出力してみます。

#echo "test test test" > /dev/tty1



入力したテキストが表示されました。


Raspberry Pi Zero Wのケースに取り付けました。





 温度センサー DS18B20を使って室温を記録する
2023年9月17日
 温度センサー DS18B20 と Raspberry Pi で室温を連続して記録するシステムを作ってみました。

DS18B20 は Amazon 等で安価に入手可能な温度センサーで、防水処理がされているので水温測定にも利用できます。

Raspberry Pi には3本のリード線(赤、黄、黒)をGPIO端子に接続します。赤(VDD)を電源端子(3.3Vまたは5V)、黄(DQ)を1-Wire端子、黒(GND)を接地端子に接続します。また、赤(VDD)と黄(DQ)を5KΩ程度の抵抗器で接続し、DQを電源電圧にプルアップします。




DS18B20 は 1-Wire通信を利用するので、Raspberry Pi の 1-Wire を有効にします。

raspi-config コマンドで Interfacing Options から 1-Wire を有効化するか、または /boot/config.txt に dtoverray=w1-gpio の行を追記します。


次に、接続した DS18B20 が動作しているか確認します。

DS18B20 のディレクトリーを確認します。

#ls /sys/bus/w1/devices


「28-3c01d07564cf」がセンサーの固有IDです。

センサーIDを指定して内容を表示してみます。

#cat /sys/bus/w1/devices/28-3c01d07564cf/w1_slave

「t=27750」が測定温度の1000倍の値です。


DS18B20 の温度データを Python で取得します。

Python で 1-Wire データを取得できるライブラリーを pip3 でインストールします。

#pip3 install w1thermsensor



温度データを Python で取得するプログラム temp.py を作成します。



temp.py を Raspberry Pi の適当なディレクトリィに転送し、実行属性を付加し実行します。

#chmod 755 /home/tonaru/temp.py

#python /home/tonaru/temp.py


温度が取得できました。


取得した温度データをテキストファイルに書き込むシェルスクリプト templog.sh を作成します。

#vi /home/tonaru/templog.sh

  #!/bin/sh

  echo "$(date '+%m/%d %H:%M')  $(python /home/tonaru/temp.py)" >> /home/tonaru/templog/temp.txt

#chmod 755 /home/tonaru/templog.sh

空のテキストファイルとこれを置くディレクトリィを作成します。

#mkdir /home/tonaru/templog

#touch /home/tonaru/templog/temp.txt

templog.sh を実行してみます。

#sh /home/tonaru/templog.sh

#cat /home/tonaru/templog./temp.txt


時刻と温度がテキストファイルに記録できました。


一定間隔で温度を取得し、テキストファイルに書き込むため cron に登録します。

#crontab -e

  */10 * * * * sh /home/tonaru/templog.sh

これで、テキストファイル temp.txt に10分間隔で取得した温度データを書き加えていきます。


次に、1日分の温度データを日付を付けたファイルにコピーするとともに、temp.txt ファイルの中身を空にするためのシェルスクリプトを作成します。

#vi /home/tonaru/filecopy.sh

  #!/bin/sh

  cp /home/tonaru/templog/temp.txt /home/tonaru/templog/$(data +"%Y%m%d").txt

  cp /dev/null /home/tonaru/templog/temp.txt

#chmod 755 /home/tonaru/filecopy.sh

このシェルスクリプトを cron に登録します。

#crontab -e

  59 23 * * * sh /home/tonaru/filecopy.sh

以上で、毎日23時59分にその日の温度データを日付の付いたファイルに格納し、temp.txt 内のデータをクリアしてくれます。



temp.txt のデータをウェブブラウザで表示できるように、HTMLファイル temp.html を作成します。



作成した temp.html ファイルを Apache2 のドキュメントルート /var/www/html 配下に転送します。

/home/tonaru/templog 配下にある temp.txt ファイルをドキュメントルート /var/www/html 配下に置く必要があるので、シンボリックリンクを張ります。

#ln -s /home/tonaru/templog/temp.txt /var/www/html/temp.txt

ウェブブラウザで http://(Raspberry PiのIPアドレス)/temp.html を開くと temp.txt に記録された温度データを表示することができます。



なお、/home/tonaru/templog 配下に保存された過去の温度データ(テキストファイル)をウェブブラウザからダウンロードできるようにするには、HTMLファイル temp.html の10行目と11行目の間に、「 <a href="templog">Past Templog</a><br> 」を追記し、以下のディレクトリィのシンボリックリンクを張っておきます。

#ln -s /home/tonaru/templog /var/www/html




(追記)

上記システムを Rspberry Pi 3 Model B Rev1.2 で構築したところ、比較的低い頻度で測定エラーが発生しました。発生頻度は、システムを起動してから数時間後や十数時間後、数日後など不規則です。

一旦エラーが発生すると自動で復旧しません。エラー発生時にDS18B20が認識されているか #ls /sys/bus/w1/devices で調べてみると、センサー固有IDが表示されません。

センサー個体の不具合かもしれないと考え、別のセンサーで試してみましたが同じエラーが発生しました。センサーの問題ではないようです。

リブートではエラーが復旧せず、電源を入れ直すと復旧します。メモリー関係で何らかのバグがあるようです。

Raspberry Pi Model B Pulus Rev1.2 と Raspberry Pi Zero W 、Raspberry Pi 4 では問題なく動作しています。OSはすべて Raspberry Pi OS Bullseye です。



 温度センサー BME280を使って室温を記録する
2023年9月26日
 温度センサー BME280 と Raspberry Pi で室温を連続して記録するシステムを作ってみました。




BME280は Raspberry Pi の I2C通信を利用するので、#raspi-config で I2C を有効化します。

Raspberry Pi に BME280 を接続し、センサーが認識されているか確認します。

#i2cdetect -y 1

I2C アドレス 76 が表示されば認識されています。


今回は、Python3 で BME280 のデータを取得して表示するプログラムを使用します。

Python3 の I2C通信ライブラリー smbus2 をインストールします。

#pip3 install smbus2


スイッチサイエンスのGitHub BME280から bme280_sample.py をダウンロードします。


bme280_sample.py は Python2.7 用のプログラムなので、Python3 で実行すると print 文の箇所で構文エラーが出ます。print の後全体を()でくくります。

データを表示する型式の修正を含めて、print 文3か所を以下のとおり変更しました。

95行目   print "pressure : %7.2f hPa" % (pressure/100)  →  print("pressure :%7.1f hPa" % (pressure/100))

103行目 print "temp : %-6.2f ℃" % (temperature)      →  print("temp : %-5.1f ℃" % (temperature))

117行目 print "hum : %6.2f %" % (var_h)             →   print("hum :%5.1f %" % (var_h))

修正した Python3 プログラム bme280_sample.py を Raspberry Pi の適当なディレクトリィに転送し、実行属性を与えます。


#python3 /home/tonaru/bme280_sample.py



温度、気圧、湿度がそれぞれ表示されました。

なお、Raspberry Pi 3 Model B Rev1.2 では smbus2 エラーが出たので、#pip install smbus2 でPython2.7の smbus2 をインストールしたところ正常に動作しました。


温度のみ表示させたいときは、bme280_sample.py プログラムの気圧(pressure)と湿度(hum)のプリント文 print の頭に # を挿入し、温度(temp)のプリント文中の temp : を削除しbme280.py とリネイムして保存します。そして、bme280.py ファイルを Raspberry Pi の適当なディレクトリィに転送し実行属性を与えます。


#python3 /home/tonaru/bme280.py



温度のみが表示されました。


取得した温度データをテキストファイルに書き込んだり、ウェブブラウザで表示するには、「温度センサー DS18B20 を使って室温を記録する」で作成したシェルスクリプト templog.sh の中の temp.py を bme280.py に置き換えます。




 eoメールでのメールリレーができなくなった(postfix)
2023年12月8日
 ホームメールサーバー(postfix)を構築して独自ドメインのメールアドレスを作成し、eoメールを利用したメールリレーでグローバルなメール送信をしていましたが、eoメールのセキュリティ強化により2023年12月5日からこれができなくなりました。




これに対処するため、OP25B対策のためのメールリレーをgmailに変更しました。

postfixで使用するgmailパスワードには、Googleアカウントの「アプリ パスワード」を作成しこれを利用する必要があります。

「アプリ パスワード」の作成方法は以下のとおりです。

作成した16桁のコードをメモしておきます。




postfixの設定変更は、main.cfファイルとsaslの認証ファイル二つです。

main.cfの変更

#vi /etc/postfix/main.cf

    relayhost = [smtpauth.eonet.ne.jp]:587  → relayhost = [smtp.gmail.com]:587

saslの認証ファイルの変更

#vi /etc/postfix/sasl_passwd

    [smtpauth.eonet.ne.jp]:587 xxx@xxx.eonet.ne.jp:<passward>  → [smtp.gmail.com]:587 xxx@gmail.com:<password>

    gmailの<password>には、先に作成した「アプリ パスワード」を入力します。

変更したsasl認証ファイルをpostfixに反映

#postmap /etc/postfix/sasl_passwd

念のため設定が正しいか確認

#postfix check

postfixの再起動

#systemctl restart postfix


これでgmailでのメールリレーができるようになりました。



 Raspberry Pi OSをbullseyeからbookwormにアップグレードする
2024年3月24日
 2023年10月にRaspberry Pi OSがVer.11からVer.12にアップグレードされたので、Raspberri Pi 4にインストールしていたRaspberry Pi OS(64bit)をアップグレードしてみました。

Raspberry Pi OS Ver.12はDebian GNU/Linux 12 (bookworm)です。


アップグレードはCLIでsshターミナルから行います。

最初に、現在のOSのソフトウェアパッケージをアップグレードします。

#apt update

#apt upgrade

不要なパッケージを削除します。

#apt autoremove

sources.listファイルを編集します。

コメントアウトされている行のbullseyeをbookwormに置き換えて、non-free-firmwareを追加します。

#vi /etc/apt/sources.list

   deb http://deb.debian.org/debianbookwormmain contrib non-freenon-free-firmware

   deb http://security.debian.org/debiab-securitybookworm-security main contrib non-freenon-free-firmware

   deb http://deb.debian.org/debianbookworm-updates main contrib non-freenon-free-firmware

Debian 12のパッケージ更新します。なお、新しいパッケージは追加せず、既存のパッケージのみアッグレードします。

#apt update

#apt upgrade --without-new-pkgs

システムのアップグレードを行います。

#apt full-upgrade

システムの再起動を行います。

#reboot


OSのバージョンを確認します。

#cat /etc/debian_version

#lsb_release -d


OSバージョンが新しくなりました。


最後に、不要なパッケージを削除しておきます。

#apt autoremove


しかし、Raspberry Pi起動時の画面やGUI画面が正常に表示されず異常動作することがわかりました。

新しいOSのパッケージをアップグレードしてみたところ、「以下のパッケージは保留されます:xxxxx」という表示が出て、いくつかのパッケージがアップグレードできていませんでした。そこで、該当のパッケージを再インストールしてみました。

#apt update

#apt upgrade

#apt install xxxxx

#apt upgrade

これでGUIも正常に動作するようになりました。