pySerial 패키지 사용의 전체 예제 [닫힌]


96

누군가가 pyserial 을 사용하는 전체 파이썬 샘플 코드를 보여줄 수 있습니까? 패키지를 가지고 있으며 AT 명령을 보내고 다시 읽는 방법이 궁금합니다!

답변:


88

블로그 게시물 Python에서 직렬 RS232 연결

import time
import serial

# configure the serial connections (the parameters differs on the device you are connecting to)
ser = serial.Serial(
    port='/dev/ttyUSB1',
    baudrate=9600,
    parity=serial.PARITY_ODD,
    stopbits=serial.STOPBITS_TWO,
    bytesize=serial.SEVENBITS
)

ser.isOpen()

print 'Enter your commands below.\r\nInsert "exit" to leave the application.'

input=1
while 1 :
    # get keyboard input
    input = raw_input(">> ")
        # Python 3 users
        # input = input(">> ")
    if input == 'exit':
        ser.close()
        exit()
    else:
        # send the character to the device
        # (note that I happend a \r\n carriage return and line feed to the characters - this is requested by my device)
        ser.write(input + '\r\n')
        out = ''
        # let's wait one second before reading output (let's give device time to answer)
        time.sleep(1)
        while ser.inWaiting() > 0:
            out += ser.read(1)

        if out != '':
            print ">>" + out

8
serial.serialutil.SerialException: Port is already open이 코드를 실행할 때 오류가 발생했습니다 . 나는 이것에 대해 확신하지 못하지만 직렬 포트가에서 한 것처럼 명시 적으로 정의되면 자동으로 열립니다 ser. ser.open()줄을 주석 처리 한 후 작동했습니다.
user3817250

이 코멘트는 구세주입니다.
아가 왈 saurabh

1
@ user3817250 : 또는 단지 주변의 경우 케이스 만들기ser.open()
arc_lupus

1
btw, ser.isopen () 자체만으로는 의미가 없습니다. isopen (r)을 조건부로 사용하여 물론 직접 열기 전에 이미 열려 있는지 확인할 수 있습니다. 그렇다면 프로그램이 이미 다른 곳에서 실행 중임을 나타낼 수 있습니다. 그런 다음 Python Fu를 사용하여 다른 프로세스를 종료 한 다음 다시 시도하십시오. stackoverflow.com/questions/6178705/…
SDsolar

1
안녕하세요, 멋진 코드입니다! 질문이 있습니다. 대신 파이썬 3을 사용하면 어떻게 변할까요?
Luis Jose


28

http://web.archive.org/web/20131107050923/http://www.roman10.net/serial-port-communication-in-python/comment-page-1/

#!/usr/bin/python

import serial, time
#initialization and open the port

#possible timeout values:
#    1. None: wait forever, block call
#    2. 0: non-blocking mode, return immediately
#    3. x, x is bigger than 0, float allowed, timeout block call

ser = serial.Serial()
#ser.port = "/dev/ttyUSB0"
ser.port = "/dev/ttyUSB7"
#ser.port = "/dev/ttyS2"
ser.baudrate = 9600
ser.bytesize = serial.EIGHTBITS #number of bits per bytes
ser.parity = serial.PARITY_NONE #set parity check: no parity
ser.stopbits = serial.STOPBITS_ONE #number of stop bits
#ser.timeout = None          #block read
ser.timeout = 1            #non-block read
#ser.timeout = 2              #timeout block read
ser.xonxoff = False     #disable software flow control
ser.rtscts = False     #disable hardware (RTS/CTS) flow control
ser.dsrdtr = False       #disable hardware (DSR/DTR) flow control
ser.writeTimeout = 2     #timeout for write

try: 
    ser.open()
except Exception, e:
    print "error open serial port: " + str(e)
    exit()

if ser.isOpen():

    try:
        ser.flushInput() #flush input buffer, discarding all its contents
        ser.flushOutput()#flush output buffer, aborting current output 
                 #and discard all that is in buffer

        #write data
        ser.write("AT+CSQ")
        print("write data: AT+CSQ")

       time.sleep(0.5)  #give the serial port sometime to receive the data

       numOfLines = 0

       while True:
          response = ser.readline()
          print("read data: " + response)

        numOfLines = numOfLines + 1

        if (numOfLines >= 5):
            break

        ser.close()
    except Exception, e1:
        print "error communicating...: " + str(e1)

else:
    print "cannot open serial port "

2

나는 pyserial을 사용하지 않았지만 https://pyserial.readthedocs.io/en/latest/shortintro.html 의 API 문서에 따르면 매우 멋진 인터페이스처럼 보입니다. 장치 / 라디오 / 당신이 다루는 모든 AT 명령에 대한 사양을 다시 확인하는 것이 좋습니다.

특히 일부는 명령 모드로 들어가기 위해 AT 명령 전후에 약간의 침묵이 필요합니다. 나는 먼저 약간의 지연없이 응답의 읽기를 좋아하지 않는 몇몇을 만났다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.