
Franz
Achja, ein gutes neues Jahr wünsche ich noch

Forum zur gegenseitigen Hilfe für Hobby´s, Spass und Technik, im Raum Penzberg, Garmisch, Bad Tölz, Seeshaupt
Code: Alles auswählen
/*
I2C-Generator: 0.3.0
Yaml Version: 2.1.3
Template Version: 0.7.0-112-g190ecaa
Copyright (c) 2021, Sensirion AG
All rights reserved.
Weiterverbreitung und Nutzung in Quell- und Binärform, mit oder ohne
Änderungen sind zulässig, sofern folgende Bedingungen erfüllt sind:
* * Bei der Weiterverbreitung des Quellcodes muss der oben stehende Copyright-Hinweis enthalten
sein Liste der Bedingungen und den folgenden Haftungsausschluss.
* * Weiterverbreitungen in binärer Form müssen den oben genannten Urheberrechtshinweis
wiedergeben. diese Liste der Bedingungen und den folgenden Haftungsausschluss in der
Dokumentation und/oder andere Materialien, die mit der Verteilung bereitgestellt werden.
* * Weder der Name der Sensirion AG noch deren Namen
Mitwirkende können dazu verwendet werden, daraus abgeleitete Produkte zu unterstützen oder
zu bewerben diese Software ohne vorherige ausdrückliche schriftliche Genehmigung.
DIESE SOFTWARE WIRD VON DEN COPYRIGHT-INHABERN UND MITARBEITERN „WIE BESEHEN“ ZUR VERFÜGUNG
GESTELLT.UND ALLE AUSDRÜCKLICHEN ODER STILLSCHWEIGENDEN GEWÄHRLEISTUNGEN, EINSCHLIESSLICH,
ABER NICHT BESCHRÄNKT AUF DIE STILLSCHWEIGENDE GEWÄHRLEISTUNGEN DER MARKTGÄNGIGKEIT UND
EIGNUNG FÜR EINEN BESTIMMTEN ZWECK WERDEN AUSGESCHLOSSEN.
IN KEINEM FALL IST DER COPYRIGHT-INHABER ODER MITARBEITER HAFTBAR FÜR DIREKTE, INDIREKTE,
ZUFÄLLIGE, BESONDERE, BEISPIELHAFTE ODER FOLGESCHÄDEN (EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT
AUF DIE BESCHAFFUNG VON WAREN ODER DIENSTLEISTUNGEN ERSETZEN; NUTZUNGS-, DATEN- ODER
GEWINNVERLUST; ODER GESCHÄFT UNTERBRECHUNG) JEGLICH VERURSACHT UND AUF JEDER HAFTUNGSTHEORIE,
OB IN VERTRAG, GEFÄHRLICHE HAFTUNG ODER unerlaubte Handlung (EINSCHLIESSLICH FAHRLÄSSIGKEIT
ODER ANDERWEITIG) DIE IN IRGENDEINER WEISE AUS DER VERWENDUNG DIESER SOFTWARE ENTSTEHEN,
AUCH WENN SIE DARAUF HINGEWIESEN WURDEN MÖGLICHKEIT SOLCHER SCHÄDEN.
ACHTUNG !!! PIN:5 auf GND legen um die I2C Schnittstelle zu aktivieren !!!
*/
#include <Arduino.h>
#include <SensirionI2CSen5x.h>
#include <Wire.h>
// Die verwendeten Befehle belegen bis zu 48 Bytes. Bei einigen Arduinos der Standardpuffer
// Der Platz ist nicht groß genug
#define MAXBUF_REQUIREMENT 48
#if (defined(I2C_BUFFER_LENGTH) && \
(I2C_BUFFER_LENGTH >= MAXBUF_REQUIREMENT)) || \
(defined(BUFFER_LENGTH) && BUFFER_LENGTH >= MAXBUF_REQUIREMENT)
#define USE_PRODUCT_INFO
#endif
SensirionI2CSen5x sen5x;
void printModuleVersions() {
uint16_t error;
char errorMessage[256];
unsigned char productName[32];
uint8_t productNameSize = 32;
error = sen5x.getProductName(productName, productNameSize);
if (error) {
Serial.print("Fehler65 beim Versuch, getProductName auszuführen(): ");
errorToString(error, errorMessage, 256);
Serial.println(errorMessage);
} else {
Serial.print("ProductName:");
Serial.println((char*)productName);
}
uint8_t firmwareMajor;
uint8_t firmwareMinor;
bool firmwareDebug;
uint8_t hardwareMajor;
uint8_t hardwareMinor;
uint8_t protocolMajor;
uint8_t protocolMinor;
error = sen5x.getVersion(firmwareMajor, firmwareMinor, firmwareDebug,
hardwareMajor, hardwareMinor, protocolMajor,
protocolMinor);
if (error) {
Serial.print("Fehler85 beim Versuch, getVersion auszuführen(): ");
errorToString(error, errorMessage, 256);
Serial.println(errorMessage);
} else {
Serial.print("Firmware: ");
Serial.print(firmwareMajor);
Serial.print(".");
Serial.print(firmwareMinor);
Serial.print(", ");
Serial.print("Hardware: ");
Serial.print(hardwareMajor);
Serial.print(".");
Serial.println(hardwareMinor);
}
}
void printSerialNumber() {
uint16_t error;
char errorMessage[256];
unsigned char serialNumber[32];
uint8_t serialNumberSize = 32;
error = sen5x.getSerialNumber(serialNumber, serialNumberSize);
if (error) {
Serial.print("Fehler110 beim Versuch, getSerialNumber auszuführen(): ");
errorToString(error, errorMessage, 256);
Serial.println(errorMessage);
} else {
Serial.print("SerialNumber:");
Serial.println((char*)serialNumber);
}
}
//##########################################################################
//###################### SETUP #############################################
//##########################################################################
void setup() {
Serial.begin(115200);
while (!Serial) {
delay(100);
}
Wire.begin();
sen5x.begin(Wire);
uint16_t error;
char errorMessage[256];
error = sen5x.deviceReset();
if (error) {
Serial.print("Fehler135 beim Versuch, deviceReset auszuführen(): ");
errorToString(error, errorMessage, 256);
Serial.println(errorMessage);
}
// Drucken Sie SEN55-Modulinformationen, wenn die i2c-Puffer groß genug sind
#ifdef USE_PRODUCT_INFO
printSerialNumber();
printModuleVersions();
#endif
// einen Temperatur-Offset in Grad Celsius einstellen
// Hinweis: Unterstützt von SEN54- und SEN55-Sensoren
// Standardmäßig werden Temperatur und Luftfeuchtigkeit vom Sensor ausgegeben
// werden für die Eigenerwärmung der Module kompensiert. Wenn das Modul ist
// In ein Gerät integriert, das möglicherweise eine Temperaturkompensation benötigt
// angepasst werden, um die Änderung der thermischen Kopplung zu berücksichtigen und
// Eigenerwärmung anderer Gerätekomponenten.
//
// Ein Leitfaden zur Erzielung optimaler Leistung, einschließlich Referenzen
// zu mechanischen Design-In-Beispielen finden Sie im App-Hinweis
// „SEN5x – Anleitung zur Temperaturkompensation“ unter www.sensirion.com.
// Weitere Informationen finden Sie in den Anwendungshinweisen
// über die verwendeten erweiterten Kompensationseinstellungen
// in `setTemperatureOffsetParameters`, `setWarmStartParameter` und
// `setRhtAccelerationMode`.
//
// TempOffset anpassen, um zusätzliche Temperaturunterschiede zu berücksichtigen
// Überschreitung der Eigenerwärmung des SEN-Moduls.
float tempOffset = 0.0;
error = sen5x.setTemperatureOffsetSimple(tempOffset);
if (error) {
Serial.print("Fehler169 beim Versuch, setTemperatureOffsetSimple auszuführen(): ");
errorToString(error, errorMessage, 256);
Serial.println(errorMessage);
} else {
Serial.print("Temperatur-Offset eingestellt auf ");
Serial.print(tempOffset);
Serial.println(" Grad. Celsius (nur SEN54/SEN55).");
}
// Start Measurement
error = sen5x.startMeasurement();
if (error) {
Serial.print("Fehler181 beim Versuch, startMeasurement auszuführen(): ");
errorToString(error, errorMessage, 256);
Serial.println(errorMessage);
}
}
//#############################################################################
//############################### LOOP ########################################
//#############################################################################
void loop() {
uint16_t error;
char errorMessage[256];
delay(5000);
// Read Measurement
float massConcentrationPm1p0;
float massConcentrationPm2p5;
float massConcentrationPm4p0;
float massConcentrationPm10p0;
float ambientHumidity;
float ambientTemperature;
float vocIndex;
float noxIndex;
error = sen5x.readMeasuredValues(
massConcentrationPm1p0, massConcentrationPm2p5, massConcentrationPm4p0,
massConcentrationPm10p0, ambientHumidity, ambientTemperature, vocIndex,
noxIndex);
if (error) {
Serial.print("Fehler211 beim Versuch, readMeasuredValues auszuführen(): ");
errorToString(error, errorMessage, 256);
Serial.println(errorMessage);
} else {
Serial.print("MC -> Pm1p0: ");
Serial.print(massConcentrationPm1p0);
Serial.print(" MC -> Pm2p5: ");
Serial.print(massConcentrationPm2p5);
Serial.print(" MC -> Pm4p0: ");
Serial.print(massConcentrationPm4p0);
Serial.print(" MC -> Pm10p0: ");
Serial.print(massConcentrationPm10p0);
Serial.print(" / Luftfeuchte: ");
if (isnan(ambientHumidity)) {
Serial.print("n/a");
} else {
Serial.print(ambientHumidity);
}
Serial.print(" Temp.: ");
if (isnan(ambientTemperature)) {
Serial.print("n/a");
} else {
Serial.print(ambientTemperature);
}
Serial.print(" Fluechtige-Organische-Verb.:");
if (isnan(vocIndex)) {
Serial.print("n/a");
} else {
Serial.print(vocIndex);
}
Serial.print("\t");
Serial.print("NoxIndex:");
if (isnan(noxIndex)) {
Serial.println("n/a");
} else {
Serial.println(noxIndex);
}
}
}
Code: Alles auswählen
```
MC -> Pm1p0: 2.80 MC -> Pm2p5: 3.30 MC -> Pm4p0: 3.60 MC -> Pm10p0: 3.80 / Luftfeuchte: 45.05 Temp.: 25.38 Fl??cht.Org.Verb.:155.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.70 MC -> Pm2p5: 3.20 MC -> Pm4p0: 3.60 MC -> Pm10p0: 3.70 / Luftfeuchte: 44.84 Temp.: 25.38 Fl??cht.Org.Verb.:152.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.60 MC -> Pm2p5: 3.10 MC -> Pm4p0: 3.50 MC -> Pm10p0: 3.60 / Luftfeuchte: 44.93 Temp.: 25.38 Fl??cht.Org.Verb.:151.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.70 MC -> Pm2p5: 3.30 MC -> Pm4p0: 3.60 MC -> Pm10p0: 3.80 / Luftfeuchte: 44.96 Temp.: 25.38 Fl??cht.Org.Verb.:150.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.70 MC -> Pm2p5: 3.30 MC -> Pm4p0: 3.60 MC -> Pm10p0: 3.80 / Luftfeuchte: 45.01 Temp.: 25.38 Fl??cht.Org.Verb.:150.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.80 MC -> Pm2p5: 3.30 MC -> Pm4p0: 3.70 MC -> Pm10p0: 3.80 / Luftfeuchte: 45.17 Temp.: 25.38 Fl??cht.Org.Verb.:152.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.80 MC -> Pm2p5: 3.40 MC -> Pm4p0: 3.70 MC -> Pm10p0: 3.90 / Luftfeuchte: 45.35 Temp.: 25.38 Fl??cht.Org.Verb.:156.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.80 MC -> Pm2p5: 3.30 MC -> Pm4p0: 3.70 MC -> Pm10p0: 3.80 / Luftfeuchte: 45.31 Temp.: 25.38 Fl??cht.Org.Verb.:157.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.90 MC -> Pm2p5: 3.40 MC -> Pm4p0: 3.80 MC -> Pm10p0: 4.00 / Luftfeuchte: 45.21 Temp.: 25.38 Fl??cht.Org.Verb.:156.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.80 MC -> Pm2p5: 3.30 MC -> Pm4p0: 3.60 MC -> Pm10p0: 3.80 / Luftfeuchte: 45.27 Temp.: 25.38 Fl??cht.Org.Verb.:154.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.50 MC -> Pm2p5: 3.00 MC -> Pm4p0: 3.30 MC -> Pm10p0: 3.50 / Luftfeuchte: 45.41 Temp.: 25.38 Fl??cht.Org.Verb.:155.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.40 MC -> Pm2p5: 2.90 MC -> Pm4p0: 3.10 MC -> Pm10p0: 3.30 / Luftfeuchte: 45.28 Temp.: 25.38 Fl??cht.Org.Verb.:154.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.40 MC -> Pm2p5: 2.90 MC -> Pm4p0: 3.20 MC -> Pm10p0: 3.30 / Luftfeuchte: 45.26 Temp.: 25.38 Fl??cht.Org.Verb.:153.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.50 MC -> Pm2p5: 2.90 MC -> Pm4p0: 3.20 MC -> Pm10p0: 3.40 / Luftfeuchte: 45.20 Temp.: 25.39 Fl??cht.Org.Verb.:152.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.50 MC -> Pm2p5: 2.90 MC -> Pm4p0: 3.20 MC -> Pm10p0: 3.40 / Luftfeuchte: 45.18 Temp.: 25.39 Fl??cht.Org.Verb.:150.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.40 MC -> Pm2p5: 2.90 MC -> Pm4p0: 3.20 MC -> Pm10p0: 3.30 / Luftfeuchte: 45.32 Temp.: 25.39 Fl??cht.Org.Verb.:151.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.50 MC -> Pm2p5: 3.00 MC -> Pm4p0: 3.30 MC -> Pm10p0: 3.40 / Luftfeuchte: 45.43 Temp.: 25.39 Fl??cht.Org.Verb.:154.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.60 MC -> Pm2p5: 3.10 MC -> Pm4p0: 3.40 MC -> Pm10p0: 3.60 / Luftfeuchte: 45.21 Temp.: 25.39 Fl??cht.Org.Verb.:153.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.60 MC -> Pm2p5: 3.10 MC -> Pm4p0: 3.40 MC -> Pm10p0: 3.60 / Luftfeuchte: 45.08 Temp.: 25.39 Fl??cht.Org.Verb.:150.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.50 MC -> Pm2p5: 3.00 MC -> Pm4p0: 3.30 MC -> Pm10p0: 3.50 / Luftfeuchte: 44.94 Temp.: 25.39 Fl??cht.Org.Verb.:145.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.50 MC -> Pm2p5: 3.00 MC -> Pm4p0: 3.30 MC -> Pm10p0: 3.50 / Luftfeuchte: 44.91 Temp.: 25.40 Fl??cht.Org.Verb.:143.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.70 MC -> Pm2p5: 3.20 MC -> Pm4p0: 3.60 MC -> Pm10p0: 3.70 / Luftfeuchte: 44.91 Temp.: 25.40 Fl??cht.Org.Verb.:141.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 3.00 MC -> Pm2p5: 3.50 MC -> Pm4p0: 3.90 MC -> Pm10p0: 4.10 / Luftfeuchte: 44.99 Temp.: 25.40 Fl??cht.Org.Verb.:141.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.90 MC -> Pm2p5: 3.40 MC -> Pm4p0: 3.80 MC -> Pm10p0: 3.90 / Luftfeuchte: 44.86 Temp.: 25.40 Fl??cht.Org.Verb.:139.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.70 MC -> Pm2p5: 3.20 MC -> Pm4p0: 3.60 MC -> Pm10p0: 3.70 / Luftfeuchte: 44.94 Temp.: 25.40 Fl??cht.Org.Verb.:139.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.70 MC -> Pm2p5: 3.20 MC -> Pm4p0: 3.50 MC -> Pm10p0: 3.70 / Luftfeuchte: 45.05 Temp.: 25.40 Fl??cht.Org.Verb.:140.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.70 MC -> Pm2p5: 3.20 MC -> Pm4p0: 3.50 MC -> Pm10p0: 3.70 / Luftfeuchte: 45.02 Temp.: 25.40 Fl??cht.Org.Verb.:141.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.70 MC -> Pm2p5: 3.30 MC -> Pm4p0: 3.60 MC -> Pm10p0: 3.70 / Luftfeuchte: 44.92 Temp.: 25.41 Fl??cht.Org.Verb.:141.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.80 MC -> Pm2p5: 3.40 MC -> Pm4p0: 3.70 MC -> Pm10p0: 3.90 / Luftfeuchte: 44.82 Temp.: 25.41 Fl??cht.Org.Verb.:140.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.90 MC -> Pm2p5: 3.50 MC -> Pm4p0: 3.80 MC -> Pm10p0: 4.00 / Luftfeuchte: 44.89 Temp.: 25.41 Fl??cht.Org.Verb.:138.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.90 MC -> Pm2p5: 3.40 MC -> Pm4p0: 3.80 MC -> Pm10p0: 3.90 / Luftfeuchte: 44.93 Temp.: 25.41 Fl??cht.Org.Verb.:138.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.80 MC -> Pm2p5: 3.30 MC -> Pm4p0: 3.70 MC -> Pm10p0: 3.80 / Luftfeuchte: 45.02 Temp.: 25.42 Fl??cht.Org.Verb.:138.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.80 MC -> Pm2p5: 3.30 MC -> Pm4p0: 3.60 MC -> Pm10p0: 3.70 / Luftfeuchte: 45.00 Temp.: 25.42 Fl??cht.Org.Verb.:138.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.70 MC -> Pm2p5: 3.10 MC -> Pm4p0: 3.40 MC -> Pm10p0: 3.60 / Luftfeuchte: 45.19 Temp.: 25.42 Fl??cht.Org.Verb.:140.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.60 MC -> Pm2p5: 3.00 MC -> Pm4p0: 3.30 MC -> Pm10p0: 3.50 / Luftfeuchte: 45.45 Temp.: 25.42 Fl??cht.Org.Verb.:144.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.60 MC -> Pm2p5: 3.00 MC -> Pm4p0: 3.30 MC -> Pm10p0: 3.40 / Luftfeuchte: 45.56 Temp.: 25.42 Fl??cht.Org.Verb.:148.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.50 MC -> Pm2p5: 2.90 MC -> Pm4p0: 3.20 MC -> Pm10p0: 3.30 / Luftfeuchte: 45.54 Temp.: 25.42 Fl??cht.Org.Verb.:151.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.40 MC -> Pm2p5: 2.80 MC -> Pm4p0: 3.00 MC -> Pm10p0: 3.10 / Luftfeuchte: 45.54 Temp.: 25.42 Fl??cht.Org.Verb.:153.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.40 MC -> Pm2p5: 2.70 MC -> Pm4p0: 3.00 MC -> Pm10p0: 3.10 / Luftfeuchte: 45.52 Temp.: 25.42 Fl??cht.Org.Verb.:154.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.50 MC -> Pm2p5: 2.90 MC -> Pm4p0: 3.10 MC -> Pm10p0: 3.20 / Luftfeuchte: 45.48 Temp.: 25.43 Fl??cht.Org.Verb.:154.00<9>NoxIndex:n/a<\r><\n>
```
Code: Alles auswählen
/*
I2C-Generator: 0.3.0
Yaml Version: 2.1.3
Template Version: 0.7.0-112-g190ecaa
Copyright (c) 2021, Sensirion AG
All rights reserved.
Weiterverbreitung und Nutzung in Quell- und Binärform, mit oder ohne
Änderungen sind zulässig, sofern folgende Bedingungen erfüllt sind:
* * Bei der Weiterverbreitung des Quellcodes muss der oben stehende Copyright-Hinweis enthalten
sein Liste der Bedingungen und den folgenden Haftungsausschluss.
* * Weiterverbreitungen in binärer Form müssen den oben genannten Urheberrechtshinweis
wiedergeben. diese Liste der Bedingungen und den folgenden Haftungsausschluss in der
Dokumentation und/oder andere Materialien, die mit der Verteilung bereitgestellt werden.
* * Weder der Name der Sensirion AG noch deren Namen
Mitwirkende können dazu verwendet werden, daraus abgeleitete Produkte zu unterstützen oder
zu bewerben diese Software ohne vorherige ausdrückliche schriftliche Genehmigung.
DIESE SOFTWARE WIRD VON DEN COPYRIGHT-INHABERN UND MITARBEITERN „WIE BESEHEN“ ZUR VERFÜGUNG
GESTELLT.UND ALLE AUSDRÜCKLICHEN ODER STILLSCHWEIGENDEN GEWÄHRLEISTUNGEN, EINSCHLIESSLICH,
ABER NICHT BESCHRÄNKT AUF DIE STILLSCHWEIGENDE GEWÄHRLEISTUNGEN DER MARKTGÄNGIGKEIT UND
EIGNUNG FÜR EINEN BESTIMMTEN ZWECK WERDEN AUSGESCHLOSSEN.
IN KEINEM FALL IST DER COPYRIGHT-INHABER ODER MITARBEITER HAFTBAR FÜR DIREKTE, INDIREKTE,
ZUFÄLLIGE, BESONDERE, BEISPIELHAFTE ODER FOLGESCHÄDEN (EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT
AUF DIE BESCHAFFUNG VON WAREN ODER DIENSTLEISTUNGEN ERSETZEN; NUTZUNGS-, DATEN- ODER
GEWINNVERLUST; ODER GESCHÄFT UNTERBRECHUNG) JEGLICH VERURSACHT UND AUF JEDER HAFTUNGSTHEORIE,
OB IN VERTRAG, GEFÄHRLICHE HAFTUNG ODER unerlaubte Handlung (EINSCHLIESSLICH FAHRLÄSSIGKEIT
ODER ANDERWEITIG) DIE IN IRGENDEINER WEISE AUS DER VERWENDUNG DIESER SOFTWARE ENTSTEHEN,
AUCH WENN SIE DARAUF HINGEWIESEN WURDEN MÖGLICHKEIT SOLCHER SCHÄDEN.
ACHTUNG !!! PIN:5 auf GND legen um die I2C Schnittstelle zu aktivieren !!!
*/
#include <Arduino.h>
#include <SensirionI2CSen5x.h>
#include <Wire.h>
// LCD Display I2C 4 Zeilen je 20 Zeichen einrichten
#include <LiquidCrystal_I2C.h> // LCD Display
// Displayadresse ist 0x27 oder 0x3F
LiquidCrystal_I2C lcd(0x27, 20, 4);
// Die verwendeten Befehle belegen bis zu 48 Bytes. Bei einigen Arduinos der Standardpuffer
// Der Platz ist nicht groß genug
#define MAXBUF_REQUIREMENT 48
#if (defined(I2C_BUFFER_LENGTH) && \
(I2C_BUFFER_LENGTH >= MAXBUF_REQUIREMENT)) || \
(defined(BUFFER_LENGTH) && BUFFER_LENGTH >= MAXBUF_REQUIREMENT)
#define USE_PRODUCT_INFO
#endif
SensirionI2CSen5x sen5x;
void printModuleVersions() {
uint16_t error;
char errorMessage[256];
unsigned char productName[32];
uint8_t productNameSize = 32;
error = sen5x.getProductName(productName, productNameSize);
if (error) {
Serial.print("Fehler65 beim Versuch, getProductName auszuführen(): ");
errorToString(error, errorMessage, 256);
Serial.println(errorMessage);
} else {
Serial.print("ProductName:");
Serial.println((char*)productName);
}
uint8_t firmwareMajor;
uint8_t firmwareMinor;
bool firmwareDebug;
uint8_t hardwareMajor;
uint8_t hardwareMinor;
uint8_t protocolMajor;
uint8_t protocolMinor;
error = sen5x.getVersion(firmwareMajor, firmwareMinor, firmwareDebug,
hardwareMajor, hardwareMinor, protocolMajor,
protocolMinor);
if (error) {
Serial.print("Fehler85 beim Versuch, getVersion auszuführen(): ");
errorToString(error, errorMessage, 256);
Serial.println(errorMessage);
} else {
Serial.print("Firmware: ");
Serial.print(firmwareMajor);
Serial.print(".");
Serial.print(firmwareMinor);
Serial.print(", ");
Serial.print("Hardware: ");
Serial.print(hardwareMajor);
Serial.print(".");
Serial.println(hardwareMinor);
}
}
void printSerialNumber() {
uint16_t error;
char errorMessage[256];
unsigned char serialNumber[32];
uint8_t serialNumberSize = 32;
error = sen5x.getSerialNumber(serialNumber, serialNumberSize);
if (error) {
Serial.print("Fehler110 beim Versuch, getSerialNumber auszuführen(): ");
errorToString(error, errorMessage, 256);
Serial.println(errorMessage);
} else {
Serial.print("SerialNumber:");
Serial.println((char*)serialNumber);
}
}
//##########################################################################
//###################### SETUP #############################################
//##########################################################################
void setup() {
Serial.begin(115200);
while (!Serial) {
delay(100);
}
//-----------LCD Display Start----------------------------------------
lcd.begin();
lcd.backlight();
lcd.clear();
//-----------LCD Standart Text Display--------------------------------
lcd.setCursor (0, 0); // Zeile 1
lcd.print (F("PM1 PM2"));
lcd.setCursor (0, 1); // Zeile 2
lcd.print (F("PM4 PM10"));
lcd.setCursor (0, 2); // Zeile 3
lcd.print (F("Gas mg/m3"));
lcd.setCursor (0, 3); // Zeile 4
lcd.print (F("Tem Hy"));
//----------------------------------------------------------------------
Wire.begin();
sen5x.begin(Wire);
uint16_t error;
char errorMessage[256];
error = sen5x.deviceReset();
if (error) {
Serial.print("Fehler135 beim Versuch, deviceReset auszuführen(): ");
errorToString(error, errorMessage, 256);
Serial.println(errorMessage);
}
// Drucken Sie SEN55-Modulinformationen, wenn die i2c-Puffer groß genug sind
#ifdef USE_PRODUCT_INFO
printSerialNumber();
printModuleVersions();
#endif
// einen Temperatur-Offset in Grad Celsius einstellen
// Hinweis: Unterstützt von SEN54- und SEN55-Sensoren
// Standardmäßig werden Temperatur und Luftfeuchtigkeit vom Sensor ausgegeben
// werden für die Eigenerwärmung der Module kompensiert. Wenn das Modul ist
// In ein Gerät integriert, das möglicherweise eine Temperaturkompensation benötigt
// angepasst werden, um die Änderung der thermischen Kopplung zu berücksichtigen und
// Eigenerwärmung anderer Gerätekomponenten.
//
// Ein Leitfaden zur Erzielung optimaler Leistung, einschließlich Referenzen
// zu mechanischen Design-In-Beispielen finden Sie im App-Hinweis
// „SEN5x – Anleitung zur Temperaturkompensation“ unter www.sensirion.com.
// Weitere Informationen finden Sie in den Anwendungshinweisen
// über die verwendeten erweiterten Kompensationseinstellungen
// in `setTemperatureOffsetParameters`, `setWarmStartParameter` und
// `setRhtAccelerationMode`.
//
// TempOffset anpassen, um zusätzliche Temperaturunterschiede zu berücksichtigen
// Überschreitung der Eigenerwärmung des SEN-Moduls.
float tempOffset = 0.0;
error = sen5x.setTemperatureOffsetSimple(tempOffset);
if (error) {
Serial.print("Fehler169 beim Versuch, setTemperatureOffsetSimple auszuführen(): ");
errorToString(error, errorMessage, 256);
Serial.println(errorMessage);
} else {
Serial.print("Temperatur-Offset eingestellt auf ");
Serial.print(tempOffset);
Serial.println(" Grad. Celsius (nur SEN54/SEN55).");
}
// Start Measurement
error = sen5x.startMeasurement();
if (error) {
Serial.print("Fehler181 beim Versuch, startMeasurement auszuführen(): ");
errorToString(error, errorMessage, 256);
Serial.println(errorMessage);
}
}
//#############################################################################
//############################### LOOP ########################################
//#############################################################################
void loop() {
uint16_t error;
char errorMessage[256];
delay(5000);
// Read Measurement
float massConcentrationPm1p0;
float massConcentrationPm2p5;
float massConcentrationPm4p0;
float massConcentrationPm10p0;
float ambientHumidity;
float ambientTemperature;
float vocIndex;
float noxIndex;
error = sen5x.readMeasuredValues(
massConcentrationPm1p0, massConcentrationPm2p5, massConcentrationPm4p0,
massConcentrationPm10p0, ambientHumidity, ambientTemperature, vocIndex,
noxIndex);
if (error) {
Serial.print("Fehler211 beim Versuch, readMeasuredValues auszuführen(): ");
errorToString(error, errorMessage, 256);
Serial.println(errorMessage);
} else {
//Serial.print("MC -> Pm1p0: ");
//Serial.print(massConcentrationPm1p0);
lcd.setCursor (4, 0); // Zeile 1
lcd.print (" ");
lcd.setCursor (4, 0); // Zeile 1
lcd.print (massConcentrationPm1p0);
//--------------------------------------------
//Serial.print(" MC -> Pm2p5: ");
//Serial.print(massConcentrationPm2p5);
lcd.setCursor (15, 0); // Zeile 1
lcd.print (" ");
lcd.setCursor (15, 0); // Zeile 1
lcd.print (massConcentrationPm2p5);
//--------------------------------------------
//Serial.print(" MC -> Pm4p0: ");
//Serial.print(massConcentrationPm4p0);
lcd.setCursor (4, 1); // Zeile 2
lcd.print (" ");
lcd.setCursor (4, 1); // Zeile 2
lcd.print (massConcentrationPm4p0);
//--------------------------------------------
//Serial.print(" MC -> Pm10p0: ");
//Serial.print(massConcentrationPm10p0);
lcd.setCursor (15, 1); // Zeile 2
lcd.print (" ");
lcd.setCursor (15, 1); // Zeile 2
lcd.print (massConcentrationPm10p0);
//--------------------------------------------
//Serial.print(" / Luftfeuchte: ");
if (isnan(ambientHumidity)) {
//Serial.print("n/a");
} else {
//Serial.print(ambientHumidity);
lcd.setCursor (14, 3); // Zeile 4
lcd.print (" ");
lcd.setCursor (14, 3); // Zeile 4
lcd.print (ambientHumidity);
}
//Serial.print(" Temp.: ");
if (isnan(ambientTemperature)) {
//Serial.print("n/a");
} else {
//Serial.print(ambientTemperature);
lcd.setCursor (4, 3); // Zeile 4
lcd.print (" ");
lcd.setCursor (4, 3); // Zeile 4
lcd.print (ambientTemperature);
}
//Serial.print(" / Fluechtige-Organische-Verb.:");
if (isnan(vocIndex)) {
//Serial.print("n/a");
} else {
//Serial.print(vocIndex);
lcd.setCursor (4, 2); // Zeile 3
lcd.print (" ");
lcd.setCursor (4, 2); // Zeile 3
lcd.print (vocIndex / 100);
}
//Serial.print(" NoxIndex:");
if (isnan(noxIndex)) {
//Serial.println("n/a");
} else {
//Serial.println(noxIndex);
}
}
}
Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste