ホッタラカシのSenseHATを動かしてみる。

LEDへ時計を上3段に表示、2進数表示なので可読性は全くなし。
4段目はメモリ使用率、残り4段をCPUコアの使用率を表示してみました。

Rasbian StreachにはSenseHAT用Pythonモジュールも既にインストールされている状態なので、難しい設定は無し。APIリファレンスを読めば特に難しいところもなく、、、

それだけでは面白くないのでsystemdによるデーモン(サービス)化もしてみました。十分な理解は出来てませんが、以下Pythonスクリプトです。

#!/usr/bin/python

from __future__ import with_statement

import sys
import time
import datetime
import psutil
import math

from sense_hat import SenseHat
from daemon import DaemonContext
from lockfile.pidlockfile import PIDLockFile

sense = SenseHat()
sense.set_rotation(180)
sense.low_light=True
message = ""

WHITE = [50,50,50]
BLUE = [0,0,50]
BLANK = [0,0,0]
RED = [50,0,0]
YELLOW = [50,50,0]
GREEN = [0,50,0]

dc = DaemonContext(
        pidfile=PIDLockFile('/tmp/sense_messaged.pid'),
        stderr=open('/tmp/sense_messaged.log','w+'))

def main():
    '''
    now = datetime.datetime.now()
    message = now.strftime("Time:%H:%M:%S")
    sense.show_message(message ,text_colour=[50,50,50])
    '''
    now = datetime.datetime.now()
    h = [BLANK if x == '0' else WHITE for x in list(format(now.hour,'08b'))]
    m = [BLANK if x == '0' else WHITE for x in list(format(now.minute,'08b'))]
    s = [BLANK if x == '0' else WHITE for x in list(format(now.second,'08b'))]
    pict = []
    pict.extend(h)
    pict.extend(m)
    pict.extend(s)

    memory = int(max(0,min(psutil.virtual_memory().percent,100))/100 * 8)
    memoryPic = ([BLUE] * (8-memory)) + ([YELLOW] * memory)
    pict.extend(memoryPic)

    cpu = [int(max(0,min(x,100))/100 * 8)  for x in psutil.cpu_percent(percpu=True)]
    for c in cpu:
        cPic = ([GREEN] * (8-c)) + ([RED] * c)
        pict.extend(cPic)

    sense.set_pixels(pict)

with dc:
    while True:
        main()
        time.sleep(1)
sys.exit(0)

daemon、psutilモジュールが必要です。

$ sudo pip install python-daemon

psutilモジュールはpipからインストールしようとするとエラーが発生するのでaptでインストールしました。

$ sudo apt install python-psutil

あとはsystemctl用のunitファイル(ExecStartはPythonスクリプトへのパスで書きかえ)

[Unit]
Description=SenseHat Message
[Service]
ExecStart=/PATH_TO_PYTHON_SCRIPT/sensemessaged.py
Restart=always
Type=simple
PIDFile=/tmp/sense_messaged.pid
[Install]
WantedBy=multi-user.target

起動してみる。

$ sudo systemctl reload-daemon
$ sudo systemctl start sensemessaged

停止

$ sudo systemctl start sensemessaged

 

自動で起動するように設定

$ sudo systemctl enable sensemessaged.service

pidファイルの置き場所等、お作法があるとは思いますが、今の所はこれでOK。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です