Continuing to explore the GPIO and the devices and sensors we can use with Fedora installed on a Raspberry Pi 3, in this post I will describe how to use a 1wire temperature sensor, in this case a DS18B20.
Disclaimer: I’m not an engineer nor a kernel developer. This post comes from try and fail tasks, googling for info, observations, etc. Pay attention when working with the GPIO pins and the electricity. I’m still alive and my RPi still works pretty well, but damages to your RPi coming from tasks here described cannot be attributed to me :-) As usual, forgive my English. The purpose of this post is for test and tinkering. Tested on on F28.
Device Tree
1wire is not available by default.
The simple way should be to enable it in the device tree as an overlay in the config.txt
file.
Unfortunately dtoverlay still doesn’t work on Fedora.
We need to put the content of the overlay file directly on the main DTB file.
To do this we can follow the same instructions used for SPI, but applying this patch to the bcm283x.dtsi
file.
Once replaced /boot/dtb/bcm2837-rpi-3-b.dtb
with the new one, reboot the Raspberry.
wire, w1_gpio and w1_therm modules
If you issue the lsmod |grep wire
command, you should see that wire
and w1_gpio
modules are loaded.
In order to read the DS18B20 themperature sensor, we need also the w1_therm
module, that we can find in the kernel-modules-extra RPM.
We can now load it using modprobe
At this point we can find the sensor in /sys/bus/w1/devices/28-xxxxxxxxxx
, in my case 28-03168cad32ff
.
Let’s read the temperature:
Ok, t=26000
, that is 26°C
Wiring
Note, I’m not sure, but since I have a resistor between data and v+ pins of the sensor, I used the content of the w1-gpio-pullup-overlay (definitions for w1-gpio module with external pullup, maybe if you want to enable the RPi internal pullup you have to use the content of the w1-gpio overlay?).
The gpio pin to use with the sensor data pin is BCM4 (https://pinout.xyz).
kernel updates
Remember that the /boot/dtb is a link to a directory related to the current kernel and it will be changed at every kernel update, so the bcm2837-rpi-3-b.dtb
loaded at boot will be replaced.