ラベル electronics の投稿を表示しています。 すべての投稿を表示
ラベル electronics の投稿を表示しています。 すべての投稿を表示

2017年11月17日金曜日

Raspberry Pi+Raspbian stretchでwkhtmltopdfを使ったホームページ画像化しGoogleフォトにアップロードする

事の発端は毎週のダイエットサマリーブログ

毎週掲載しているダイエットサマリーブログで、体組成データや筋トレチェック表を画像化して掲載しています。
以前ご紹介した画像化の方法でしばらく使っていたのですが、OSアップデートによる変更で動作しなくなったり、SDカードの破損で運用そのものが危ぶまれたり、踏んだり蹴ったりのトラブル続出で使用中止していました。
代替案で、他の端末からスクリーンショットをアップロードして使っていたのですが、その作業がとにかく面倒くさい😭
Raspbian stretchで強化されたセキュリティ関連のクセが、やっとここに来て飲み込めて来たので楽したくて再チャレンジしました😤

wkhtmltopdfに巡り合う

あれこれ探した末に見つけたのがwkhtmltopdfでした。
Google製のアプリで、HTMLレンダリングエンジンWebkitを使って展開し、それをPDFや画像ファイル化するためのものです。
対応OSもWindows・macOS・Linuxに対応しているので、私のようにあれこれ使う人にとってはとても助かります。

Raspbian stretch LITEにインストールするも動かず

インストール方法は、おなじみのaptを使います。

sudo apt-get install wkhtmltopdf
使い方は、下記のコマンドです。
wkhtmltoimage [URL] [画像ファイル]

Raspberry Pi Zero Wで使ってみたのですが、下記のようなエラーが出て動きません。

QXcbConnection: Could not connect to display
中止
フレームバッファが必要なのかも。

仮想フレームバッファ Xvfbで実行

前回画像化でも使った仮想フレームバッファ Xvfbを今回も使います。
まずは、インストール。

sudo apt-get install xvfb
次に、仮想フレームバッファをこのアプリで作成し、そこでwkhtmltopdfを実行します。
xvfb-run -a -s '-screen 0, 1024x768x24' wkhtmltoimage [URL] [画像ファイル]
これで、どんな環境でも使えると思います。

出来た画像ファイルをupload-gphotosGoogleフォトへアップロード

使わせていただいているブログサイト Bloggerの記事作成機能はとても便利で、Googleフォトの画像も直接貼り付けられます。
そこで、HTMLから作った画像を、upload-gphotosGoogleフォトへアップロードします。

upload-gphotosはTypeScriptで書かれていますが、JavaScriptへトランスパイルされたモノがnpmでインストール可能なので、今回はそれを使わせていただきます。

node.js、npm、nを最新に

Raspbianに標準インストールされているパッケージが古く、そのままでは動きません。
そこで、最新版のインストール作業から始めます。

まず、パッケージリストを更新します。

sudo apt-get update
次に、npmをインストール。
sudo apt-get install -y npm
次に、npmの最新版をインストール。
sudo npm install -g npm
npmをnpmでインストールってなんかだか不思議な感じですけどね😅
このブログを書いてる段階のRaspbian最新版September 2017では、下記のようなエラーがでます。
/usr/bin/env: ‘node’: No such file or directory
これは、node.jsのコマンドであるnodeがないために出るエラーです。nodejsという古い名前のままなので、nodeという名前でリンクを作ります。
sudo ln -s /usr/bin/nodejs /usr/bin/node
そして、再びnpmの最新版をインストールするコマンドを実行すると処理が始まります。 npm最新版になったら、次はnode.jsのバージョン管理パッケージnをインストール。
sudo npm install -g n
やっと、本題の最新版node.jsのインストールです。
sudo n stable
もし、最新バージョンがリリースされているにも関わらずError: invalid version~というエラーが出た場合、そのバージョンのターゲットCPUのパッケージがまだアップロードされていない可能性があります。
Raspberry Piは、現段階でARMv6/7/8の3種類のCPUアーキテクチャ商品があります。Raspberry Pi 2 V1.2と3(コンピュータモジュール含む)がARMv8、Raspberry Pi 2 V1.1がARMv7、その他はARMv6です。ARMv8は64bitアーキテクチャなのでARM64としてリリースされてる事が多いですが、Raspbianは互換性維持のために32bitで動かしているので実質ARMv7と思って良いと思います。
ご使用のRaspberry Pi用CPUアーキテクチャパッケージがアップロードされていない場合は、
sudo n [バージョン番号]
直接バージョン番号を指定してインストールしてください。
あるかどうかの確認は、ダウンロード先のnodejs.orgにブラウザでアクセスし、バージョン毎にディレクトリ(フォルダ)が分かれているので、その中にlinux-arm~l.tar.gzってのがあるか確認し、ある中から最新バージョンのモノを指定してください。
念のため、インストールしたnode.jsのバージョンを確認しておいてください。
node -v
もし、古いバージョンのままの時はリンク先が古いものを指してるはずですので、最新版に変更すればOKです。

upload-gphotosをインストール

ここまで来たらもう一息!
upload-gphotosのページの下のInstallationのnpm (Recommended)を参考にインストールします。
スーパーユーザーでインストールするので、sudoを付けて実行してください。

sudo npm install -g upload-gphotos
使い方はこんな感じ
upload-gphotos [画像ファイル名] -u [Googleフォトユーザー名] -p [パスワード] 
ログインエラーが出た場合、安全性の低いログイン技術を使ったアプリの利用許可がされていない可能性があります。 安全性の低いアプリによるアカウントの使用を許可するの説明を参考に、安全性の低いアプリの許可にアクセスして有効にしてください。

シェルスクリプトでサクッと実行

準備は整ったので、これを組み合わせて簡単に実行でいるシェルスクリプトを作ります。
便宜上スクリプト名はhtml2pngとします。

nano html2png
#!/bin/bash
# 一時ファイルを作る
tmpfile=$(mktemp --suffix=.png)

function rm_tmpfile {
  [[ -f "$tmpfile" ]] && rm -f "$tmpfile"
}
trap rm_tmpfile EXIT
trap 'trap - EXIT; rm_tmpfile; exit -1' INT PIPE TERM

xvfb-run -a -s "-screen 0, 1024x768x24" wkhtmltoimage --width $2 $1 "$tmpfile"
upload-gphotos "$tmpfile" -u [ユーザー名] -p [パスワード]
出来たら実行権限を追加します。
chmod +x html2png
使い方はこんな具合。
html2png [URL] [横幅px]

upload-gphotosでちょっと気になった不具合

例によって、Raspberry Pi Zero W+Raspbian Stretch Ver.September 2017ベースで試していたのですが、upload-gphotos実装直前までこぎつけて不具合を見つけました。それは、他のRaspberry PiからSSHコマンドを使ってリモート実行した時に起こりました。

1つ目は、アップロード時のプログレッシブバーが表示されません。
wkhtmltopdfのプログレッシブバーや他の文字は表示されているので、upload-gphotosで使われてるモジュール固有の問題のようです。
原因を調べてみると、TTYチェックしてる部分があってそうじゃない場合はそもそも表示しないようなのです。
なぜ除外してるかさらに調べた所、1行の長さを取得してる部分があってそれがTTYじゃないと取得できず、仮にチェックを無効にしてもその後の処理でエラーになってしまいました。
まぁ、仕様通りの動作ですし、進捗状況が未表示でも問題ないので、このまま使わせていただく事にしました。

問題だったのはもう1つの不具合でした。
アップロード終了後に諸々の情報を表示して終わるのですが、それがSSHコマンドからの直接実行だと終わらないのです。
通信処理を非同期で行っていて、それをメインモジュールで同期モードで動かしてるようなのですが、TypeScriptとJavaScriptのトランスコンパイルの部分で仕様差が吸収出来てないような気がしました。
そのままではいろいろ困るので、cli.ts(cli.js)の末行付近にある

console.info(JSON.stringify(photos, null, 2));
の次の行にプロセスの終了命令を追加しました。
process.exit();
これで、終了しない不具合は解消されました。

最後の最後でまさかの!?

やっとブログも書き終わる!と思った矢先に、まさかの不具合発覚。
曜日が表示されていないのです。なぜ?どうして??
原因は簡単でした。日本語フォントがインストールされてなかったんです😅
ということで、Google Noto Fontsをインストール。
sudo apt-get install -y fonts-noto

無事に曜日が表示されました。

お読み頂きありがとうございました。
次回もお楽しみに!

2017年11月14日火曜日

Pimoroni Button SHIMを動かしてみる

Pimoroni Button SHIMを実際に動かしてみる

ロングピンヘッダーソケットを取り付けたPimoroni Button SHIMの準備が整ったので、Raspberry Pi Zero Wのチェックも兼ねて動かしてみます。

OS Raspbianの準備

Raspbianは、GUI環境のDESKTOP版と、CLIのみの軽量なLITE版があります。
迷った時は、大は小を兼ねるのでDESKTOP版がオススメですが、その分サイズも大きく書き込みに時間がかかり大容量SDカードも必要になるのでLITE版もメリットがあります。
今回は、GUIを使わないのでLITE版を使います。
OSはディスクイメージファイルになって、公式ページのDOWNLOADSからダウンロードします。
DOWNLOAD ZIPとDownload Torrentの2種類のダウンロード方法があって悩ましいのですが、BitTorrentを使われてる方ならDownload Torrentのほうが若干早いです。BitTorrentは、ちょっと小難しい話になるので今回は割愛します。

イメージの展開はEtcherを使うと簡単です。
アプリをインストールした後起動し、ダウンロードしたイメージファイル(ZIPを展開した後のファイル)👉SDカードを指定👉実行
この他にも色々な方法がありますが、簡単で早くて対応OSもWindows・mac・Linuxに対応していて、さらにコマンドライン版もあるのでオススメです。

次に、起動前の/bootパーティションの設定を行います。
Raspberry Pi Zero Wは、OTGスレーブモードと呼ばれるUSB直結でSSH接続できる機能があるのでその設定から。

  1. SDカードの/bootパーティション(WindowsならSDカードを差した時に見られるドライブ)にssh.txtというファイルを作ります。中は空っぽでOKです。0バイトでも1バイトでも構いません。作り方はテキストエディタなりコマンドラインなりで適当に作ってください。
  2. config.txtの最後にdtoverlay=dwc2の1行を追記します。
  3. cmdline.txtの末尾に、改行せずスペースを1つ入れてmodules-load=dwc2,g_etherを追記します。

無線LANの設定もしちゃいます。/bootパーティションにwpa_supplicant.confというファイル名で下記の内容のファイルを作ります。

country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
  ssid="[SSID名]"
  psk="[パスフレーズ]"
}
起動時にこのファイルが/etc/wpa_supplicant/wpa_supplicant.confに上書きムーブされ、/bootに作ったファイルは消えます。

これで、OSの入ったSDカードの作成は終わりです。
OTGスレーブモードで起動する場合、Windowsはそのままでは認識しません。あらかじめ、AppleのiTunesかBonjourをインストールしておいてください。
macOSはそのままで大丈夫です。Linuxは、、、わかりません😅

Raspberry Pi Zero Wを起動

出来上がったSDカードをRaspberry Pi Zero Wに挿し、PCに接続して起動します。
最新版では、初回起動時にSDカードの容量最大までパーティションの拡張処理をするので少々時間がかかります。以前は、raspi-configでやらないとしてくれなかったのですが。
本体の緑色LEDの点滅が収まって、点きっぱなしになったら起動完了。
SSHクライアントアプリでraspberry.localにアクセスすると接続出来ます。
コマンドライン版なら

ssh pi@raspberry.local
これで繋がります。初期パスワードはraspberryです。
raspberry.localのraspberryはホスト名なので、起動後にraspi-configなどで変更した場合はその名前になります。

I²Cの設定と確認

Pimoroni Button SHIMは、I²C(あいすくえあどしーorあいあいしー)接続のボタン・LEDボードで、TCA9554A I/O エクスパンダが使われています。
Raspberry Piの学習で良くある、GPIOにLEDやスイッチを繋いで操作するモノとは違い、4線接続だけで5つのボタンと1つのフルカラーLEDを操作できる便利なボードです。
Raspbianは、初期状態でI²Cが無効になっているのでその設定をします。

raspi-configを起動します。
sudo raspi-config
すると、画像のような画面が出てきますのでInterfacing Optionsを選んでエンターを押します。

次に、I2Cを選んでエンターを押します。

I2Cを有効にする?と聞かれるので矢印キーでYESを選んでエンターを押します。
するとちょっと間があき、有効になった確認画面が出るのでエンター。
最初の画面に戻るのでESCキーを押し、再起動するか?と聞かれるのでそこで再起動してください。

再起動してSSHで再接続したら、今度はi2c-toolsをインストールします。
sudo apt-get install i2c-tools -y
完了したら、そのままi2cdetectを実行。
i2cdetect -y 1
画像のように3fという表示が出てれば、Raspberry Pi Zero WにButton SHIMが認識されています。
もし、表示されていない場合は何らかの不具合です。

Pimoroni Button SHIMの商品ページ下に、Softwareという説明があります。
そこのButton SHIM Python libraryのリンクを押すと、Githubに移動します。
その下の説明にあるFull installの指示に従って、サクッとインストールします。

curl https://get.pimoroni.com/buttonshim | bash
完了するまで少し時間がかかります。終わるとPimoroniというディレクトリが作られます。
試しにサンプルプログラムを動かしてみましょう。
python Pimoroni/button-shim/examples/rainbow.py
実行すると画面にButton SHIM: rainbow.py~とメッセージが表示されます。
そこでButton SHIMのボタンA~Eをそれぞれ押すと、ボタンごとにLEDが点灯して色が変わります。
終わらせるときは、CTRL+Cを押すとプロンプトに戻ります。

サンプルプログラムは、rainbow.pyを含めて全部で3つあります。
volume.pyは、音量を変えたりミュートしたりする事ができます。なお、EボタンのHold to power offは、ボタン長押しするとLEDが点滅するだけで何も起きません。
keyboard.pyは、SSH接続では何も起こらないのですが、モニタを接続しているとキーボード入力と同じようにボタンごとにA~Eが入力されます。ただし、使うためには準備が必要で、

sudo pip install evdev
このコマンドを実行してevdev Pythonパッケージをインストールしなくてはならないのと、
実行にroot権限が必要なのでsudoを付けなくてはなりません。
sudo python Pimoroni/button-shim/examples/keyboard.py

なんとなくボタンが追加されるだけだろうと、軽い気持ちで注文購入したPimoroni Button SHIMでしたが、使ってみると結構面白く、またとても難しいです。
提供されるライブラリは、標準でボタンを押したとき、放したとき、長押しした時の3つのイベントが使えます。
サンプルコードでは5つあるボタンを個別に押して使っていますが、工夫すると複数ボタン同時押しに機能を持たせる事も可能です。
また、Raspberry Pi Zero/Wにはイヤホンマイク端子がありませんが、HDMI接続すれば映像と一緒に音声も出力できます。そこで、Pygameモジュール集を使い、ボタンを押した時に効果音を付けるだけでもピコピコ鳴って楽しいです。

1つ忘れていましたが、作業が終わって電源を切る時はシャットダウンしてください。

sudo shutdown -h now
そのまま電源切っても平気な場合がありますが、アプリによってはちゃんと終了処理してあげないと、次回起動時に立ち上がらなくなる事があります。
何らかの事情でシャットダウン出来ずにそのまま電源を切ってしまったときに、起動しようとしたらエラーが出て起動できなくなる事があります。そうした緊急事態に備えて、何か冒険したい時は安定して使える状態のSDカードをイメージバックアップして、いつでも元に戻せるようにしておく事をオススメします。

お読みいただきありがとうございました。
次回もお楽しみに!

2017年11月13日月曜日

Raspberry Pi Zero Wを買ったのでGPIOピンヘッダ取付け

スイッチサイエンスRaspberry Pi Zero W抽選販売に当選

ダイエットサマリーでお知らせしたとおり、スイッチサイエンスのRaspberry Pi Zero W抽選販売に当選したので買っちゃいました。
Raspberry Pi Zero同様、これもGPIOにピンヘッダが付いていないので、それを取り付けるところから始まります。

いつも通りハンダ付け

今は、金槌で叩き入れるだけで取付けられるGPIO Hammer Headerという便利なヘッダーピンがあります。
スイッチサイエンスでも販売されているので、これで楽させてもらおうかとも思いましたが、やはりハンダ付けは電子工作の醍醐味。
ということで、普通の2×20 ピンヘッダを一緒に購入し、今回もいつも通りハンダ付けする事にしました。
中学生の頃から使い続けてる愛用のgoot CA-40 キャップ付きはんだこてを引っ張り出してきて作業開始です。

ピンヘッダーを現物合わせし、OKならはんだ付けを始めます。
ひっくり返して作業するので、Raspberry Pi本体がうまく水平になるように高さ調整します。

とりあえず、ピン1本を仮付けし、ピンの樹脂パーツがしっかり基盤に接地してるのを確認します。
ここで斜めになってるようなら、熱くならない部分のピンを指で押し付けながら、仮付けしたハンダをこてで溶かせばスッと入るので、すぐにはんだこてを離せば固まってしっかり止まります。

あとは、サクサクと1ピンずつハンダを流し込んでいきます。
それにしても、今の基盤ってとてもハンダ付けしやすいですよね。良く乗ります。
乗りが悪いときは、フラックスを塗るとよくなります。
ハンダがなかなか溶けない時は、はんだこてのコテ先が汚れてる可能性が高いです。
その時は、クリーニングスポンジに当てて汚れを取るか、それでもダメならヤスリで擦ると良くなります。汚れが熱を伝えにくくしているために起こります。

今回も上出来。40ピンのはんだ付けが出来ました。
使ったハンダは、もうかれこれ30年以上前のものですが大丈夫でした。

はんだ付けは電子工作の醍醐味よねぇ♪
Raspberry Pi Zero Wの完成です。

悪戦苦闘のButton SHIMロングピンヘッダハンダ付け

BME680ボードと一緒に買ったPimoroni Button SHIMでしたが、スタック用のロングピンヘッダソケットを付けたくて、部品が手に入るまで取付けを保留してました。
標準サイズのモノが秋葉原でも売られて無く、海外サイトで見つけたので注文して届くのを待っていたのですが、スイッチサイエンスでも取扱があってしかも安い!
2つあっても何かに使うだろうということで、先に届きそうだったスイッチサイエンスにも発注し、それを取り付ける事にしました。

はんだ付け前にロングピンヘッダをRaspberry Pi Zero Wに差し込み、そこにButton SHIMを付けてみました。
そこでとんでもない事に気がついたのですが、縦に付けられてるボタンスイッチと飛び出しているピンの間が狭く、愛用のはんだこてのこて先が入れにくかったのです。

四苦八苦した上、なんとかはんだ付け出来ました。
Raspberry Pi Zero Wの3倍の作業時間。こて先を基盤に当てすぎると熱で壊してしまうので、作業中それだけがとても心配でした。

使いやすいAdafruit Raspberry Pi Zero用ケース

スイッチサイエンスからRaspberry Pi Zero Wと一緒にAdafruit Raspberry Pi Zero用ケースも購入しました。
ツメ止め式のケースでネジ止めはありません。Raspberry Pi Zero/W共用ですが、本体を入れるのに少々コツがいります。
GPIO部は上面だけ利用可能で、底面の穴はありません。また、GPIO37/39ピン隣にあるTV/RUN端子用の穴も蓋にはありません。
カメラケーブルとマイクロSDカードスロットは穴が開いています。
Pimoroniのケースには、マイクロSDカードスロットの穴が無かったので脱着の多い時に不便を感じてました。
今は、Raspberry Pi ZeroにBME280を取付けて2階の環境測定用に固定接地してるので、逆にホコリなどが入りにくい分良いのですが。

悪戦苦闘してロングピンヘッダソケットを取付けたButton SHIMをスタッキングしてみました。
この後、Raspberry Pi Zero Wで動作確認やソフトウェアの開発をするので、しばらくこの状態で使うことになります。
出来たらRaspberry Pi 2に付け替えて使うつもりなのですが。

作業を終えて一段落。
ふと、スイッチサイエンスから届いた箱の蓋の裏側を見ると
秋の夜長の電子工作 時間はたっぷりありますよ🍁
年度初めの慌ただしい春とは違い、いろいろな事に取り組みやすい秋。まさに電子工作の秋といった感じでしょうか。

お読みいただきありがとうございました。
次回は、Pimoroni Button SHIMを使う話を書きたいと思います。
お楽しみに!

2017年11月12日日曜日

11月第1週(11/5~11/11)ダイエットサマリー 体重は麓に
初めてのサントリーホール
新しい血圧計到着

冬が立ちました

2017年11月7日(火)は立冬でした。
朝の布団の中や日中の日差しの暖かさが心地よくなる季節。そして、風の冷たさが身に応える季節。
そろそろ、ホットドリンク用の水筒にチェンジしたいですね。コレ、温かいのを入れると漏れるので😅

体重は一気に麓に下山し小休止⛰️

67kgから一気に落として62kg台へ。
そこから63kg前後を行ったり来たりするようになりました。
何か決心とかあったわけでもなく、何となく食欲の無い朝の食事をキャンセルするようになり、午後の1食のみにしてから一気に落ちました。
日頃のトレーニングはそのままで、献血のプレッシャーから開放された結果です。
良く朝食は食べないと体に悪いといいますが、あれはあくまでその後の行動が空腹で出来ない人に向けての話。
起きて即トレーニングに入れるような、私みたいな人には無縁だったりします。
夜は食べては行けない神話も、私の経験上あまり意味が無くて、むしろ寝てる間に体が再生されるわけですから、その食事こそすごく重要です。
私にとって、睡眠中も体つくりの大切な時間です。

普段通り筋トレ実施

今週は、特にイレギュラーとか無く、普段通り筋トレを行うことができました。
同じメニューをただひたすら毎日やるだけの日常。そりゃ飽きます。慣れてくれば苦痛も無くなりますから、余計にそうなるでしょう。
飽きないようにするため、トレーニング最中は何か映像を見ながらとか音楽を聞きながらとか、あるいは考え事をしながらやる事が多いです。
おかげで「今何回だっけ?」とカウントを忘れてしまい、やり過ぎて翌日の痛みでそれに気がつく事がよくあるのですが😅

初めてのサントリーホールは凄かった

KDDI スペシャル アンドリス・ネルソンス指揮ボストン交響楽団を聴きに、初めてサントリーホールへ行ってきました。
テレビでは何度も見たことがある場所でしたが、実際に来館するのは初めて。
巨大なパイプオルガンが有名で、1度その演奏を聴いてみたいと思っていたのですが、今回はハイドン 太鼓連打とマーラー 巨人です。

現地に18時に到着し、表参道のGoogle Home mini PRイベントで頂いたドーナツと持参したさんぴん茶で腹ごしらえ。
開場時間の18時20分になると、入り口上の壁が開いて音楽が流れ始めました。

席は2階LC3列7番目。私の好きな左側の席で、ステージにも付かく、上から全体を見渡せる場所です。
映画館でも似たような席をよく選びます。
大ホールで行われたのですが、中は録音・撮影禁止でした。そのため、その時の模様を画像でお伝え出来ないのが残念でしたが、とても素晴らしい演奏でした。
個々の自由さ・表現力・演奏技術。そして、それが1つになったときに生まれる大きなハーモニー。
19時ころから始まり21時すぎに終了。素敵なヒトトキでした。

この日は、コンサートの前に東武東京メトロパスを使って、都内をあちこち回って買い物してました。
とてもお得な切符なので、ある程度の移動予定がある時には利用しています。

新しい血圧計到着

新しい血圧計が届きました。
海外製のものなので、日本の医療機器認定は受けていませんし、ご覧の通り表記はすべて英語です。
説明書もケースもなく、袋に入れられこのまま届きました。
サイズが少し大きめなのと、外国人向けに最高血圧の上限値が高いためか、最初の締め付け圧が少々高いように思います。
それ以外は、普通に使えていますし、数字も問題なさそうなのでしばらく使ってみたいと思います。

ダイエットサマリーは終わり。
前回ブログの最後に記したマイクロSDXCの故障修理でしたが、代替品が届きました。Check Flashでチェックしても異常なし。数週間かかるとの事でしたが、5日で届いたのでとても早い対応に感謝です。
代替えのSDカードで色々やっていたRaspberry Pi Zero Wが、これで本格的に使う事ができます。Raspbian Stretchカーネルもだいぶ安定してきたので、Raspberry Pi 2もそろそろバージョンアップかな?と思っています。

今週もお読み頂きありがとうございました。
次回もお楽しみに!

2017年11月5日日曜日

10月第5週(10/29~11/4)ダイエットサマリー 体重は富士山🗻
不整脈の原因特定
Raspberry Pi関連
今週の家電

紅葉の季節🍁

秋深まり、木々も紅葉する陽気になりましたね。
寒暖差が大きくて、服選びが悩ましいです。
先週の台風21号に続き、今週も台風22号の襲来でスタートしましたが、幸い前回ほどの被害は無かったので長距離サイクリングしてきました。ロードバイクならなんてこと無い距離なのでしょうが🚲
途中でニャンコ先生と遭遇したので、1枚撮らせて頂きました。まったく相手にされなかったのですが😅

体重はまるで富士山🗻

体重のグラフは、まるで富士山のごとく、登りきって再び下がり始めました🗻
そんな感じで、やっと63kg台に到達。
献血が無いおかげで、採血可能判定の血液検査のプレッシャーが無い分、色々無茶な事も出来ます。
食事をとるタイミングは食欲任せで、以前のように1食だけだったり、2食でも少食だったりする事が増えてきました。
その結果がコレなのですが、そもそも健康的な食事をとっていたら減量ダイエットは難しいと思います。成長期の子供は別として、成人が体重の増減を伴う食事は不健康とされます。
人間の体は、都合よく減らしたい部分だけを減らす事はできず、すべてが連動して生かされる仕組みになっています。
そこを色々考えながら、減量ダイエットの過程でフォローしていくのが難しいのですが。

筋トレは今週も予定通り

今週は、自転車のロングライドが2回ほどあったので、疲労と時間の関係で厳しかった日がありましたが、なんとか普段通りフィニッシュしました。
体重が減少傾向にある時の筋トレは、空腹と疲労と倦怠感との戦いなので、やるのが結構キツイです。
それでもやり続けられるのは、最低限コレだけは続けるという日課みたいになってるからだと思います。
そろそろ、ランニングをしたい気分です🏃

不整脈の原因特定

10月第3週ダイエットサマリーで書いたホルタ心電図の解析結果が病院に届いたので、再び来院しました。
結果は、運動誘発性不整脈。治療の必要の無い不整脈でした。ただ、運動時や運動後の心拍数が最大170bpmという時があり、そのために心拍数を下げる薬の処方を勧められました。しかし、私が副作用の懸念を伝えると、経過観察にして頂けました。
献血についても相談しましたが、そもそも論の部分で勧められず、これについては全ての健常者含めての話だったので自己判断にさせていただきました。
1度、運動中を含めた心拍数の変化や心電図って見てみたかったので、とても良い貴重な機会でした。

診察が終わった後、病院近くの魔女のコッペパンに寄って2つ買いました。中身は、大人のハムサラダと抹茶有機あんこです。
ふとGoogle Mapsのお店情報を見ると、8月に長期休暇していたために店じまいと勘違いされたのか閉業扱いになっていたので、申請して復活させていただきました。
2017年11月22日には、浦和駅東口の浦和パルコ地下1階にも出店されるとのことなので、自動車での来店でも買いやすくなるのでは無いか?と思います。

Raspberry Pi関連の事

前回の記事でご紹介した英Pimoroni BOSCH BME680ですが、試行錯誤の末にRaspbianにデーモン化して実装出来ました。
Pythonアプリを、ここまで大々的に書くのは初めてだったので骨が折れました。マルチスレッド化やデーモン化ってちょっと普通の書き方と違うので。 Githubで公開しようか迷ってて、そこで必要なマークダウンファイルの書き方を今探っていたりしています。
コードがとにかく汚いわりに、仕事はちゃんとしてるので出すかわかりませんけどね😅

今までサポート機で使っていたRaspberry Pi Zeroと、置き換えで余ったBME280を使って2階の計測をはじめました。
複数箇所のデータ計測を想定して作っていたので、サクッとできちゃいました🍪

Raspberry Pi Zero Wを買っちゃいました。
スイッチサイエンスの抽選販売に申し込んだら当選。
ちょうど病院にいた時にそれを知って、診察順を待ってる間に他のモノを見ながら散々悩み、何とか送料無料3000円分注文して2日後に届きました。
レビュー記事はまた後ほど。

久々に家電買っちゃいました

久々に家電を買っちゃったので、勝手に1コーナー新設😅
ツインバード工業 サイクロン スティック型クリーナー TC-EA35Wです。
以前書いた9月のシルバーウィークの旅で、宿泊先のお宅で掃除する時に使わせて頂いたのがコレだったのですが、とても使いやすい上に調べたら値段もお手頃だったので買っちゃいました。
同社のスティック型サイクロンクリーナーの中では吸引力が弱いほうなのですが、他社製のロングホースと違って本体と吸込口がとても近いのでロスが少なく良く吸ってくれるんです。
そして、コンパクトさゆえにダストボックス容量が少ないものの、紙パックを使わないのでマメに捨ててもフィルターが壊れない限り経済ロス資源ロスゼロ。
長い棒は脱着可能で、スイッチがこの棒にも本体にも付いてるので、コマメにスイッチのオンオフが可能。だから節電にも効果的。
音が大きいのが気になりますが、これだけ軽くてコンパクトだと楽にマメに掃除機かけられるので気に入りました。

今週のダイエットサマリーはおわり。
新しい掃除機で掃除してたら、無くしたと思っていたマイクロSDカードのレシートを見つけました。
このマイクロSDカード、長らくRaspberry Pi 2で使っていたのですが、再起動時にカーネルパニックが頻発して御役御免となり、他の用途で使ってみようかとCheck Flashで念のため調べたらエラーがいくつも出たので故障扱いにしました。
Silicon Power SP064GBSTXBU1V10SPという商品で、永久保証品だったのですが調べるとレシートや通販サイトの購入履歴が無いと保証を受けられないとの事。
それがヒョッコリ出てきたのでラッキーでした😁

今週もお読み頂きありがとうございました。
次回もお楽しみに!

2017年10月25日水曜日

英PimoroniからガスセンサーBOSCH BME680が届いたのでRaspberry Piで使ってみた

ついに発見!ガスセンサー BOSCH BME680

英PimoroniのTwitterで知ったBOSCH BME680ボードの発売。
自宅のエアーコンディションを調べてみたく、以前からガスセンサーを探していました。
アナログセンサーが有ることは知っていたのですが、それをRaspberry Piで利用するためには数値化するためのADコンバーターというのが必要になります。
その手間を惜しんで今まで保留にしていたのですが、I²C接続可能なコレの実装ボードが発売になったので即注文。
ちょっと高かったんですけどね😭

写真の右側が英Pimoroni BOSCH BME680ボード
左側は、次いでに注文したボタンを追加するButton SHIMボードです。

ヘッダーピンを取り付け

英Pimoroni BOSCH BME680ボードには2種類のヘッダーピンが付属していて、利用方法に応じて選択できます。
ただ、うちの場合はセンサーをアクリル板でサンドイッチして保護し、ボード横からケーブルを挿したいので、自前で用意したL型ヘッダーピンを使います。
I²Cで使うのは4ピンのみなのですが、Raspberry PiのGPIOに直刺し出来るよう、間にNCピンが追加されているので5ピン使います。

ピンを挿す穴が若干上下にズレているのですが、これは取り付けの際にピン動かないようにするためだと思われます。
だから、はんだ付けの前に差し込んで浮かしても落ちたりしません。
また、各ピンの印刷も両面に書かれているので、どちらから見てもひと目でわかります。
英Pimoroniのこういう細かい心遣いある作りは、地味にとても嬉しいです😁

1列5ピンのヘッダーピンははんだ付け楽でいいですね😅
コテ先にハンダを軽く付けて下準備し、コテ先をピンに当ててからハンダ線を当てて流し込んでいくイメージで。
今回も、我ながら上出来。テスターは当てず、ぶっつけ本番でいきます。

英Pimoroniで以前買ったRaspberry Pi Zeroと繋ぎます。
いつもなら、どれがI²CのSDAでSCLで、どこに電源とかグランドとか取る?と迷うのですが、直刺し想定のピン配列なので電源ピンさえ間違えなければ、あとは順番に挿してくだけなので楽です。
もちろん、NCピンをスキップするのも忘れずに。繋いでもいいですが使われないピンなので。

Raspberry Piでセンサー値を読み取る

今回は、ブログ用にこの段階で最新のリリースデート2017-09-07からSDカードにOSを書き込んで使いました。
今のOSイメージって便利なもので、I²C関連のコマンドやPython Libは最初から入っているので、raspi-configでI²Cを有効にするだけで使えちゃいます。
念のため、下記コマンドで有効になってるかを確認します。
sudo i2cdetect -l⏎
そして、オプションを変えて下記コマンドで接続されてるI²Cのスレーブ機器のアドレスを確認します。
sudo i2cdetect -y 1⏎
画像のように76という数字が出ていればOKです。出てないとRaspberry Piが認識していない事になります。
このアドレスはボードにも書かれていて通常はOKなのですが、もし0x76アドレスが接続されてる他のI²Cスレーブ機器と同じようなら、ボードのADDRをショートさせれば0x77にする事が出来ます、多分。
多分というのは確認してないからなのですが、一応BME680の仕様では可能なので多分出来ると思うのですが。

今回は、英PimoroniGitHubで公開されてるPython Libを使わせて頂きます。
Clone or Downloadのボタンを押してZIPファイルをDownloadし、フォルダ解凍します。今回は、/home/pi/Downloads/bme680-masterと便宜上します。
GitHubのBME680 Python Libトップページ下のインストール手順に従ってLibをPythonにインストールします。
libraryディレクトリ直下にあるsetup.pyにinstallのオプションを付けて実行するだけです。
sudo python setup.py install⏎
出来たら、examplesディレクトリ直下の3つのコマンドどれか実行すればセンサー値が表示されます。
まずは簡単な所で、温度・気圧・湿度の表示コマンドから。
python temp-press-hum.py⏎
画像のように、すごい勢いでズラーと表示されていくと思います。

次は、ガスセンサーも含んだすべてのセンサー値を表示してみます。
こちらも下記コマンドを実行するだけです。
python read-all.py⏎
最初にキャリブレーションデータとかイニシャルリーディングとか色々出ますが、まぁ気にしないでください。BME680のデータシートを読むと何となくわかると思いますが、全部英語で頭痛くなると思うので😅
temp-press-hum.pyを実行した時のように温度・気圧・湿度が表示され、その後ろにOhmsという数値がありますが、これがガスセンサー値でΩ(オーム、抵抗)です。
最初のうちは、このガスセンサー値が時々取得出来なくて飛び飛びになることがあります。
他のセンサーと違ってウォームアップのために値が安定するまでに時間がかかります。
その辺の話は次のコマンドで説明します。

3つのサンプルコマンドの最後の1つindoor-air-quality.pyを実行します。
python indoor-air-quality.py⏎
画像には「sec」の値がありますが、私自身で追加した項目です。
実行直後にコレクティング ガス レジスタンス バーンイン データ 5ミンって英語表示されますが、これがウォームアップの事で5分間センサーを動かし続けてガスセンサー値が安定するのを待ちます。

5分後にガスセンサー値の基準値と湿度の基準値(こっちは決め打ちで40%RH)が確定するので、それからズラズラとガスセンサー値と湿度、内部的に算出したエアークオリティ値とその数字に対する状態(この画像ではアベレージ、平均的)が表示されます。
これは、ISO16000-29 VOC検知器評価法に基づいたもので、揮発性有機化合物(VOC)の待機中の濃度から大気が綺麗かどうかを評価しています。

システムに組み込んでいて気がついた不便な点

あらかじめ用意していたPythonスクリプトが役に立たない事がわかり、1から作り直してなんとかBME280と置き換えられました。
しかし、問題点も見つかりました。それは、ガス値を読み取る時に今の方法だと毎回5分もかかるということ。
その解決案として、デーモン(Windowsでいうサービス)で起動時に立ち上げてBME680の初期化と取得を行ない、センサー値の欲しいアプリはそこに問い合わせて拾ってくる方式。

Twitterをお休みして、こちらに全力投球中なのですが前途多難です。