LCDモニター (SSD1306)とLEDをPythonで制御する!

Contents

Python基本テンプレファイル

今回の準備。

ねこっぴ

今回は、カンタンにちびモニター(SSD1306)と LEDチカチカを実行できるPythonのテンプレファイルの話をするにゃよ!

ぴぽこ

ちびモニターといえば、X68000Z DAC(PCM5102)とちびモニター(SSD1306)を用意する の回でライブラリをインストールしたね。
してない方はしときましょー!

ねこっぴ

あと、LEDで表示するのにいいかんじのフォントもダウンロードしましょにゃ。 SourceHanSansJP-Medium.otf をいただきましょ。
ラズパイでDLか、ファイルをラズパイに移動するにゃ。

ねこっぴ

管理権限のファイルマネージャーをスタートメニューに登録 で使った管理者としてファイルマネージャを開くにゃ。または、ターミナルから
「SUDO PCMANFM」 にゃよ。管理者でファイルを移動!

ぴぽこ

おっけー、
/usr/share/fonts/opentype の中にいれまーす!

GPIOピン配置の確認。

ねこっぴ

LEDとスイッチとモニターが装着されていること前提にゃよ。

LEDとスイッチとモニター

GPIO23番にLEDGPIO26番にスイッチLCDモニター (SSD1306)

装着されている状態を前提としたおはなしになります!

X68000Z X68uartRasModuleの製作 組立編 で組んだ方

X68000Z DAC(PCM5102)とちびモニター(SSD1306)を用意する + GPIO23にLED + GPIO26にスイッチ

GPIOのピン配置確認

ファイルをダウンロード。中身をみていこー。

ねこっぴ

では中身の解説にゃ! ていうかファイルに注釈入れてるから見てにゃ!

カンタンテンプレ Switch_ON.py
import RPi.GPIO as GPIO #GPIO制御
import time #時間制御
import serial #シリアルポート使用
import os #OS依存のいろんな機能を使う
import pdb #デバッグ用
import Adafruit_SSD1306 #ちびモニターを使用
from PIL import Image #ちびモニター描画で使用
from PIL import ImageDraw #ちびモニター描画で使用
from PIL import ImageFont #ちびモニター描画で使用

#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

led=23 #使用GPIOのNo
switch=26 #使用GPIOのNo
GPIO.setwarnings(False) #注意メッセージを表示しない
GPIO.setmode(GPIO.BCM)  #GPIOをピン番号での指定BCMと設定 (BCM:名称ピン番号指定/BOARD:左上からの連番指定)
GPIO.setup(led, GPIO.OUT) #指定ピンを入力/出力どちらを使うかの設定
GPIO.setup(switch, GPIO.IN, pull_up_down=GPIO.PUD_UP) #スイッチで使うGPIOのプルアップ設定
GPIO.output(led,False)
sw_status = GPIO.input(switch) #スイッチの状態を取得
font = ImageFont.truetype('SourceHanSansJP-Medium.otf', 15)#OLEDのフォント指定
ser = serial.Serial('/dev/ttyAMA0',19200,timeout=None) #Z:19200 XM6:38400

#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

def main_code(): #プログラム
   
    print("Program_Start") #ラズパイのターミナルに表示
    #led_chika(3) #LED(回数)
    #printset("Print Test","") #OLED (""でクリア)

 
#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

def led_chika(a):#GPIO Lチカ

 for num in range(0,a):
  GPIO.output(led,True)
  time.sleep(0.2)
  GPIO.output(led,False)
  time.sleep(0.2)

#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
 
#ちびモニター出力は Qiita @tkarubeさんの投稿されたコードを基本にしています。
#Raspberry Pi に 128x64 OLED ディスプレイ (SSD1306) を繋いで文字を表示する
#https://qiita.com/tkarube/items/6808538012cba499d5e2

def initialize_display():

    RST = None
    disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST)
    disp.begin()
    disp.clear()
    disp.display()
    return(disp)

def initialize_image(disp):#olde

    width = disp.width
    height = disp.height
    image = Image.new('1', (width, height))
    draw = ImageDraw.Draw(image)
    return(image, draw)

def write_image(disp, draw, image, txt1, txt2):#olde
    
    draw.text((0, 0), txt1, font=font, fill=255)
    draw.text((0,25), txt2, font=font, fill=255)
 
    disp.image(image)
    disp.display()

def printset(txt1, txt2):
    image, draw = initialize_image(disp)
    write_image(disp, draw, image, txt1, txt2)
    
#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

if sw_status == 0:
   print("スイッチはON")
if sw_status == 1:
   print("スイッチはOFF")

disp = initialize_display()
printset("ちびモニター出力","SwichON.py") #ここ以外はSwichOFF.pyと同じです

main_code() #メインルーチンへ移動

#GPIO.cleanup()#GPIO初期化
        
ぴぽこ

main_code(): に好きなプログラム書いていけばいいのね!
なんかカンタン!!

ねこっぴ

sw_status にスイッチ状態が取得されるにゃよ。
シェルスクリプトで分岐させてたらあんま意味ないけど、一応にゃ。

main_code(): に#が入っている2つ。#を抜いて使ってにゃ。
led_chika(3) ※カッコ内は光らせる回数
printset(“Print Test”,””) ※前の” “は上段 / 後の” ” は下段。
変数使っていろんなとこで代入しちゃえば、文字でもLEDでも状況を
ユーザーに伝えることができるから便利にゃよ!

ぴぽこ

X68000Zとの通信でうまく使えば X68000Zからの指示でモニター表示させたり、LED光らせたりできそうだから楽しそうだねー!

サンプルでは2行表示にしていますが、もっと自由に使えます!

ちびモニターの表示はもっともっと自由に表示できるとおもいますので、「SSD1306」で検索して表示方法パワーアップしたら楽しいかも!



Contents