Skip to Content

← All functionalities

Fuse test benchRaspberry PLC 19R1-WireAcquisition

Reading a DS18B20 over 1-Wire, no libraries needed

A DS18B20 on a Raspberry PLC needs three things: a 4.7 kOhm pull-up, one line in /boot/config.txt (dtoverlay=w1-gpio,gpiopin=8) and about forty lines of pure Python, the kernel exposes the sensor as a text file in sysfs. This example adds CRC validation and a 0.6 °C noise filter, exactly as used to log ambient temperature in a real fuse test bench deployment, where fusing current depends on it.

Why ambient temperature matters in a test bench

A fuse rated at its nominal current at 23 °C behaves differently at 35 °C: the melting integral shifts with ambient. Recording temperature alongside every test makes the report defensible: if a sample fails marginally, the certificate shows the thermal conditions it failed under.

The sysfs interface, no pip installs

Once the overlay loads, each sensor appears as /sys/bus/w1/devices/28-*/w1_slave. Reading it returns two lines: a CRC verdict and t=23125 (millidegrees). The example globs for the device, checks the CRC says YES, and parses the integer, discarding any corrupted reading instead of propagating it.

Filtering out the flicker

Raw DS18B20 readings jitter a few tenths of a degree, which makes an HMI display flicker and pollutes reports. The filter keeps the last accepted value and only updates when the change reaches 0.6 °C: small enough to track real drift, large enough to ignore conversion noise.

A snippet from the implementation

Straight from the example as deployed on the Raspberry PLC 19R: copy it freely:

def find_sensor():
    """Return the path of the first DS18B20 detected, or None."""
    devices = glob.glob(SENSOR_GLOB)
    return devices[0] if devices else None

The full example is a complete program, wiring header, setup and main loop, ready to adapt to your application.

Frequently asked questions

Can I connect several DS18B20 sensors to the same pin?

Yes, 1-Wire is a bus. Each sensor has a unique 64-bit ROM code and shows up as its own 28-* directory in sysfs, so the same parsing code works per device.

Why GPIO8 instead of the default GPIO4?

On the Raspberry PLC some default pins are taken by the industrial I/O hardware. The overlay accepts any free GPIO with the gpiopin parameter; GPIO8 is what the bench wiring used.

How fast can I poll the sensor?

A 12-bit conversion takes about 750 ms, so polling every 2 s is comfortable. Ambient temperature moves slowly anyway: the bench logs it once per test plus a live display refresh.

Related functionalities