首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python和PyQt5在蓝牙中连接和发送消息

使用python和PyQt5在蓝牙中连接和发送消息
EN

Stack Overflow用户
提问于 2020-04-14 18:28:48
回答 1查看 926关注 0票数 0

我一直在尝试使用PyQt5连接蓝牙设备(常规的,不是低能耗的HC-06),但没有成功。我可以使用标准的python调用连接到相同的设备。我在MacOS上运行Python3.7。当我运行下面的代码时,我得到了错误:‘未知错误’,我很高兴知道我做错了什么。

代码语言:javascript
复制
import sys
import bluetooth
import os

from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtCore import Qt
from PyQt5 import QtBluetooth

class bluetoothTest(QWidget):

    def __init__(self, parent = None):

        super(bluetoothTest, self).__init__(parent)

        self.connectToRobot()

        self.app = QApplication(sys.argv)
        self.win = QWidget()
        self.win.show()
        sys.exit(self.app.exec_())

    def connectToRobot(self):
        self.sock = QtBluetooth.QBluetoothSocket(bluetooth.RFCOMM)

        self.sock.connected.connect(self.connectedToBluetooth)
        self.sock.readyRead.connect(self.receivedBluetoothMessage)
        self.sock.disconnected.connect(self.disconnectedFromBluetooth)
        self.sock.error.connect(self.socketError)
        port = 1
        self.sock.connectToService(QtBluetooth.QBluetoothAddress("98:D3:C1:FD:2C:46"),port)

    def socketError(self,error):
        print(self.sock.errorString())

    def connectedToBluetooth(self):
        self.sock.write('A'.encode())

    def disconnectedFromBluetooth(self):
        self.print('Disconnected from bluetooth')

    def receivedBluetoothMessage(self):
        while sock.canReadLine():
            line = sock.readLine()
            print(line)

def main():
    # deal with a bluetooth bug on mac
    if sys.platform == 'darwin':
        os.environ['QT_EVENT_DISPATCHER_CORE_FOUNDATION'] = '1'

    app = QApplication(sys.argv)
    ex = bluetoothTest()
    ex.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
        main()
EN

回答 1

Stack Overflow用户

发布于 2020-04-18 15:59:44

我的代码的问题是“常规”蓝牙和Qt蓝牙功能的混合,特别是这一行:

代码语言:javascript
复制
 self.sock = QtBluetooth.QBluetoothSocket(bluetooth.RFCOMM)

这本应该是

self.sock = QtBluetooth.QBluetoothSocket(QtBluetooth.QBluetoothServiceInfo.RfcommProtocol)

下面是完整的工作代码示例:

代码语言:javascript
复制
import sys
import os

from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtCore import Qt
from PyQt5 import QtBluetooth

class bluetoothTest(QWidget):

    def __init__(self, parent = None):
        super(bluetoothTest, self).__init__(parent)
        self.connectToRobot()
        self.win = QWidget()
        self.win.show()

    def connectToRobot(self):
        self.sock = QtBluetooth.QBluetoothSocket(QtBluetooth.QBluetoothServiceInfo.RfcommProtocol)

        self.sock.connected.connect(self.connectedToBluetooth)
        self.sock.readyRead.connect(self.receivedBluetoothMessage)
        self.sock.disconnected.connect(self.disconnectedFromBluetooth)
        self.sock.error.connect(self.socketError)
        port = 1
        self.sock.connectToService(QtBluetooth.QBluetoothAddress("98:D3:C1:FD:2C:46"),port)

    def socketError(self,error):
        print(self.sock.errorString())

    def connectedToBluetooth(self):
        self.sock.write('A'.encode())

    def disconnectedFromBluetooth(self):
        self.print('Disconnected from bluetooth')

    def receivedBluetoothMessage(self):
        while self.sock.canReadLine():
            line = self.sock.readLine()
            print(str(line, "utf-8"))

def main():
    # deal with a bluetooth bug on mac
    if sys.platform == 'darwin':
        os.environ['QT_EVENT_DISPATCHER_CORE_FOUNDATION'] = '1'

    app = QApplication(sys.argv)
    ex = bluetoothTest()
    sys.exit(app.exec_())

if __name__ == '__main__':
        main()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61205548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档