Dallas 1-Wire Support
Preparation
- Will cover an example of a temperature sensor well known DS1820 other 1 wire IC's are supported too.
Default GPIO for 1-Wire is Pin #7 (ODROID-N2 - GPIOA.BIT13 / ODROID-C4 - GPIOX.BIT5)
- Connection: With External-Supply
Pin 1 (Left): Ground (-)
Pin 2 (Middle): Pin #7 N2 (GPIOA.BIT13) / C4 (GPIOX.BIT5)
Pin 3 (Right): VCC (3.3V)
You also need to add a resistor from 4.7k to 10k between pin 2.
- Connection: Supplying the Parasite-Powered
Pin 1 (Left): Ground (-)
Pin 2 (Middle): Pin #7 N2 (GPIOA.BIT13) / C4 (GPIOX.BIT5)
Pin 3 (Right): Ground (-)
You also need to add a resistor from 4.7k to 10k between pin 2.
Enable 1-wire Bus
- If you use the kernel version more than 4.9.230, you should edit /media/boot/config.ini file to enable 1-wire by adding onewire to overlays variable.
; Device Tree Overlay overlay_resize=16384 overlay_profile=myproject overlays="" [overlay_myproject] overlays="onewire"
- To know the further information of Device Tree Overlay, please refer to this document.
- To enable the 1wire bus, you need to modify the DT(Device Tree) file.
- Install required packages.
root@odroid:~$ sudo apt-get install device-tree-compiler
- Make a backup of DTB file.
ODROID-N2
root@odroid:~$ cp /media/boot/meson64_odroidn2.dtb /media/boot/meson64_odroidn2.dtb.org
ODROID-C4
root@odroid:~$ cp /media/boot/meson64_odroidc4.dtb /media/boot/meson64_odroidc4.dtb.org
- Change the DTB file for 1wire bus
ODROID-N2
root@odroid:~$ fdtget /media/boot/meson64_odroidn2.dtb /onewire status disabled root@odroid:~$ fdtput -t s /media/boot/meson64_odroidn2.dtb /onewire status "okay" root@odroid:~$ fdtget /media/boot/meson64_odroidn2.dtb /onewire status okay root@odroid:~$
ODROID-C4
root@odroid:~$ fdtget /media/boot/meson64_odroidc4.dtb /onewire status disabled root@odroid:~$ fdtput -t s /media/boot/meson64_odroidc4.dtb /onewire status "okay" root@odroid:~$ fdtget /media/boot/meson64_odroidc4.dtb /onewire status okay root@odroid:~$
- When the DTB modification is finished, reboot.
root@odroid:~$ reboot
- Check if your sensor is working:
root@odroid:~$ lsmod w1_therm 16384 0 w1_gpio 16384 0 wire 45056 2 w1_gpio,w1_therm root@odroid:~$ cd /sys/bus/w1/devices root@odroid:/sys/bus/w1/devices# ls 10-000802f38c57 w1_bus_master1 root@odroid:~$
As you can see my sensor is detected as 10-000802f38c57, each sensor has a different id. So yours will be different.
- Read the temperature:
root@odroid:/sys/bus/w1/devices$ cd 10-000802f38c57 root@odroid:/sys/bus/w1/devices/10-000802f38c57# cat w1_slave 33 00 4b 46 ff ff 03 10 30 : crc=30 YES 33 00 4b 46 ff ff 03 10 30 t=25562 root@odroid:/sys/bus/w1/devices/10-000802f38c57#
Temperature is t=25562 or 25.562 degree's Celsius.
- Multiple sensors can be connected on the same line as the draw below.
odroid@odroid64:/sys/bus/w1/devices# ls 10-000802f38c57 10-000802f41d67 w1_bus_master1
Two sensors in parallel.
Change the Default GPIO pin for 1-Wire interface
Ex) Default GPIO pin change to GPIOX.BIT3
Please refer to below links for details related to gpio mapping in the device-tree.
N2 gpio mapping in the device-tree
ODROID-N2
root@odroid:~$ fdtget /media/boot/meson64_odroidn2.dtb /onewire gpios 25 63 0 root@odroid:~$ fdtput /media/boot/meson64_odroidn2.dtb /onewire gpios 25 69 0 root@odroid:~$ fdtget /media/boot/meson64_odroidn2.dtb /onewire gpios 25 69 0 root@odroid:~$ reboot
ODROID-C4
root@odroid:~$ fdtget /media/boot/meson64_odroidc4.dtb /onewire gpios 25 63 0 root@odroid:~$ fdtput /media/boot/meson64_odroidc4.dtb /onewire gpios 25 69 0 root@odroid:~$ fdtget /media/boot/meson64_odroidc4.dtb /onewire gpios 25 69 0 root@odroid:~$ reboot
If the reboot doesn't affect the dtb update, you need a hard reset(power off/on).
Use the first number in the fdtget command output when you run fdtput command.
For example, 25(0x19) is the GPIO group number.
DS1820 is connected to Pin #11
Pin 1 (Left): Ground (-)
Pin 2 (Middle): Pin #11 N2 (GPIOX.BIT3) / C4 (GPIOX.BIT3)
Pin 3 (Right): Ground (-)