今週の振り返り

割引あり


おはようございますー(ノ∀`)
この記事に興味をもっていただきありがとうございます!
有料記事にはしてますが全部読めます!(購入者特典もいずれ検討してますがまだ未実装ですw)
私にがんばったで賞を贈りたい方はこの記事購入か下記のSUI walletアドレスに直接送りつけてください!
開発の資金と今晩のおかずが増えるかもしれません!w

0xa1a9f6f82854250e7e5f92ea7ad186ef1daf0ab2793c0223e1bd629dd7358ab8

aynyan@stashed

いつも通りどうでもいいことしか書きませんよ?笑


今週の振り返り

今週振り返って大きな出来事といえば、
やっぱりトランプさんですよね!
おかげさまでcrypto界隈が賑わいました!
某チューバーさんがフィッシングに引っ掛かってビットコを抜かれるってこともありました!
クリプトはまだ最初のビットコちゃんが生まれて15年だしSUIなんか去年の5月生まれの赤ん坊だしまだまだ黎明期!
だからフィッシングとかscamとか悪い人が出てくるのもクリプトが期待されてることの裏返しですよね(´・ω・`)
まぁ、私もイーサのNFTでやられたことあるから同情はしますけどね(つω-`).。oO(時間があれば概要と該当者晒します←)

今週の私

REXで資産がちょっと増えた!と思いきやてっぺんからちょっと下がったとこで追加投資してそこからの含み損でなんだかんだでトントンw
REXのサブドメインも買ったりしたけどどうなることやら笑


船の方は今週はシケによる待機が多くて結構時間があったので自宅に3年くらい寝かせてたラズパイ4を持ってきて船でPC作業ができるようにしたところ…OS再インストしたらファンが回らないwww
OLEDは最初から設定してなかったので表示はしてませんでしたが、ファンが回らないのは一大事w
これからSUI MOVE環境整えるのにw
けど興味はSUI MOVEの方が強かったのでそっちのインストール優先しちゃいましたw
なんかインストールしてみた感じ同じコード打ったのにGitHubに繋がってコンパイルが進む時とSSL通信エラーがでる時とあって、時間帯が夕方から夜にかけてインストールが成功しやすかったです(´・ω・`)
昼間にいくらやってもSSLエラーがでて対応させるために調べて弄りまくったけどイマイチわかりませんでしたw
もちろんファンが回ってないのでCPU負荷100%の温度85℃まで上がりましたw
インストールしたあとにファンとこの際OLEDの表示もさせてみようかなって気分になりました。

Pythonコードとの死闘

基盤買った時にダウンロードしてたスクリプトじゃ前の時のOSではファンが回ってOLEDが表示しなくてファンだけでとりまいっかーってなってたけど
今回は味方がいる!
その名もチャットGPT大先生!
スクリプトを貼り付けてターミナルのエラーと一緒に送ったらどんどん対策を送ってくれる!
要約すると今のOS環境だとインストールできないソフトがあるみたいで仮装環境でやってみてはと的確なアドバイスを頂きました。

闘いの舞台は仮装環境へ!
ダウンロードした既存のコードを書き換えつつやってもどうしてもエラーが出てしまい…大先生もいることだしいっそのことイチから作った方が早いっちゃね?ってなりましたw

OLEDに日付と時間表示とCPU負荷と温度を表示させて負荷と温度は値によって文字色が青から赤に変わるように

日付は土曜を青、日曜、祝日を赤にOLEDに出力するように

ファンはCPUの温度に応じて回転速度を調整

RGBライトはCPUの温度に応じて色を変えるように

って一気にまとめて指示しても対応してくれる!
ほんと大先生は偉大ですね。
いざスクリプトを走らせてみると!
OLEDは仕様的に文字色変えることができませんでしたw
なのでグレースケールでOLEDに表示するようにスクリプトを書き換えましたって修正コードまで添付してくれる大先生の手際のよさ(ノ∀`)

仕事の隙間時間でやったにしては実質作業時間5-6時間ってとこかな?
自分で作れーってなったらPythonの教科書から揃えなきゃいけなかったからプログラミング未経験者の私なら年単位でかかりそうw

無事スクリプトが順調に走ったのでスタートアップ時に自動起動するようにわがままターミナルさんに入力してなんとか解決しました。


from adafruit_ssd1306 import SSD1306_I2C

import time

from datetime import datetime

import jpholiday

from PIL import Image, ImageDraw, ImageFont

import smbus2 as smbus

import board

import busio

import psutil # CPU使用率を取得するためのライブラリ



# I2Cオブジェクトの作成

i2c = busio.I2C(board.SCL, board.SDA)

disp = SSD1306_I2C(128, 32, i2c)



# OLEDの設定と初期化

disp.fill(0)

disp.show()



# 画像バッファの作成

width = disp.width

height = disp.height

image = Image.new('1', (width, height))

draw = ImageDraw.Draw(image)



# フォント設定

font = ImageFont.load_default()

bold_font = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf", 10)



# SMBusの設定

bus = smbus.SMBus(1)

fan_addr = 0x0d # ファンのI2Cアドレス

fan_reg = 0x08 # ファン制御レジスタ

rgb_control_reg = 0x00 # RGBの制御レジスタ

r_reg, g_reg, b_reg = 0x01, 0x02, 0x03 # R, G, Bのレジスタ



# RGB設定関数

def set_rgb_color(r, g, b):

bus.write_byte_data(fan_addr, rgb_control_reg, 0xFF) # 全てのRGBライトを制御

bus.write_byte_data(fan_addr, r_reg, r)

bus.write_byte_data(fan_addr, g_reg, g)

bus.write_byte_data(fan_addr, b_reg, b)



# グレースケールの補間関数

def interpolate_gray(value, min_val, max_val, gray_start, gray_end):

ratio = (value - min_val) / (max_val - min_val)

return int(gray_start + (gray_end - gray_start) * ratio)



# CPU温度に基づく文字色設定関数(グレースケール用)

def get_temp_color(temp_c):

if temp_c is None:

return 255 # デフォルトカラー(白)

return interpolate_gray(temp_c, 20, 80, 0, 255) # 青→赤に対応するグレースケール



# CPU負荷率に基づく文字色設定関数(グレースケール用)

def get_usage_color(usage):

if usage < 20:

return interpolate_gray(usage, 0, 20, 0, 255) # 青→緑相当のグレースケール

elif usage < 45:

return interpolate_gray(usage, 20, 45, 0, 255) # 緑→黄相当のグレースケール

elif usage < 60:

return interpolate_gray(usage, 45, 60, 0, 255) # 黄→オレンジ相当のグレースケール

else:

return interpolate_gray(usage, 60, 90, 0, 255) # オレンジ→赤相当のグレースケール



# CPU温度取得関数

def get_cpu_temp():

try:

with open("/sys/class/thermal/thermal_zone0/temp", "r") as file:

temp_str = file.readline().strip()

temp_c = int(temp_str) / 1000.0 # ミリ度を摂氏温度に変換

return temp_c

except FileNotFoundError:

return None



# 温度に応じたファン制御関数 (I2C経由)

def set_fan_speed(temp_c):

if temp_c is None:

bus.write_byte_data(fan_addr, fan_reg, 0x00) # 温度が取得できない場合ファン停止

elif temp_c < 30:

bus.write_byte_data(fan_addr, fan_reg, 0x00) # 30°C未満:ファン停止

elif 30 <= temp_c < 40:

bus.write_byte_data(fan_addr, fan_reg, 0x02) # 30-40°C:20%速度

elif 40 <= temp_c < 50:

bus.write_byte_data(fan_addr, fan_reg, 0x04) # 40-50°C:40%速度

elif 50 <= temp_c < 60:

bus.write_byte_data(fan_addr, fan_reg, 0x06) # 50-60°C:60%速度

elif 60 <= temp_c < 70:

bus.write_byte_data(fan_addr, fan_reg, 0x08) # 60-70°C:80%速度

else:

bus.write_byte_data(fan_addr, fan_reg, 0x01) # 70°C以上:全速



# メインループの外で初期のRGB色を指定して設定

current_rgb = (0, 0, 0) # 初期値として黒 (消灯)

# RGB補間関数

def interpolate_rgb(value, min_val, max_val, start_color, end_color):

"""指定範囲での色補間を実行"""

ratio = (value - min_val) / (max_val - min_val)

r = int(start_color[0] + (end_color[0] - start_color[0]) * ratio)

g = int(start_color[1] + (end_color[1] - start_color[1]) * ratio)

b = int(start_color[2] + (end_color[2] - start_color[2]) * ratio)

return (r, g, b)



# メインループ

try:

while True:

# 現在の日時を取得

current_datetime = datetime.now()

datetime_display = current_datetime.strftime("%Y-%m-%d %H:%M:%S")



# CPU温度取得とファン制御

cpu_temp = get_cpu_temp()

set_fan_speed(cpu_temp)



# CPU使用率を取得

cpu_usage = psutil.cpu_percent(interval=1)



# 表示色を全て白に設定

date_color = 255

temp_color = 255

usage_color = 255



# 温度に応じたRGBグラデーション

if cpu_temp is not None:

if cpu_temp <= 30:

new_rgb = interpolate_rgb(cpu_temp, 0, 30, (0, 0, 0), (0, 0, 255)) # 黒→青

elif cpu_temp <= 50:

new_rgb = interpolate_rgb(cpu_temp, 30, 50, (0, 255, 0), (255, 255, 0)) # 緑→黄色

elif cpu_temp <= 60:

new_rgb = interpolate_rgb(cpu_temp, 50, 60, (255, 255, 0), (255, 165, 0)) # 黄色→オレンジ

elif cpu_temp <= 80:

new_rgb = interpolate_rgb(cpu_temp, 60, 80, (255, 165, 0), (255, 0, 0)) # オレンジ→赤

else:

new_rgb = interpolate_rgb(cpu_temp, 80, 100, (255, 0, 0), (128, 0, 128)) # 赤→紫

else:

new_rgb = (255, 255, 0) # 温度が取得できない場合は黄色で警告



# 現在のRGBが新しいRGBと異なる場合のみset_rgb_colorを呼び出す

if current_rgb != new_rgb:

set_rgb_color(*new_rgb)

current_rgb = new_rgb



# ディスプレイバッファのクリア

draw.rectangle((0, 0, width, height), outline=0, fill=0)



# 日付と時刻(1行目)、温度とCPU負荷率(2行目)をOLEDに白色で表示

draw.text((0, 0), datetime_display, font=font, fill=date_color)

draw.text((0, 16), f"Temp: {cpu_temp:.1f} C" if cpu_temp else "Temp: N/A", font=font, fill=temp_color)

draw.text((64, 16), f"CPU: {cpu_usage:.1f}%", font=font, fill=usage_color)



# OLEDに表示更新

disp.image(image)

disp.show()



# 更新間隔

time.sleep(2)



except KeyboardInterrupt:

set_rgb_color(0, 0, 0) # 終了時にRGBライトをオフにする

できたコードはこちら
訂正箇所とかこうすればもっと良きってアドバイスあったら嬉しいな笑

ちなみにラズパイ4に付けてる基盤の型番はyb-epv02です!
興味あったらググってね笑

ベテランクレーン士の晩酌

4月に転職してから船の仕事が終わって気が向いた時は食堂で晩酌に付き合ってます(つω-`).。oO(他の乗組員は各自居室で自由にしてるけど私は新人だから色々話聞いて勉強せんとなーって理由で)

港に右舷着けしてるとき風を船尾側から受けてて、離岸時にそれに気付かず船尾担当の若手2人がロープを先に離してしまい、ベテランクレーン士の爺さんがブーブー愚痴りました(;^ω^)
私は爺さんと一緒に船首配置なので「もしかしてあいどんロープ先に離すっちゃなかー」って話してたのですぐ対応できるようにかまえてました笑
船尾から風受けて先に船尾のロープを離すと流されて船尾側が離れていって船首のロープをつけたままにするとロープが張ってしまい取れなくなるのです。
私も機関畑だった人間なので言われるまでピンとこなかったけど笑
それにしても若人2人は両方とも船員歴3年前後だからもうわかっててもいいはず…(つω-`).。oO
私がここにきて半年で覚えたことが彼らは覚えるのに2年かかってたよってクレーン爺さんが私に教えてくれました笑

クレーン爺さんが退職するまでに色々話聞いて勉強しとこうって思ったとさ(ノ∀`)
とりあえず1年目は甲板の仕事ひと通り覚えて2年目はクレーンでも勉強させてもらおっかな^_^

ここから先は

243字

この記事が参加している募集

もしよろしければサポートお願いします!頂いたサポートはクリエイターとしての活動費やご飯のお供に使わせていただきます!