Raspberry PI上操作GPIO(GPIO程式設計,遠端控制GPIO)
阿新 • • 發佈:2018-12-29
一 Raspberry PI的GPIO
1. 什麼是GPIO
2. Raspberry上的GPIO介紹
二Raspberry PI上程式設計操作GPIO
1. Python操作
(1) 安裝環境
a.下載控制GPIO的python庫:http://pypi.python.org/pypi/RPi.GPIO/0.3.1a#downloads
b. 在Pi上安裝python-dev: sudo apt-get install python-dev
c. 解壓並安裝python庫
tar xvzf RPi.GPIO-0.x.xx.tar.gz
cd RPi.GPIO-0.x.xx
sudo python setup.py install
(2)測試程式
說明:led燈閃爍(分別接pi-01 和pi-11,11作為輸出)
import RPi.GPIO as GPIO
import time
def blink(times, delay):
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11, GPIO.OUT)
while times>0:
if 0==times%2:
GPIO.output(11, GPIO.HIGH) #or output(11, GPIO.True)
else:
GPIO.output(11, GPIO.LOW)
time.sleep(delay)
times-=1
return
if __name__ == '__main__':
blink(20, 1)
(3)測試程式2——遠端點亮/關閉相應的led燈
說明:和上個例子不同的就是a)用到了遠端控制,即socket通訊;b)操作多個led;
究其本質是一樣。當然本人之所以要遠端控制,只不過是為了以後遠端管理更多的外設做個鋪墊。
檔案1:remoIO.py
複製程式碼
import socket
import time
g_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
def init(ip, port):
g_sock.connect((ip, port))
time.sleep(2)
return
def send(data):
g_sock.send(data)
return
def read():
data = g_sock.recv(1024)
return data
def end():
g_sock.close()
return
def _test(ip, port):
sock = init(ip, port)
send("I am Raspberry Pi\r\n!");
print read(1024);
sock.close()
return
if __name__=='__main__':
#_test('192.168.2.1', 9999)
import sys
if len(sys.argv) == 3:
_test(sys.argv[1], int(sys.argv[2]))
else:
print 'usage:'+sys.argv[0]+' ip port\r\n'
複製程式碼
檔案2:blink.py
import RPi.GPIO as GPIO
import time
import remoIO
ip = '192.168.2.12'
port = 8888
def blink(times, delay):
R=11
Y=12
W=15
GPIO.setmode(GPIO.BOARD)
GPIO.setup(R, GPIO.OUT)
GPIO.setup(Y, GPIO.OUT)
GPIO.setup(W, GPIO.OUT)
remoIO.init(ip, port)
remoIO.send('Now, you can input 1,2 or 3 to turnon the right led:')
#in order to initial a communication protocol, add code here
#....
command = ''
while 1:
command = remoIO.read()
if command=='1\n':
GPIO.output(R, GPIO.LOW)
time.sleep(2)
GPIO.output(R, GPIO.HIGH)
remoIO.send('ok for 1\t')
elif command=='2\n':
GPIO.output(Y, GPIO.LOW)
time.sleep(2)
GPIO.output(Y, GPIO.HIGH)
remoIO.send('ok for 2\t')
elif command=='3\n':
GPIO.output(W, GPIO.LOW)
time.sleep(2)
GPIO.output(W, GPIO.HIGH)
remoIO.send('ok or 3\t')
elif command=='quit\n':
remoIO.send('end remote control!\r\n')
remoIO.end()
break
else:
remoIO.send('eroor input!\r\n')
while times>0:
if 0==times%2:
GPIO.output(R, GPIO.HIGH) #or output(R, GPIO.True)
else:
GPIO.output(R, GPIO.LOW)
time.sleep(delay)
times-=1
return
if __name__ == '__main__':
blink(10, 0.5)