以下に、カウンターで使用しているパイソンのプログラムを掲載します。
サーバに接続して、カウントするごとに数値をサーバに送るようにしています。サーバはVB.net で作成しました。
ここにはクライアントのパイソンのみ掲載します。
import RPi.GPIO as GPIO
import struct
import time
from time import sleep
import socket
import sys
#サーバのIPとポートの設定
HOSTNAME = "192.168.XXX.XXX"
PORT = XXXX
INTERVAL = 3
RETRYTIMES = 10
#以下でソケットを作成して、サーバに接続しに行きます。
#接続に失敗した場合は、接続できるまで再試行を繰り返します。
global c_socket
def socket_connect(host, port, interval, retries):
global c_socket
c_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
for x in range(retries):
try:
c_socket.connect*1
return c_socket
except socket.error:
print "wait"+str(interval)+"s"
time.sleep(interval)
c_socket.close()
return None
def main():
c_socket = socket_connect(HOSTNAME,PORT,INTERVAL,RETRYTIMES)
while c_socket is None:
c_socket = socket_connect(HOSTNAME,PORT,INTERVAL,RETRYTIMES)
if c_socket is None:
print "system exit:connection error"
sys.exit(0)
if __name__ == '__main__':
main()
GPIO.setmode(GPIO.BCM)
GPIO.setup(25, GPIO.OUT)
global _COUNT_PATH
#接続が切れた場合に、カウントし続け、以下のパスのファイルにカウントを記録する。
_COUNT_PATH = '/home/shared/count.bin'
global count
count = 0
#起動時にファイルからカウントを復旧する
f = open("/home/shared/tp-1/count.txt","r")
countstr = f.read()
count = int(countstr)
pin = 24
flg = False
#ファイルにカウントを書き込む
def write_count(count):
f = open('/home/shared/tp-1/count.txt' ,'w')
f.write(str(count))
f.close()
#センサーの反応の立ち上がりの処理
def callBackRising(channel):
if GPIO.input(24):
GPIO.output(25,GPIO.HIGH)
global count
count += 1
try:
c_socket.send(str(count))
except:
pass
print(str(count))
write_count(count)
else :
GPIO.output(25,GPIO.LOW)
GPIO.setup(pin, GPIO.IN)
#GPIO.add_event_detect(pin, GPIO.RISING, callback=callBackRising, bouncetime=100)
#GPIO.add_event_detect(pin, GPIO.FALLING, callback=callBackFalling, bouncetime=150)
GPIO.add_event_detect(pin, GPIO.BOTH, callback=callBackRising, bouncetime=200)
#以下、サーバから命令が来た時の処理
DoFlg = True
try:
while DoFlg:
sleep(1)
response = c_socket.recv(1024)
print(response)
if response == 'END':
DoFlg = False
elif response == 'RESET':
count =0
elif response == 'SEND':
c_socket.send(str(count))
finallizeFlg = False;
c_socket.close()
GPIO.cleanup()
except KeyboardInterrupt:
print("end cleanup")
c_socket.close()
GPIO.cleanup()
*1:host, port