Raspberry Piで作ったDIY低温調理機にSSD1306制御のI2C接続OLEDミニモニタを付けてツマでも使えるようにする。
カテゴリー:#電子工作 Raspberry Pi、Arduinoなど(記事数:240)

2020.06.11

Raspberry Piで作ったDIY低温調理機にSSD1306制御のI2C接続OLEDミニモニタを付けてツマでも使えるようにする。



我が家では0.8%食塩で24時間以上付け込まれたムネ肉を61℃×2時間で低温調理して作る鶏ハムが週500gペースで消費され続けていて製造が大変です。

市販の低温調理機買う金の無い貧乏人なので調理はRaspberry Piで作ったDIY装置です。

しかしこの装置、ディスプレイもボタンも無く、PCからSSH接続して実行、進捗もPCからしか見れないため、鶏ハム製造は俺の仕事になってます。この装置をツマにも使えるようにしたいと考え改造を進めています。
  • PC無しで調理可能に(Raspberry Pi本体で調理開始出来るようにボタンを付ける)
  • 温度や残り時間などが分かるようにモニターを付ける。
の2つがやることです。今回は2つ目のモニター設置
色々調べて購入したのは下記のI2C接続OLEDモニターです。SSD1306というチップで制御されているなら他の製品でもOKっぽい。760円です。
↓現状の表示。現在の温度、スタートしてからの合計時間、目的温度に達してからの時間。もう少し表示をエレガントにしたい。残念ながら現状ではこの表示は1分に一度しか更新されません。


モニターの動作に必要なソフトのインストール


↓本体はI2C接続で4本の線でRaspberry Piと結びます。詳細は省略します。別の記事を見てください。


なお古いRaspberry PiのOSではどうやってもインストール出来なかったので最新のOSイメージから始めるのをオススメです。

(1)i2c-toolsをインストール
sudo apt-get install i2c-tools

これをすると
i2cdetect 1

と入力するとアドレス3cにモジュールを発見出来ます。

(2)Python3のsetuptoolsをインストール
sudo apt-get install python3-dev
sudo apt-get install python3-setuptools


(3)gitのインストール
sudo apt-get install git


(4)SSD1306の制御モジュールをインストール
git clone https://github.com/adafruit/Adafruit_Python_SSD1306.git
cd Adafruit_Python_SSD1306
sudo python3 setup.py install


(5)足りないモジュールを色々とインストール
sudo apt-get -y install python3-pip
pip3 install Adafruit_GPIO
sudo apt-get install libopenjp2-7
sudo apt-get install libtiff5-dev
pip3 install pillow

※不要なものもあるかも

(6)制御スクリプト&デモスクリプト1
git clone https://github.com/adafruit/Adafruit_CircuitPython_SSD1306.git



スクリプト内のディスプレイ解像度を128x64に変更する必要あり。
I2Cのアドレスも変更する必要あるかも。

(7)制御スクリプト&デモスクリプト2
git clone https://github.com/adafruit/Adafruit_Python_SSD1306.git



(8)その他参考にしたサイト
(5)を入れないと
ModuleNotFoundError: No module named 'Adafruit_GPIO'

とか
ModuleNotFoundError: No module named 'PIL'

とか
raceback (most recent call last):
File "stats.py", line 26, in
from PIL import Image
File "/home/pi/.local/lib/python3.7/site-packages/PIL/Image.py", line 93, in
from . import _imaging as core
ImportError: libopenjp2.so.7: cannot open shared object file: No such file or directory

とか
Traceback (most recent call last):
File "ssd1306_pillow_demo.py", line 12, in
from PIL import Image, ImageDraw, ImageFont
File "/home/pi/.local/lib/python3.7/site-packages/PIL/Image.py", line 93, in
from . import _imaging as core
ImportError: libopenjp2.so.7: cannot open shared object file: No such file or directory

とか
Traceback (most recent call last):
File "stats.py", line 26, in
from PIL import Image
File "/home/pi/.local/lib/python3.7/site-packages/PIL/Image.py", line 93, in
from . import _imaging as core
ImportError: libtiff.so.5: cannot open shared object file: No such file or directory

とかエラーが出る。

現在の低温調理スクリプトこれを&を付けて実行するとSSHを切っても実行され続ける。以前との違いは現在の温度などの情報を「currentdata.txt」に書き込む。維持時間と温度は最後の行で指定している。この設定もRaspberry Pi本体のみで変更出来るようにいずれはしたい。

import RPi.GPIO as GPIO
import time
import re
import subprocess
from datetime import datetime
import atexit

def end():
GPIO.cleanup()
def low():
GPIO.output(17,GPIO.LOW)
GPIO.output(27,GPIO.LOW)
def tempkeep(set,keep):
reach=0
start=0
while (keep>0):
resulttext= subprocess.check_output(["cat","/sys/bus/w1/devices/28-800000269b1a/w1_slave"])
temp=re.search('(?<=t=)(\d+)',resulttext)
temp=float(temp.group(1))/1000
if (temp GPIO.output(17,GPIO.HIGH)
if (temp>=set):
reach+=1
GPIO.output(17,GPIO.LOW)
time.sleep(5)
start+=5
if reach>1: keep-=5
print str(reach)+":start="+str(float(start/6)/10)+":keep="+str(float(keep/6)/10)+":temp="+str(temp)
f.write(datetime.now().strftime("%H,%M,%S")+","+str(start)+","+str(temp)+"\n")

#
f2=open('currentdata.txt',"w")
f2.write("current temp,"+str(temp)+"\n")
f2.write("total time,"+str(float(start/6)/10)+"\n")
f2.write("left time,"+str(float(keep/6)/10)+"\n")
f2.close

atexit.register(end)

GPIO.setmode(GPIO.BCM)
GPIO.setup(17,GPIO.OUT)
GPIO.setup(27,GPIO.OUT)

f=open(datetime.now().strftime("%Y%m%d%H%M%S")+'data.txt',"w")

GPIO.output(27,GPIO.HIGH)
GPIO.output(17,GPIO.LOW)
print "start fan, pose 10 sec"
print "initialize sensor"
resulttext= subprocess.check_output(["cat","/sys/bus/w1/devices/28-800000269b1a/w1_slave"])
temp=re.search('(?<=t=)(\d+)',resulttext)
temp=float(temp.group(1))/1000
print "temp:"+str(temp)
time.sleep(10)
tempkeep(61,3600*2)
exit


OLEDディスプレイ表示部分。下記をcrontab -eで1分おきに繰り返し実行している。エレガントな方法じゃないなー。調理スクリプトが出力した「currentdata.txt」を読み込んで表示しているだけ。

import board
import digitalio
from PIL import Image, ImageDraw, ImageFont
import adafruit_ssd1306

# Define the Reset Pin
oled_reset = digitalio.DigitalInOut(board.D4)

WIDTH = 128
HEIGHT = 64
BORDER = 5

# Use for I2C.
i2c = board.I2C()
oled = adafruit_ssd1306.SSD1306_I2C(WIDTH, HEIGHT, i2c, addr=0x3C, reset=oled_reset)

# Clear display.
oled.fill(0)
oled.show()

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

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

# Draw a white background
draw.rectangle((0, 0, oled.width, oled.height), outline=255, fill=255)

# Draw a smaller inner rectangle
draw.rectangle(
(BORDER, BORDER, oled.width - BORDER - 1, oled.height - BORDER - 1),
outline=0,
fill=0,
)

# Load default font.
font = ImageFont.load_default()

# Draw Some Text
f=open('currentdata.txt')
text=f.readlines()
f.close()

datas={}

for textline in text:
textparts=textline.split(',')
datas[textparts[0]]=textparts[1]
#text = "Hello World3"
#text='Current Temp:'+datas['current temp']
#(font_width, font_height) = font.getsize(text)
draw.text((5, 5),'Current Temp:'+datas['current temp'],font=font,fill=255,)
draw.text((5, 15),'Total Time:'+datas['total time'],font=font,fill=255,)
draw.text((5, 25),'Left Time:'+datas['left time'],font=font,fill=255,)


# Display image
oled.image(image)
oled.show()


このOLEDディスプレイって128x64の画像を作って書き込んでいる感じ。このスクリプトは制御&デモスクリプト(1)のHellow Worldをちょっと変えただけです。

縦の解像度が半分で同じSSD1306チップのディスプレイも。同じように動くかな?
あ、こちら128x64で1.3インチと少し大きい。
他に似たようなフルカラーディスプレイあるけど制御チップはSSD1331とちょっと違うっぽい。

Category:#電子工作 Raspberry Pi、Arduinoなど



■ ■ ■ コメント ■ ■ ■

いいっすね!=36
001 [06.11 15:27]y@Iij:M5Stackで作ったらどうか。 (9)
002 [06.11 22:21]ふぇちゅいんさんふぁん(ゆるりゆラリー)★81:web UIにしてスマホから監視・操作できるのが今風じゃない? (8)
003 [06.12 09:03]ふぇちゅいん(管理人) TW★75:う?ん、確かに。 (4)
004 [06.12 22:20]ロード乗り@Nuro:Node-REDとか経由すればブラウザとかアレクサで操作できそうですが鍋に材料入れてから操作するのだから物理ボタンで十分な気が (5)
005 [06.13 10:02]ふぇちゅいんさんふぁん(ゆるりゆラリー)★81:うちのヨーグルトメーカーみたら4ボタンしかなかったわ。これで十分なのか。「UP」「DOWN」「MODE」「ON/OFF」 (3)

名前 ↑B

コメント(※改行は省略されます)

※3回以上の連続書き込み不可
この記事のアクセス数:1388

本カテゴリーで直近コメントが書かれた記事
12/12 00:58:「M5Stamp Fly」をドローン初心者が自宅で飛ばしてファームウェア更新から宙返り、UnitCam付けたりとか163134分前
11/29 08:19:おうち秋月電子かよ!自宅の積み電子キットがすごい量に・・・125日前
11/27 09:16:「Raspberry Pi Pico 2 W」は7ドル(1000円)でBluetoothもWifiも使える127日前
07/01 21:34:Arduinoで航空無線が聴ける。Arduino Nanoで制御するエアバンド受信シールド「SCARP」が9500円。2024年10月出荷開始276日前
12/06 16:22:赤外線カットフィルター無しのラズパイ公式カメラv2にフィルター追加484日前
11/03 10:39:オープンソースの家庭用地震計「EQIS-1」(PRIORIS)の完成品が8580円で登場517日前
09/29 11:31:Raspberry Pi 5が発表。4から2倍高速化、M2ストレージおよびPCI-Express2.0対応。外付けでGPUがつなげちゃう?1万円~552日前
08/28 00:48:Raspberry pi zero 2Wが本当に3500円で来た!zeroとの比較585日前
08/22 09:42:Raspberry zero 2Wが送料込み3500円590日前
06/24 23:21:今月の「トランジスタ技術」はラズパイカメラ特集。凄いこの雑誌セミプロの寄稿を集めた同人誌だ649日前
05/06 22:29:Raspberry PiでCPU温度を測定する方法698日前
04/24 23:54:何日間持つか実験。ラズパイzeroにUSBカメラとモバイルバッテリーをつないでリアルタイム配信710日前
04/08 09:45:『これが届く頃、俺の畑は既に死んでいるだろう』ラズベリーを地植えして超絶後悔した人の手記726日前


→カテゴリー:#電子工作 Raspberry Pi、Arduinoなど(記事数:240)
本カテゴリーの最近の記事(コメント数)
2025.03.05ラズパイ公式!ポメラ的な文章作成用ハンドヘルドPC「Micro Journal Rev.2 ReVamp」。Zero 2W搭載
2025.02.27理系フリマ8が3月1日開催
2024.12.10「M5Stamp Fly」をドローン初心者が自宅で飛ばしてファームウェア更新から宙返り、UnitCam付けたりとか32コメ
2024.12.05SeeedのRaspberry Pi zero用Grove Base(HAT)がベストフィットで良い感じ11コメ
2024.12.04Raspberry Piのカメラで静止画を撮る時のオプションメモ:fswebcam/USBカメラ時とraspistill/公式カメラ9コメ
2024.11.28おうち秋月電子かよ!自宅の積み電子キットがすごい量に・・・30コメ
2024.11.26「Raspberry Pi Pico 2 W」は7ドル(1000円)でBluetoothもWifiも使える46コメ
2024.11.17Raspberry Piベースの立体視カメラを作るためのオープンソースボード「StereoPi」15コメ
2024.11.03Raspberry Piとディスプレイでお手軽デジタルサイネージを作れるオープンソースソフト「Anthias」5コメ
2024.10.08Raspberry piは電源ぶつ切りするとすぐにカーネルパニック起こして起動しなくなる。改善方法と復旧方法27コメ

最近の常連さん
★53 うにゃ(emでネクサス5→�)★38 酔もぐら★41 orz★38 ω★105 ふぇちゅいん(年度始まったり) TW★95 774(←半角のひと)★83 JP★26 ふぇちゅいんさんふぁん(ゆるりゆラリー)★101 名古屋関西人 TW★25 τ(はじめてのすまほ) TW★52 匿名?★28 ななしさそ★72 10年選手★48 Dcd★83 F★52 うぃ(滅茶苦茶久しぶり)★70 謎★80 さてさて★30 トクメー★17 京ポン3B(意地でもエッジ)★40 ふぇいちゅん★2 ☆★45 すきやき★77 特命さん★79 knob★2 らむ★32 とくめい★82 ポコ★346 umomo★2