Skip to content

daygone1225/Bob

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Bob

封包協定

封包使用串列埠進行傳輸,手機使用藍芽與機器人建立連線,並開啟串列端口。

編碼流程

資料編碼成封包,需要經過以下步驟。

  1. 將資料編碼成 UTF-8位元組陣列
  2. 1步驟之位元組陣列透過URL Safe Base64編碼成Base64字串
  3. 2步驟之Base64字串結尾加上換行符,實現封包分隔之用途。

解碼流程

封包解碼成資料,需要經過以下步驟。

  1. 將收到之封包換行符切割。
  2. 1步驟之字串解碼成位元組陣列,並透過URL Safe Base64解碼成位元組陣列
  3. 2步驟之位元組陣列透過UTF-8解碼成字串資料。

Base64

簡介

Base64主要的功能是將無法印出的位元組,可以透過64個可印出字元表示。 Base64的編碼/解碼以6個位元為一個單元。 Base64是一種基於64個可列印字元來表示二進位資料的表示方法。

由於$log_2(64)$,所以每6個位元為一個單元,對應某個可列印字元。3個位元組相當於24個位元,對應於4個Base64單元,即3個位元組可由4個可列印字元來表示。在Base64中的可列印字元包括字母A-Z、a-z、數字0-9,這樣共有62個字元,此外兩個可列印符號在不同的系統中而不同。一些如uuencode的其他編碼方法,和之後BinHex的版本使用不同的64字元集來代表6個二進位數字,但是不被稱為Base64。

Base64常用於在通常處理文字資料的場合,表示、傳輸、儲存一些二進位資料,包括MIME的電子郵件及XML的一些複雜資料。

編碼

字元 ASCII(1 byte)
B 01000010
o 01101111
b 01100010

每6個位元為一個單元

單元 索引 對應字元
010000 16 Q
100110 38 m
111101 61 9
100010 34 i

Bob

HC-05 藍芽連接

使用CP2102接上HC-05進行UART傳輸,鮑率為38400。

objects.json

為了避免造成後續更改的困難,增加/更新/刪除物件定義只要更改objects.json即可,不須更改程式碼,一方面增加程式之擴充性也增加開發時的方便性。 objects.json裡包含物件的json資料。

Android

參考

Python

資訊

  • 版本:Python 3.6.9

安裝 python 3.6

sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install python3.6

序列裝置分配器

因為XXX接上USB Hub,造成序列埠編號在每次重開機時改變例如原本設定COM0為HC-05之序列埠編號,有可能於下次開機時改變為COM1。造成開發及執行上的困難。因此,使用了以下方式進行序列埠編號判別。

import re
global robotics, app

coms=comports()
for com in coms:
    print(com.description)
    if re.search(".*CP2102.*",com.description):
           print(com.description)
       app = HC05Serial(com.device)
    elif re.search(".*FT232R.*",com.description):
       print(com.description)
       robotics = RoboticsSerial(com.device)

re為正規表達式之函式庫。 re.search(x,y) 則是從y輸入字串中比對是否符合x正規表達示。

因為HC-05會接上CP2102,所以可以認定含有CP2102描述的即為HC-05序列埠。藉此在判斷式中進行初始化。

安裝 PyBluez

sudo apt install python-dev libpython3.6-dev libbluetooth-dev
sudo nano /etc/systemd/system/dbus-org.bluez.service
ExecStart=/usr/lib/bluetooth/bluetoothd -C
sudo systemctl daemon-reload
sudo systemctl restart bluetooth

手機無法連線Serial Port Server

sudo hciconfig hci0 piscan

藍芽sp權限遭拒

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/vincent/git_projects/Bob/Bob_python/bt_main.py", line 19, in <module>
    server = BluetoothServer(ConnectListener())
  File "/home/vincent/git_projects/Bob/Bob_python/Bob/bluetooth_utils/utils.py", line 28, in __init__
    profiles=[bluetooth.SERIAL_PORT_PROFILE],
  File "/home/vincent/git_projects/Bob/Bob_python/venv/lib/python3.6/site-packages/bluetooth/bluez.py", line 275, in advertise_service
    raise BluetoothError (*e.args)
bluetooth.btcommon.BluetoothError: [Errno 13] Permission denied
sudo chmod 666 /var/run/sdp

Linux

Bluetooth

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 75.9%
  • Java 23.3%
  • Other 0.8%