エントリー

ラズパイにOLEDを接続してCPU温度表示

ラズパイ4のCPU温度が気になってターミナルから監視してたのだけど・・・簡単にI2Cが使えるのだから表示器を接続して常時見えるようにすれば良いじゃないか!と気付くまで時間が掛かってしまった

IMG_20200223_210556716_HDR.jpg

情報取集したところ手持ちのI2C接続表示器のうちLCD(「AQM1602*」や「AQM0802*」)は,通信電圧の問題があって工夫すれば使用できるものの綺麗な接続でないので断念しOLEDを使う

OLED使用となるとSSD1306のグラフィックライブラリ(ArduinoならU8glibやU8g2lib)が必要でラブパイ(debian)だとpython用にライブラリがある

(参考)

ライブラリ(U8glib)の移植という方法もあったが折角の機会なのでpythonに初挑戦

しかし当然というかpythonの環境がすんなり出来なくてすったもんだ楽しむことになる

ハードウェア

OLEDをラズパイのGPIOに接続する

多数の方が選択している片側(奇数)ピンの連続5ピンを利用(もう片側の偶数ピンの電源ピンをFANで使用しているという理由もある)

IMG_20200222_163439476_HDR.jpg

ピン接続用の変換アダプタを作製

IMG_20200222_162945203_HDR.jpgIMG_20200222_162959883_HDR.jpg

ラズパイ4と接続

IMG_20200222_163428170.jpg

ソフトウェア

OLED接続確認

(I2Cの有効化)

$ sudo raspi-config
$ sudo shutdown -r now

(ツールインストール)

$ sudo apt install i2c-tools

$ sudo i2cdetect -l
i2c-1 i2c bcm2835 I2C adapter I2C adapter
$ sudo i2cdetect -y 1
    0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- 3c -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
$

CPU温度表示プログラムの作成

(python環境セットアップ)

$ sudo apt-get install python-setuptools
$ sudo apt-get install python3-setuptools

(ライブラリインストールのためのpipセットアップ)

$ sudo apt install python3-pip

(GPIOライブラリのインストール)

$ sudo pip3 install RPi.GPIO

(SSD1306ライブラリのインストール)

$ git clone https://github.com/adafruit/Adafruit_Python_SSD1306.git
loning into 'Adafruit_Python_SSD1306'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 137 (delta 0), reused 0 (delta 0), pack-reused 134
Receiving objects: 100% (137/137), 43.42 KiB | 225.00 KiB/s, done.
Resolving deltas: 100% (69/69), done.
$ cd Adafruit_Python_SSD1306
$ sudo python3 setup.py install

(Pillowのインストール)

$ sudo pip3 install pillow

(サンプル実行)

IMG_20200223_162957544_HDR.jpg

(嵌った点)

  • pythonの最新がV3なのだがデフォルトが3になっていない(2から3で大幅に変更されているため互換はない)
  • エラーメッセージが判り難いためライブラリが無いことがメッセージからは判らない
  • python3を実行しなければならない(pythonだとV2が実行)
  • pip3を使用する(pipは無い)

(CPU温度表示プログラム)

#!/usr/bin/python3
# coding: UTF
#
import time
import Adafruit_GPIO.SPI as SPI
import Adafruit_SSD1306

from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont

import subprocess

# Raspberry Pi pin configuration:
RST = None # on the PiOLED this pin isnt used

# 128x32 display with hardware I2C:
disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST, i2c_address=0x3C)

# Initialize library.
disp.begin()

# Clear display.
disp.clear()
disp.display()

# Create blank image for drawing.
# Make sure to create image with mode '1' for 1-bit color.
width = disp.width
height = disp.height
image = Image.new('1', (width, height))

# Get drawing object to draw on image.
draw = ImageDraw.Draw(image)

# Draw a black filled box to clear the image.
draw.rectangle((0, 0, width, height), outline=0, fill=0)

# Load default font.
#font = ImageFont.load_default()
# Load font.
font1 = ImageFont.truetype('/home/pi/font/8-BIT WONDER.TTF', 8)
font2 = ImageFont.truetype('/home/pi/font/upheavtt.ttf', 40)

while True:

# Draw a black filled box to clear the image.
draw.rectangle((0, 0, width, height), outline=0, fill=0)

clock = str(subprocess.check_output("vcgencmd measure_clock arm", shell = True))
clock = clock[clock.find('=')+1:-9] + "MHz"
temp = str(subprocess.check_output("vcgencmd measure_temp", shell = True))
temp = temp[temp.find('=')+1:-3]

# Write two lines of text.
draw.text((0, 0), clock, font=font1, fill=255)
draw.text((8, 2), temp, font=font2, fill=255)

# Display image.
disp.image(image)
disp.display()
time.sleep(5)

(補足)

  • 表示文字はディフォルトでは寂しかったのでフリーフォントを(例:https://www.dafont.com/bitmap.php から)DLして利用
  • リアルタイム表示に近づけるなら最終行のsleep時間を短くする
  • 行末文字列位置もstr.findで得た方が良い

(実行)

/etc/rc.local から起動(cronという選択もある:cron実行用に修正が必要)

以下をrc.localの適正な位置に追加

# OLED Display
if [ -x /home/pi/disptemp.py ]
then
     /home/pi/disptemp.py > /dev/null 2>&1&
fi

 

ページ移動

コメント

  • コメントはまだありません。

コメント登録

  • コメントを入力してください。
登録フォーム
名前
メールアドレス
URL
コメント
閲覧制限
投稿キー(スパム対策に、投稿キー を半角で入力してください。)

ユーティリティ

検索

エントリー検索フォーム
キーワード

新着エントリ

Windows10の不具合
2020/09/08 19:15
な!百葉箱がコケる
2020/09/07 19:31
WBGT表示装置の作製
2020/08/23 20:00
VANTOPの新ドラレコに更新
2020/08/22 10:24
WBGT表示装置の作製
2020/07/26 19:54
栗の実,成長中
2020/07/21 17:02
DVDドライブを新調
2020/07/12 20:21
レンタルビデオで映画鑑賞
2020/07/11 15:30
栗の実
2020/06/20 17:34
新スマホ用の補助パーツ
2020/06/15 19:16

新着コメント

Re:寒川シーバスポイント
2020/09/17 from 承認待ち
Re:インタネット接続障害(記録)
2020/04/05 from admin
Re:インタネット接続障害(記録)
2020/04/04 from 高田
Re:デサルフェーターを製作
2020/03/04 from クラブマン
Re:デサルフェーターを製作
2020/03/01 from admin

過去ログ

Feed