AINA: Fältet Lab med Edison IoT (6 / 12 steg)
Steg 6: Integated ansökan spara sensordata till en CSV fil
När sensorerna har testats och visat med Unit test, är de integrerade i programmet Python. Varje sensor kommer att kräva sin import, setup, och läsa funktioner. Inte alla sensorer behöver läsas på samma schema men det hjälper om en gemensam tid används. Vissa sensorer kan behöva lite tid att värma upp om de sätts in i ett viloläge (t.ex. Gas Sensor).
Python app behöver
- importera sensor bibliotek
- skapa en sensor instans
- Sensing Loop - kallas på regelbunden basis
- förbereda sensorer
- Läs sensorer
- release sensorer
- Öppna CSV-fil för att lägga till
- lägga till sensor värden i listan objekt känd för
- att skriva raden CSV-fil
- Stäng CSV-filen
Detta exempel program program för alla sensorer undervisas i en CSV-fil. Detta är igen en testet app på vägen till den slutliga ansökan. På denna punkt har vi inte förbereda sensorer/öppna/stäng filen i avsnittet loop.
#python
# sensor integration och utgång till CSV fil < br > #
Importera tid, sys, signal, atexit
importera csv
importera slumpmässiga
importera pyupm_gas som upmGas
importera pyupm_guvas12d som upmUV
importera pyupm_grove som grove
importera pyupm_tsl2561 som upmTsl2561
importera pyupm_grovewater som upmGrovewater
importera pyupm_grovemoisture som upmMoisture
##############################################
## Avsluta hanterare ## < br > # funktionen slutar python från utskrift en stacktrace när du trycker Ctrl-C
def SIGINTHandler (signum, ram):
höja SystemExit
# Den här funktionen kan du köra kod på avfarten, inklusive funktioner från myMQ5
def exitHandler():
skriva ut "Avslutar"
sys.Exit(0)
# Registrera exit hanterare < br > atexit.register(exitHandler)
signal.signal (signal. SIGINT, SIGINTHandler)
##############################################
# Bifoga gas sensor till AIO0
myMQ5 = upmGas.MQ5(0)
threshContext = upmGas.thresholdContext() < br > threshContext.averageReading = 0
threshContext.runningAverage = 0
threshContext.averagedOver = 2 < /p >< p > # oändlig loop, slutar när skriptet är inställda < br > # flera gånger, ta ett prov varje 2 mikrosekunder;
# hitta medelvärdet av 128 proven. och
# Skriv ut ett rinnande diagram över punkter som i genomsnitt
#mybuffer = upmGas.uint16Array(128)
#while(1):
# samplelen = myMQ5.getSampledWindow (2, 128, mybuffer)
# om samplelen:
# tröska = myMQ5.findThreshold (threshContext, 30, mybuffer, samplelen)
# myMQ5.printGraph(threshContext, 5)
# if(thresh):
# Skriv ut "Tröskel är", tröska
# funktion för att läsa och i genomsnitt
gasbuffer = upmGas.uint16Array(128)
gasThresh = 0
gasAvg = 0
def readGasMQ5():
skriva ut "readMQ5"
samplelen = myMQ5.getSampledWindow (2, 128, gasbuffer)
skriva ut "sampleLen" +str(samplelen)
om samplelen:
skriva ut "calc threshold"
gasThresh = myMQ5.findThreshold (threshContext, 30, gasbuffer, samplelen)
skriva ut "gas avg"
gasAvg = myMQ5.getSample()
##############################################
# Instansiera en UV sensor på analoga pin A1
myUVSensor = upmUV.GUVAS12D(1);
# analog spänning, vanligtvis 3.3 eller 5.0
GUVAS12D_AREF = 5.0;
SAMPLES_PER_QUERY = 1024;
# s = ("AREF: {0},"
# "Spänning värde (högre betyder mer UV):"
# {1}-.format (GUVAS12D_AREF,
# myUVSensor.value(GUVAS12D_AREF, SAMPLES_PER_QUERY)))
# myUVSensor.value(GUVAS12D_AREF, SAMPLES_PER_QUERY) < /p >
>##############################################
# Markfuktighet till A2
# Instansiera en Grove fukt sensor på analoga pin A2
myMoisture = upmMoisture.GroveMoisture(2) < /p >< p > # värden (ungefärlig): < br > # 0-300, sensorn i luft eller torr mark
# 300-600, sensor i fuktig jord
# 600 +, sensorn i våt mark eller nedsänkt i vatten < /p >< p > #moisture_val = myMoisture.value()
##############################################
# Temperatur till A3
Temp = grove. GroveTemp(3)
Celsius = 0
Farenheit = 0
#print temp.name()
def readtemperature():
Celsius = temp.value()
Fahrenheit = celsius * 9.0/5.0 + 32,0;
##############################################
# Digital Light till I2C
myDigitalLightSensor = upmTsl2561.TSL2561()
#print "ljus värde är" + str(myDigitalLightSensor.getLux())
##############################################
# Vatten sensor till D3
myWaterSensor = upmGrovewater.GroveWater(3)
#if (myWaterSensor.isWet()):
# Skriv ut "Sensor är våt"
##############################################
# setup utdatafilen
filnamn = time.strftime("FLEBAC%Y%m%d-%H%M%S.csv")
ofil = open(filename,"wb")
författare = csv.writer(ofile) < /p >< p > # Skriv en huvudrad för sensorer < br > # A0-1 I2C då digital i ordning
headerRow = ["timestamp"
"MQ5GasTresh",
"MQ5Average",
"UV",
"Fukt",
"Celsius",
"Digital Light",
"Våta",
]
skriva ut "Start Loop"
för jag i intervallet (1 100):
skriva ut "loop" + str(i)
readGasMQ5()
a = [gasThresh, gasAvg,
myUVSensor.value (GUVAS12D_AREF, SAMPLES_PER_QUERY),
myMoisture.value(),
Temp.Value(),
myDigitalLightSensor.getLux(),
myWaterSensor.isWet()]
Writer.writerow(a)
Time.Sleep(0.10)
< p > ofile.close() < /p >