INHOUDSOPGAWE:
Video: Stel DHT11 -data op met Raspberry Pi en Arduino UNO: 7 stappe
2025 Outeur: John Day | [email protected]. Laas verander: 2025-01-13 06:56
Hierdie instruksies verduidelik hoe ek die temperatuur sensor DHT11 data met behulp van Arduino Uno en Raspberry Pi plot. In hierdie temperatuursensor is verbinding met Arduino Uno en Arduino Uno is serieel verbind met Raspberry Pi. By Raspberry Pi Side word matplotlib-, numpy- en drawow -biblioteke gebruik om grafieke te teken.
Stap 1: Dinge wat nodig is vir die projek
1. Framboos Pi
2. Arduino Uno
3. DHT11 Temperatuursensor
4. Springdrade
5. Broodbord
Stap 2: Laai en installeer Arduino IDE in Raspberry Pi
Nota:- U kan Arduino IDE van Windows, Linux of Mac gebruik om skets in Arduino UNO op te laai.
Die eerste stap is om Arduino IDE vir die oop blaaier in Raspberry Pi te installeer en die onderstaande skakel oop te maak
Arduino Vorige IDE
Laai dan die Linux ARM -weergawe af en haal dit uit met die opdrag
tar -xf lêernaam
Na uittreksel sien u 'n nuwe gids. Hier gebruik ek arduino-1.8.2 IDE. Gaan dan na die gids deur die opdrag te gebruik.
cd arduino-1.8.1
Gebruik hierdie opdrag in die arduino-1.8.2-gids om Arduino IDE uit te voer
./arduino
Hoe om biblioteke te gebruik
Om 'n biblioteek in Arduino te installeer, laai die biblioteek af en plak dit in die gids arduino 1.8.2 ==> biblioteke.
OPMERKING:-Maak seker dat daar geen (-) in die biblioteekmap vir ex (DHT-sensor) is nie. As daar enige (-) is, hernoem dit.
ons sal twee biblioteke in hierdie instruksies gebruik, DHT_Sensor en Adafruit_Sensor
Stap 3: Kode vir Arduino
Laat ons nou luislang en Arduino aan die praat kry. Eerstens benodig ons 'n eenvoudige program om die Arduino -data oor die seriële poort te stuur. Die volgende program is 'n eenvoudige program met die Arduino -telling en stuur die data na die seriële poort.
Arduino -kode
#sluit 'DHT.h' vlot tempC in; // Veranderlike of hou temp in C float tempF; // Veranderlik om temperatuur in F -vlottervochtigheid te hou; // Veranderlik vir drukdrukmeting
#define DHTPIN 7 // aan watter digitale pen ons gekoppel is
#define DHTTYPE DHT11 // DHT 11
//#definieer DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#definieer DHTTYPE DHT21 // DHT 21 (AM2301)
// Initialiseer DHT -sensor.
DHT dht (DHTPIN, DHTTYPE);
ongeldige opstelling () {Serial.begin (115200); // skakel die seriële monitor aan
dht.begin (); // initialiseer dht}
leemte -lus () {tempC = dht.readTemperature (); // Maak seker dat u u veranderlikes verklaar
humiditeit = dht.readHumidity (); // Lees Humiditeit
Serial.print (tempC);
Serial.print (",");
Reeks.afdruk (humiditeit);
Serial.print ("\ n"); // vir nuwe gevoerde lêer (2000); // Pouse tussen lesings. }
Sodra die skets saamgestel is, kies die bord en poort en laai dit op.
Stap 4: Stel Raspberry Pi op
Sodra die kode opgelaai is, installeer 'n paar biblioteke sodat ons 'n grafiek kan teken van die data wat in serie uit die Arduino Uno kom.
1. PySerial is 'n biblioteek wat ondersteuning bied vir reeksverbindings oor verskillende toestelle. Gebruik die opdrag om dit te installeer.
Sudo apt-get install python-reeks
2. Numpy is 'n pakket wat 'n multidimensionele skikkingvoorwerp en gepaardgaande vinnige wiskundige funksies definieer wat daarop werk. Dit bied ook eenvoudige roetines vir lineêre algebra en FFT (Fast Fourier Transform) en gesofistikeerde generering van ewekansige getalle. U kan dit op baie maniere installeer, met behulp van 'n geskikte pakket of pip. Hier installeer ek met behulp van pip, daarvoor moet ons eers pip installeer
sudo apt-get install python-pip python-dev build-essential
sudo pip installeer numpy
of as u 'n geskikte pakket wil gebruik
sudo apt installeer python-numpy
3. Matplotlib is 'n 2D-plotbiblioteek wat 'n objekgeoriënteerde API bied om erwe in programme in te sluit deur gebruik te maak van algemene GUI-toolkits soos Tkinter, wxPython, Qt of GTK+. Gebruik die opdrag om dit te installeer
sudo pip installeer matplotlib
of
sudo apt installeer python-matplotlib
4. Drawnow word gewoonlik gebruik om die resultate na elke herhaling te sien, aangesien ons 'imshow' in MATLAB gebruik. Gebruik die opdrag om dit te installeer
sudo pip installeer drawow
Stap 5: Python Scipt
Die volgende stap is om 'n python -script te skryf, waarvoor u enige redakteur kan gebruik om dit te skryf.
1. Teken data in een grafiek
invoer reeks # invoer reeksbiblioteek
invoer numpy # Invoer numpy
voer matplotlib.pyplot in as plt #import matplotlib biblioteek
vanaf die invoer *
tempC = #Leë reeks humiditeit =
arduino = serial. Serial ("/dev/ttyACM0", 115200)
plt.ion () # interaktiewe modus om lewendige datacount = 0 op te stel
def makeFig (): #Skep 'n funksie wat ons gewenste plot maak
plt.ylim (20, 30) #Stel y min en maksimum waardes
plt.title ('Real Time DHT11 -data') #Plaas die titel
plt.grid (waar) #Skakel die rooster aan
plt.ylabel ('Temp C') #Stel etiket in
plt.plot (tempC, 'b^-', label = 'Graad C') #plot die temperatuur
plt.legend (loc = 'regs bo') #plot die legende
plt2 = plt.twinx () #Skep 'n tweede y -as
plt.ylim (50, 70) #Stel die grense van die tweede y -as
plt2.plot (humiditeit, 'g*-', label = 'Humiditeit') #plotdrukdata
plt2.set_ylabel ('humiditeit') #etiket tweede y -as
plt2.ticklabel_format (useOffset = Onwaar)
plt2.legend (loc = 'links bo')
terwyl dit waar is: # Terwyl die lus vir ewig loop
terwyl (arduino.inWaiting () == 0): #Wag hier totdat daar data is
slaag #doen niks
arduinoString = arduino.readline ()
dataArray = arduinoString.split (',') #Verdeel dit in 'n skikking
temp = float (dataArray [0])
hum = float (dataArray [1])
tempC.aanhang (temp)
humiditeit. voeg by (neurie)
tekening (makeFig)
pouse (.000001)
count = count+1 if (count> 20): #neem slegs die laaste 20 data, as die data meer is, verskyn dit eers
tempC.pop (0)
humiditeit.pop (0)
2. Om humiditeit en temperatuur apart te teken
invoer reeks # invoer reeksbiblioteek
invoer numpy # Invoer numpy
voer matplotlib.pyplot in as plt #import matplotlib biblioteek
vanaf invoer *
tempC = #leë skikking
humiditeit =
arduino = serial. Serial ("/dev/ttyACM0", 115200) #Seriële poort waarop arduino gekoppel is en Baudrate
plt.ion () #Vertel matplotlib dat u wil hê dat die interaktiewe modus lewendige data moet opstel
def CreatePlot (): #Skep 'n funksie wat ons gewenste plot maak
plt.subplot (2, 1, 1) #Hoogte, breedte, eerste plot
plt.ylim (22, 34) #Stel y min en maksimum waardes
plt.title ('Real Time DHT11 -data') #Plaas die titel
plt.grid (waar) #Skakel die rooster aan
plt.ylabel ('Temp C') #Stel etikette
plt.plot (tempC, 'b^-', label = 'Graad C') #plot die temperatuur
plt.legend (loc = 'upper center') #plot die legende
plt.subplot (2, 1, 2) # Hoogte, breedte, tweede plot
plt.grid (waar)
plt.ylim (45, 70) #Stel die grense van die tweede y -as
plt.plot (humiditeit, 'g*-', label = 'Humiditeit (g/m^3)') #plot humiditeitsdata
plt.ylabel ('Humidity (g/m^3)') #label tweede y -as
plt.ticklabel_format (useOffset = Onwaar) #tom outoskaal y -as te stop
plt.legend (loc = 'boonste middel')
terwyl dit waar is: # Terwyl die lus vir ewig loop
while (arduino.inWaiting () == 0): #Wag hier totdat daar data slaag #doen niks
arduinoString = arduino.readline () #lees die data vanaf die seriële poort
dataArray = arduinoString.split (',') #Verdeel dit in 'n skikking
temp = float (dataArray [0]) #Skakel die eerste element om in 'n drywende getal en sit dit in temp
hum = float (dataArray [1]) #Skakel die tweede element om in 'n drywende getal en sit hum
tempC.append (temp) #Bou ons tempC -skikking op deur temp -lees by te voeg
humiditeit. voeg by (neurie) #Bou ons humiditeitsreeks op deur die neurielesing by te voeg
drawow (CreatePlot)
pouse (.000001)
tel = tel+1
as (telling> 20): #neem slegs die laaste 20 data, as die data meer is, verskyn dit eerste
tempC.pop (0) # pop -out eerste element
humiditeit.pop (0)
Stap 6: Kringdiagram
Arduino ==> DHT11
3.3V ==> VCC
GND ==> GND
D7 ==> UIT