树莓派蓝牙与手机APP通信
文章目錄
- 前言
- 一、樹莓派的藍牙基本配置
- 二、安裝pybluez庫
- 1.安裝pybluez的必要編譯環(huán)境
- 2.示例傳輸代碼
- 3.運行文件
- 4.可能存在的問題
- 4.1 無法連接藍牙
- 4.2 命令端口顯示:python Address already in use 端口已經(jīng)被占用的解決方法
- 4.3 如果想直接連接手機藍牙,但是發(fā)現(xiàn)藍牙時斷時續(xù),在bluetoothctl界面,連上立刻斷開
- 4.5 pybluez報錯import bluetooth,顯示沒有內(nèi)部元素
- 總結
前言
最近畢設是使用樹莓派對交通標志圖片進行檢測,將檢測結果使用藍牙串口方式與手機APP進行傳輸。本文主要描述樹莓派與手機藍牙通信的過程和遇到的一些奇怪的BUG。
提示:以下是本篇文章正文內(nèi)容,下面案例可供參考
一、樹莓派的藍牙基本配置
1.安裝藍牙相關軟件包
sudo apt-get updatesudo apt-get upgrade sudo apt-get dist-upgrade sudo apt-get install pi-bluetooth bluez bluez-firmware blueman2.添加pi用戶到藍牙組
sudo usermod -G bluetooth -a pisudo reboot3.修改配置文件,添加SPP協(xié)議
sudo nano /etc/systemd/system/dbus-org.bluez.service提示:按ctrl+O +回車 開始修改文件
具體修改方法:
修改這兩句(已經(jīng)是修改后的圖片):
二、安裝pybluez庫
1.安裝pybluez的必要編譯環(huán)境
sudo apt-get install Python-dev sudo apt-get install libbluetooth-dev sudo pip3 install pybluez提示:如果是python2 就使用sudo pip install pybluez
2.示例傳輸代碼
#-*- coding:utf-8 -*- import bluetooth import threading #服務器套接字(用來接收新鏈接) server_socket=None#連接套接字服務子線程 def serveSocket(sock,info):#開個死循環(huán)等待客戶端發(fā)送信息while True:#接收1024個字節(jié),然后以UTF-8解碼(中文),如果沒有可以接收的信息則自動阻塞線程(API)receive=sock.recv(1024).decode('utf-8');#打印剛剛讀到的東西(info=地址)print('['+str(info)+']'+receive);#為了返回好看點,加個換行receive=receive+"\n";#回傳數(shù)據(jù)給發(fā)送者sock.send(receive.encode('utf-8'));#主線程#創(chuàng)建一個服務器套接字,用來監(jiān)聽端口 server_socket=bluetooth.BluetoothSocket(bluetooth.RFCOMM); #允許任何地址的主機連接,未知參數(shù):1(端口號,通道號) server_socket.bind(("",1)) #監(jiān)聽端口/通道 server_socket.listen(1);#開死循環(huán) 等待客戶端連接 #本處應放在另外的子線程中 while True:#等待有人來連接,如果沒人來,就阻塞線程等待(這本來要搞個會話池,以方便給不同的設備發(fā)送數(shù)據(jù))sock,info=server_socket.accept();#打印有人來了的消息print(str(info[0])+' Connected!');#創(chuàng)建一個線程專門服務新來的連接(這本來應該搞個線程池來管理線程的)t=threading.Thread(target=serveSocket,args=(sock,info[0]))#設置線程守護,防止程序在線程結束前結束t.setDaemon(True)#啟動線程t.start();轉載至:https://www.jerryzone.cn/raspi-bluetooth-socket/
3.運行文件
python test.py4.可能存在的問題
4.1 無法連接藍牙
首先要打開樹莓派藍牙的discoverable 可以使用bluetoothctl命令 + discoverable yes
或者
直接點擊樹莓派藍牙圖標選擇 Make Discoverable
此時樹莓派開始可以被掃描到(未掃描到可以等一會,開啟此項需要一些時間,大概5-10s。并且樹莓派長時間未連接后,會自動關閉discoverable,需要手動打開)
4.2 命令端口顯示:python Address already in use 端口已經(jīng)被占用的解決方法
問題原因:
說明此時的端口已經(jīng)被占用,可能是你之前運行程序時直接關閉了運行界面。
解決方法:
重啟樹莓派,再每次調(diào)用代碼函數(shù)后按Ctrl+C停止端口的使用,關閉函數(shù)。
4.3 如果想直接連接手機藍牙,但是發(fā)現(xiàn)藍牙時斷時續(xù),在bluetoothctl界面,連上立刻斷開
解決方法:
在連接前運行這段代碼:
然后再嘗試連接,可以連接上
或者:
可以點擊手機藍牙,找到名字為raspberry的設備,點一下,回到藍牙串口APP,再次嘗試連接。
4.5 pybluez報錯import bluetooth,顯示沒有內(nèi)部元素
描述:
這個問題可能我只有我能遇上,由于我把程序代碼命名為了bluetooth.py程序內(nèi)部會自動先去同名的文件找相應的庫。導致我的import bluetooth一直報錯。
解決方法:
修改文件名稱,不和導入的庫文件同名
總結
- 總的來說,樹莓派和手機藍牙通信的坑還是挺多的,上面就是我在開發(fā)時遇到的坑。
- 第一次寫下自己的記錄文件,如果有哪里不對的,請大神們批評指正,互相交流。
總結
以上是生活随笔為你收集整理的树莓派蓝牙与手机APP通信的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 更改员工工资_MySQL编辑
- 下一篇: 数据库综合实验代码展示