屋外でラズパイの動作を確認したい時には、abc744の方法でWiFiを使ってノートパソコンやスマホで可能だが、トラブル時などでネットが利用できない場合には、HDMIモニターに繋ぎたいことがある。そこで、HDMI入力がある”SC7J-1-JP”(Kuman製、\6.260、7インチ、ACアダプター付き)を入手した。1024x600の解像度であるが、ラズパイのモニターには十分である。
このモニターは車載用にも対応しており、電源はDC12Vなので、USBバッテリーでも使えないかと、USB入力でDC12または9Vの出力ができる「USBブースターモジュール電圧変換器」(XYmart、\1,099、最大2A)を入手し、abc745で紹介した一致するアダプタープラグを使い、ディスプレィに接続してみたところ、5V/2A出力のUSBバッテリーで利用できた。
SC7J-1-JPモニターと USB電圧変換器(5→12V) |
USB電池とSC7J-1-JPで ラズパイ画面を表示 |
PHPにはMySQLを操作する以下の命令が用意されている。
データーベースの全内容参照例 sql_acc.php | |
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>食品データ</title> </head> <body> <?php $db_name='test'; $con = mysql_connect('localhost'); if (!$con) { die('MySQLに接続できませんでした。<br>'); } print("MySQLに接続しました。\n\n"); $result = mysql_select_db($db_name, $con); if (!$result) { die($db_name . ':データベースを選択できませんでした。<br>'); } print('<p>' . $db_name . ':データベースを選択しました。</p>'); $result = mysql_query('SELECT * FROM food', $con); while ($data = mysql_fetch_array($result)) { print($data['no'] . ' : ' . $data['kind'] . ' : ' . $data['name'] . '<br>'); } $con = mysql_close($con); if (!$con) { die('<p>MySQLとの接続を閉じられませんでした。</p>'); } echo '<p>MySQL(',$db_name,'データベース)との接続を終了しました。</p>'; ?> </body> |
データーベースWEBアクセス例 |
※printは「.」(ピリオド)で、echoは「,」(カンマ)でデータを区切る(括弧無し)。
※表示文字列は通常は「'」(引用符)で囲むが、「"」(2重引用符)を用いると、「\n」で改行できる。
※die()はexit()と同じ関数
カソードコモンのフルカラーLEDをGUI画面で制御する。GUIツールとしてpythonでよく使われているtkinterを利用する。3色のLEDの明るさを変えるには、PWM制御によりデューティ比を変えることで実現する。
IDLE画面例 | この画面が出ればOK |
tkintertest.py | |
from tkinter import * from tkinter import ttk def foo(): print('Hello, %s!' % t.get()) root = Tk() root.title('My First App') frame1 = ttk.Frame(root) label1 = ttk.Label(frame1, text='Your name:') t = StringVar() entry1 = ttk.Entry(frame1, textvariable=t) button1 = ttk.Button(frame1, text='OK', command=foo) frame1.grid(row=0,column=0,sticky=(N,E,S,W)) label1.grid(row=1,column=1,sticky=E) entry1.grid(row=1,column=2,sticky=W) button1.grid(row=2,column=2,sticky=W) for child in frame1.winfo_children(): child.grid_configure(padx=5, pady=5) root.mainloop() |
tkintertestの実行例 |
Frame | ウィジットを格納する枠を作る | Scrollbar | スクロールバーを作る |
Lable | 文字列やイメージを表示 | Listbox | リストボックスを作る |
Message | 複数行の文字列の表示 | Menu | メニューを作る |
Button | ボタンを作る | Menubutton | メニューボタンを作る |
Checkbutton | チェックボタンを作る | Scale | スケールを作る |
Radiobutton | ラジオボタンを作る | Text | テキストの入力と編集 |
Labelframe | ラベル付きフレームを作る | Spinbox | スピンボックスを作る |
Entry | 1行の文字列の入力と編集 | Bitmap | ビットマップを作る |
Combobox | コンボボックスを作る | Canvas | キャンバスを作る |
<PWMの使い方>
4.カラーLED制御
3つのスライドバーを動かすことでLEDの色の明るさを調節できる。
web_color.py |
from tkinter import * import RPi.GPIO as GPIO import time red_pin = 17 grn_pin = 27 blu_pin = 22 GPIO.setmode(GPIO.BCM) GPIO.setup(red_pin, GPIO.OUT) GPIO.setup(grn_pin GPIO.OUT) GPIO.setup(blu_pin, GPIO.OUT) pwmRed = GPIO.PWM(red_pin, 500) pwmRed.start(100) pwmGreen = GPIO.PWM(grn_pin, 500) pwmGreen.start(100) pwmBlue = GPIO.PWM(blu_pin, 500) pwmBlue.start(100) class App: def __init__(self, master): frame = Frame(master) frame.pack() # メインフレームを表示 Label(frame, text='Red').grid(row=0, column=0) # 赤ラベル Label(frame, text='Green').grid(row=1, column=0) # 緑ラベル Label(frame, text='Blue').grid(row=2, column=0) # 青ラベル scaleRed = Scale(frame, from_=0, to=100, orient=HORIZONTAL, command=self.updateRed) scaleRed.grid(row=0, column=1) # 赤スケールバー表示 scaleGreen = Scale(frame, from_=0, to=100, orient=HORIZONTAL, command=self.updateGreen) scaleGreen.grid(row=1, column=1) # 緑スケールバー表示 scaleBlue = Scale(frame, from_=0, to=100, orient=HORIZONTAL, command=self.updateBlue) scaleBlue.grid(row=2, column=1) # 青スケールバー表示 def updateRed(self, duty): # 赤スケール変更時 pwmRed.ChangeDutyCycle(float(duty)) def updateGreen(self, duty): # 緑スケール変更時 pwmGreen.ChangeDutyCycle(float(duty)) def updateBlue(self, duty): # 青スケール変更時 pwmBlue.ChangeDutyCycle(float(duty)) root = Tk() root.wm_title('RGB LED Control') app = App(root) root.geometry("275x150+0+0") root.mainloop() |
フルカラーLED表示 | web制御画面 |