2014年8月29日 星期五

Boa Constructor - 建立你的第一支程式



1. 點選下拉功能表「New」右下角落的 [wx.App]工具列按鈕,會產生 App1,Frame1 兩個頁籤,如下圖


2. 分別點擊 App1和 Frame1頁籤,並儲存成 App1.py 和 Frame1.py,如下圖


接著會出現檔案儲存視窗,如下圖


3. 利用視窗上方的「top | up」切換路徑到 C 磁碟機根目錄底下,點選「new floder」新建一個資料夾「App1」,再點擊「Save」鈕,如下圖


您可以使用檔案管理員檢視 C:\App1 資料夾,您可以發現我們剛剛儲存的 App1.py 和 Frame1.py 就在這裏。


3.點擊 [Run application] 工具列按鈕,看看目前的成果。 

它會出現一個空白視窗, 如下:








安裝 Boa Constructor

Boa Constructor 是一個以 wxPython 為基礎的使用者介面建構器。

官網 http://boa-constructor.sourceforge.net/



下載

切換至下載頁面 http://sourceforge.net/projects/boa-constructor/files/,點擊淡藍色的「Download boa-constructor-0.6.1.src.win32.exe (13.9 MB)字樣。


安裝

雙擊 boa-constructor-0.6.1.src.win32.exe,然後依照指示安裝。
接著在 C:\Python27 內新增一個文字文件,在裏面鍵入

python C:\Python27\Lib\site-packages\boa-constructor\Boa.py

如下圖



儲存檔案並將「新增文字文件.txt」更名為「Boa.bat」。
最後再為 Boa.bat 建立一個桌面捷徑,以後只要雙擊 Boa 捷徑圖示,即可啟動 Boa Constructor。

溫馨提示:

1. 如果您的作業系統是 Windows7 (含)以上版本,則您應該以系統管理者身分執行 Boa 捷徑。

2. 如果在啟動過程中顯示無法找到 wx.NO_3D 模組,則您可以分別找出模組內文中有 「wx.NO_3D」文字的地方以「wx.DEFAULT_FRAME_STYLE」取代。

3. 如果無法存取「C:\Documents and Settings」資料夾,您可以依照網頁 http://www.minwt.com/pc/5502.html 的指示解除這個限制。

教學影片

1. https://www.youtube.com/watch?v=Im2odZllHXM
2. https://www.youtube.com/watch?v=_vqZeyZfap8
3. http://showmedo.com/videotutorials/video?name=4010000&fromSeriesID=401


2014年8月28日 星期四

安裝 wxEasyGUI

wxEasyGUI 可以讓您更簡單地使用 wxPython 的視窗工具。
以 MessageBox 為例,如果要顯示如下畫面


使用 wxPython 需要寫這麼多行:

import wx

class Example(wx.Frame):

    def __init__(self, *args, **kwargs):
        super(Example, self).__init__(*args, **kwargs)

        self.InitUI()

    def InitUI(self):

        wx.FutureCall(5000, self.ShowMessage)

        self.SetSize((300, 200))
        self.SetTitle('Message box')
        self.Centre()
        self.Show(True)

    def ShowMessage(self):
        wx.MessageBox('aaaa\nbbb', 'Info',
            wx.OK | wx.ICON_INFORMATION)


def main():

    ex = wx.App()
    Example(None)
    ex.MainLoop()


if __name__ == '__main__':
    main()

而使用 WxEasyGUI 只需要 2 行:

import wxEasyGUI as eg
s = eg.MessageDialog('aaaa\nbbb')     # s = 'ok'

由此可見 wxEasyGUI 的確是非常地好用。


安裝需求

1. Python
2. WxPython


下載

切換網頁到 http://sourceforge.net/projects/wxeasygui/?source=typ_redirect,點擊綠色的 Download 按鈕。


安裝

將 wxEasyGUI.py 複製到 python2.7\Lib 底下即可。


範例程式

這裡有許多範例程式 http://sourceforge.net/projects/wxeasygui/files/,您可以下載並執行它。

2014年8月27日 星期三

安裝 pyVISA

pyVISA 的 VISA 全名是「虛擬儀器軟體架構(Virtual Instrument Software Architecture)」,您可以透過 GPIB、 RS232、以太網路和 USB 等裝置跟其他量測設備作溝通。

官網 https://pypi.python.org/pypi/PyVISA


安裝需求

您必須先安裝下列軟體,才能安裝 pyVISA。
1. VISA (NI-VISA3.2,Win XP)
2. Python ( Python 2.6~3.2 版之間)


下載

切換網頁至 https://pypi.python.org/pypi/PyVISA,點擊綠色的 Download 按鈕。


安裝

 將下載下來的檔案 PyVISA-1.5.zip 解壓縮,然後開啟「命令提示字元視窗」,切換路徑到 pyVISA 裏(註A),鍵入 python setup.py install 即可。如下圖所示:


註A:我的 pyVISA 解壓縮檔案是放在路徑「D:\download\PyVISA-1.5\」。


測試是否已正確安裝

啟動 Python,然後你可以鍵入下列程式碼,如果沒有出現錯誤訊息,表示已正確安裝。

>>> import visa
>>> lib = visa.ResourceManager()


Q&A

Q:鍵入 import visa 時會出現下列錯誤訊息:
Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
  File "C:\Python27\lib\site-packages\visa.py", line 18, in <module>
    from pyvisa import logger, __version__, log_to_screen
  File "C:\Python27\lib\site-packages\pyvisa\__init__.py", line 20, in <module>
    import pkg_resources
ImportError: No module named pkg_resources

A:這是缺少 pkg_resources 模組所致,請到是德科技網站 http://www.keysight.com/ 下載 IO Libraries Suite 軟體,下載頁 http://www.keysight.com/main/software.jspx?ckey=1184883&lc=cht&cc=TW&nid=-11143.0.00&id=1184883


Q:Windows ERROR 126

A:詳 http://sourceforge.net/p/pyvisa/bugs/15/


程式碼範例

import visa
rm = visa.ResourceManager()
my_instrument = rm.open_resource('GPIB::14')
my_instrument.write("*IDN?")
print(my_instrument.read())



安裝 NI-VISA 3.2

切換網頁到 http://www.ni.com/download/ni-visa-3.2/389/en/ ,點擊 visa320full.exe。它會要求您建立使用者帳號,如下圖。


如果您已經註冊過那麼就點擊「登入」,輸入正確的使用者名稱和密碼,然後再次點擊  visa320full.exe。

接著再雙擊下載的檔案 visa320full.exe,然後依照安裝視窗指示進行即可。


您可能會喜歡

1. pyVISA 參考文件 https://pyvisa.readthedocs.org/en/latest/






2014年8月23日 星期六

安裝 pyFirmata

pyFirmata 可以讓 Python 透過 Firmata 通訊協定和 Arduino 溝通。您可以在 Python 程式碼裡直接控制 Arduino port 的 HIGH 與 LOW。


下載

切換到下載頁面 https://github.com/tino/pyFirmata,點擊右下角落的「Download ZIP」,之後將  pyfirmata-master.zip 解壓縮。


安裝

安裝的首選方法是使用 PIP,語法如下:

pip install pyfirmata
或是您也可以開啟「命令提示字元」視窗,切換到 pyfirmata-master.zip 解壓縮後的路徑,然後鍵入

python setup.py install
如下圖所示:





安裝 pySerial

您可以使用 pySerial 透過 COM port 與 Arduino 聯繫。

官網 http://pyserial.sourceforge.net/#


下載

切換至下載頁面 https://pypi.python.org/pypi/pyserial,點擊 pyserial-2.7-win32.exe (md5)。


安裝

雙擊  pyserial-2.7-win32.exe,然後依照視窗提示安裝即可。它會被安裝到 C:\Python27\Lib\site-packages\serial\ 這個位置。


開啟 COM4 並送出訊息

COM port 的編號是從 0 開始,所以  serial.Serial(3) 表開啟 COM4。

import serial
ser = serial.Serial(3)  # open COM4 port
print ser.name          # check which port was really used
ser.write("hello")      # write a string
ser.close()             # close port


以名稱方式開啟 COM port 並讀取訊息

超時設為 1 秒,讀取資料時如果時間超過 1 秒沒接收到資料就中斷接收。

import serial
ser = serial.Serial('COM4', 19200, timeout=1)
x = ser.read()          # read one byte
s = ser.read(10)        # read up to ten bytes (timeout)
line = ser.readline()   # read a '\n' terminated line
ser.close()


稍後才設定 COM 的參數

您不必一開始就指定某個特定的 COM port 必須使用多少鮑率等參數,而是可以隨著程式的進行隨時改變參數,方法如下所示:

>>> import serial
>>> ser = serial.Serial()
>>> ser.baudrate = 19200
>>> ser.port = 0
>>> ser
Serial<id=0xa81c10, open=False>(port='COM1', baudrate=19200, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=0, rtscts=0)
>>> ser.open()
>>> ser.isOpen()
True
>>> ser.close()
>>> ser.isOpen()
False


獲取可用的 COM port

import serial.tools.list_ports

coms=serial.tools.list_ports.comports()
for a in coms:
     print a



讓 Arduino 板子 pin 13 的 LED 閃爍

Python code:

import serial

def main():
    sp = serial.Serial()
    sp.port = 'COM4'
    sp.baudrate = 9600
    sp.timeout = 5

    sp.open()
    sp.readline() #to give the hardware handshake time to happen
    sp.write(chr(1))
    value = sp.readline()
    print value
    sp.write(chr(0))
    sp.close()

if __name__ == "__main__":

    main()


Arduino code:

const int ledPin = 13;

void setup(){
    Serial.begin(9600);
    pinMode(ledPin, OUTPUT);
}

void loop(){
    while(Serial.available()){
        switch(Serial.read()) {
          case 0:
            digitalWrite(ledPin, LOW);
            break;
          case 1:
            digitalWrite(ledPin, HIGH);
            break;
        }  
        delay(20);
    }

}


您可能也喜歡

Arduino and Python
http://playground.arduino.cc/interfacing/python

pyFirmata
https://github.com/tino/pyFirmata

Python Arduino Prototyping API
https://github.com/vascop/Python-Arduino-Proto-API-v2


<Python Serial Port Extension>


1. wxTerminal.py
http://sourceforge.net/p/pyserial/code/HEAD/tree/trunk/pyserial/examples/wxTerminal.py


2. wxSerialConfigDialog.py
http://sourceforge.net/p/pyserial/code/HEAD/tree/trunk/pyserial/examples/wxSerialConfigDialog.py



安裝 PyBluez

PyBluez 是給桌上型電腦使用的藍芽函式庫,您可以用它來跟附近的藍芽裝置溝通。如果是手機或平板,您可以安裝 LightBlue。


下載

切換至下載頁面 https://code.google.com/p/pybluez/downloads/list
點擊 PyBluez-0.20-win32.py2.7.exe。


安裝

雙擊 PyBluez-0.20-win32.py2.7.exe,然後依照視窗內的提示安裝即可。
官網說要在「命令提示視窗」內進行如下安裝

python setup.py install

但我發現這個動作可以省略。


搜尋藍芽裝置

本程式碼會搜尋並顯示附近的藍芽裝置的名稱和位址。

import bluetooth

print("performing inquiry...")

nearby_devices = bluetooth.discover_devices(lookup_names = True)

print("found %d devices" % len(nearby_devices))

for addr, name in nearby_devices:

    print("  %s - %s" % (addr, name))


執行過程如下:

performing inquiry...
found 2 devices
Ray's Nokia - 00:12:D2:5A:BD:E4
Ray's MacBook - 00:1E:C2:93:DA:6F


RFCOMM 服務

以下是基本的客戶端和伺服器端的程式,為了讓事情變得簡單,我們手動輸入伺服器藍牙設備的位址(00:12:D2:5A:BD:E4)和埠口;在下文中,客戶端連接到伺服器上的埠口為 3。

程式運作的方式如下圖:



客戶端(從)程式

from bluetooth import *

# Create the client socket
client_socket=BluetoothSocket( RFCOMM )

client_socket.connect(("00:12:D2:5A:BD:E4", 3))

client_socket.send("Hello World")

print "Finished"

client_socket.close()


伺服器端(主)程式

from bluetooth import *

server_socket=BluetoothSocket( RFCOMM )

server_socket.bind(("", 3 ))
server_socket.listen(1)

client_socket, address = server_socket.accept()

data = client_socket.recv(1024)

print "received [%s]" % data

client_socket.close()
server_socket.close()


安裝 pyScripter

pyScripter 是 Python 眾多編輯器其中一種。

官網 https://code.google.com/p/pyscripter/


安裝需求

1. 您必須先安裝 Python。


下載與安裝

切換到下載頁面 https://code.google.com/p/pyscripter/downloads/list

請點擊 PyScripter-v2.5.3-Setup.exe,下載後請快擊兩下並依視窗指示安裝。

安裝時,請勾選在桌面產生捷徑圖示,捷徑如下圖示:




執行 pyScripter

以後我們可以快擊兩下 pyScripter 捷徑,就可以開啟 pyScripter 編輯器,用它來寫 Python 程式。



安裝 wxPython

Python 屬於直譯式程式語言,鍵入程式碼並按下<Emter>鍵就馬上有結果,它雖然方便易懂,但不利於撰寫較大的程式。如果要撰寫較大的程式,我們可以安裝程式碼撰寫介面軟體。

在官網主頁的右下角落有表列出插件軟體,如下圖:


您可以看到在 GUI Development 這一行列出 wxPython,Tkinter,PyGTK,PyQt 等 4 個插件軟體,這幾個插件軟體各有優缺點,但都可以用來讓我們方便撰寫 Python 程式,您可以逐一下載並使用看看。

此處我們僅示範安裝 wxPython。


下載並安裝 wxPython

先到官網 https://www.python.org/,然後滾動滑鼠滾輪到網頁的最下端,在右下角落找到 Use Python for...,點擊 wxPython,切換到 wxPython 主頁面。

點擊左側功能表中 Download 項目下的 Ms Windows,再點擊

wxPython3.0-win32-py27

這是給 Windows 32 bit 作業系統使用的版本,如下圖示:



下載後請依視窗指示安裝。安裝程式會自動偵測 Python 所在位置,本人不建議你變更安裝路徑。

安裝後不會有桌面捷徑,因為它只是一個 Library。稍後我們將會學到如何使用 wxPython。