Leer un DS18B20 por 1-Wire sin ninguna librería
/boot/config.txt (dtoverlay=w1-gpio,gpiopin=8) y unas cuarenta líneas de Python puro — el kernel expone el sensor como un fichero de texto en sysfs. Este ejemplo añade validación CRC y un filtro de ruido de 0.6 °C, tal como se usa para registrar la temperatura ambiente en un banco de ensayo de fusibles real en producción, donde la corriente de fusión depende de ella.Por qué importa la temperatura ambiente en un banco de ensayo
La interfaz sysfs, sin pip install
/sys/bus/w1/devices/28-*/w1_slave. Al leerlo devuelve dos líneas: un veredicto CRC y t=23125 (miligrados). El ejemplo localiza el dispositivo con glob, comprueba que el CRC dice YES y parsea el entero — descartando cualquier lectura corrupta en lugar de propagarla.Filtrar el parpadeo
Un fragmento de la implementación
Tal cual del ejemplo desplegado en el Raspberry PLC 19R — cópialo libremente:
def find_sensor():
"""Return the path of the first DS18B20 detected, or None."""
devices = glob.glob(SENSOR_GLOB)
return devices[0] if devices else NoneEl ejemplo completo es un programa entero — cabecera de conexionado, setup y bucle principal — listo para adaptar a tu aplicación.
Preguntas frecuentes
¿Puedo conectar varios sensores DS18B20 al mismo pin?
Sí, 1-Wire es un bus. Cada sensor tiene un código ROM único de 64 bits y aparece como su propio directorio 28-* en sysfs, así que el mismo código de parseo funciona por dispositivo.
¿Por qué GPIO8 en lugar del GPIO4 por defecto?
En el Raspberry PLC algunos pines por defecto están ocupados por el hardware de E/S industrial. El overlay acepta cualquier GPIO libre con el parámetro gpiopin; GPIO8 es el que usaba el cableado del banco.
¿Con qué frecuencia puedo muestrear el sensor?
Una conversión de 12 bits tarda unos 750 ms, así que muestrear cada 2 s es holgado. De todos modos la temperatura ambiente cambia despacio — el banco la registra una vez por ensayo más un refresco del display en vivo.