有人尝试过在Raspberry Pi 4上使用i2c_smbus_write_byte或任何类似的功能吗?
我无法对其进行编译,但在找不到该链接时失败。我正在按此处所述使用它:http://synfare.com/599N105E/hwdocs/rpi/rpii2c.html
推荐的所有标头都存在,Makefile中也有-li2c。
谁能说出问题所在吗?我目前没有任何线索。
可能值得检查以查看系统上是否存在libi2c-dev。
sudo apt-get install libi2c-dev
可能就是您所需要的。
您链接到的页面说:
[采用Buster版本,截至2019年6月,使用i2c_smbus_write_byte_data()和同级,需要以下内容包含语句:
#include <unistd.h> #include <fcntl.h> #include <sys/ioctl.h> #include <linux/i2c-dev.h> #include <i2c/smbus.h>
使用fgrep可以确认该函数已在/usr/include/i2c/smbus.h中声明:
# cd /usr/include; fgrep -R i2c_smbus_write_byte *
i2c/smbus.h:extern __s32 i2c_smbus_write_byte(int file, __u8 value);
i2c/smbus.h:extern __s32 i2c_smbus_write_byte_data(int file, __u8 command, __u8 value);
所以这应该起作用:
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/i2c-dev.h>
#include <i2c/smbus.h>
int main(void) {
int i2c = open("/dev/i2c-1", O_RDWR);
i2c_smbus_write_byte(i2c, 1);
close(i2c);
return 0;
}
我测试了该示例是否可以在最新的Raspbian Buster Lite中成功编译:
gcc test.c -otest -li2c
如果您使用的是g ++而不是gcc,则应使用extern“ C”包装include指令:
extern "C" {
#include <linux/i2c-dev.h>
#include <i2c/smbus.h>
}