樹莓派 連接 JY901(MPU9250) python 代碼

来源:https://www.cnblogs.com/Carlsblog/archive/2019/04/08/10673499.html
-Advertisement-
Play Games

先說BUG,最近要做項目需要樹莓派和陀螺儀,資金充足的話肯定是買一個硬體卡爾曼濾波的感測器類似JY901模塊,資金不足的就買MPU6050。 網上關於MPU6050在樹莓派上的代碼還能用,關於JY901的代碼真的是千奇百怪,而且複製現象特別嚴重,有很多系統本身有問題,導致很多像我一樣的新手在上面浪費 ...


先說BUG,最近要做項目需要樹莓派和陀螺儀,資金充足的話肯定是買一個硬體卡爾曼濾波的感測器類似JY901模塊,資金不足的就買MPU6050。

網上關於MPU6050在樹莓派上的代碼還能用,關於JY901的代碼真的是千奇百怪,而且複製現象特別嚴重,有很多系統本身有問題,導致很多像我一樣的新手在上面浪費了很多的時間。

本篇主要把這一個多星期折騰樹莓派陀螺儀的經歷總結一下,順便幫助下其他像我一樣的新手,把時間用在系統設計上。

 

網上的代碼有  try   except 判斷,把運行時遇到的IOError全部判0處理,然後讀出好像是陀螺儀旋轉角度的數據,當然這樣肯定是沒有問題的,但是如果你拿到你的JY901模塊用代碼運行發現有大量的0數據出現,而且讀出的數據壓根跟陀螺儀旋轉角度沒有直接的關係。

那麼我告訴你,你買的模塊是錯誤的,仔細看下你的模塊是不是每個邊是不是4個引腳,看清模塊上的晶元是不是MPU6050,用i2cdetect -y -1顯示的硬體地址是不是0x68。模塊類似

 

 

如果是我上面說的那三種情況,就不要瞎折騰了,你拿到的模塊根本不是JY901,而是JY61,JY901使用MPU9250,而JY61用的是MPU6050,這裡說下個人對這兩模塊認識到的區別:JY901可以修改I2C通訊地址,JY61不可以;JY901的I2C通訊地址初始化為0x50,JY61初始化地址是0x68。

一開始運行0數據特別少,後面0數據特別多,甚至都是0數據,是因為JY61模塊預設是串口模式,用上位機選晶元型號JY61,既可以調成I2C工作模式,這樣用網上關於樹莓派 MPU6050的代碼即可運行,數據穩定正常。

我就是正這個問題上糾結了一個多星期,嚴重的延後了我個人的工作計劃,這個問題肯定絕大部分是我個人原因不夠仔細導致的,但是還有一部分原因是因為某些店家,頁面介紹,發給你的資料全部都是關於JY901,導致新手拿到感測器的時候先入為主,深深的記住了自己買的是JY901,當在樹莓派上使用時出現了上面的這些問題,一直懷疑是自己代碼的問題或者硬體電路的問題,一直谷歌百度解決各種莫名其妙的玄學問題。本人這一星期出現的問題有:1、運行 i2cdetect -y 1 有時候有顯示硬體地址,有時候會消失,這也就是網上代碼的IOError問題,就是因為I2c地址有時候找不到的原因導致的,解決辦法就是用上位機選JY61晶元型號,改成I2C工作模式,就不會有I2C地址有時候會消失的這個問題了。2、上位機修改不了I2C地址,   歸根揭底都是沒弄對模塊的問題, 

同時還有一個註意的地方,因為樹莓派在SDA和SCL引腳上有上拉電阻,所以在多I2C模塊連接時不需要加上拉電阻,下麵時JY901的圖和兩個JY901模塊連接的硬體圖示

 

 

 ========================================分割線===========================================

代碼如下:

#!/usr/bin/python
import smbus
import math
import types
import ctypes
import time
import subprocess
bus = smbus.SMBus(1) # or bus = smbus.SMBus(1) for Revision 2 boards
addr1= 0x50
addr2 = 0x48
def calc_angle_value(x_angle,y_angle,z_angle):     x = ((x_angle[1] << 8) | x_angle[0])/32768 * 180
    y = ((y_angle[1] << 8) | y_angle[0])/32768 * 180
    z = ((z_angle[1] << 8) | z_angle[0])/32768 * 180
    if(x >= 180):
        x -= 360
    if(y >= 180):
        y -= 360
    if(z >= 180):
        z -= 360
    return x,y,z
def ReadData(address):         x_angle = bus.read_i2c_block_data(address,0x3d,2)
        y_angle = bus.read_i2c_block_data(address,0x3e,2)
        z_angle = bus.read_i2c_block_data(address,0x3f,2)         x,y,z = calc_angle_value(x_angle,y_angle,z_angle)
        return x,y,z
while(True):
    try:
        right_x,right_y,right_z = ReadData(addr1)
        left_x,left_y,left_z = ReadData(addr2)         print("Right Data: {:.4} {:.4} {:.4}".format(right_x,right_y,right_z))
        print("Left Data: {:.4} {:.4} {:.4}".format(left_x,left_y,left_z))
    except ValueError:   continue

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 起因 寫這一篇的起因是想要通過新增預設參數來代替以前的方法,結果發現儘管在調用時寫起來一樣,實際上也沒有被當做同樣的方法,兩個方法大致如下: 上述兩種方法都可以通過 TestMethod("1"); 調用,所以最開始誤以為兩個方法的調用是等價的,但是實際使用中通過DLL引用的方式會提示找不到方法,這 ...
  • 最近想給自己的代辦清單任務微信小程式想加個語音識別識別功能,廢話不多說,直接說重點,語音識別使用的是百度語音識別api,因為微信小程式的錄音輸入文件目前只能是mp3或aac 但是百度語音識別不支持這兩種(百度api介面文檔上有說明),所以需要把音頻格式轉換一下,我這邊使用的是Alvas.Audio. ...
  • Docker的volume捲 為了能持久話保存和共用容器的數據。 使用docker volume捲的兩種方式 1:數據捲 2:數據捲容器 1:數據捲 數據捲:數據捲會繞過docker 的ufs 直接寫在物理設備上,對數據捲的操作可以及時生效,並且數據捲是可以進行共用重用的,為一個或者多個容器提供訪問 ...
  • 轉自:https://mp.weixin.qq.com/s/iwtdISME4VotLgnuAhtflQ 很多公司技術支持崗位的工作,如配置功能變數名稱,部署環境,修改複位配置,服務重啟,擴容縮容,梳理和完善監控,根據開發的需要查找日誌等工作,需要和開發進行大量的溝通,如什麼是外網功能變數名稱,什麼是內網功能變數名稱、A ...
  • 原文鏈接:Create media for automated unattended install of Windows 10 我從來沒看到過像上面的文章一樣這麼詳細的描述過Windows10的無人值守安裝過程,看完長知識了,值得一看。之後我會將自己的製作過程發出來,讓大家學習一下。 只為了學習, ...
  • 1.使用tree命令查看根目錄的樹結構 如果沒有tree命令,可以使用yum進行安裝 執行命令後,即可看到根下一共有19個目錄 . 當前目錄 / 根目錄 /bin 存放必要的命令; 軟連接 /usr/bin /boot 存放內核以及啟動所需的文件; /dev 存放硬體設備文件 /etc 存放系統配置 ...
  • 1. 主機規劃 遠程執行教程文檔 所有模塊文檔 模塊在機器上存在的位置 註意事項 2. 使用格式 2.1. 指定目標 上一篇文章詳細說過,這裡簡單說下 2.2. 指定執行模塊 2.3. 執行參數 3. 使用示例 3.1. network 3.2. service 3.3. cp【可使用Salt-cp ...
  • Windows 使用 L2TP 協議連接VPN服務 首先, 點擊"添加 VPN 連接" 其次, 選擇 L2TP 協議 此時若嘗試連接發現會失敗, 打開網路共用中心, 會發現多了一個 VPN 的連接, 右鍵屬性 勾選相應選項, 再嘗試連接即可成功. ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...