Vykreslete data DHT11 pomocí Raspberry Pi a Arduino UNO: 7 kroků
Vykreslete data DHT11 pomocí Raspberry Pi a Arduino UNO: 7 kroků
Anonim
Vykreslete data DHT11 pomocí Raspberry Pi a Arduino UNO
Vykreslete data DHT11 pomocí Raspberry Pi a Arduino UNO

Tento návod vysvětluje, jak vykresluji data snímače teploty DHT11 pomocí Arduino Uno a Raspberry Pi. V tomto teplotním senzoru je připojeno Arduino Uno a Arduino Uno je sériově spojeno s Raspberry Pi. Na Raspberry Pi Side se pro vykreslování grafů používají knihovny matplotlib, numpy a drawnow.

Krok 1: Věci potřebné pro projekt

Věci potřebné pro projekt
Věci potřebné pro projekt
Věci potřebné pro projekt
Věci potřebné pro projekt
Věci potřebné pro projekt
Věci potřebné pro projekt

1. Raspberry Pi

2. Arduino Uno

3. Snímač teploty DHT11

4. Propojovací vodiče

5. Breadboard

Krok 2: Stáhněte a nainstalujte Arduino IDE do Raspberry Pi

Stáhněte a nainstalujte Arduino IDE do Raspberry Pi
Stáhněte a nainstalujte Arduino IDE do Raspberry Pi
Stáhněte a nainstalujte Arduino IDE do Raspberry Pi
Stáhněte a nainstalujte Arduino IDE do Raspberry Pi
Stáhněte a nainstalujte Arduino IDE do Raspberry Pi
Stáhněte a nainstalujte Arduino IDE do Raspberry Pi

Poznámka:- Pro nahrání skici v Arduino UNO můžete použít Arduino IDE Windows, Linux nebo Mac.

Prvním krokem je instalace Arduino IDE pro tento otevřený prohlížeč v Raspberry Pi a otevření níže uvedeného odkazu

Arduino Předchozí IDE

Poté stáhněte verzi Linux ARM a extrahujte ji pomocí příkazu

název souboru tar -xf

Po rozbalení uvidíte nový adresář. Zde používám arduino-1.8.2 IDE. Poté přejděte do adresáře pomocí příkazu.

cd arduino-1.8.1

Chcete-li spustit Arduino IDE, použijte tento příkaz v adresáři arduino-1.8.2

./arduino

Jak používat knihovny

Chcete -li do Arduina nainstalovat libovolné knihovny, jednoduše si knihovnu stáhněte a vložte do složky knihoven arduino 1.8.2 ==>.

POZNÁMKA:-Ujistěte se, že ve složce knihovny není ((DHT-senzor) žádný (-). Pokud existuje (-), přejmenujte jej.

v tomto pokynu použijeme dvě knihovny, DHT_Sensor a Adafruit_Sensor

Krok 3: Kód pro Arduino

Kód pro Arduino
Kód pro Arduino

Pojďme si nyní promluvit mezi Pythonem a Arduinem. Za prvé potřebujeme jednoduchý program, který umožní Arduinu odesílat data přes sériový port. Následující program je jednoduchý program, který bude mít počet Arduino a odešle data na sériový port.

Arduino kód

#include "DHT.h" float tempC; // Proměnná nebo udržovací teplota v C float tempF; // Proměnná pro udržení teploty ve F float vlhkosti; // Proměnná pro udržení odečtu tlaku

#define DHTPIN 7 // ke kterému digitálnímu pinu jsme připojeni

#define DHTTYPE DHT11 // DHT 11

//#definovat DHTTYPE DHT22 // DHT 22 (AM2302), AM2321

//#definovat DHTTYPE DHT21 // DHT 21 (AM2301)

// Inicializace snímače DHT.

DHT dht (DHTPIN, DHTTYPE);

neplatné nastavení () {Serial.begin (115200); // zapněte sériový monitor

dht.begin (); // inicializace dht}

void loop () {tempC = dht.readTemperature (); // Nezapomeňte deklarovat proměnné

vlhkost = dht.readHumidity (); // Přečtěte si Vlhkost

Serial.print (tempC);

Serial.print (",");

Sériový tisk (vlhkost);

Serial.print ("\ n"); // for new linedelay (2000); // Pauza mezi čteními. }

Jakmile je skica sestavena, vyberte desku a port a nahrajte ji.

Krok 4: Nastavení Raspberry Pi

Nastavte Raspberry Pi
Nastavte Raspberry Pi

Jakmile je kód nahrán, nainstalujte některé knihovny, abychom mohli vykreslit graf dat, která přicházejí sériově z Arduino Uno.

1. PySerial je knihovna, která poskytuje podporu pro sériová připojení přes řadu různých zařízení. Chcete -li jej nainstalovat, použijte příkaz.

Sudo apt-get install python-serial

2. Numpy je balíček, který definuje vícerozměrný objekt pole a související rychlé matematické funkce, které na něm fungují. Poskytuje také jednoduché rutiny pro lineární algebru a FFT (Fast Fourierova transformace) a propracované generování náhodných čísel. Můžete jej nainstalovat mnoha způsoby, buď pomocí balíčku apt nebo pip. Zde instaluji pomocí pipu, protože nejprve musíme nainstalovat pip

sudo apt-get install python-pip python-dev build-essential

sudo pip install numpy

nebo pokud chcete použít balíček apt

sudo apt install python-numpy

3. Matplotlib je 2D vykreslovací knihovna, která poskytuje objektově orientované API pro vkládání grafů do aplikací pomocí obecných nástrojů GUI, jako jsou Tkinter, wxPython, Qt nebo GTK+. Chcete -li jej nainstalovat, použijte příkaz

sudo pip install matplotlib

nebo

sudo apt install python-matplotlib

4. Drawnow se obecně používá k zobrazení výsledků po každé iteraci, protože v MATLABu používáme „imshow“. Chcete -li jej nainstalovat, použijte příkaz

sudo pip install drawnow

Krok 5: Python Scipt

Python Scipt
Python Scipt
Python Scipt
Python Scipt

Dalším krokem je napsat skript pythonu, k jehož napsání můžete použít jakýkoli editor.

1. Vykreslení dat do jednoho grafu

import serial # import Serial Library

import numpy # Import numpy

importovat matplotlib.pyplot jako plt #import matplotlib knihovnu

z drawnow import *

tempC = #Prázdná vlhkost pole =

arduino = serial. Serial ("/dev/ttyACM0", 115200)

plt.ion () # interaktivní režim pro vykreslení živého datacount = 0

def makeFig (): #Create a function that makes our desired plot

plt.ylim (20, 30) #Nastavte minimální a maximální hodnoty y

plt.title ('Data DHT11 v reálném čase') #Zadejte název

plt.grid (True) #Zapněte mřížku

plt.ylabel ('Temp C') #Nastavte ylabel

plt.plot (tempC, 'b^-', label = 'Degree C') #vykreslete teplotu

plt.legend (loc = 'vpravo nahoře') #vykreslete legendu

plt2 = plt.twinx () #Vytvořte druhou osu y

plt.ylim (50, 70) #Nastavte limity druhé osy y

plt2.plot (vlhkost, 'g*-', label = 'Vlhkost') #údaje o tlaku v grafu

plt2.set_ylabel ('Vlhkost') #label druhá osa y

plt2.ticklabel_format (useOffset = False)

plt2.legend (loc = 'vlevo nahoře')

while True: # Zatímco smyčka, která smyčky navždy

while (arduino.inWaiting () == 0): #Počkejte zde, dokud nebudou k dispozici data

projít #nedělat nic

arduinoString = arduino.readline ()

dataArray = arduinoString.split (',') #Rozdělte to do pole

temp = float (dataArray [0])

hum = float (dataArray [1])

tempC.append (temp)

vlhkost. připojit (hukot)

drawnow (makeFig)

plt.pause (.000001)

count = count+1 if (count> 20): #onove take last 20 data if data is more it will pop first

tempC.pop (0)

vlhkost.pop (0)

2. Samostatně vykreslete vlhkost a teplotu

import serial # import Serial Library

import numpy # Import numpy

importovat matplotlib.pyplot jako plt #import matplotlib knihovnu

z drawnow import *

tempC = #Prázdné pole

vlhkost =

arduino = serial. Serial ("/dev/ttyACM0", 115200) #Sériový port, ke kterému je připojeno arduino a přenosová rychlost

plt.ion () #Tell matplotlib you want interactive mode to plot live data

def CreatePlot (): #Create a function that makes our desired plot

plt.subplot (2, 1, 1) #Height, Width, First plot

plt.ylim (22, 34) #Nastavte minimální a maximální hodnoty y

plt.title ('Data DHT11 v reálném čase') #Zadejte název

plt.grid (True) #Zapněte mřížku

plt.ylabel ('Temp C') #Nastavte ylabels

plt.plot (tempC, 'b^-', label = 'Degree C') #vykreslete teplotu

plt.legend (loc = 'horní střed') #vykreslete legendu

plt.subplot (2, 1, 2) # Výška, šířka, druhý graf

plt.grid (True)

plt.ylim (45, 70) #Nastavte limity druhé osy y

plt.plot (vlhkost, 'g*-', label = 'Vlhkost (g/m^3)') #údaje o vlhkosti vykreslení

plt.ylabel ('Vlhkost (g/m^3)') #label druhá osa y

plt.ticklabel_format (useOffset = False) #k zastavení osy y automatického škálování

plt.legend (loc = 'horní střed')

while True: # Zatímco smyčka, která smyčky navždy

while (arduino.inWaiting () == 0): #Wait here until there is data pass #do nothing

arduinoString = arduino.readline () #čtěte data ze sériového portu

dataArray = arduinoString.split (',') #Rozdělte to do pole

temp = float (dataArray [0]) #Převede první prvek na plovoucí číslo a vloží temp

hum = float (dataArray [1]) #Převede druhý prvek na plovoucí číslo a vloží hukot

tempC.append (temp) #Build our tempC array by appending temp reading

vlhkost.připojit (hukot) #Budování našeho pole vlhkosti přidáním čtení hukotu

drawnow (CreatePlot)

plt.pause (.000001)

count = count+1

if (count> 20): #onove take last 20 data if data is more it will pop first

tempC.pop (0) # vyskočí první prvek

vlhkost.pop (0)

Krok 6: Schéma zapojení

Kruhový diagram
Kruhový diagram
Kruhový diagram
Kruhový diagram
Kruhový diagram
Kruhový diagram

Arduino ==> DHT11

3,3 V ==> VCC

GND ==> GND

D7 ==> VENKU