creative

# When coding to 2Byte charactor define first line.

#-*- coding: utf-8 -*-

# 윗줄은 한글 주석 사용시 반듯이 첫줄에 써준다

 

#Import 선언

import socket #socket

import RPi.GPIO as GPIO #gpio

import time # sleep용

 

#GPIO 모드 선언과 LED 포트 설정

GPIO.setmode(GPIO.BCM)

GPIO.setup(26, GPIO.OUT, initial=1)

 

#함수 선언

result=""

# 소켓 데이터 읽음

def read_sock(sockfd):

  #결과물을 저장할 변수 선언

  result = ""

  while(1):

    #데이터를 1byte씩 읽어들인다.

    data = sockfd.recv(1)

    #만약 데이터에 '.'이 포함되어 있으면 병합을 중지하고 결과값을 리턴한다.

    if data != ".":

      result = result + data

    else:

      return result

      break

 

def blink_led(bk):

  if int(bk) != 0:

    for i in range(int(bk)):

      GPIO.output(26, 1)

      time.sleep(0.25)

      GPIO.output(26, 0)

      time.sleep(0.25)

  else:

    GPIO.output(26, 1)

    time.sleep(0.5)

    GPIO.output(26, 0)

    time.sleep(0.1)

 

# 소켓 객체를 생성합니다.

# 주소 체계(address family)로 IPv4, 소켓 타입으로 TCP 사용합니다.

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

 

# 지정한 HOST와 PORT를 사용하여 서버에 접속합니다.

try:

  client_socket.connect(("서버주소", 포트번호))

except:

  print "서버가 준비되지 않았습니다."

  client_socket.close()

  quit()

 

# 서버 접속후 동기화 문자를 기다린다.

data = read_sock(client_socket)

if data == "READY":

  # 첫 접속후 ID와 PW를 전송

  client_socket.sendall('ID:ID'.encode())

  client_socket.sendall('PW:PASSWORDs'.encode())

 

  # 무한 데이터 수신을 위한 반복문으로 돌입

  bf_art = 0

  data = ""

  client_socket.settimeout(1.0)

  try:

    while(1):

 

      # 접속 허가 문자를 수신 합니다.

      try:

        data = read_sock(client_socket)

      except socket.timeout:

        pass

      except KeyboardInterrupt:

        client_socket.sendall('quit'.encode())

        print ("중지가 되었습니다.")

        client_socket.close()

        GPIO.cleanup()

        quit()

 

      # 오류 수신시

      if data == "FALSE":

        print "ID와 PW를 확인해 주세요"

        client_socket.close()

        quit()

 

      # 서버 종료 문자 수신시

      if data == "END":

        print "서버에서 종료를 선언했습니다."

        client_socket.close()

        quit()

 

      # 경고문자 수신시 변수에 저장

      if data[0:3] == "AT:":

        alt_msg = data[3:]

 

      # 반복적인 LED 깜빡임 설정

      blink_led(alt_msg)

 

  # 키보드 중지 문자가 들어올때 - 테스트중에 쓰임

  except KeyboardInterrupt:

    client_socket.sendall('quit'.encode())

    print ("중지가 되었습니다.")

    client_socket.close()

    GPIO.cleanup()

    quit()

 

# 소켓을 닫습니다.

client_socket.close()

GPIO.cleanup()

menu