是否可以在 Raspberry Pi 和 Python 上提高 ADXL345 的采样率?

Is it possible to increase the sampling rate of ADXL345 on a Raspberry Pi with Python?

我有一个 Raspberry Pi 和 2 个 ADXL345 加速度计,我想 最大化 它们的数据采样率。当我在互联网上搜索时,我很想在 Raspberry Pi 论坛 (https://www.raspberrypi.org/forums/viewtopic.php?t=254552) 上找到一个人,他展示了这段代码,他在这个例子中使用了两个加速度计:

import time
import Adafruit_ADXL345


accel1 = Adafruit_ADXL345.ADXL345()
accel2 = Adafruit_ADXL345.ADXL345(address=0x1d, busnum=1)


print('Printing X, Y, Z axis values, press Ctrl-C to quit...')
cordinates = []

import time
start_time = time.time()
NUM_OF_SEC_TO_RUN = 10 

while time.time()<=start_time+NUM_OF_SEC_TO_RUN:

    x1, y1, z1 = accel1.read()
    x2, y2, z2 = accel2.read()
    cordinates.append([x1,y1,z1,x2,y2,z2,time.time()])

import csv
with open('02.txt', 'a') as csvFile:
    writer = csv.writer(csvFile)
    writer.writerows(cordinates)

稍后在 post 中,他说片段

x1, y1, z1 = accel1.read()
x2, y2, z2 = accel2.read()
cordinates.append([x1,y1,z1,x2,y2,z2,time.time()])

是加速度计下采样的最可能原因,从而降低了读取速率并延迟了数据采集。

他说,

The average time for execution of the above 3 lines of code is 0.002121 seconds. Does this mean than the reading capability is limited because of i2c and Raspberry pi, not the sensor? Or is it because of my code?

我也想知道同样的问题,但我将以不同的方式提出。有没有办法缩短上面的段,从而有可能减少延迟并提高数据采样率?也就是说,有没有办法把它变成一条线? 据我所知,没有人对这个人的话题做出回应,也没有任何对我有帮助的决定性回应。

如果没有办法回答这个问题,那么我提出这个问题:有没有办法加快Raspberry Pi 3 B+上I2C的数据采样速度,或者是否可以为 SPI 通信复制这段代码?我知道 SPI 通信比 I2C 快的事实,但我不确定如何在 Raspberry Pi 中的 Python 上实现它。如果 post 太长,我深表歉意。

ADXL345 数据sheet 表示使用快速 i2c 的最快采样率为 800Hz。需要 SPI 以获得更快的采样率——高达 3200Hz。

看起来 Adafruit_ADXL345 库只支持 i2c。它已被弃用。 Adafruit Blinka 库支持 SPI,但您必须推出自己的 ADXL345 接口。