python - 在 Raspi 上使用带有 Python 的 C 库

标签 python c api raspberry-pi3 sensors

我正在尝试在 Raspi (Pololu VL53L1X) 上使用飞行时间传感器,但 python 中没有该传感器的库。原始制造商为传感器提供了 C API,但我不知道如何在我的 python 代码中使用 API 函数。有人可以帮助我了解在 Raspi 上使用传感器可以做什么,而无需从头开始编写库吗?我做了一些研究,几乎每个人都建议在 python 中包装 C 库(在本例中是 API?),但我不确定如何做到这一点。任何想法或建议都是有值(value)的。

附注有 Arduino 传感器的库,但我无法使用 Arduino,我需要它在 Raspi 上运行,并在可能的情况下使用 python。我是 Raspi 和 Python 的初学者,所以对你的想法进行一些解释会很有帮助。

最佳答案

为 C 库制作一个简单的 Python 包装器。

我的工作目录中有以下文件

mylib.c:

#include <stdio.h>

int sumof(int a, int b)
{
    return a+b;
}

wrapper.py:

from ctypes import CDLL
so_file = "/path/to/my/work/dir/mylib.so"
my_c_lib = CDLL(so_file)

def sumof_fun(a,b):
    return my_c_lib.sumof(a,b)

如您所见,我们在 python 包装器中使用共享库(.so 文件)来创建该共享库,我们使用以下命令:

$gcc -fPIC -shared -o mylib.so mylib.c

现在在 python 中我可以使用以下内容:

>>> import wrapper
>>> 
>>> wrapper.sumof_fun(4,5)
9

引用号:https://www.journaldev.com/31907/calling-c-functions-from-python

PS:但就你而言,我仍然认为最好选择 pimoroni vl53l1x-python package

关于python - 在 Raspi 上使用带有 Python 的 C 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59278605/

相关文章:

json - django 休息 api : JSON parse error - No JSON object could be decoded

c# - 如何从另一个系统调用我的 Function App API?

python - 如何通过GONG API请求用户列表?

python - 哈里斯角点检测器 python

python - 如何拆分列表中的两个索引而不是在 python 中创建单独的列表

Python,在使用Popen时更改当前的shell环境变量?

c - 当按下某个键时,如何从字符数组中删除一个字符?

c - while 循环中的 if 语句未给出 C 中的预期输出

python - 从另一个数据框和列表创建数据框

c - 反转字符串 - 输出跳过最后一个字符