2025-05-1600
This commit is contained in:
101
include/CO2.h
Normal file
101
include/CO2.h
Normal file
@ -0,0 +1,101 @@
|
||||
#include <Arduino.h>
|
||||
|
||||
#include <HardwareSerial.h>
|
||||
|
||||
HardwareSerial Co2Port(1); // use UART2
|
||||
|
||||
// co2 Grenzwerte
|
||||
/* #define CO2_WARN_1 650
|
||||
#define CO2_WARN_2 950
|
||||
#define CO2_WARN_3 1250
|
||||
#define CO2_WARN_4 1500
|
||||
#define CO2_CRITICAL_PPM 1850 */
|
||||
/* #define CO2_WARN_1 600
|
||||
#define CO2_WARN_2 800
|
||||
#define CO2_WARN_3 1000
|
||||
#define CO2_WARN_4 1500
|
||||
#define CO2_WARN_5 2000 */
|
||||
#define CO2_WARN_1 800
|
||||
#define CO2_WARN_2 1000
|
||||
#define CO2_WARN_3 1400
|
||||
#define CO2_WARN_4 1500
|
||||
#define CO2_WARN_5 2000
|
||||
#define CO2_CRITICAL_PPM 1850
|
||||
|
||||
int CO2Wert = -99;
|
||||
char antwort[100] = {0xFF};
|
||||
int range =2000;
|
||||
bool readCo2Flag;
|
||||
|
||||
char getCheckSum(char *packet)
|
||||
{
|
||||
char i, checksum;
|
||||
for (i = 1; i < 8; i++)
|
||||
{
|
||||
checksum += packet[i];
|
||||
}
|
||||
checksum = 0xFF - checksum;
|
||||
return checksum +1;
|
||||
}
|
||||
|
||||
int readCO2() {
|
||||
char cmd[9] = {0xFF, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79};
|
||||
Co2Port.write(cmd,9);
|
||||
if(Co2Port.available()) {
|
||||
Co2Port.readBytes(antwort, 9);
|
||||
}
|
||||
#ifdef DebugCO2
|
||||
for (int a=0; a<9; a++){
|
||||
Serial.printf(" BufferRead [%d] = 0x%02X \n", a, antwort[a]);
|
||||
}
|
||||
Serial.println();
|
||||
#endif
|
||||
if (antwort[0] != 0xFF) return -1;
|
||||
if (antwort[1] != 0x86) return -2;
|
||||
int antwortHigh = (int) antwort[2]; // CO2 High Byte
|
||||
int antwortLow = (int) antwort[3]; // CO2 Low Byte
|
||||
int ppm = (256 * antwortHigh) + antwortLow;
|
||||
Co2Port.flush();
|
||||
return ppm;
|
||||
}
|
||||
|
||||
void calibrationCo2() {
|
||||
char cmd[9] = {0xFF, 0x01, 0x79, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00};
|
||||
cmd[8] = getCheckSum(cmd);
|
||||
Serial.printf("Checksumme = 0x%02X\n", cmd[8]);
|
||||
Co2Port.write(cmd,9);
|
||||
#ifdef DebugCO2
|
||||
for (int a=0; a<9; a++){
|
||||
Serial.printf(" BufferCalibration [%d] = 0x%02X \n", a, cmd[a]);
|
||||
}
|
||||
Serial.println();
|
||||
#endif
|
||||
}
|
||||
|
||||
void setRange()
|
||||
{
|
||||
char cmd[9] = {0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
||||
|
||||
cmd[6] = range >> 8;
|
||||
cmd[7] = range & 0xFF;
|
||||
cmd[8] = getCheckSum(cmd);
|
||||
Serial.printf("Checksumme = 0x%02X\n", cmd[8]);
|
||||
Co2Port.write(cmd,9);
|
||||
#ifdef DebugCO2
|
||||
for (int a=0; a<9; a++){
|
||||
Serial.printf(" BufferRange [%d] = 0x%02X \n", a, cmd[a]);
|
||||
}
|
||||
Serial.println();
|
||||
#endif
|
||||
}
|
||||
|
||||
void beginC02()
|
||||
{
|
||||
Co2Port.begin(9600, SERIAL_8N1, 32, 33);
|
||||
readCo2Flag = false;
|
||||
delay(100);
|
||||
calibrationCo2();
|
||||
delay(100);
|
||||
setRange();
|
||||
delay(100);
|
||||
}
|
39
include/README
Normal file
39
include/README
Normal file
@ -0,0 +1,39 @@
|
||||
|
||||
This directory is intended for project header files.
|
||||
|
||||
A header file is a file containing C declarations and macro definitions
|
||||
to be shared between several project source files. You request the use of a
|
||||
header file in your project source file (C, C++, etc) located in `src` folder
|
||||
by including it, with the C preprocessing directive `#include'.
|
||||
|
||||
```src/main.c
|
||||
|
||||
#include "header.h"
|
||||
|
||||
int main (void)
|
||||
{
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
Including a header file produces the same results as copying the header file
|
||||
into each source file that needs it. Such copying would be time-consuming
|
||||
and error-prone. With a header file, the related declarations appear
|
||||
in only one place. If they need to be changed, they can be changed in one
|
||||
place, and programs that include the header file will automatically use the
|
||||
new version when next recompiled. The header file eliminates the labor of
|
||||
finding and changing all the copies as well as the risk that a failure to
|
||||
find one copy will result in inconsistencies within a program.
|
||||
|
||||
In C, the usual convention is to give header files names that end with `.h'.
|
||||
It is most portable to use only letters, digits, dashes, and underscores in
|
||||
header file names, and at most one dot.
|
||||
|
||||
Read more about using header files in official GCC documentation:
|
||||
|
||||
* Include Syntax
|
||||
* Include Operation
|
||||
* Once-Only Headers
|
||||
* Computed Includes
|
||||
|
||||
https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html
|
32
include/mess_HTU21D.h
Normal file
32
include/mess_HTU21D.h
Normal file
@ -0,0 +1,32 @@
|
||||
#include "Adafruit_HTU21DF.h"
|
||||
|
||||
Adafruit_HTU21DF htu = Adafruit_HTU21DF();
|
||||
|
||||
struct {
|
||||
char temperature[15] = {0};
|
||||
char humity[15] = {0};
|
||||
} htuData;
|
||||
|
||||
void init_HTU21(){
|
||||
if (!htu.begin()) {
|
||||
Serial.println("Couldn't find sensor HUT21D!");
|
||||
while (1);
|
||||
}
|
||||
Serial.println("HUT21D gefunden");
|
||||
}
|
||||
|
||||
void read_HTU21D() {
|
||||
float t = htu.readTemperature();
|
||||
dtostrf(t,10,4,htuData.temperature);
|
||||
float h = htu.readHumidity();
|
||||
dtostrf(h,8,2,htuData.humity);
|
||||
}
|
||||
|
||||
void M2M_HTU21D(long deviceId = 4711) {
|
||||
char topic[100];
|
||||
sprintf(topic, "%s%ld%s", "hjk/devices/", deviceId, "/telemetry/temperature_Htu_21" );
|
||||
client.publish(topic, htuData.temperature, true);
|
||||
sprintf(topic, "%s%ld%s", "hjk/devices/", deviceId, "/telemetry/humity" );
|
||||
client.publish(topic, htuData.humity, true);
|
||||
Serial.printf("HTU21:\t\t %s °C\n", htuData.temperature);
|
||||
Serial.printf("HTU21:\t\t %s %% \n", htuData.humity);
|
Reference in New Issue
Block a user