此項目基於Raspberry Pi上的linux平台進行開發,現仍在開發中。項目地址:
拍攝照片
。
視頻監控
自建熱點
先說一下MPU6050的器件通信,典型通信過程如下,前面為數據內容,後面為寄存器地址:
1. 0x41 => 0x6B 設定時鐘, X軸時鐘
2. 0x00 => 0x1B 陀螺儀量程,250°/s
3. 0x00 => 0x1C 加速度計量程,2g
4. 0x01 => 0x6B 喚醒
5. 0x3B~0x48 觀察數據輸出,其中,各數據均為2字節長。 0x3B 加速度X, 0x3D 加速度Y, 0x3F 加速度Z, 0x41 溫度, 0x43 陀螺儀X, 0x45 陀螺儀Y, 0x47 陀螺儀Z
由於我是用的GY86模塊中HMC5883L的數據線接在了MPU6050的從I2C接口上,所以在訪問HMC5883L時要先打開MPU6050的bypass模式。HMC5883L的典型通信過程,格式同上:
1. MPU6050 0x00 => 0x6A 關閉I2C Master 模式
2. MPU6050 0x02 => 0x37 打開bypass模式
3. HMC5883 0x70 => 0x00 Config A
4. HMC5883 0x20 => 0x01 Config B
5. HMC5883 0x00 => 0x02 連續輸出
6. HMC5883 0x03~0x08 觀察數據輸出,其中,各數據均為2字節長。注意,0x03為X軸數據,0x05為Z軸數據,0x07為Y軸數據
以上通信過程已經夠基本使用,但我還不滿足,既然MPU6050可以代勞獲取HMC5883L的數據,為什麼我不用?這樣取數據時更方便,代碼實現更優雅。典型設置過程如下:
1. 0x20 => 0x6A 打開I2C Master模式
2. 0x00 => 0x37 關閉bypass模式
3. 0x0D => 0x24 設置操作從器件的時鐘及其他
4. 0x9e => 0x25 設置從器件的操作模式及其地址
5. 0x03 => 0x26 設置讀取從器件的起始寄存器地址
6. 0x86 => 0x27 設置讀取從器件寄存器的長度及開關等
7. HMC5883L寄存器0x03~0x08的數據會保存在MPU6050寄存器0x49~0x54中,並周期更新
若以上步驟後MPU6050可能獲取不到HMC5883的值,重置一下I2C SLV0試試。我當初就是怎麼試都不行,重置了一下,就一直Okay了。
氣壓計MS561101BA的驅動我還沒有搞定,他用的並不是標准I2C,大家可以參考FreeIMU中提供的驅動。
nRF的通信難點僅在SPI通信協議上,搞定了SPI,nRF就差不多了。之前我用TI的LM4F軟件模擬SPI就一直沒有搞定nRF,反復檢查代碼,甚至找來同學一起看也沒看出道道兒。電賽中被相同的問題絆到後,我才意識到問題所在,初始化操作延時不夠,單片機啟動延時不夠也是一方面。現在,我也只是把代碼安上去了,還沒有測試,在此也就不多說了。