Rabboni with python

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)

* 注意: rabboni 0.8 版開始讀出的重力加速度值 1g 改用 1.0 表示, 以前的用 9.8 表示 1g

 

Rabboni介紹

1.    內含6 sensor3-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)

Rabboni 藍芽連接 Python API 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 data16進位值

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 USB 連接 Python API Example code

1.        以下為USBexample 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 data16進位值

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