raspberry piと7セグメントLEDで時計を作る

S__13213700
今年も早いもので、一年が終わろうとしています。年末休暇の時間を使って勉強しようと、7セグメントLEDを秋月電子で買ってきました。
raspberrypiとosl40391-IBというLEDを使って時計を作ります。BTTFに出てくるイメージ強いですね。
電子工作は未経験なので試行錯誤しながらでしたが、何とか完成しました。配線はraspberry pi 3と7セグメントLEDで時計を作るや、aitendo 4桁7セグとRTCでデジタル時計をつくってみた。を参考に勉強しました。
pythonも未経験でして、、、コードはHow to drive a 7 segment display directly on Raspberry Pi in Pythonを参考にしました。


# code modified, tweaked and tailored from code by bertwert
# on RPi forum thread topic 91796
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
# GPIO ports for the 7seg pins
segments =  (26, 19, 13, 6 ,5, 11, 7)
# 7seg_segment_pins (11,7,4,2,1,10,5,3) +  100R inline
for segment in segments:
GPIO.setup(segment, GPIO.OUT)
GPIO.output(segment, 0)
# GPIO ports for the digit 0-3 pins
digits = (20, 16, 8, 25)
# 7seg_digit_pins (12,9,8,6) digits 0-3 respectively
for digit in digits:
GPIO.setup(digit, GPIO.OUT)
GPIO.output(digit, 1)
num = {' ':(1,1,1,1,1,1,1),
'0':(0,0,0,0,0,0,1),
'1':(1,0,0,1,1,1,1),
'2':(0,0,1,0,0,1,0),
'3':(0,0,0,0,1,1,0),
'4':(1,0,0,1,1,0,0),
'5':(0,1,0,0,1,0,0),
'6':(0,1,0,0,0,0,0),
'7':(0,0,0,1,1,1,1),
'8':(0,0,0,0,0,0,0),
'9':(0,0,0,0,1,0,0)}
try:
while True:
n = time.ctime()[11:13]+time.ctime()[14:16]
s = str(n).rjust(4)
for digit in range(4):
for loop in range(0,7):
GPIO.output(segments[loop], num[s[digit]][loop])
#    if (int(time.ctime()[18:19])%2 == 0) and (digit == 1):
#        GPIO.output(25, 1)
#    else:
#        GPIO.output(25, 0)
GPIO.output(digits[digit], 1)
#time.sleep(0.0001)
time.sleep(0.0004)
GPIO.output(digits[digit], 0)
finally:
GPIO.cleanup()


tryの中で一秒ごとに任意のLEDを点滅させる機能があるのですが、コメントアウトして無効にしています。今回は4桁の数字だけ見えれば良いので、不要でした。
ここまで作って動いたらあとはいつも通り、/etc/systemd/system/ledclock.service を以下のように新規作成してサービスとして追加します。


[Unit]
Description = LED Clock
[Service]
ExecStart = /usr/bin/python3 /usr/local/src/ledclock.py
Restart = always
Type = simple
[Install]
WantedBy = multi-user.target


これでsystemctl start ledclock.serviceで時計が起動するようになりました。systemctl enable ledclock.serviceしておけばraspberry piが起動するタイミングで勝手に時計も起動しますね。
最後に、ブレッドボードごとPCのモニタに貼っつけて完成です。
youtubeを全画面で見ていて遅刻しそうになる...なんて事態が防げますね!
負荷の話。
raspberry piに負荷がかかると若干LEDがちらつきますが、気にならないレベルです。pythonの書き方次第かなと思います(ループ処理内でifを使うと処理が遅く、ちらつきが発生しました)
ちなみに・・・これの応用として、別サーバ(raspberry piと同一セグメント)のDBに登録されている気温のデータを引っこ抜いてLEDで表示する、というのも試したのですが、DBアクセスが重いせいか、ちらつきが発生して実用的ではありませんでした。
DBから取得した値を一旦保持して、頻繁なDBアクセスを控えるなどの処理を入れればいける気がしてますが、未検証です。

Raspberry piを買ったのBME280を使って遊ぶ

S__13041671
ラズベリーパイという小型の、モニタもキーボードも無いPCを買いました。最近流行りのIoTってやつですね。おもちゃ価格で色々出来ちゃいます。
手始めに部屋の温度・湿度・気圧を測定しようと思いBME280を買いました。
他にもブレッドボードやジャンパ栓が必要なのですが、手元に無いため秋月電子で購入しました。
あとは配線をして、プログラムを適当な場所からコピペして完成です。・・・とは言っても色々と四苦八苦したので、簡単に手順化しておきますね。
1. BME280をブレッドボードに刺して配線をする (参考:http://deviceplus.jp/hobby/raspberrypi_entry_039/)
2. ラズパイからプログラムを叩いて値を取得する(温度、湿度、気圧)
3. 取得した値をmariaDBに格納する
4. DBに値を格納まで確認出来たら、値の取得&DBに格納するシェルスクリプトをcronで1分ごとに回す
5. mariaDBに格納した値をgrafanaで可視化する
以上です。問題なければこんな感じに可視化されます。
無題.jpg
あと、発光ダイオード(赤)と220Ωの抵抗も買ったので、朝の7時にLEDが点滅するようにしました。youtubeを全画面で見てて遅刻するのを防止するのに役立ってます。

SKAGEN Hybrid Smartwatch Jornを買った

SKAGEN Hybrid Smartwatch Jorn
新しく時計を買いました。スカーゲンのスマートウォッチです。アナログ時計に見えますが、スマホのアプリとBluetoothで連携して通知受け取って振動したり、横のボタンを押すことで日付が分かったりします。
今後買う人の為にと思ってAmazonのレビューにも書いておいたのですが、文字盤左にある4つのライトは現在機能しません。
どうやらシステム側で使わないようになったみたいです。TwitterでSkagen公式アカウントに聞いたら教えてくれました
あと、連携出来るアプリは色々あって、もちろんLINEとかTwitterはあるんですが、Cisco Sparkが入っておらず残念なので連携してちょーってお願いのメールを送ってみました。対応してくれるかな?難しいかな?
Cisco sparkはLINEみたいな仕事用のチャットアプリです。同じ仕事用アプリのSlackは連携対象になってました。Spark負けてんぞ!
これの前は1ヶ月くらいダニエルウェリントンの時計を使ってました、文字盤の綺麗さに一目惚れして。でも電車に乗ると被りまくるんですよね!それに、男性でつけてる人があんまいないし!恥ずかしい!
なので、DWの時計は早々に妹にプレゼントし、自分は新しくスカーゲンの時計を買った次第です。時計は針が少なくてシンプルなのが好きです。
スマートウォッチはずっと気になっていたんですが、充電が煩わしいのと、チャラいイメージが強くて手が出せてませんでした。
でもこれはボタン電池駆動で、半年くらい持つらしいのでそこの心配が無いのが最高です。
「充電」の煩わしさが本当に苦手で、それが理由でタブレットもKindle Paper Whiteにしたし(1ヶ月くらい充電しないで使える)、
イヤホンも充電が煩わしいので未だにBluetoothじゃなくて有線のやつを使ってます。
電池の容量増加とシステム側の改善で電池の持ちがもっと良くなると色々IoTが進みますね!IoTって言ってみたかった。
ちなみにオリエントの自動巻き時計もあるんですが、今の仕事でノートPC使うようになってから、PCと時計の金属バンドが当たってPCが削れてきたんですよねw
これから冬ってこともありますし、しばらくは革バンドのスカーゲンで行こうかと思います。

自己紹介(2017年11月現在)

「ゆうき」です。昔はArkey(あーきー)って名乗ってた時期もありました。
あーきーで呼んで頂いても全然OKです。
どんな人がこのブログを書いているのだろう…と思うこともあると思いますので、簡潔にプロフィールを記載しておこうと思います。
 ※書いた人なんてどうでもいいよ、という人はこのページを見ないだろう。
【基本情報】
名前:ゆうき
性別:男
誕生日:2/27
出身地:埼玉県熊谷市
職種:ITのインフラエンジニア(ネットワーク・サーバ)です。
資格:CCNA(R&S),CCNP(R&S)T-shoot以外)), ITパスポート, アマチュア無線4級, TOEIC 735点
 ※資格情報は、このブログを見て頂く際の前提として記載しています。
 この資格を持っていればこういうことが出来るんだなぁと思って頂ければ幸いです。
興味:インターネット、言語(日本語・英語・関西弁)、航空、ピアノ
【IT系知識】
ネットワークを中心にサーバなどインフラ業務を中心に経験を積んできました。
基本設計から運用まで一通りこなしました。
ネットワークに関する知識レベルはCCNP程度です。
サーバについてはWindowsServerとLinux(RHEL)が半々程度で、
LinuxについてはLPIC-1程度の知識があります。
また、自宅に各種機器を揃えており、ESXiによる仮想サーバやCisco機器(L3,L2スイッチ、ルータ、無線AP)やYAMAHAルータなども揃えております。
【ピアノ】
幼稚園くらいから中学3年くらいまで習っていました。
バイエル、ブルグミュラー、ソナチネを終えてインベンションやソナタに入った辺りで高校受験を機に辞めてしまいました。
音楽は「音」を「楽しむ」ことが一番大事なので、弾くのが楽しければ良いかなって思っています。
たまに弾いてyoutubeにアップロードしてます。
【連絡先】
メールアドレス:公開しているメールアドレスはありません。
お手数ですがTwitter(@yekra22)に連絡を下さい。
【当ブログの著作権】
全ての記事及び画像について転載して頂いて構いません。当ブログへのリンクも不要ですが、転載元を記載してくださると嬉しいです。
ただし、記事については修正・削除等の可能性がありますので、ご了承ください。
【他の情報発信】
Arkey’s Diary
Twitter
Youtube
ブクログ
Flickr
MyAnimeList

grafanaでESXiホストの温度とファンの回転数を監視する

【概要】
CentOS7でシェルスクリプトをcronで定期的に動かし、ESXiホストの温度・ファン情報を抜き出してDBに記録し、記録したデータをgrafanaで取得、表示し視覚化(グラフ表示)します。
※仕事では視覚化のことを「見える化」って言うのですが、視覚化じゃ駄目でしょうか。まるで「夕立(驟雨?にわか雨?)」と「ゲリラ豪雨」くらいの違和感があります。
【元となる情報】
vsphereclient.jpg
定期的に取得して視覚化したいデータは、vSphereClientで接続した際に確認出来る「温度情報」と、「ファンの回転数」です(画像でファンのところ、展開するの忘れてました)。
【使うもの】
・ESXiが載った物理サーバ
・CentOS7(ここにスクリプトやgrafanaを入れます)
・mariaDB(MySQLでもpostgresqlでも良い)
・grafana
【手順】
■ESXiの情報を取得する
① ESXiにSSH接続して「vim-cmd hostsvc/hostsummary」コマンドでDDR Ambient TempとかSYS Ambient TempとかCPU FANの値が見れることを確認する
② DBにテーブルを作って、取れた値を格納するカラムを作成する(値が入るとこんな感じになります)

MariaDB [(none)]> use esxi
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [esxi]> show tables;
+—————-+
| Tables_in_esxi |
+—————-+
| esxi_env |
+—————-+
1 row in set (0.00 sec)
MariaDB [esxi]>
MariaDB [esxi]>
MariaDB [esxi]> select * from esxi_env;
—-+———————+———+———+———+———+—————+————–+
| id | date | pci_tmp | ddr_tmp | cpu_tmp | sys_tmp | rearfan_speed | cpufan_speed |
+—–+———————+———+———+———+———+—————+————–+
| 1 | 2017-11-27 19:35:36 | 34 | 43 | 62 | 16 | 1508 | 2694 |
| 2 | 2017-11-27 21:34:01 | 30 | 41 | 41 | 14 | 1508 | 1830 |
| 3 | 2017-11-27 21:34:12 | 30 | 41 | 41 | 14 | 1508 | 1830 |
| 4 | 2017-11-27 21:39:18 | 30 | 41 | 41 | 14 | 1508 | 1844 |
| 5 | 2017-11-27 21:45:05 | 30 | 40 | 40 | 14 | 1498 | 1844 |
| 6 | 2017-11-27 21:50:05 | 30 | 39 | 41 | 14 | 1508 | 1830 |
| 7 | 2017-11-27 21:55:05 | 30 | 39 | 41 | 15 | 1508 | 1844 |
| 8 | 2017-11-27 22:00:05 | 30 | 40 | 40 | 14 | 1508 | 1844 |
| 9 | 2017-11-27 22:05:04 | 30 | 40 | 40 | 14 | 1498 | 1830 |
| 10 | 2017-11-27 22:10:05 | 30 | 40 | 40 | 14 | 1508 | 1844 |
| 11 | 2017-11-27 22:15:05 | 30 | 39 | 40 | 14 | 1508 | 1830 |
| 12 | 2017-11-27 22:20:05 | 30 | 40 | 40 | 14 | 1508 | 1844 |
###### 以下省略 #######

③ シェルスクリプト(bash)で①の値を取得するスクリプトを作成する
④ 値が取れることを確認したら、シェルスクリプト内でDBにデータを突っ込む
⑤ cronで5分毎とかでスクリプトを動かす。
■grafanaにデータを反映させる
① grafanaをCentOS7に入れる
② 「Data Sources」でDB(今回の場合はTypeがMySQL)を選択する
③ ダッシュボードを新しく作成し、新規グラフを作成する。
④ グラフのデータソースはDB名(今回はesxi)にして、SQL文を叩いて値を取得してくる(以下に例を表示)

SELECT
UNIX_TIMESTAMP(date) as time_sec,
pci_tmp as value,
‘pci_tmp’ as metric
FROM esxi_env
WHERE $__timeFilter(date)
ORDER BY date ASC

⑤Axesのタブで単位をCelsiusにする
【結果】
grafana.jpg
今回はESXiホストである物理サーバの値をグラフ化しました。年間を通して記録すると夏と冬で差がありそうですね。
USB接続の温度センサなんてのもあるようで、それを使えば室内気温や外気温も測定可能なので、それらについても値が取得出来ればグラフ化できそうです。
手順の説明がかなりざっくりで申し訳ないですが、細かく説明する時間が無く・・・。よく分からない点があったら聞いて下さい。Twitterの@yekra22です。
grafanaかっこいいです、中二心をくすぐります。
以上、お疲れ様でした。