Почему / dev / rfcomm0 дает проблемы PySerial?

Откройте терминал и введите:

sudo apt install devscripts  
rmadison <package-name> replace <package-name> with the name of the package  

Пример

$ rmadison wireshark wireshark | 1.6.7-1 | precise/universe | source, amd64, armel, armhf, i386, powerpc wireshark | 1.10.6-1 | trusty/universe | source, amd64, arm64, armhf, i386, powerpc, ppc64el wireshark | 1.12.1+g01b65bf-4+deb8u11ubuntu0.14.04.1 | trusty-security/universe | source, amd64, arm64, armhf, i386, powerpc, ppc64el wireshark | 1.12.1+g01b65bf-4+deb8u11ubuntu0.14.04.1 | trusty-updates/universe | source, amd64, arm64, armhf, i386, powerpc, ppc64el wireshark | 2.0.2+ga16e22e-1 | xenial/universe | source, amd64, arm64, armhf, i386, powerpc, ppc64el, s390x wireshark | 2.2.6+g32dac6a-2ubuntu0.16.04 | xenial-security/universe | source, amd64, arm64, armhf, i386, powerpc, ppc64el, s390x wireshark | 2.2.6+g32dac6a-2ubuntu0.16.04 | xenial-updates/universe | source, amd64, arm64, armhf, i386, powerpc, ppc64el, s390x wireshark | 2.4.2-1 | artful/universe | source, amd64, arm64, armhf, i386, ppc64el, s390x wireshark | 2.4.5-1 | bionic/universe | source, amd64, arm64, armhf, i386, ppc64el, s390x wireshark | 2.4.6-1 | cosmic/universe | source, amd64, arm64, armhf, i386, ppc64el, s390x

Эти результаты представляют собой все пакеты из официальных репозиториев Ubuntu версий Ubuntu, которые перечислены в третьем столбец примеров rmadison. Обратите внимание, что результаты rmadison также включают результаты для Ubuntu 18.10, который официально не выпущен официально, и Ubuntu 12.04, который является выпуском End Of Life.

1
задан 17 May 2012 в 03:22

7 ответов

Оказывается, буфер Bluetooth на ПК был переполнен, потому что я никогда не вызывал recv () в скрипте Python.

Аксессуар Bluetooth посылал символы на ПК, которые сценарий игнорировал и который неизбежно приводил к переполнению буфера. Это переполнение, по-видимому, заставляет канал rfcomm блокироваться до тех пор, пока буфер не будет прочитан.

Вот рабочий сценарий для дальнейшего использования:

import psutil
import serial
import string
import time
import bluetooth

sampleTime = 1
numSamples = 5
lastTemp = 0

TEMP_CHAR = 't'
USAGE_CHAR = 'u'
SENSOR_NAME = 'TC0D'

filename = '/sys/bus/platform/devices/applesmc.768/temp2_input'


def parseSensorsOutputLinux(output):
    return int(round(float(output) / 1000))

def connect():
    while(True):    
        try:
            gaugeSocket = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
            gaugeSocket.connect(('00:06:66:42:22:96', 1))
            break;
        except bluetooth.btcommon.BluetoothError as error:
            gaugeSocket.close()
            print "Could not connect: ", error, "; Retrying in 10s..."
            time.sleep(10)
    return gaugeSocket;

gaugeSocket = connect()
while(True):
    usage = psutil.cpu_percent(interval=sampleTime)
    sensorFile = open(filename)
    temp = parseSensorsOutputLinux(sensorFile.read())
    try:
        gaugeSocket.send(USAGE_CHAR)
        gaugeSocket.send(chr(int(usage)))
        #print("Wrote usage: " + str(int(usage)))

        gaugeSocket.send(TEMP_CHAR)
        gaugeSocket.send(chr(temp))
        print gaugeSocket.recv(1024)
        #print("Wrote temp: " + str(temp))
    except bluetooth.btcommon.BluetoothError as error:
        print "Caught BluetoothError: ", error
        time.sleep(5)
        gaugeSocket = connect()
        pass

gaugeSocket.close()

Ключевое изменение заключается в добавлении строки

gaugeSocket.recv(1024)

, которая очищает буфер сообщений «okay», отправленных с удаленного устройства.

2
ответ дан 25 July 2018 в 19:39

Оказывается, буфер Bluetooth на ПК был переполнен, потому что я никогда не вызывал recv () в скрипте Python.

Аксессуар Bluetooth посылал символы на ПК, которые сценарий игнорировал и который неизбежно приводил к переполнению буфера. Это переполнение, по-видимому, заставляет канал rfcomm блокироваться до тех пор, пока буфер не будет прочитан.

Вот рабочий сценарий для дальнейшего использования:

import psutil
import serial
import string
import time
import bluetooth

sampleTime = 1
numSamples = 5
lastTemp = 0

TEMP_CHAR = 't'
USAGE_CHAR = 'u'
SENSOR_NAME = 'TC0D'

filename = '/sys/bus/platform/devices/applesmc.768/temp2_input'


def parseSensorsOutputLinux(output):
    return int(round(float(output) / 1000))

def connect():
    while(True):    
        try:
            gaugeSocket = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
            gaugeSocket.connect(('00:06:66:42:22:96', 1))
            break;
        except bluetooth.btcommon.BluetoothError as error:
            gaugeSocket.close()
            print "Could not connect: ", error, "; Retrying in 10s..."
            time.sleep(10)
    return gaugeSocket;

gaugeSocket = connect()
while(True):
    usage = psutil.cpu_percent(interval=sampleTime)
    sensorFile = open(filename)
    temp = parseSensorsOutputLinux(sensorFile.read())
    try:
        gaugeSocket.send(USAGE_CHAR)
        gaugeSocket.send(chr(int(usage)))
        #print("Wrote usage: " + str(int(usage)))

        gaugeSocket.send(TEMP_CHAR)
        gaugeSocket.send(chr(temp))
        print gaugeSocket.recv(1024)
        #print("Wrote temp: " + str(temp))
    except bluetooth.btcommon.BluetoothError as error:
        print "Caught BluetoothError: ", error
        time.sleep(5)
        gaugeSocket = connect()
        pass

gaugeSocket.close()

Ключевое изменение заключается в добавлении строки

gaugeSocket.recv(1024)

, которая очищает буфер сообщений «okay», отправленных с удаленного устройства.

2
ответ дан 2 August 2018 в 01:38

Оказывается, буфер Bluetooth на ПК был переполнен, потому что я никогда не вызывал recv () в скрипте Python.

Аксессуар Bluetooth посылал символы на ПК, которые сценарий игнорировал и который неизбежно приводил к переполнению буфера. Это переполнение, по-видимому, заставляет канал rfcomm блокироваться до тех пор, пока буфер не будет прочитан.

Вот рабочий сценарий для дальнейшего использования:

import psutil
import serial
import string
import time
import bluetooth

sampleTime = 1
numSamples = 5
lastTemp = 0

TEMP_CHAR = 't'
USAGE_CHAR = 'u'
SENSOR_NAME = 'TC0D'

filename = '/sys/bus/platform/devices/applesmc.768/temp2_input'


def parseSensorsOutputLinux(output):
    return int(round(float(output) / 1000))

def connect():
    while(True):    
        try:
            gaugeSocket = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
            gaugeSocket.connect(('00:06:66:42:22:96', 1))
            break;
        except bluetooth.btcommon.BluetoothError as error:
            gaugeSocket.close()
            print "Could not connect: ", error, "; Retrying in 10s..."
            time.sleep(10)
    return gaugeSocket;

gaugeSocket = connect()
while(True):
    usage = psutil.cpu_percent(interval=sampleTime)
    sensorFile = open(filename)
    temp = parseSensorsOutputLinux(sensorFile.read())
    try:
        gaugeSocket.send(USAGE_CHAR)
        gaugeSocket.send(chr(int(usage)))
        #print("Wrote usage: " + str(int(usage)))

        gaugeSocket.send(TEMP_CHAR)
        gaugeSocket.send(chr(temp))
        print gaugeSocket.recv(1024)
        #print("Wrote temp: " + str(temp))
    except bluetooth.btcommon.BluetoothError as error:
        print "Caught BluetoothError: ", error
        time.sleep(5)
        gaugeSocket = connect()
        pass

gaugeSocket.close()

Ключевое изменение заключается в добавлении строки

gaugeSocket.recv(1024)

, которая очищает буфер сообщений «okay», отправленных с удаленного устройства.

2
ответ дан 4 August 2018 в 17:17

Оказывается, буфер Bluetooth на ПК был переполнен, потому что я никогда не вызывал recv () в скрипте Python.

Аксессуар Bluetooth посылал символы на ПК, которые сценарий игнорировал и который неизбежно приводил к переполнению буфера. Это переполнение, по-видимому, заставляет канал rfcomm блокироваться до тех пор, пока буфер не будет прочитан.

Вот рабочий сценарий для дальнейшего использования:

import psutil
import serial
import string
import time
import bluetooth

sampleTime = 1
numSamples = 5
lastTemp = 0

TEMP_CHAR = 't'
USAGE_CHAR = 'u'
SENSOR_NAME = 'TC0D'

filename = '/sys/bus/platform/devices/applesmc.768/temp2_input'


def parseSensorsOutputLinux(output):
    return int(round(float(output) / 1000))

def connect():
    while(True):    
        try:
            gaugeSocket = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
            gaugeSocket.connect(('00:06:66:42:22:96', 1))
            break;
        except bluetooth.btcommon.BluetoothError as error:
            gaugeSocket.close()
            print "Could not connect: ", error, "; Retrying in 10s..."
            time.sleep(10)
    return gaugeSocket;

gaugeSocket = connect()
while(True):
    usage = psutil.cpu_percent(interval=sampleTime)
    sensorFile = open(filename)
    temp = parseSensorsOutputLinux(sensorFile.read())
    try:
        gaugeSocket.send(USAGE_CHAR)
        gaugeSocket.send(chr(int(usage)))
        #print("Wrote usage: " + str(int(usage)))

        gaugeSocket.send(TEMP_CHAR)
        gaugeSocket.send(chr(temp))
        print gaugeSocket.recv(1024)
        #print("Wrote temp: " + str(temp))
    except bluetooth.btcommon.BluetoothError as error:
        print "Caught BluetoothError: ", error
        time.sleep(5)
        gaugeSocket = connect()
        pass

gaugeSocket.close()

Ключевое изменение заключается в добавлении строки

gaugeSocket.recv(1024)

, которая очищает буфер сообщений «okay», отправленных с удаленного устройства.

2
ответ дан 6 August 2018 в 01:54

Оказывается, буфер Bluetooth на ПК был переполнен, потому что я никогда не вызывал recv () в скрипте Python.

Аксессуар Bluetooth посылал символы на ПК, которые сценарий игнорировал и который неизбежно приводил к переполнению буфера. Это переполнение, по-видимому, заставляет канал rfcomm блокироваться до тех пор, пока буфер не будет прочитан.

Вот рабочий сценарий для дальнейшего использования:

import psutil
import serial
import string
import time
import bluetooth

sampleTime = 1
numSamples = 5
lastTemp = 0

TEMP_CHAR = 't'
USAGE_CHAR = 'u'
SENSOR_NAME = 'TC0D'

filename = '/sys/bus/platform/devices/applesmc.768/temp2_input'


def parseSensorsOutputLinux(output):
    return int(round(float(output) / 1000))

def connect():
    while(True):    
        try:
            gaugeSocket = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
            gaugeSocket.connect(('00:06:66:42:22:96', 1))
            break;
        except bluetooth.btcommon.BluetoothError as error:
            gaugeSocket.close()
            print "Could not connect: ", error, "; Retrying in 10s..."
            time.sleep(10)
    return gaugeSocket;

gaugeSocket = connect()
while(True):
    usage = psutil.cpu_percent(interval=sampleTime)
    sensorFile = open(filename)
    temp = parseSensorsOutputLinux(sensorFile.read())
    try:
        gaugeSocket.send(USAGE_CHAR)
        gaugeSocket.send(chr(int(usage)))
        #print("Wrote usage: " + str(int(usage)))

        gaugeSocket.send(TEMP_CHAR)
        gaugeSocket.send(chr(temp))
        print gaugeSocket.recv(1024)
        #print("Wrote temp: " + str(temp))
    except bluetooth.btcommon.BluetoothError as error:
        print "Caught BluetoothError: ", error
        time.sleep(5)
        gaugeSocket = connect()
        pass

gaugeSocket.close()

Ключевое изменение заключается в добавлении строки

gaugeSocket.recv(1024)

, которая очищает буфер сообщений «okay», отправленных с удаленного устройства.

2
ответ дан 7 August 2018 в 19:25

Оказывается, буфер Bluetooth на ПК был переполнен, потому что я никогда не вызывал recv () в скрипте Python.

Аксессуар Bluetooth посылал символы на ПК, которые сценарий игнорировал и который неизбежно приводил к переполнению буфера. Это переполнение, по-видимому, заставляет канал rfcomm блокироваться до тех пор, пока буфер не будет прочитан.

Вот рабочий сценарий для дальнейшего использования:

import psutil
import serial
import string
import time
import bluetooth

sampleTime = 1
numSamples = 5
lastTemp = 0

TEMP_CHAR = 't'
USAGE_CHAR = 'u'
SENSOR_NAME = 'TC0D'

filename = '/sys/bus/platform/devices/applesmc.768/temp2_input'


def parseSensorsOutputLinux(output):
    return int(round(float(output) / 1000))

def connect():
    while(True):    
        try:
            gaugeSocket = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
            gaugeSocket.connect(('00:06:66:42:22:96', 1))
            break;
        except bluetooth.btcommon.BluetoothError as error:
            gaugeSocket.close()
            print "Could not connect: ", error, "; Retrying in 10s..."
            time.sleep(10)
    return gaugeSocket;

gaugeSocket = connect()
while(True):
    usage = psutil.cpu_percent(interval=sampleTime)
    sensorFile = open(filename)
    temp = parseSensorsOutputLinux(sensorFile.read())
    try:
        gaugeSocket.send(USAGE_CHAR)
        gaugeSocket.send(chr(int(usage)))
        #print("Wrote usage: " + str(int(usage)))

        gaugeSocket.send(TEMP_CHAR)
        gaugeSocket.send(chr(temp))
        print gaugeSocket.recv(1024)
        #print("Wrote temp: " + str(temp))
    except bluetooth.btcommon.BluetoothError as error:
        print "Caught BluetoothError: ", error
        time.sleep(5)
        gaugeSocket = connect()
        pass

gaugeSocket.close()

Ключевое изменение заключается в добавлении строки

gaugeSocket.recv(1024)

, которая очищает буфер сообщений «okay», отправленных с удаленного устройства.

2
ответ дан 10 August 2018 в 07:51

Оказывается, буфер Bluetooth на ПК был переполнен, потому что я никогда не вызывал recv () в скрипте Python.

Аксессуар Bluetooth посылал символы на ПК, которые сценарий игнорировал и который неизбежно приводил к переполнению буфера. Это переполнение, по-видимому, заставляет канал rfcomm блокироваться до тех пор, пока буфер не будет прочитан.

Вот рабочий сценарий для дальнейшего использования:

import psutil
import serial
import string
import time
import bluetooth

sampleTime = 1
numSamples = 5
lastTemp = 0

TEMP_CHAR = 't'
USAGE_CHAR = 'u'
SENSOR_NAME = 'TC0D'

filename = '/sys/bus/platform/devices/applesmc.768/temp2_input'


def parseSensorsOutputLinux(output):
    return int(round(float(output) / 1000))

def connect():
    while(True):    
        try:
            gaugeSocket = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
            gaugeSocket.connect(('00:06:66:42:22:96', 1))
            break;
        except bluetooth.btcommon.BluetoothError as error:
            gaugeSocket.close()
            print "Could not connect: ", error, "; Retrying in 10s..."
            time.sleep(10)
    return gaugeSocket;

gaugeSocket = connect()
while(True):
    usage = psutil.cpu_percent(interval=sampleTime)
    sensorFile = open(filename)
    temp = parseSensorsOutputLinux(sensorFile.read())
    try:
        gaugeSocket.send(USAGE_CHAR)
        gaugeSocket.send(chr(int(usage)))
        #print("Wrote usage: " + str(int(usage)))

        gaugeSocket.send(TEMP_CHAR)
        gaugeSocket.send(chr(temp))
        print gaugeSocket.recv(1024)
        #print("Wrote temp: " + str(temp))
    except bluetooth.btcommon.BluetoothError as error:
        print "Caught BluetoothError: ", error
        time.sleep(5)
        gaugeSocket = connect()
        pass

gaugeSocket.close()

Ключевое изменение заключается в добавлении строки

gaugeSocket.recv(1024)

, которая очищает буфер сообщений «okay», отправленных с удаленного устройства.

2
ответ дан 15 August 2018 в 19:54

Другие вопросы по тегам:

Похожие вопросы: