28. 传感器模块¶
野火linux开发板编写了传感器相对应的驱动以及设备树插件, 驱动对应内核源码路径为: drivers/ebf_module/ (内核源码的获取请参考野火驱动开发或者镜像构建文章)
设备树插件源码对应内核源码路径为: arch/arm/boot/dts/overlays/
下面介绍如何在野火linux开发板上使用这些模块。
28.1. 温度传感器DS18B20模块¶
28.1.1. 使能设备树插件¶
DS18B20模块的驱动已经在鲁班猫系统,需要开启下设备树插件, 使能DS18B20设备树插件,在开发板**/boot/uEnv.txt**文件中添加:
1 | dtoverlay=/usr/lib/linux-image-4.19.35-imx6/overlays/imx-fire-ds18b20.dtbo
|
将DS18B20模块插到开发板J27上并重启开发板,

重启开发板后在 /dev 目录下多个 ds18b20 设备文件,即可编写应用编程获取ds18b20的数据。
28.1.2. 编写应用程序¶
应用代码如下所示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
int fd;
char buf[20]={0};
float result;
int readlen = 0;
if ((fd=open("/dev/ds18b20",O_RDWR | O_NDELAY | O_NOCTTY)) < 0) {
printf("Open Device Ds18b20 Failed.\r\n");
return -1;
}
else
{
printf("Open Device Ds18b20 Successed.\r\n");
while(1) {
readlen = read(fd, buf, sizeof(buf));
printf("%s", buf);
usleep(20000);
}
close(fd);
}
return 0;
}
|
28.2. 温湿度传感器_DHT11模块¶
28.2.1. 使能设备树插件¶
修改 /boot/uEnv.txt ,使能dht11设备树插件并关闭adc1设备树插件。
1 2 3 | dtoverlay=/usr/lib/linux-image-4.19.35-imx6/overlays/imx-fire-dht11.dtbo
#dtoverlay=/usr/lib/linux-image-4.19.35-imx6/overlays/imx-fire-adc1.dtbo
|
将dht11模块插到开发板相对应位置并重新开发板, 重启开发板后在 /dev 目录下多了dht11设备,即可编写应用编程获取dht11的数据。
28.2.2. 编写应用程序¶
应用代码如下所示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | #include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
int fd;
unsigned char buf[4];
int length;
fd = open("/dev/dht11", O_RDONLY);
if(fd == -1)
{
printf("open failed!\n");
return -1;
}
while(1)
{
length = read(fd, buf, 6);
if(length == -1) {
printf("read error!\n");
return -1;
}
/* 打印 */
printf("Temperature : %d.%d, Humi : %d.%d\n", buf[2],buf[3], buf[0],buf[1]);
sleep(1);
}
/* 关闭DHT11设备节点 */
close(fd);
return 0;
}
|
编译过后运行程序,对dht11模块哈气可看到获取的温湿度均会发生变化。 读取到的数据前两位数为湿度的整数部分和小数部分,后两位数据为温度的整数部分和小数部分。 关于读取到的数据均是在dht11驱动中规定,有兴趣的读者可阅读dht11驱动源码。
28.2.3. 修改dht11相关设备树¶
野火imx6ull提供了很多的设备树插件源码,若想要添加或修改不同的引脚作为dht11的引脚, 可参考:
其中dht11的设备树插件文件为 imx-fire-dht11-overlay.dts ,源码如下所示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | /dts-v1/;
/plugin/;
#include "imx6ul-pinfunc.h"
#include "dt-bindings/gpio/gpio.h"
/ {
fragment@0 {
target-path = "/";
__overlay__ {
dht11{
compatible = "dht11";
gpios = <&gpio1 2 GPIO_ACTIVE_LOW>;
linux,open-drain;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_onewire>;
status = "okay";
};
};
};
fragment@1 {
target= <&iomuxc>;
__overlay__{
pinctrl_onewire: onewire {
fsl,pins = <
MX6UL_PAD_GPIO1_IO02__GPIO1_IO02 0x400138B1
>;
};
};
};
};
|
若想要修改dht11的引脚只需要修改以上两行代码即可。