rasberry pi 3 で 計数カウンタを作成する5 -python

以下に、カウンターで使用しているパイソンのプログラムを掲載します。

サーバに接続して、カウントするごとに数値をサーバに送るようにしています。サーバは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