DS18b20: Skirtumas tarp puslapio versijų

Iš Žinynas.
Jump to navigation Jump to search
(multiple sensoriai ir temperaturu nuskaitymas)
111 eilutė: 111 eilutė:
 
ReadAllSensors()
 
ReadAllSensors()
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
== 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)))
 +
 
[[Category:Hardware]]
 
[[Category:Hardware]]
 
[[Category:RaspberryPI]]
 
[[Category:RaspberryPI]]
 
[[Category:OrangePI]]
 
[[Category:OrangePI]]

02:49, 13 spalio 2019 versija

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)))