Jump to content
Korean Random
Olegansv

Работа с последовательным портом

Recommended Posts

Всем привет!

Написал библиотеку для взаимодействия питона с последовательным портом. Может кому пригодится.

'Код'

import os
from subprocess import call

__isOpened = False

def s_init(port, baudRate):
    try:
        call(["serial_init.exe", str(port), str(baudRate)])
    except WindowsError:
        print("Error: can't open \"serial_init.exe\"")

def s_open(port):
    global __serial, __isOpened
    if not __isOpened:
        try:
            __serial = os.open(port, os.O_RDWR)
        except:
            print("Can't open port %s" % (port))
            __isOpened = False
        else:
            print("Port %s opened" % (port))
            __isOpened = True
    elif __isOpened:
        print("Port already opened")

def s_close():
    global __isOpened
    if __isOpened:
        print("Port closed")
        os.close(__serial)
        __isOpened = False

def s_ports(lim = 10):
    ports = []
    for i in range(1, lim + 1):
        try:
            __port = os.open("COM%s" % (i), os.O_RDWR)
            os.close(__port)
        except OSError as e:
            if e.errno == 13: # PermissionError
                ports.append({"COM%s" % (i): "busy"})
        except:
            continue
        else:
            ports.append({"COM%s" % (i): "available"})
    return ports

def s_read(lastSymbol = '\n'):
    buffer = ""
    if __isOpened:
        while True:
            received = os.read(__serial, 1024).decode()
            buffer += received
            if lastSymbol in buffer:
                break
        return buffer

def s_send(text):
    if __isOpened:
        os.write(__serial, text)

def s_isOpened():
    return __isOpened

'Описание функций'

s_init(port, baudRate) - инициализирует порт.

s_open(port) - открывает порт.

s_read(lastSymbol) - получает данные с последовательного порта до символа lastSymbol и возращает строку.

s_send(text) - отправляет данные по последовательному порту.

s_ports(lim) - возращает доступные/занятые порты.

s_isOpened() - возращает состояние порта.

s_close() - закрывает порт.

Файл serial_init.exe используется для инициализации последовательного порта (стандартные средства питона не имеют данной возможности).

 

Билд для WoT.

Исходники также здесь.

Edited by Olegansv
  • Upvote 4

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...