= Interfacing 1-Wire devices to the Pico

This example demonstrates how to use link:https://www.analog.com/en/technical-articles/guide-to-1wire-communication.html[1-Wire] devices with the Raspberry Pi Pico (RP2040).
1-Wire is an interface that enables a master to control several slave devices over a simple shared serial bus.

The example provides a 1-Wire library that is used to take readings from a set of connected link:https://www.analog.com/media/en/technical-documentation/data-sheets/ds18b20.pdf[DS18B20] 1-Wire temperature sensors. The results are sent to the default serial terminal connected via USB or UART as configured in the SDK.

The library uses a driver based on the RP2040 PIO state machine to generate accurate bus timings and control the 1-Wire bus via a GPIO pin.

_1-Wire(R) is a registered trademark of Maxim Integrated Products, Inc._

== Wiring information

Connect one or more DS18B20 sensors to the Pico as shown in the diagram and table below.

Connect GPIO 15 to 3V3(OUT) with a pull-up resistor of about 4k ohms.

[[pio_onewire_wiring-diagram]]
[pdfwidth=75%]
.Wiring diagram
image::pio_onewire.png[]

[[pio_onewire_connections-table]]
.Connections table
[options="header,footer"]
|==================================================
|Pico    |pin         |DS18B20    |pin / sensor wire
|GND     |38 or equivalent   |GND        |1 / Black
|GPIO 15 |20          |DQ         |2 / Yellow
|3V3(OUT)|36          |VDD        |3 / Red
|==================================================

== Bill of materials

.A list of materials for the example circuit
[[pio_onewire_bom-table]]
[cols=3]
|===
| *Item*  | *Quantity* | *Details*
| Breadboard | 1 | generic part
| Raspberry Pi Pico | 1 | https://www.raspberrypi.com/products/raspberry-pi-pico/
| DS18B20 | 3 | chip or wired sensor
| 3900 ohm resistor | 1 | generic part
| M/M jumper wire | 13 | generic part
|===

== List of files
[[pio_onewire_file-list]]
CMakeLists.txt:: CMake file to incorporate the example in the build tree.
onewire.c:: Source code for the example program.
ow_rom.h:: Header file with generic ROM command codes for 1-Wire devices. 
ds18b20.h:: Header file with function command codes for the DS18B20 device.
onewire_library/:: Subdirectory containing the 1-Wire library and driver.
onewire_library/CMakeLists.txt:: CMake file to build the 1-Wire library and driver.
onewire_library/onewire_library.c:: Source code for the 1-Wire user functions.
onewire_library/onewire_library.h:: Header file for the 1-Wire user functions and types.
onewire_library/onewire_library.pio:: PIO assembly code for the 1-Wire driver.
