gitee倉庫地址:https://gitee.com/lalhan/PC_BLE_UART
一、需求提出

模塊功能:
應(yīng)用場景:
- PC端無可用USB口調(diào)試遠(yuǎn)程設(shè)備
- 任何無線串口透傳使用場景
- 私人預(yù)留(MAC綁定)串口設(shè)備調(diào)試接口
- 需要對(duì)板子供電(5V/3.3V)測試場景
二、市場調(diào)研
(1)現(xiàn)有市場

- 基本沒有
- 有的上位機(jī)也只是支持調(diào)試AT
(2)勉強(qiáng)使用的
1、WCH公司BleUart

2、硬件提供的PC端

特點(diǎn):
- 不直觀不直接
- 過于通用,且串口界面復(fù)雜難操作
- 沒有調(diào)整波特率選項(xiàng)
三、方案設(shè)計(jì)
(1)硬件選擇
選用低成本BLE藍(lán)牙方案

淘寶:https://eciot.taobao.com/?spm=2013.1.0.0.18972c6abNXolr
注意:需要購買帶OC版本,即可二次編程版本,這個(gè)需要提前問下客服
特點(diǎn):
- 成本低(甚至1.8元)
- 體積小
- 外圍簡單
- 可二次開發(fā)
(2)電腦端上位機(jī)(PYQT5)

優(yōu)點(diǎn):
- 界面清楚簡潔
- 波特率可調(diào)整
缺點(diǎn):
- 綁定了MAC(但是開源,可自行修改)
(3)電源部分
參考我上個(gè)視頻,電動(dòng)螺絲刀

四、制作流程
(1)設(shè)備側(cè)程序編寫
這里選擇提供HEX文件、程序主文件(main)以及資料的下載文檔

- MDK5的開發(fā)環(huán)境
- APP可燒錄(參考我之前的十元藍(lán)牙遙控車的視頻)
資料地址:
百度網(wǎng)盤:https://pan.baidu.com/s/1_y1TtyzgXGL5tlVsYmggig 提取碼:8888
360云盤:https://yunpan.#/surl_yWr6A5bSpV9 (提取碼:5689)
(2)PC端程序編寫

- 提供源代碼
- 使用PyCharm編程
- 使用PYQT5庫實(shí)現(xiàn)
五、整體演示
因?yàn)橛布糠趾芎唵?,我這里就不實(shí)際使用IP5306供電了,主要測試串口透傳和波特率修改功能

節(jié)選部分程序:
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(510, 430)
MainWindow.setFixedSize(510, 430)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(10, 10, 111, 31))
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setObjectName("label")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(175, 10, 50, 31))
self.pushButton.setObjectName("pushButton")
self.pushButton_5 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_5.setGeometry(QtCore.QRect(230, 10, 50, 31))
self.pushButton_5.setObjectName("pushButton_5")
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(100, 10, 60, 30))
self.label_2.setAlignment(QtCore.Qt.AlignCenter)
self.label_2.setObjectName("label_2")
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_2.setGeometry(QtCore.QRect(400, 10, 101, 31))
self.pushButton_2.setObjectName("pushButton_2")
self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_3.setGeometry(QtCore.QRect(370, 370, 101, 31))
self.pushButton_3.setObjectName("pushButton_3")
self.pushButton_4 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_4.setGeometry(QtCore.QRect(370, 50, 101, 31))
self.pushButton_4.setObjectName("pushButton_4")
self.checkBox = QtWidgets.QCheckBox(self.centralwidget)
self.checkBox.setGeometry(QtCore.QRect(370, 90, 91, 31))
self.checkBox.setObjectName("checkBox")
self.checkBox_2 = QtWidgets.QCheckBox(self.centralwidget)
self.checkBox_2.setGeometry(QtCore.QRect(370, 330, 91, 31))
self.checkBox_2.setObjectName("checkBox_2")
self.checkBox_3 = QtWidgets.QCheckBox(self.centralwidget)
self.checkBox_3.setGeometry(QtCore.QRect(370, 300, 91, 31))
self.checkBox_3.setObjectName("checkBox_3")
self.label_3 = QtWidgets.QLabel(self.centralwidget)
self.label_3.setGeometry(QtCore.QRect(390, 150, 101, 101))
self.label_3.setText("")
self.label_3.setTextFormat(QtCore.Qt.AutoText)
#self.label_3.setPixmap(QtGui.QPixmap("聯(lián)系方式.png"))
self.label_3.setScaledContents(True)
self.label_3.setObjectName("label_3")
self.label_4 = QtWidgets.QLabel(self.centralwidget)
self.label_4.setGeometry(QtCore.QRect(400, 260, 71, 31))
self.label_4.setAlignment(QtCore.Qt.AlignCenter)
self.label_4.setObjectName("label_4")
self.textEdit = QtWidgets.QTextEdit(self.centralwidget)
self.textEdit.setGeometry(QtCore.QRect(290, 12, 100, 25))
self.textEdit.setObjectName("textEdit")
self.textEdit.setAlignment((QtCore.Qt.AlignLeft))
self.textEdit_2 = QtWidgets.QTextEdit(self.centralwidget)
self.textEdit_2.setGeometry(QtCore.QRect(20, 230, 341, 171))
self.textEdit_2.setObjectName("textEdit_2")
self.textEdit_3 = QtWidgets.QTextEdit(self.centralwidget)
self.textEdit_3.setGeometry(QtCore.QRect(20, 50, 341, 161))
self.textEdit_3.setObjectName("textEdit_3")
self.textEdit_3.setReadOnly(True)
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "無線串口(BLE)上位機(jī)"))
self.label.setText(_translate("MainWindow", "當(dāng)前設(shè)備狀態(tài):"))
self.pushButton.setText(_translate("MainWindow", "掃描"))
self.pushButton_5.setText(_translate("MainWindow", "連接"))
self.label_2.setText(_translate("MainWindow", "未連接"))
self.pushButton_2.setText(_translate("MainWindow", "更改波特率"))
self.pushButton_3.setText(_translate("MainWindow", "發(fā)送"))
self.pushButton_4.setText(_translate("MainWindow", "清屏"))
self.checkBox.setText(_translate("MainWindow", "十六進(jìn)制接收"))
self.checkBox_2.setText(_translate("MainWindow", "十六進(jìn)制發(fā)送"))
self.checkBox_3.setText(_translate("MainWindow", "后置換行符"))
self.label_4.setText(_translate("MainWindow", "作者信息"))
MainWindow.setWindowIcon(QIcon("./ico.ico"))
審核編輯:湯梓紅
-
藍(lán)牙
+關(guān)注
關(guān)注
116文章
6078瀏覽量
174063 -
電腦
+關(guān)注
關(guān)注
16文章
1779瀏覽量
70293 -
上位機(jī)
+關(guān)注
關(guān)注
27文章
967瀏覽量
55797 -
BLE
+關(guān)注
關(guān)注
12文章
701瀏覽量
60837
發(fā)布評(píng)論請(qǐng)先 登錄

FCC & CE認(rèn)證 藍(lán)牙5.1協(xié)議 主從并存 低功耗藍(lán)牙模塊BLE5101# 藍(lán)牙
匯承HC-02藍(lán)牙雙模2.0+4.0BLE與iPhone連接教程
ESP8266模塊手機(jī)端和電腦端網(wǎng)絡(luò)調(diào)試助手
請(qǐng)問手機(jī)藍(lán)牙串口助手不可以和電腦的串口助手一樣使用嗎?
【FireBeetle低功耗藍(lán)牙控制器試用連載】firebeetle BLE藍(lán)牙測試
【FireBeetle低功耗藍(lán)牙控制器試用連載】firebeetle BLE藍(lán)牙測試報(bào)告(下)
請(qǐng)問ESP作為BLE客戶端可以掃描到筆記本電腦和蘋果手機(jī)的藍(lán)牙嗎?
藍(lán)牙調(diào)試助手掃描BLE設(shè)備名稱沒變是什么原因造成的?
有無藍(lán)牙4.0BLE簡單有效的調(diào)試辦法?
經(jīng)驗(yàn)分享:如何選擇適合的BLE藍(lán)牙模塊
BLE藍(lán)牙的具體優(yōu)勢以及BLE藍(lán)牙智能門鎖的應(yīng)用

ESP32 BLE藍(lán)牙 使用AT指令與其他BLE藍(lán)牙模塊透傳 配置教程

評(píng)論