2013年2月8日 星期五

[PiFace Digital 四部曲] 使用 Python 控制 PiFace 擴充卡

網頁最後修改時間:2018/08/02

PiFae Digital 在樹莓派作業系統的環境設定與軟體安裝是一連貫的步驟,請從"七部曲設置 PiFace Digital 擴充板" 開始。

Step 4: 使用 Python 控制 PiFace 擴充卡

不管是直接使用樹莓派還是用 VNC viewer 登入 LXDE 桌面環境,打開終端機程式,輸入下面指令開啟 PiFace 仿真器軟體,我們要先作輸出測試

pi@raspberrypi ~ $ piface/scripts/piface-emulator


VNC viewer + PiFace Emulator
輸出測試:

在仿真軟體按下 "Override Enable" 按鈕,就可以控制 PiFace 的輸出

PiFace Emulator 介面

每一個輸出都有相對應的 LED 指示燈告訴你哪裡做了輸出,其中 "Output Pin 1" 和 "Output Pin 2" 按下時會另外帶動繼電器的線圈使其激磁 ( "噠" 的一聲 ) 並切換繼電器的輸出端動作,你可以使用電表 (歐姆檔) 去量測,更容易了解繼電器的動作 (如果之前沒接觸過的話)

執行 PiFace 輸出控制

試著按下仿真器的 "Output Pin #" 測試 PiFace 各個輸出接點,若按下的按鈕與我一樣,就會看到跟下圖一樣的 LED 燈號輸出

PiFace Emulator 控制 Raspberry Pi + PiFace

看到這邊,跟大家介紹一個真實的與 minicraft 結合的 PiFace 應用 ( 原文介紹在下方 ),

reallife redstone - raspberry pi + piface + minecraft

This is my most recent project with a pi. with a piface this was the most natural thing to do...
The minecraft server is running a mod written for bukkit,the mod is publishing any change in the redstone to.
The pi is running an mqtt server, with a script to push notifications on mqtt out to the pins, and from the input pins over to update the levers in the minecraft mod. happy crafting....
( from:http://www.element14.com/community/groups/raspberry-pi/blog/2013/01/14/reallife-redstone--raspberry-pi-piface-minecraft )


輸入測試:

要進行輸入測試,請先將仿真器上面的 "Keep input updated" 打勾,並且設定輸入讀取的間隔時間

每 500 ms 更新輸入狀態一次

在 PiFace 板子的有四個按鈕 ( S1 - S4 ),分別代表下面圖示紅色的四個位置 (由右至左),可作外部輸入也可作為按鈕狀態輸入。

PiFace 觸動開關的位置


當按下 S1 時,仿真器會亮起相對應的圖示,剩下沒有按鈕的部分將會在最後介紹各部份時講解偵測輸入的接法。

S1 按下時,仿真器上的圖示


Python 撰式撰寫流程:

輸出以及輸入都確認沒問題後,接著要說明如何使用 Python 寫程式。

首先,Python 一開頭要引入 piface.pfio 模組,使用之前要先呼叫 init() 函式


import piface.pfio


下面是 PiFace Python 函式庫幾個介面控制的主要函式:
  • digital_read(pin_number)
  • 回傳所讀取的輸入接腳 ( pin_number ) 訊號,0 或 1

  • digital_write(pin_number, state)
  • 設定輸出接腳 ( pin_number ) 狀態 0 ( Low )或 1 ( High );當設定為 1 時會點亮 LED 並使得 開集極 ( open-collector ) 可以沉入電流 ( sink current )

  • digiral_write_pullup(pin_number, state)
  • 設定輸入接腳 ( pin_number) 提升電阻狀態為 0 或 1;狀態 1 表示提升電阻致能


簡單的 Python 範例程式:

1.) 控制繼電器 1 開啟或關閉

照著下面的指令輸入,輸入完畢後連按兩次 Enter 程式就會開始執行,就可以觀察到繼電器與 LED 的動作

pi@raspberrypi ~ $ python
Python 2.7.3 (default, Jan 13 2013, 11:20:46)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import piface.pfio as pfio
>>> pfio.init()
>>> pfio.digital_write(1, 1) # LED 1 亮,繼電器 1 激磁
>>> pfio.digital)write(1, 0) # LED 1 滅,繼電器 1 不激磁


2.) 控制 LED 亮滅

下面的程式可以直接存成檔案執行 (sudo python 檔案名稱),或直接使用終端機執行,要注意 Python 的縮排限制,輸入完畢後連按兩次 Enter 程式就會開始執行

pi@raspberrypi ~ $ python
Python 2.7.3 (default, Jan 13 2013, 11:20:46)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from time import sleep
>>> import piface.pfio as pfio
>>> pfio.init()
>>> while True:
...     pfio.digital_write(1,1)
...     sleep(1)
...     pfio.digital_write(1,0)
...     sleep(1)
...

Traceback (most recent call last):
  File "<stdin>", line 5, in <module>
KeyboardInterrupt
>>>

你會看到 LED 1 一亮一滅,繼電器 噠 ! 噠 !,"Ctrl + C" 中斷 Python 程式執行


3.) 讀取輸入狀態

下面指令輸入完畢後,連按兩次 Enter 程式就會開始執行,按下 S1 按鈕,就會看到按鈕的狀態,按下是 1 放開是 0

pi@raspberrypi ~ $ python
Python 2.7.3 (default, Jan 13 2013, 11:20:46)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from time import sleep
>>> import piface.pfio pfio
  File "<stdin>", line 1
    import piface.pfio pfio
                          ^
SyntaxError: invalid syntax
>>> import piface.pfio as pfio
>>> pfio.init()
>>> while True:
...     pfio.digital_read(1)
...     sleep(1)
...
0
0
0
1
1
1
0
0
1
0
0
Traceback (most recent call last):
  File "<stdin>", line 3, in <module>
KeyboardInterrupt
>>>


沒有留言:

張貼留言

留言屬名為"Unknown"或"不明"的用戶,大多這樣的留言都會直接被刪除掉,不會得到任何回覆!

發問問題,請描述清楚你(妳)的問題,別人回答前不會想去 "猜" 問題是什麼?

不知道怎麼發問,請看 [公告] 部落格提問須知 - 如何問問題 !