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 ~~~