【全志T113-S3_100ask】Linux系统驱动HX711压力传感器

HX711压力传感器在Linux内核中已经存在相应的驱动程序,只需要在内核中使能就可以使用。

具体打开如下:

 但是和内核中key_board一起打开貌似内核编译会错误,所以我直接在内核中关闭key_board的编译选项:

下一步就是修改设备树结点,参考绑定文档:

 /home/book/wode/buildroot-100ask_t113-pro/buildroot/output/build/linuxorigin_master/Documentation/devicetree/bindings/iio/adc这个路径下可以找到参考文档:avia-hx711.yaml,内容如下:

 结合示例修改设备树:

这里引脚指定和高低点平的指定略有不同,参考其他结点正确指定即可。

重新编译内核,烧写系统,进入开发板,发现设备树下多了两个结点:

但是不能够对这两个文件直接读取数据,因为这里用的是iio框架。

真正的数据传输文件在/sys/devices/platform/weight/iio:device1下的in_voltage0_raw(具体文件可能不同,但是应该就在这个目录下)

这里读取发现其会对压力有反应,但是不是标准的单位。在应用程序进行换算就行。

换算思路就是先测出没有物品放上去的数值a,然后把已知重量为m克的物体放上去得到数值b。

然后用(b-a)/m就可以得到1g是多少个数值,再在应用程序里换算一下就可以了。

具体应用程序如下:

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>

#define IIO_DEVICE "/sys/bus/iio/devices/iio:device1"
static int offset = 8500600;
static float scale = 230.8;
static float weight = 0;
float convert_to_weight(int sensor_data) {
    float weight;
    // 根据校准参数计算重量值
    weight = (float)(sensor_data - offset) / scale;
    return weight;
}

int main() {
    int fd;
    char buf[16];
    ssize_t num_read;

    // 打开iio设备文件
    fd = open(IIO_DEVICE "/in_voltage0_raw", O_RDONLY);
    if (fd < 0) {
        perror("Failed to open iio device");
        return 1;
    }

    // 读取传感器数据
    num_read = read(fd, buf, sizeof(buf) - 1);
    if (num_read < 0) {
        perror("Failed to read sensor data");
        close(fd);
        return 1;
    }

    // 关闭设备文件
    close(fd);

    // 解析传感器数据
    buf[num_read] = '\0';
    int sensor_data = atoi(buf);
    weight = convert_to_weight(sensor_data);
    printf("Sensor data: %.1f\n", weight);
    return 0;
}

 最终结果如图:

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值