Jetson Nano使用C_DHT.c库驱动DHT11传感器报错求助
解决Jetson Nano使用C_DHT.c库驱动DHT11的GPIO报错问题
错误原因解析
gpioSetDirection: Unknown error 517:C_DHT依赖的wiringPi库未适配Jetson Nano的GPIO架构,Jetson的GPIO控制逻辑与树莓派不同,导致引脚方向设置失败。gpioSetValue: Operation not permitted:普通用户无GPIO操作权限,即使库安装完成,也无法直接控制引脚电平。TG(-39909.0, -39909.0, 0):GPIO操作失败导致无法与DHT11建立通信,输出的是读取失败时的默认无效值。
解决方案
方案1:改用Jetson官方GPIO库适配(推荐)
Jetson Nano官方提供的jetson-gpio库对原生GPIO支持更完善,需修改C_DHT.c的GPIO操作逻辑:
- 安装C语言版jetson-gpio库:
git clone https://github.com/NVIDIA/jetson-gpio.git cd jetson-gpio/lib make sudo make install - 替换C_DHT.c中的wiringPi相关函数:
- 初始化GPIO:添加
gpioSetMode(GPIO_MODE_USER); - 替换
gpioSetDirection(pin, mode)为gpioSetDirection(pin, GPIO_OUT/GPIO_IN) - 替换
gpioSetValue(pin, val)为gpioSetValue(pin, GPIO_HIGH/GPIO_LOW)
- 初始化GPIO:添加
- 编译时链接jetson-gpio库:
gcc C_DHT.c -o dht_reader -ljetson-gpio
方案2:修复wiringPi的适配与权限
若坚持使用wiringPi:
- 安装Jetson适配版wiringPi:
git clone https://github.com/yogeshdhamija/Jetson-Nano-WiringPi.git cd Jetson-Nano-WiringPi ./build - 必须以root权限运行程序:
sudo ./your_dht_program - 确认引脚编号正确:执行
gpio readall查看Jetson Nano的wiringPi引脚映射,确保代码中使用的引脚编号与物理连接对应。
方案3:配置GPIO权限(无需每次sudo)
将当前用户加入GPIO用户组,避免每次运行都用sudo:
- 创建并添加用户到gpio组:
sudo groupadd -f gpio sudo usermod -aG gpio $USER - 设置GPIO设备文件权限:
sudo chown root:gpio /dev/gpiochip* sudo chmod 660 /dev/gpiochip* - 注销并重新登录,之后可直接运行程序。
验证
修改或重新编译后运行程序,若输出正常的温湿度数值,说明问题解决。
内容的提问来源于stack exchange,提问作者Thierry Grandjean
相关产品推荐
相关产品推荐

