DS18b20

Iš Žinynas.
Jump to navigation Jump to search

Temperatūros sensorius.

41f5egsLS2L.jpg

RaspberryPI pajungimas naudojant 4.7k Ohm rezistorių

 Standartinis jungimas

35139160190 cea3435a09 b.jpg


Alternatyvus jungimas, kai standartiniai pinai jau yra užimti

Termpo gpio209287.jpg

Termpo gpio43250897.jpg

  • PIN17 - VCC (Raudonas)
  • PIN14 - GND (Juodas)
  • PIN11 - DATA (Geltonas)

Taip pat galima jungti kelis sensorius, tokia tvarka:

46695522054 335a5086f5 z.jpg

Raspbian paruošimas

Įgalinam wire 1 overlay, į /boot/config.txt įrašome šią eilutę:

dtoverlay=w1-gpio,gpiopin=17

Išsaugome ir perkrauname RaspberryPI. Perkrovus turėtų atsirasti šie įrenginiai:

ls /sys/bus/w1/devices

Daugiau apie wire 1 sąsają. DĖMESIO! Jungiant standartiškai kai standartiniai pinai nėra užimti, žiūr. pav. 1, nereikia prirašyti gpiopin parametro, tuomet duomenys eis standartiškai per PIN 7.

Python scriptas temperatūrai nuskaityti

#!/usr/bin/env python
import os
import glob
import time
 
os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')
 
base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28*')[0]
device_file = device_folder + '/w1_slave'
 
def read_temp_raw():
    f = open(device_file, 'r')
    lines = f.readlines()
    f.close()
    return lines
 
def read_temp():
    lines = read_temp_raw()
    while lines[0].strip()[-3:] != 'YES':
        time.sleep(0.2)
        lines = read_temp_raw()
    equals_pos = lines[1].find('t=')
    if equals_pos != -1:
        temp_string = lines[1][equals_pos+2:]
        temp_c = float(temp_string) / 1000.0
        temp_f = temp_c * 9.0 / 5.0 + 32.0
        return temp_c, temp_f
	
while True:
	print(read_temp())	
	time.sleep(1)

Python scriptas temperatūrai nuskaityti (jeigu naudojami keli sensoriai)

#!/usr/bin/python
import os
import glob
import time


sensors = [{"hwid":"28-03049779621c", "name":"1 sensorius", "color":"#ff0000"},
              {"hwid":"28-03049779691d", "name":"2 sensorius", "color":"#0000ff"},
              {"hwid":"28-03049779b25b", "name":"3 sensorius", "color":"#3cb371"},
              {"hwid":"28-03049779d1ab", "name":"4 sensorius", "color":"#6a5acd"}]

 
os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')
 
def read_temp_raw(dev):
    f = open("/sys/bus/w1/devices/"+dev+"/w1_slave",'r')
    lines = f.readlines()
    f.close()
    while lines[0].strip()[-3:] != 'YES':
        time.sleep(0.2)
        lines = read_temp_raw()
    equals_pos = lines[1].find('t=')
    if equals_pos != -1:
        temp_string = lines[1][equals_pos+2:]
        temp_c = round((float(temp_string) / 1000.0),2)
        return temp_c

def ReadAllSensors():
   for sensor in sensors:
        temp = str(read_temp_raw(sensor["hwid"]))
        print "Sensor: "+str(sensor["name"])+" temp: "+temp+"C"

ReadAllSensors()

Software tipo apejimas

cd
git clone https://github.com/danjperron/BitBangingDS18B20
cd BitBangingDS18B20/python
sudo python setup.py install

Then from python read all the sensor. I use GPIO17 (pin 11) on this example

sudo python
import DS18B20
gpiopin = 17
sensors = DS18B20.scan(gpiopin)
for i in sensors:
 print('{} : {}'.format(i, DS18B20.read(True,gpiopin,i)))