DS18b20: Skirtumas tarp puslapio versijų

Iš Žinynas.
Jump to navigation Jump to search
8 eilutė: 8 eilutė:
 
== RaspberryPI pajungimas naudojant 4.7k Ohm rezistorių ==
 
== RaspberryPI pajungimas naudojant 4.7k Ohm rezistorių ==
  
 +
=== Standartinis jungimas ===
 
[[Vaizdas:35139160190 cea3435a09 b.jpg]]
 
[[Vaizdas:35139160190 cea3435a09 b.jpg]]
  
Alternatyvus jungimas, kai standartiniai pinai jau yra užimti
 
  
PIN17 - VCC (Raudonas)
+
=== Alternatyvus jungimas, kai standartiniai pinai jau yra užimti ===
PIN14 - GND (Juodas)
+
 
PIN11 - DATA (Geltonas)
+
[[Vaizdas:Termpo gpio209287.jpg|600px]]
 +
 
 +
[[Vaizdas:Termpo gpio43250897.jpg|600px]]
 +
 
 +
* PIN17 - VCC (Raudonas)
 +
* PIN14 - GND (Juodas)
 +
* PIN11 - DATA (Geltonas)
  
 
== Raspbian paruošimas ==
 
== Raspbian paruošimas ==
  
 
Įgalinam wire 1 overlay, į /boot/config.txt įrašome šią eilutę:
 
Įgalinam wire 1 overlay, į /boot/config.txt įrašome šią eilutę:
  dtoverlay=w1-gpio
+
  dtoverlay=w1-gpio,gpiopin=17
 
Išsaugome ir perkrauname [[RaspberryPI]]. Perkrovus turėtų atsirasti šie įrenginiai:
 
Išsaugome ir perkrauname [[RaspberryPI]]. Perkrovus turėtų atsirasti šie įrenginiai:
 
  ls /sys/bus/w1/devices
 
  ls /sys/bus/w1/devices
 +
Daugiau [https://pinout.xyz/pinout/1_wire 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 ===
  
 +
<syntaxhighlight lang="python">
 +
#!/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)
 +
</syntaxhighlight>
  
 
[[Category:Hardware]]
 
[[Category:Hardware]]
 
[[Category:RaspberryPI]]
 
[[Category:RaspberryPI]]
 
[[Category:OrangePI]]
 
[[Category:OrangePI]]

16:25, 15 liepos 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)

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)