1wire Temperature Sensor DS 18B20
To activate the Device Tree for the 1wire, add the following line:
sudo nano /boot/config.txt
dtoverlay=w1-gpio-pullup,gpiopin=4,extpullup=on
After reboot there should be:
more /sys/bus/w1/devices/28-3c01b556c01a/w1_slave
showing:
45 01 55 05 7f a5 81 66 97 : crc=97 YES 45 01 55 05 7f a5 81 66 97 t=20312where the last number indicates 20.3 °C.
http://www.netzmafia.de/skripten/hardware/RasPi/Projekt-Onewire/index.html https://www.msxfaq.de/sonst/bastelbude/raspi/raspi-1wire.htm
Python interface
class HvcOneWire_DS1820: def __init__(self): self.sensors = {} self.sensors["Toven"] = "28-3c01b556c01a" self.sensors["Tfolu"] = "28-3c01b55605f9" self.sensors["Terde"] = "28-3c01b5566967" self.sensors["Twalu"] = "28-3c01b5566647" self.sensors["Thaus1"] = "28-012111fb3ff8" self.sensors["Thaus2"] = "28-012111ff6f31" self.sensors["Thaus3"] = "28-012111e8d0a5" for s in self.sensors: HvcOneWire_DS1820.T[s] = -999 return def look4sensors(self): """ Initially, check for the 1-wire slaves available """ file = open('/sys/devices/w1_bus_master1/w1_master_slaves') w1_slaves = file.readlines() file.close() sensNames = [] for line in w1_slaves: thisSensorName = line.split("\n")[0] sensNames.append(thisSensorName) return sensNames def read(self,s="all"): """ For each of the DS1820 sensors, return the temperature. """ message = "" if s=="all": for s in self.sensors: try: file = open('/sys/bus/w1/devices/' + str(self.sensors[s]) + '/w1_slave') filecontent = file.read() file.close() # find and convert the temperature tempVal = filecontent.split("\n")[1].split(" ")[9] temperature = float(tempVal[2:]) / 1000.0 if temperature == -0.1: temperature = -999 HvcOneWire_DS1820.T[s] = temperature except: message = message + "Temperature read failed: " + str(s) +"\n" HvcOneWire_DS1820.T[s] = -999 continue else: try: file = open('/sys/bus/w1/devices/' + str(self.sensors[s]) + '/w1_slave') filecontent = file.read() file.close() # find and convert the temperature tempVal = filecontent.split("\n")[1].split(" ")[9] temperature = float(tempVal[2:]) / 1000.0 if temperature == -0.1: temperature = -999 HvcOneWire_DS1820.T[s] = temperature except: message = message + "Temperature read failed: " + str(s) +"\n" HvcOneWire_DS1820.T[s] = -999 if self.init: self.init = False return HvcOneWire_DS1820.T, message #persistant values: T = {} init = True if __name__ == "__main__": import time, threading w1 = HvcOneWire_DS1820() sensNames = w1.look4sensors() print("Sensor identifiers found:") print(sensNames) # align sensor identifiers to your naming, put this to init() sensors = {} sensors["oven"] = "28-3c01b5568a59" print("Sensor association") print(w1.sensors) next_call = time.time() while True: #read temperatures T,msg = w1.read() print(msg) # show Temperaturs for s in T: print(str(s) + ':\t {0:4.2f}'.format( T[s] )+" °C") print("---------") next_call = next_call+10; time.sleep(next_call - time.time())