Vol.748 22.Jun.2018

小型モニターとUSBブースター PHP(5)〜webからSQLアクセス ラズパイ(12)〜カラーLED制御

M 小型モニターとUSBブースター

by fjk

屋外でラズパイの動作を確認したい時には、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で
ラズパイ画面を表示


P PHPプログラミング(5) 〜webからSQLアクセス〜

by fjk

PHPにはMySQLを操作する以下の命令が用意されている。

@MySQLに接続
'接続ID' = mysql_connect('接続先アドレス' , 'ユーザー名' , 'パスワード')
Aデーターベースを選択
'接続状況' = mysql_select_db('データベース名' , 接続ID)
BSQLを実行(コマンド送信)
結果ID = mysql_query('実行するSQL文' , 接続ID)
CSQLを実行(レコード取得)
連想配列 = mysql_fetch_array(結果ID)  ・・・mysql_fetch_rowを使えば配列で受け取れる
CMySQLとの接続を切断
処理結果 = mysql_close(接続ID)


※printは「.」(ピリオド)で、echoは「,」(カンマ)でデータを区切る(括弧無し)。
※表示文字列は通常は「'」(引用符)で囲むが、「"」(2重引用符)を用いると、「\n」で改行できる。
※die()はexit()と同じ関数



R ラズベリーパイ(12) 〜カラーLEDの制御〜

by fjk

カソードコモンのフルカラーLEDをGUI画面で制御する。GUIツールとしてpythonでよく使われているtkinterを利用する。3色のLEDの明るさを変えるには、PWM制御によりデューティ比を変えることで実現する。

1.tkinterのインストール
  $ sudo apt-get install python3-tk
インストールの確認は
  $ python3 -m tkinter
または、IDLE画面で
  import tkinter
  tkinter._test

IDLE画面例 この画面が出ればOK

2.tkinterの使い方例 <tkintertest.py>
@Tk()でルート要素を作成。
Aルート要素のコンテナとしてframeを作成
Bframeの中にlabel、entry、buttonを作成
Cデータを受け取る変数tを宣言
・gridはジオメトリマネージャーで、行(row)と列(column)を指定してウィジットを配置
・sticky属性は伸縮可能方向を示す(上がN)
・ボタンのイベント処理はcommand属性に関数オブジェクトを指定し、その関数を実行
・ウィジットの書式は
  widgit = widgetClass(parent,option=value,・・)
・configureは設定の変更、padx/yは隙間の指定

<tkintertest.pyの開始>
python3 tkintertest.py

    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の実行例


3.Tkinterで利用できる主なウィジット(GUIの部品)
Frame ウィジットを格納する枠を作る Scrollbar スクロールバーを作る
Lable 文字列やイメージを表示 Listbox リストボックスを作る
Message 複数行の文字列の表示 Menu メニューを作る
Button ボタンを作る Menubutton メニューボタンを作る
Checkbutton チェックボタンを作る Scale スケールを作る
Radiobutton ラジオボタンを作る Text テキストの入力と編集
Labelframe ラベル付きフレームを作る Spinbox スピンボックスを作る
Entry 1行の文字列の入力と編集 Bitmap ビットマップを作る
Combobox コンボボックスを作る Canvas キャンバスを作る

<PWMの使い方>

@PWMを使うピンを指定
GPIO -g mode 17 output
pwmLed = GPIO.PWM(18, 50)
APWMを初期化
pwmLed.start(0)
Bデューティ比を指定
pwmLed.changedutycycle(duty_rate)


4.カラーLED制御
 3つのスライドバーを動かすことでLEDの色の明るさを調節できる。

ラズパイで以下のコマンドを入力すると、VNC画面に制御画面が表示される。
python3 web_color.py

    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制御画面


小型モニターとUSBブースター PHP(5)〜webからSQLアクセス ラズパイ(12)〜カラーLED制御