# AIoT Sensor(智聯感測)全國聯賽 X Rabboni
## Version
==(如果載了python和rabboni還是不能執行程式,很有可能是版本的問題)==
* **IDE** : [vscode](https://code.visualstudio.com/) (記得要將vscode加入**path**)
* **python** : 3.7.5
* **numpy** : 1.19.2
* **rabboni** : 1.73
建議使用**虛擬環境**做版本管理
這邊是用[pipenv](https://github.com/pypa/pipenv)來操作
可以**開一個資料夾**再點選"**以code(vscode)開啟**"
### **pipenv 基本指令:**
* **pip install pipenv** : 透過pip安裝pipenv
* **pipenv --python 3.7.5** : 產生 3.7.5 的虛擬環境
* **pipenv install numpy==1.19.2** : 在虛擬環境安裝特定版本的套件
* **pipenv install rabboni==1.73** : 在虛擬環境安裝rabboni套件
與此同時,如果資料夾下沒有pipfile,pipenv會**自動生成一個pipfile和pipfile.lock** 如下
**pipfile** :
```p
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
numpy = "==1.19.2"
rabboni = "==1.73"
[dev-packages]
pylint = "*"
[requires]
python_version = "3.7"
```
都設定好後就可以進入虛擬環境了
* **pipenv shell** : 進入虛擬環境
* **pipenv run filename.py** : 執行此資料夾下的檔案
* **exit** : 離開虛擬環境
### **Example :**
```python=
#test.py (測試版本是否正確)
from rabboni import *
print("test")
```
**Termianl :**
```
PS C:\Users\user\pipenv shell \example code\code\Python_練習>
Launching subshell in virtual environment...
Windows PowerShell
Copyright (C) Microsoft Corporation. 著作權所有,並保留一切權利。
(進入虛擬環境)
Launching subshell in virtual environment...
Windows PowerShell
Copyright (C) Microsoft Corporation. 著作權所有,並保留一切權利。
請嘗試新的跨平台 PowerShell https://aka.ms/pscore6
PS C:\Users\user\Desktop\rabboin test\example code\code\Python_練習> pipenv run test.py
test
(執行成功)
PS C:\Users\user\Desktop\rabboin test\example code\code\Python_練習> exit
(退出虛擬環境)
PS C:\Users\user\Desktop\rabboin test\example code\code\Python_練習> python test.py
Traceback (most recent call last):
File "test.py", line 1, in <module>
from rabboni import *
ModuleNotFoundError: No module named 'rabboni'
(報錯)
```
## Rabboni Reference
### **Term:**
accx accy accz : **三軸的加速度**
gyrx gyry gyrz : **三軸的角速度**
### **Function For Setup**
#### **USB**
```c
rabo = Rabboni(mode = "USB") #先宣告一個物件(這邊宣告它叫rabo)
rabo.connect() #透過USB連接裝置,若抓不到會報錯 (void)
rabo.disconnect() #斷開聯絡(關掉USB)
rabo.stop() #斷開聯絡
```
#### **Bluetooth**
```c
rabo=Rabboni(mode = “BLE”) #宣告一個物件(這邊宣告它叫rabo)
rabo.scan() #掃描附近的藍芽裝置 (void)
rabo.print_device() #列出所有附近的藍芽裝置 (void)
rabo.connect(MAC) #填入MAC,連接裝ˋ
#什麼是MAC? 每一個網卡獨一無二的編號,就是MAC address (在Rabboni的後面有)#
rabo.disconnect() #斷開聯絡
rabo.stop() #關掉dongle(建議都要關掉,以免下次發生錯誤)
#dongle:在這邊當作藍芽適配器#
```
### **Function Return Parmerter:**
==(以下的rabo皆為宣告出來的物件)==
```p
rabo.Status #是否連上(bool;true:接上 ,false:還沒)
#以下若要Y或Z軸方向資料,就將x改為y或z#
rabo.Accx #當下X軸加速度(float)
rabboni.Gyrx #當下X軸角速度(float)
rabo.Accx_list #紀錄連接到結束的x軸加速度(list)
rabo.Gyrx_lsit #紀錄連接到結束的X軸角速度(list)
```
### Function For Collect or Process Data
```c
rabo.read_data() #讀取感測器資料必須先跑此行,才能讀取所以參數(void)
rabo.print_data() #列出read_data()的資料,格式如下
#Acc_x,y,z
#Gyr_x,y,z
#Count
rabo.rst_count(mode) #重置裝置紀錄的count
#mode:“Both”,”Store_cnt”,”Cur_Cnt”
Rabboni.set_sensor_scale(acc_scale,gyr_scale) #設定感測器取值的範圍
#acc_scale:必填,2,4,8,16
#gyr_scale:必填,250,500,100,2000
#附註:請將設定與錄製分開進行,設定完後離線再進行錄製。
```
## Reference
* website : [AIoT senor](https://12u10.nctu.edu.tw/winwinarea/winwinaiot/)
* example : [code](https://drive.google.com/drive/folders/1DtzOUfXLrEJPAXPGa9SsGPM0ap_6Lu8B)
* senser : [ICM-20689](https://product.tdk.com/info/en/documents/catalog_datasheet/imu/ICM-20689-v2.2-002.pdf)