Plottning och grafritande realtidsdata från Arduino använder kraften i Python (4 / 4 steg)
Steg 4: Python interagera
Vill helt enkelt inte klippa och klistra in denna kod, men se till att du förstår det så kan du skapa egna levande grafritande program från grunden.
#step 1: importera bibliotek
importera följetong # importera seriell bibliotek
importera numpy # Import numpy
importera matplotlib.pyplot som plt #import matplotlib bibliotek
från drawnow import *
#step2: setup variabler och skapa seriella objekt
tempF =]
Tryck =]
arduinoData = följetong. Följetong ('com11', 115200) #Creating vår seriella objekt heter arduinoData
PLT.ion() #Tell matplotlib du vill interaktivt läge att rita realtidsdata
CNT = 0
Obs:-Kontrollera alltid com-porten. i mitt fall ansluta jag arduino i com11. din är deffer från mig. och överföringshastighet som använder samma bithastighet i arduino skiss och python annars python misslyckas att interagera med arduino.
steg # 3: skapa en funktion för plot:-
def makeFig(): #Create en funktion som gör våra önskad handling
PLT.ylim(80,90) #Set y min och max värden
PLT.title ("min Live Streaming sensordata") #Plot titeln
PLT.Grid(true) #Turn nätet på
PLT.ylabel ("Temp F') #Set ylabels
PLT.Plot (tempF, ' ro-', label = "Grader F") #plot temperaturen
PLT.legend (loc = "övre vänster") #plot legenden
plt2=PLT.twinx() #Create en andra y-axeln
PLT.ylim(93450,93525) #Set gränserna för andra y-axeln - anpassa sig till avläsningar du får
plt2.Plot (tryck, ' b ^-', label = "Tryck (Pa)") #plot tryck data
plt2.set_ylabel ("Pressrue (Pa)') #label andra y-axeln
plt2.ticklabel_format(useOffset=false) #Force matplotlib inte Autoskala y-axeln
plt2.legend (loc = "övre högra") #plot legenden
step4:Loops det för evigt:-
medan sant: # medan loop som loopar för evigt
medan (arduinoData.inWaiting()==0): #Wait här tills det är data
passera #do ingenting
arduinoString = arduinoData.readline() #read textraden från den seriella porten
dataArray = arduinoString.split(',') #Split det i en matris kallas dataArray
Temp = float (dataArray[0]) #Convert första element flytande tal och sätta i temp
P = float (dataArray[1]) #Convert andra element till flytande tal och sätta i P tempF.append(temp) #Build vår tempF matris genom att lägga till temp avläsningar pressure.append(P) #Building våra pressar utbud genom att lägga till P avläsningar drawnow(makeFig) #Call drawnow för att uppdatera vår levande graf
PLT.PAUSE(.000001) #Pause kort. Viktigt att hålla drawnow från att krascha
CNT = cnt + 1
IF(CNT>50): #If du har 50 eller fler punkter, ta bort den första från array tempF.pop(0) #This tillåter oss att bara se de 50 senaste datapunkterna
Pressure.pop(0)
Obs: här är tricken cnt. När räkningen passerar 50 eller mer, ta bort den första från matrisen.
Du ska få se data som diagrammet. Du kommer förmodligen behöva justera din y-skala parametrar i Python att säkerställa skalan lämpar sig för de data som du tar. Om diagrammet är tomt, sannolikt din y-skalorna är inte rätt för dina data mått.