Rabboni with python
1. 請先至Python官方網站下載最新版python(windows)
https://www.python.org/downloads/
2. 使用python 安裝rabboni專屬的library
i.
使用系統管理員開啟命令提示字元(CMD) / 若用普通使用者身分則先建立虛擬環境
輸入:
pip
install rabboni
或指定版本:
pip install rabboni==0.7 (目前最新版本0.8)
1. 內含6 軸sensor,3-axis加速度與3-axis陀螺儀
i.
規格 : ICM-20689
ii.
可使用Python 藍芽與USB API將值讀出來
2. 內置counter計數功能
i.
可使用Python 藍芽與USB API將值讀出來
ii.
可使用Python 藍芽與USB API 將counter歸零
3. 內建兩種連接模式
i.
藍芽模式 :
1.
將dongle插上電腦USB
2.
開啟rabboni,按下藍芽廣播鍵
3.
執行python藍芽相關code(如example code)
ii.
USB模式 :
1.
將rabboni使用USB連上電腦
2.
執行python USB相關code(如example code)
1.
以下為藍芽的example
code,會做到以下結果
i.
掃描藍芽裝置並連上裝置
ii.
將連上後的六軸資料印出來
iii.
依照設定的條件重置counter
iv.
將結果儲存成圖檔與csv檔
v.
斷開連接
2. 相關API請看下一頁 “Rabboni 藍芽連接 ─ python API”
### testBLE.py
# -*- coding: UTF-8 -*-
# coding=Big5 #UTF-8 #Big5 #看檔案儲存時選哪種編碼; 編碼 先寫先贏 (coding 必須寫在前兩列)
from rabboni import *
import time, sys
try:
rabbo = Rabboni(mode="BLE") #先宣告一個物件
rabbo.scan() #掃描所有藍芽Device
except Exception as e:
print(e)
print("可能你沒把 Rabboni 藍芽開啟或 Rabboni 沒電了 !")
print("也可能缺 BLED112 驅動程式, 或 Dongle 忘了插入!")
print("參考 http://www.picaxe.com/BLED112-Bluetooth-USB-Dongle/")
sys.exit( )
rabbo.print_device() # 列出所有藍芽Device
print("====== 以上是掃描到的 BLE MAC =====")
rabbo.connect("D1:FA:F0:F2:12:29")#依照MAC連接
#rabbo.connect("FC:9A:74:9E:52:5C") #依照MAC連接
rabbo.discover_characteristics()#掃描所有服務 可略過
rabbo.print_char()#列出所有服務 可略過
# print (rabbo.characteristics)
# print (rabbo.Status)
time.slep(3) # 等 3 秒讓你看 :-)
rabbo.read_data()#讀取資料 必跑
try:
while True:#一直打印資料 直到結束程式
rabbo.print_data()#print資料
if rabbo.Cnt == 100:
rabbo.rst_count()
except KeyboardInterrupt:#結束程式
print('Shut done!')
print (rabbo.Accx_list)#印出到結束程式時的所有Accx值
rabbo.stop()#停止dongle
rabbo.write_csv(data = rabbo.Accx_list,file_name ="AccX")#將Accx寫出csv檔
rabbo.plot_pic(data = rabbo.Accx_list,file_name = "AccX",show = True)#將Accx畫出圖案並存檔
finally:
rabbo.stop()
|
Rabboni 藍芽連接 ─ python API
|
前置API |
||
|
API名稱 |
解釋 |
Return值 |
|
Rabboni(mode = “BLE”) |
Class 名稱 一開始先宣告一個物件給它 並宣告模式 |
None |
|
Rabboni.scan() |
掃描附近藍芽device |
所有device的名稱與相關資訊 |
|
Rabboni.print_device() |
印出所有 |
None |
|
Rabboni.connect(MAC) |
填入MAC,連接device |
Device |
|
Rabboni.discover_characteristics() |
抓出device所有的服務 |
None |
|
Rabboni.print_char() |
列出所有服務(需先discover) |
None |
|
Rabboni.disconnect() |
斷開聯絡 |
None |
|
Rabboni.stop() |
關掉dongle,建議最後都要關掉,以免下次開啟出錯 |
None |
|
操作、讀取API |
||
|
API名稱 |
解釋 |
參數解釋 |
|
Rabboni.read_data() |
讀取所有sensor資料,必須先跑此行,所有的參數才會出來 |
None |
|
Rabboni.print_data() |
列出read_data()所讀到的資料 Acc_x,y,z Gyr_x,y,z Count |
None |
|
Rabboni.rst_count() |
重置裝置紀錄的count |
None |
|
Rabboni.write_csv(data,file_name) |
將data(list)傳進去寫出csv檔案,並以file_name命名 |
data:必填,資料 file_name:必填,檔名 |
|
Rabboni.plot_pic(data,file_name,show) |
將data(list)傳進去畫出圖片,並畫圖存起來 |
data:必填,資料 file_name:選填,檔名,若沒傳入值則不會存檔 show : 預設為True會顯示圖片,False則不會顯示圖片 |
|
參數API |
||
|
API名稱 |
解釋 |
Return值 |
|
Rabboni.Status |
是否連接上 |
0:disconnected 1:connected |
|
Rabboni.Hex_data |
當下sensor data的16進位值 |
string |
|
Rabboni.Accx |
當下Accx的值 |
float |
|
Rabboni.Accy |
當下Accy的值 |
float |
|
Rabboni.Accz |
當下Accz的值 |
float |
|
Rabboni.Gyrx |
當下Gyrx的值 |
float |
|
Rabboni.Gyry |
當下Gyry的值 |
float |
|
Rabboni.Gyrz |
當下Gyrz的值 |
float |
|
Rabboni.Cnt |
當下Cnt的值 |
float |
|
Rabboni.Accx_list |
紀錄連接後直到結束的Accx |
list |
|
Rabboni.Accy_list |
紀錄連接後直到結束的Accy |
list |
|
Rabboni.Accz_list |
紀錄連接後直到結束的Accz |
list |
|
Rabboni.Gyrx_list |
紀錄連接後直到結束的Gyrx |
list |
|
Rabboni.Gyry_list |
紀錄連接後直到結束的Gyry |
list |
|
Rabboni.Gyrz_list |
紀錄連接後直到結束的Gyrz |
list |
|
Rabboni.Cnt_list |
紀錄連接後直到結束的Cnt |
list |
1.
以下為USB的example code,會做到以下結果
i.
連上裝置
ii.
將連上後的六軸資料印出來
iii.
依照設定的條件重置counter
iv.
斷開連接
2.
相關API請看下一頁 “Rabboni USB連接 ─ python API”
### testUSB.py
# coding=Big5 #UTF-8 #Big5 #看檔案儲存時選哪種編碼; 編碼 先寫先贏 (coding 必須寫在前兩列)
# -*- coding: UTF-8 -*-
from rabboni import *
import sys, time
CNT_LIMIT = 38 # 當 Cnt > 38 會叫 rabbo.rst_count() 把 Cnt 重置 為 0
DATA_LIMIT = 168 # 讀取幾次 Data 後停止 program ?
try:
rabbo = Rabboni(mode = "USB") #先宣告一個物件
rabbo.connect() #連結上rabboni,若沒插上會報錯
except Exception as e:
print(e)
print("可能你沒把 Rabboni 用 USB 連接好 ! ")
#print("也可能缺 BLED112 驅動程式, 或 Dongle 忘了插入!")
#print("參考 http://www.picaxe.com/BLED112-Bluetooth-USB-Dongle/")
sys.exit( )
print ("Status:",rabbo.Status)
gg = input("要不要把 Count 歸 0 ? ")
if gg == "yes" or gg == "y": rabbo.rst_count()
try:
rabbo.read_data()
while True:#一直打印資料 直到結束程式
rabbo.print_data()#print資料
print (rabbo.data_num)
if rabbo.Cnt > CNT_LIMIT:
rabbo.rst_count() #重置count 會delay一下
if rabbo.data_num >= DATA_LIMIT:
break
except KeyboardInterrupt:#結束程式
print('Shut done!')
# print (rabbo.Accx_list)#印出到結束程式時的所有Accx值
except Exception: # something wrong
print(e)
finally:
rabbo.stop()#停止運作
print("=== done ===")
rabbo.write_csv(data = rabbo.Accx_list,file_name ="AccX")#將Accx寫出csv檔
rabbo.plot_pic(data = rabbo.Accx_list,file_name = "AccX",show = True)#將Accx畫出圖案並存檔
### end of the program
|
Rabboni USB連接 ─ python API
|
前置API |
||
|
API名稱 |
解釋 |
Return值 |
|
Rabboni(mode = “USB”) |
Class 名稱 一開始先宣告一個物件給它 並宣告模式 |
None |
|
Rabboni.connect() |
透過USB連接device,如果抓不到裝置會報錯 |
None |
|
Rabboni.disconnect() |
斷開聯絡,關掉USB |
None |
|
Rabboni.stop() |
斷開聯絡,關掉USB |
None |
|
操作、讀取API |
||
|
API名稱 |
解釋 |
參數解釋 |
|
Rabboni.read_data() |
讀取所有sensor資料,必須先跑此行,所有的參數才會出來 |
None |
|
Rabboni.print_data() |
列出read_data()所讀到的資料 Acc_x,y,z Gyr_x,y,z Count |
None |
|
Rabboni.rst_count() |
重置裝置紀錄的count,會delay點時間 |
None |
|
Rabboni.write_csv(data,file_name) |
將data(list)傳進去寫出csv檔案,並以file_name命名 |
data:必填,資料 file_name:必填,檔名 |
|
Rabboni.plot_pic(data,file_name,show) |
將data(list)傳進去畫出圖片,並畫圖存起來 |
data:必填,資料 file_name:選填,檔名,若沒傳入值則不會存檔 show : 預設為True會顯示圖片,False則不會顯示圖片 |
|
參數API |
||
|
API名稱 |
解釋 |
Return值 |
|
Rabboni.Status |
是否連接上 |
0:disconnected 1:connected |
|
Rabboni.Hex_data |
當下sensor data的16進位值 |
string |
|
Rabboni.Accx |
當下Accx的值 |
float |
|
Rabboni.Accy |
當下Accy的值 |
float |
|
Rabboni.Accz |
當下Accz的值 |
float |
|
Rabboni.Gyrx |
當下Gyrx的值 |
float |
|
Rabboni.Gyry |
當下Gyry的值 |
float |
|
Rabboni.Gyrz |
當下Gyrz的值 |
float |
|
Rabboni.Cnt |
當下Cnt的值 |
float |
|
Rabboni.Accx_list |
紀錄連接後直到結束的Accx |
list |
|
Rabboni.Accy_list |
紀錄連接後直到結束的Accy |
list |
|
Rabboni.Accz_list |
紀錄連接後直到結束的Accz |
list |
|
Rabboni.Gyrx_list |
紀錄連接後直到結束的Gyrx |
list |
|
Rabboni.Gyry_list |
紀錄連接後直到結束的Gyry |
list |
|
Rabboni.Gyrz_list |
紀錄連接後直到結束的Gyrz |
list |
|
Rabboni.Cnt_list |
紀錄連接後直到結束的Cnt |
list |
|
Rabboni.data_num |
上述的list總共有幾筆(單位為sampling數) |
int |
~~~ The
END ~~~