PySerial paketini kullanmanın tam örnekleri [kapalı]


97

Birisi bana pyserial kullanan tam bir python örnek kodu gösterebilir mi , pakete sahibim ve AT komutlarını nasıl göndereceğimi ve onları nasıl okuyacağımı merak ediyorum!

Yanıtlar:


89

Blog yayını Python'da seri RS232 bağlantıları

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 openBu kodu çalıştırırken bir hata aldım . Bundan emin değilim ama seri bağlantı noktasının sizin yaptığınız gibi açıkça tanımlandığında otomatik olarak açıldığını düşünüyorum ser. ser.open()Çizgiyi yorumladıktan sonra işe yaradı.
user3817250

Bu yorum kurtarıcıdır.
saurabh agarwal

1
@ user3817250: Alternatif olarak,ser.open()
arc_lupus

1
btw, bir ser.isopen () 'e sahip olmanın tek başına bir anlamı yoktur. Elbette, kendiniz açmaya çalışmadan önce, zaten açık olup olmadığını kontrol etmek için bir koşulda isopen (r) 'yi kullanabilirsiniz .. Eğer öyleyse, programınızın zaten başka bir yerde çalışmakta olduğunu gösterebilir. Ardından, diğer işlemi öldürmek için biraz Python Fu kullanın ve ardından yeniden açmayı deneyin. stackoverflow.com/questions/6178705/…
SDsolar

1
Merhaba, harika kod! Bir sorum var, bunun yerine python 3 kullanırsanız nasıl değişirsiniz?
Luis Jose


29

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 kullanmadım, ancak https://pyserial.readthedocs.io/en/latest/shortintro.html adresindeki API belgelerine dayanarak çok hoş bir arayüz gibi görünüyor. Cihazın / radyonun / uğraştığınız her şeyin AT komutlarının özelliklerini iki kez kontrol etmeye değer olabilir.

Özellikle, bazıları AT komutundan önce ve / veya sonra komut moduna girmesi için bir süre sessizlik gerektirir. İlk önce biraz gecikme olmadan yanıtın okunmasını sevmeyen bazılarıyla karşılaştım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.