白旗製作所

Google Chart APIによるデータのグラフ描画

Raspberry Piを使用してロギングしたデータを手軽に直接可視化する方法として
Google Chart APIを使用するという方法があります.

基本的な使い方は以下のページに事例が載っています.
Using Google charts in Python CGI scripts

ここでは上記のページのスクリプトの解説と,複数グラフを書く場合の例を記載します.
前提としてPython(2系)CGIスクリプトの動くWebサーバ上の動作とします.
(Webサーバ環境構築方法は以下を参考ください.
Raspberrpy PiのWebサーバ(Apache)追加

2013.07.01;23
2013.07.02;67
2013.07.03;45
2013.07.04;17
2013.07.05;56
のようなセミコロン区切りのデータを描画する例です.


複数の系列がある場合にグラフを縦に並べるには,以下のようにします.
(Draw Multiple Chartsを参考にします.)


これで別のスクリプトで取得したCSVデータ等を全て並べてグラフ化することができます.
Google Chart APIはRaspberry Piに限らず使用できますし,Webサーバが立っている環境でササッと
可視化するにはなかなかよい方法だと思います.
スポンサーサイト
  1. 2017/09/24(日) 23:43:09|
  2. Raspberry Pi
  3. | トラックバック:0
  4. | コメント:0

Linux(Raspberry Pi)でプログラムを走らせたままにしておく(screen, service)

Raspberry Piを使用していル際に,データ受信スクリプト等を走らせたまま
別作業を行なう方法として,screenコマンド,serviceの使い方を記載します.
他にも方法があると思いますが,以下の2つが確実性があり使いやすかったです.

①screenコマンド
 screenコマンドでは,単独のセッションを立ち上げて
 その中でスクリプトを走らせ別のセッションに移ることができます.
 ぱぱっとスクリプトを裏で動かしておきたいときに便利です.

 主に以下の5つのコマンドを知っておけばOKです.
 (a)新規セッションを作成する
 $ screen

 (b)セッションを離れる
 Ctrl+aを押した後dを押す

 (c)セッション一覧を確認
 $ screen -ls
 数字がセッションのID

 (d)セッションに再参加する
 $ screen -r XXXXX
 XXXXXは(c)で調べたセッションID

 (e)セッションを削除
 $ rm -rf /var/run/screen/S-UU/XXXXX.pts-*.raspberrypi
 UUはユーザー名,XXXXXはセッションID,*はよくわかりません.
 S-UU以下は(c)で調べれば名前がわかります.

②service
 スクリプトをOSのサービスとして登録しておけます.
 バックグラウンドで動かすことができるのはもちろん,
 電源投入次に自動で実行させることができます.

 (a).serviceファイルを作成
  サービス内容を記述するファイルを作成します.場所は/etc/systemd/systemに置いておきます.
  例として,シリアル通信でデータ受信するpythonスクリプトを登録します.
  $ sudo nano test.service
[Unit]
Description=SerialDataReciever
After=syslog.target
[Service]
Type=simple
WorkingDirectory=/home/pi/public_html/data
ExecStart=/usr/bin/python /home/pi/python/serialrcv.py
TimeoutStopSec=5
StandardOutput=null
[Install]
WantedBy = multi-user.target
 (b)サービスの開始
  $ sudo systemctl start test

 (c)サービスの停止
  $ sudo systemctl stop test

 (d)サービスの自動起動への登録
  $ sudo systemctl enable test

 (e)サービスの自動起動解除
  $ sudo systemctl disable test
  1. 2017/09/24(日) 21:50:05|
  2. Raspberry Pi
  3. | トラックバック:0
  4. | コメント:0

Raspberrpy PiのWebサーバ(Apache)化

Raspberry PiをWebサーバとして使用するため,Apacheをインストールする手順を記載します.
Apache公式のHow-To / チュートリアルも参考にしてください.
ここでは以下を行います.
・Apache2の導入
・Webサーバのポート番号の変更
・cgiの設定

①ダウンロードとインストール
 $ sudo apt-get install apache2

②動作確認
 /var/www/html/test.htmlに以下を記載


test

This page is test page.

  http://localhost/html/test.htmlにアクセスして動作確認

③ユーザーディレクトリの有効化
 デフォルトだと/var以下にhtmlファイルなどを置く必要があるので,
 ユーザーのディレクトリ(/home/pi/public_html)以下に置けるようにする.
 $ cd /home/pi
 $ sudo a2enmod userdir
 $ mkdir ~/public_html
 $ sudo cp /var/www/html/test.html ~/public_html
 $ sudo service apache2 restart
 で
 http://localhost/~pi/test.htmlにアクセスして動作確認
 
④ポートの変更
 $ sudo nano /etc/apache2/sites-available/default
 $ sudo nano /etc/apache2/ports.conf
 で双方ポートを任意の値に変更する.
 
⑤cgiの設定
 (a)cgiを有効にする
 $ sudo ln -s /etc/apache2/mods-available/cgi.load /etc/apache2/mods-enabled/cgi.load
 (b)cgiの設定を変更する
 $ sudo nano /etc/apache2/sites-enabled/000-default
 でInclude conf-available/serve-cgi-bin.confのコメントを外し,以下を変更する
(変更前)
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

(変更後)
ScriptAlias /cgi-bin/ /home/pi/public_html/cgi-bin

~~~
AddHandler mod_python .py
AddHandler cgi-script .cgi .py .pl

 /etc/apache2/mods-enabled/mime.conf 219行目
 で,AddHandlerのコメントを外し,.pyを追加
 #AddHandler cgi-script .cgi
 →AddHandler cgi-script .cgi .py
 (d)test.pyでテスト
 /home/pi/public_html/cgi-bin/test.pyに以下を記述
#!/usr/bin/python --
f=open('/home/pi/test.csv','a')
print "Content-type: text/html"
print
print ""
print ""
print "test"
print " "
print " This is a test page with python script."
print " "
 http://localhost/~pi/cgi-bin/test.pyにアクセス

 (e)アクセス権設定
 apacheのユーザ(www-data)は通常のユーザとは異なるため,直接ファイル操作等ができない.
 そのため操作するデータが格納されたディレクトリの所有者を以下のように変更しておく.
 $ sudo chown www-data:www-data /home/pi/public_html
 データの入ってるフォルダの所有権をwww-data(apacheの起動ユーザ)に移す
  1. 2017/09/24(日) 21:35:07|
  2. Raspberry Pi
  3. | トラックバック:0
  4. | コメント:0

RaXino+RaspberryPi電力計の電力計測部分の製作

この記事の電力計測部(CT~マイコン)の
詳細を書いていこうと思います.

電力計測部の回路は以下の図のようになっています.
CT.png
まず試験負荷としてドライヤーとスイッチを接続し,延長コードの1箇所にCTを取り付けます.
CTの負荷抵抗RLは100Ωとします.これで30A→1Vに変換できます.
ドライヤーは定格1200Wなので,大体12Arms→0.4Vrms→1.13Vp-pか,
これよりも小さいくらいの電流が検出できるはずです.

CTの負荷抵抗値について、秋月電子のHPやデータシートでは負荷抵抗RL=10Ωとしか記載がありませんでしたが,
以下のページを見ると300Ωまでは結合係数もよく計測できそうでした.
CTの最大スペックの80Aまでは使わないでしょうし,30Aで0.1Vだとあまり電気を使っていない時の精度が悪化しそうですので、なるべく負荷抵抗の値を上げて検出感度を高くしたいところです。
一方で、非線形な負荷だと電流のピークが通常の正弦波の倍とかになることもありますので負荷抵抗を大きすぎるのも考えものです。ここでは100Ωとしました.
参考:カレントトランス (秋月 SR-3702-150N/14Z) の特性測定 - ラジオペンチ



これを電流制限抵抗10kΩを経由してRaXino(RX62N)のアナログ入力AN0に入力します.
元は交流波形なのでADコンバータには0V中心に正負の電圧がかかりますが,
マイコンのアナログ入力には保護ダイオードがADコンバータ前に入っているため,
これで負電圧はカットし半波のみ検出することにします.

この回路を以下の写真のようにユニバーサル基板上に実装しました.
DSC_0653_.jpg


以下が負荷抵抗両端の波形です(200kHzのデジタルフィルタつき).
大体1.025Vp-pになっており,
きれいに電流を検出できていそうなことがわかります.
dry2.png

下がADコンバータの入力波形です.
元の波形と比較して負側の電圧が保護ダイオードのVfの-0.5V程度でカットされていることがわかります.
dry3.png

これをADコンバータで1ms周期で100サンプル取得した結果が以下のデータです.
AD生値
ADコンバータの電源は3.3V(この場合デバッガの電源を使ったので3.1Vくらい)で,分解能は12bitですから,
1.025/2/3.1*4096=677くらいのピークが読み取れており,大体一致しています.

このデータ列を全波整流したものとして積算しRMSを求めれば電流の実効値が求まります.
具体的には,
①データ列の2乗和平均の平方根を求める
②2乗の面積を2倍するためsqrt(2)をかける
③AD値→電圧→電流の変換係数(99/4096)をかける
と,10.5Aとなり,概ね正しい電流の実効値が得られます.
これにAC100Vをかければ瞬時電力になります.

以上の内容をマイコンに算出させて,RS232Cで送出させるプログラムを作成してやれば,電力計測部分は完成です.



次は可視化部分を書いていきます。
  1. 2017/08/18(金) 00:44:47|
  2. Raspberry Pi
  3. | トラックバック:0
  4. | コメント:0

Raspberry Piの初期設定

Raspberry Piの初期設定方法を記載します。
既に色々な方が記事にしているので今さらですが、自分の環境ではそのままだと使えなかったものが多数あったので自分用にまとめておきます。
ちなみに、使用しているRaspberry PiはModel A+ V1.1です。

①Raspberry PiのOSイメージの用意
 4GB以上のMicroSDカードを用意。
 https://www.raspberrypi.org/downloads/raspbian/
 からイメージを落として、
 Win32DiskImagerで焼く。


②起動
 MicroSDカードをRaspberry Piに入れて、キーボード、HDMIケーブルを指して起動。
 普通に起動すればOK。OSによってGUIかCUIかが異なる。
 初期ユーザIDとパスワードは
 ID: pi,
 pass: raspberry
 パスワードの変更は
 passwdコマンドで行う。
 
 
③日本語設定
 ターミナルから、sudo raspi-configで初期設定画面に入る。
 4. localisation optionsのChange Localeで、jp EUC-JPと、jp UTF-8をスペースで選択してOK。デフォルトはen.GB-UKにしておく。
 Change TimezoneでAsia Tokyoを選択。
 Change Keyboard Leyoutで105のJapaneseのデフォルトを選択して再起動しておく。

 (ネットに繋いだ後)
 sudo apt-get install ttf-koch-gothic xfonts-intl-japanese xfonts-intl-japanese-big xfont-kaname
 sudo apt-get install uim uim-anthy
 sudo apt-get install jfbterm
 を行い、フォントを導入してから、再起動。

④SSHの有効化
 5. Interfacing OptionsのSSHをEnableにする。
 (7. Advanced Optionsにはいっていることもあり。OSのバージョンに寄る)

⑤WiFi接続
 PLANEX 無線LAN子機 (USBアダプター型) 11n/g/b 150Mbps MacOS X10.10対応 GW-USNANO2A
 をUSBコネクタに指す。

 GUIでSSIDがステルスでなければ右上のアイコンからWiFi接続出来る。
 ステルスの場合、
 sudo sh -c "wpa_passphrase [SSID] [PASS] >> /etc/wpa_supplicant/wpa_supplicant.conf"
 でconfファイルを作った後、
 sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
 でwpakeyの下に
 scan_ssid=1を追加して保存して終了(Ctrl+xでYes(y), Enter)
 ifconfig wlan0で接続されたか確認。接続されなければ再起動する。

 コンソールの場合、
 sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
 の最終行に
 network={
  ssid="[SSID]"
  psk="[PASS]"
 }
 を追加して保存
 
⑥ IPアドレスの固定
 sudo nano /etc/dhcpcd.confで
 interface wlan0
 static ip_address=192.168.0.X/24
 static routers=192.168.0.1
 static domain_name_servers=192.168.0.1
 を末尾に追加して再起動
 注意:IPアドレスを確認する場合はifconfigを使う
 
⑦ セキュリティ設定
 raspberry piのアップデート
 $ sudo rpi-update
 $ sudo reboot
 rootへのパスワード設定
 $ sudo passwd root
 ユーザー名の変更
 $ sudo usermod -l [新ユーザー名] pi
 sshのポート番号変更して再起動
 $ sudo vi /etc/ssh/sshd_config
 $ sudo /etc/init.d/ssh restart

⑧DNSサーバの指定
 Err http://mirrordirector.raspbian.org/raspbian/ jessie/main cu armhf 1.07-20.1
  Could not resolve 'mirrordirector.raspbian.org'
 とかエラーがでたら、DNSの名前解決ができていない。プロバイダから提供されたDNSサーバか、LAN内のルータアドレスを調 べ、
 sudo nano /etc/resolv.confの1行目に
 nameserver 192.168.0.1
 と記入しておく。

⑨リモートデスクトップ接続出来るようにする
 sudo apt update sudo apt upgrade→時間がかかる
 sudo apt install tightvncserver
 sudo apt install xrdp sudo reboot する。
 tightvncを入れないとだめっぽい

⑩コマンドラインからのLチカ
 $ sudo su
 $ echo 25 > /sys/class/gpio/export
 $ echo out > /sys/class/gpio/gpio25/direction
 $ echo 1 > /sys/class/gpio/gpio25/value
 $ echo 0 > /sys/class/gpio/gpio25/value
 $ echo 25 > /sys/class/gpio/unexport
 25をexportしてoutに設定し、Hにする、Lにする、その後unexportして開放する。
 →開放しないとその後使えなくなるので注意。
 ピン配置はこの辺を参照
 http://nejiketa.seesaa.net/article/414258096.html

⑪ python のインストール
 Raspberry Piにはpythonが標準でインストールされているが,
 python3系など使いたい場合,バージョン管理がややこしいのでminicondaやpyenv等を使う.
 ここではminicondaの導入方法を記載.
 Anaconda on the Raspberry Piを参考に minicondaを導入.
 まずminicondaのダウンロードとインストール(2系と3系好きな方を.)
 $ wget http://repo.continuum.io/miniconda/Miniconda-3.5.5-Linux-armv6l.sh
 $ wget http://repo.continuum.io/miniconda/Miniconda3-latest-Linux-armv7l.sh
 $ /bin/bash Miniconda-3.5.5-Linux-armv6l.sh
 $ /bin/bash Miniconda3-latest-Linux-armv7l.sh
 でインストールできる.あとはpathの設定.
 /home/piで
 $ sudo nano .bashrc
 最終行に
 export PATH="/home/pi/miniconda3/bin:$PATH"
 を追加して再起動
 $ sudo reboot

残りはおいおい記事を追加していきます.
  1. 2017/07/23(日) 14:24:52|
  2. Raspberry Pi
  3. | トラックバック:0
  4. | コメント:0