システム負荷をLCDに定期表示

Raspberry Piの起動時に、I2Cでつないだ16x2のLCDディスプレイにIPアドレスを表示していたのですが、/etc/rc.localに起動スクリプトを記述していたことや、2行目に何も表示していなかったのを行けてなく感じたので、pythonファイルを定期実行(3分毎)する仕様に変更しました。

ファイルはこちらにアップしています。
https://github.com/HajimeK/RaspberryIIOT/tree/master/LCD

ソースファイルはこちら

import psutil
import I2C_LCD_driver
from time import sleep

mylcd = I2C_LCD_driver.lcd()
cpu_times_percent = psutil.cpu_times_percent(interval=1, percpu=False)
virtual_memory = psutil.virtual_memory()
disk_usage = psutil.disk_usage('/')
net_io_counters = psutil.net_io_counters(pernic=True)['eth0']
#net_io_counters = psutil.net_io_counters(pernic=True)
#print(psutil.net_if_addrs())
myip = psutil.net_if_addrs()['eth0'][0].address
mylcd.lcd_display_string(myip, 1)
display_str_cpu = \
    'CPU Usage: user {0}%, system {1}%, idle {2}% '.format(cpu_times_percent.user,
            cpu_times_percent.system,
            cpu_times_percent.idle)
display_str_mem = 'Memory Usage: {0}%, ({1}/{2}) '.format(virtual_memory.percent, int(virtual_memory.used/1000000), int(virtual_memory.total/1000000))
display_str_disk = 'Disk Usage: {0}% ({1} / {2}) '.format(disk_usage.percent, disk_usage.used, disk_usage.total)
display_str_net_sent = 'Net IO Sent: {0} MB, {1} Packets '.format(int(net_io_counters.bytes_sent / 1000000), net_io_counters.packets_sent)
display_str_net_recv = 'Net IO Rcvd: {0} MB, {1} Packets '.format(int(net_io_counters.bytes_recv / 1000000), net_io_counters.packets_recv)

display_str = display_str_cpu + display_str_mem + display_str_disk + display_str_net_sent + display_str_net_recv
str_pad = " " * 16
print(display_str)
#mylcd = I2C_LCD_driver.lcd()
#mylcd.lcd_display_string(display_str, 2)
for i in range (0, len(display_str)):
    lcd_text = display_str[i:(i+16)]
    mylcd.lcd_display_string(lcd_text,2)
    sleep(0.2)
    mylcd.lcd_display_string(str_pad,2)

私は、LCD.shというファイルから実行するようにしています。このファイルが定期実行されるように、crontabe -eでcron tableに一行追加します。

crontab -e and add the below entry

エディタが起動するので、下記をエントリーに追加

*/3 * * * * /home/pi/cron/LCD.sh

こんな感じになります

コメント

タイトルとURLをコピーしました