Top > ftdi_bitbang 広告 FTDIのチップでデジタルI/OFT232やFT245はシリアル通信だけでなく、デジタルI/O(パラレル)デバイスとして使うことができる。 準備PythonでFTDIのチップを取り扱うモジュールはいくつかあるが、ここではlibFTDIのpythonバインドを使う。 プログラム例パーミッションに注意。rootでないと動かない場合があります。
#!/usr/bin/python # coding: UTF-8 #import ftdi1 as ftdi #将来はこっち? import ftdi import time #for Wait def main(): ftdic = ftdi.ftdi_context() #ftdi_contextの宣言 ftdi.ftdi_init(ftdic) #FTDIチップの初期化 f = ftdi.ftdi_usb_open(ftdic, 0x0403, 0x6001) #FTDIチップをオープン 0x0403, 0x6001はlsusbなどで調べる。おそらく同じ #print f if(f < 0 and f != -5): #エラートラップ。-5はftdi_sioが動いていた時のエラー print"unable to open ftdi device:", f, ":", ftdi.ftdi_get_error_string(ftdic) exit() print "ftdi open succeeded:",f print "enabling bitbang mode" #ftdi.ftdi_enable_bitbang(ftdic, 0xFF) #古いやり方らしい ftdi.ftdi_set_bitmode(ftdic, 0xff, ftdi.BITMODE_BITBANG) #bitbangに設定 0xff=すべてoutput buf = chr(0x0) print "turning everything off" f = ftdi.ftdi_write_data(ftdic, buf, 1) #00を書き込み。つまりすべてOFF if(f < 0): #エラートラップ。 print "Write failed for ",hex(ord(buf)), " ", f, " : " , ftdi.ftdi_get_error_string(ftdic) exit() time.sleep(1) #Wait 1sec buf = chr(0xFF) print "turning everything on" f = ftdi.ftdi_write_data(ftdic, buf, 1) #00を書き込み。つまりすべてON if(f < 0): #エラートラップ。 print "Write failed for ",hex(ord(buf)), " ", f, " : " , ftdi.ftdi_get_error_string(ftdic) exit() time.sleep(1) #Wait 1sec buf = chr(0x0) print "turning everything off" f = ftdi.ftdi_write_data(ftdic, buf, 1) #00を書き込み。つまりすべてOFF if(f < 0): #エラーとトラップ。 print "Write failed for ",hex(ord(buf)), " ", f, " : " , ftdi.ftdi_get_error_string(ftdic) exit() time.sleep(5) #Wait 1sec print "PORT check" for i in range(8): buf = chr(2**i) print "bit = ",i,": hex = ",hex(2**i) f = ftdi.ftdi_write_data(ftdic, buf, 1) #書き込み。 if(f < 0): #エラートラップ。 print "Write failed for ",hex(ord(buf)), " ", f, " : " , ftdi.ftdi_get_error_string(ftdic) exit() time.sleep(2) print "disabling bitbang mode" ftdi.ftdi_disable_bitbang(ftdic) #bitbangモードを終了 ftdi.ftdi_usb_close(ftdic) #デバイスを閉じる ftdi.ftdi_deinit(ftdic); # if __name__ == "__main__": main() 広告 |