日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

树莓派蓝牙与手机APP通信

發布時間:2024/3/26 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 树莓派蓝牙与手机APP通信 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 前言
  • 一、樹莓派的藍牙基本配置
  • 二、安裝pybluez庫
    • 1.安裝pybluez的必要編譯環境
    • 2.示例傳輸代碼
    • 3.運行文件
    • 4.可能存在的問題
        • 4.1 無法連接藍牙
        • 4.2 命令端口顯示:python Address already in use 端口已經被占用的解決方法
        • 4.3 如果想直接連接手機藍牙,但是發現藍牙時斷時續,在bluetoothctl界面,連上立刻斷開
        • 4.5 pybluez報錯import bluetooth,顯示沒有內部元素
  • 總結


前言

最近畢設是使用樹莓派對交通標志圖片進行檢測,將檢測結果使用藍牙串口方式與手機APP進行傳輸。本文主要描述樹莓派與手機藍牙通信的過程和遇到的一些奇怪的BUG。


提示:以下是本篇文章正文內容,下面案例可供參考

一、樹莓派的藍牙基本配置

1.安裝藍牙相關軟件包

sudo apt-get updatesudo apt-get upgrade sudo apt-get dist-upgrade sudo apt-get install pi-bluetooth bluez bluez-firmware blueman

2.添加pi用戶到藍牙組

sudo usermod -G bluetooth -a pisudo reboot

3.修改配置文件,添加SPP協議

sudo nano /etc/systemd/system/dbus-org.bluez.service

提示:按ctrl+O +回車 開始修改文件
具體修改方法:
修改這兩句(已經是修改后的圖片):

二、安裝pybluez庫

1.安裝pybluez的必要編譯環境

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):#開個死循環等待客戶端發送信息while True:#接收1024個字節,然后以UTF-8解碼(中文),如果沒有可以接收的信息則自動阻塞線程(API)receive=sock.recv(1024).decode('utf-8');#打印剛剛讀到的東西(info=地址)print('['+str(info)+']'+receive);#為了返回好看點,加個換行receive=receive+"\n";#回傳數據給發送者sock.send(receive.encode('utf-8'));#主線程#創建一個服務器套接字,用來監聽端口 server_socket=bluetooth.BluetoothSocket(bluetooth.RFCOMM); #允許任何地址的主機連接,未知參數:1(端口號,通道號) server_socket.bind(("",1)) #監聽端口/通道 server_socket.listen(1);#開死循環 等待客戶端連接 #本處應放在另外的子線程中 while True:#等待有人來連接,如果沒人來,就阻塞線程等待(這本來要搞個會話池,以方便給不同的設備發送數據)sock,info=server_socket.accept();#打印有人來了的消息print(str(info[0])+' Connected!');#創建一個線程專門服務新來的連接(這本來應該搞個線程池來管理線程的)t=threading.Thread(target=serveSocket,args=(sock,info[0]))#設置線程守護,防止程序在線程結束前結束t.setDaemon(True)#啟動線程t.start();

轉載至:https://www.jerryzone.cn/raspi-bluetooth-socket/

3.運行文件

python test.py

4.可能存在的問題

4.1 無法連接藍牙

首先要打開樹莓派藍牙的discoverable 可以使用bluetoothctl命令 + discoverable yes

或者
直接點擊樹莓派藍牙圖標選擇 Make Discoverable

此時樹莓派開始可以被掃描到(未掃描到可以等一會,開啟此項需要一些時間,大概5-10s。并且樹莓派長時間未連接后,會自動關閉discoverable,需要手動打開)

4.2 命令端口顯示:python Address already in use 端口已經被占用的解決方法

問題原因:
說明此時的端口已經被占用,可能是你之前運行程序時直接關閉了運行界面。

解決方法:
重啟樹莓派,再每次調用代碼函數后按Ctrl+C停止端口的使用,關閉函數。

4.3 如果想直接連接手機藍牙,但是發現藍牙時斷時續,在bluetoothctl界面,連上立刻斷開

解決方法:
在連接前運行這段代碼:

sudo rfcomm watch hci0

然后再嘗試連接,可以連接上

或者:
可以點擊手機藍牙,找到名字為raspberry的設備,點一下,回到藍牙串口APP,再次嘗試連接。

4.5 pybluez報錯import bluetooth,顯示沒有內部元素

描述:
這個問題可能我只有我能遇上,由于我把程序代碼命名為了bluetooth.py程序內部會自動先去同名的文件找相應的庫。導致我的import bluetooth一直報錯。

解決方法:
修改文件名稱,不和導入的庫文件同名

總結

  • 總的來說,樹莓派和手機藍牙通信的坑還是挺多的,上面就是我在開發時遇到的坑。
  • 第一次寫下自己的記錄文件,如果有哪里不對的,請大神們批評指正,互相交流。

總結

以上是生活随笔為你收集整理的树莓派蓝牙与手机APP通信的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。