Python Language
IoT-programmering met Python en Raspberry PI
Zoeken…
Voorbeeld - temperatuursensor
Interface van DS18B20 met Raspberry pi
Verbinding van DS18B20 met Raspberry pi
Je kunt zien dat er drie terminals zijn
- Vcc
- Gnd
- Gegevens (One wire protocol)
R1 is 4,7 k ohm weerstand voor het omhoog trekken van het spanningsniveau
- Vcc moet worden aangesloten op een van de 5v of 3.3v-pinnen van Raspberry pi (PIN: 01, 02, 04, 17).
- Gnd moet worden aangesloten op een van de Gnd-pinnen van Raspberry pi (PIN: 06, 09, 14, 20, 25).
- DATA moet verbonden zijn met (PIN: 07)
De eendraadsinterface vanaf de RPi-zijde inschakelen
Meld u aan bij Raspberry pi met behulp van stopverf of een andere linux / unix-terminal.
Open na het inloggen het bestand /boot/config.txt in uw favoriete browser.
nano /boot/config.txt
Voeg nu deze regel
dtoverlay=w1–gpio
aan het einde van het bestand.Herstart nu de Raspberry pi
sudo reboot
.Log in op Raspberry pi en voer
sudo modprobe g1-gpio
Voer vervolgens
sudo modprobe w1-therm
Ga nu naar de map / sys / bus / w1 / devices
cd /sys/bus/w1/devices
U zult nu een virtuele map ontdekken die is gemaakt van uw temperatuursensor vanaf 28 - ********.
Ga naar deze map
cd 28-********
Nu is er een bestandsnaam w1-slave , dit bestand bevat de temperatuur en andere informatie zoals CRC.
cat w1-slave
.
Schrijf nu een module in python om de temperatuur af te lezen
import glob
import time
RATE = 30
sensor_dirs = glob.glob("/sys/bus/w1/devices/28*")
if len(sensor_dirs) != 0:
while True:
time.sleep(RATE)
for directories in sensor_dirs:
temperature_file = open(directories + "/w1_slave")
# Reading the files
text = temperature_file.read()
temperature_file.close()
# Split the text with new lines (\n) and select the second line.
second_line = text.split("\n")[1]
# Split the line into words, and select the 10th word
temperature_data = second_line.split(" ")[9]
# We will read after ignoring first two character.
temperature = float(temperature_data[2:])
# Now normalise the temperature by dividing 1000.
temperature = temperature / 1000
print 'Address : '+str(directories.split('/')[-1])+', Temperature : '+str(temperature)
Bovenstaande python-module drukt de temperatuur versus het adres oneindig af. De parameter RATE is gedefinieerd om de frequentie van de temperatuurvraag van de sensor te wijzigen of aan te passen.
GPIO-speldiagram