config.public.h 6.68 KB
Newer Older
1
2
3
4
#ifndef CONFIG_H_INCLUDED
#  define CONFIG_H_INCLUDED

// This file is a config template, and can be copied to config.h. Please don't save any important password in this template.
5
6
7
8
9
10

/**
 * SERVICES
 */

// Comment or remove those lines if you want to disable the corresponding services
Eric Duminil's avatar
Eric Duminil committed
11
12
13
14
//#  define AMPEL_WIFI    // Should ESP connect to WiFi? It allows the Ampel to get time from an NTP server.
//#  define AMPEL_HTTP    // Should HTTP web server be started? (AMPEL_WIFI should be enabled too)
//#  define AMPEL_MQTT    // Should data be sent over MQTT? (AMPEL_WIFI should be enabled too)
//#  define AMPEL_CSV     // Should data be logged as CSV, on the ESP flash memory?
15
// #  define AMPEL_LORAWAN // Should data be sent over LoRaWAN? (Requires ESP32 + LoRa modem, and "MCCI LoRaWAN LMIC library")
16
17
18
19
20

/**
 * WIFI
 */

21
#  define WIFI_SSID     "MY_SSID"
22
#  define WIFI_PASSWORD "P4SSW0RD"
Eric Duminil's avatar
Eric Duminil committed
23
#  define WIFI_TIMEOUT  30 // [s]
24
25
26
27
28
29
30
31
32
33
34
35

/**
 * Sensor
 */

// How often should measurement be performed, and displayed?
//NOTE: SCD30 timer does not seem to be very precise. Variations may occur.
#  define MEASUREMENT_TIMESTEP 60 // [s] Value between 2 and 1800 (range for SCD30 sensor)

// How often should measurements be appended to CSV ?
// Probably a good idea to use a multiple of MEASUREMENT_TIMESTEP, so that averages can be calculated
// Set to 0 if you want to send values after each measurement
36
// WARNING: Writing too often might damage the ESP memory
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#  define CSV_INTERVAL 300 // [s]

// Residual heat from CO2 sensor seems to be high enough to change the temperature reading. How much should it be offset?
// NOTE: Sign isn't relevant. The returned temperature will always be shifted down.
#  define TEMPERATURE_OFFSET -3 // [K]

// Altitude above sea level
// Used for CO2 calibration
// here: Stuttgart, Schellingstr. 24. (Source: Google Earth)
#  define ALTITUDE_ABOVE_SEA_LEVEL 260 // [m]

// The reference CO2 concentration has to be within the range 400 ppm ≤ cref(CO2) ≤ 2000 ppm.
// Used for CO2 calibration
// here : measured concentration in Stuttgart
#  define ATMOSPHERIC_CO2_CONCENTRATION 425 // [ppm]

// Should the sensor try to calibrate itself?
// Sensirion recommends 7 days of continuous readings with at least 1 hour a day of 'fresh air' for self-calibration to complete.
#  define AUTO_CALIBRATE_SENSOR true // [true / false]

/**
 * LEDs
 */

// LED brightness, which can vary between min and max brightness ("LED breathing")
Eric Duminil's avatar
Eric Duminil committed
62
// MAX_BRIGHTNESS must be defined, and should be between 0 and 255.
63
#  define MAX_BRIGHTNESS 255
Eric Duminil's avatar
Eric Duminil committed
64
65
// MIN_BRIGHTNESS, if defined, should be between 0 and MAX_BRIGHTNESS - 1
// If MIN_BRIGHTNESS is not set, or if it is set to MAX_BRIGHTNESS, breathing is disabled.
66
67
68
69
70
71
72
73
74
75
76
77
#  define MIN_BRIGHTNESS 60

/**
 * WEB SERVER
 * available at http://local_ip, with user HTTP_USER and password HTTP_PASSWORD
 */

// Define empty strings in order to disable authentication, or remove the constants altogether.
#  define HTTP_USER "co2ampel"
#  define HTTP_PASSWORD "my_password"

/**
78
 * MQTT
79
80
81
 */

/*
82
 * If AMPEL_MQTT is enabled, co2ampel will publish data every MQTT_SENDING_INTERVAL seconds.
83
84
85
 * An MQTT subscriber can then get the data from the corresponding broker, either encrypted or unencrypted:
 *
 *  ❯ mosquitto_sub -h 'test.mosquitto.org' -p 8883 -t 'CO2sensors/#' --cafile mosquitto.org.crt -v
86
87
 *  CO2sensors/ESPd03cc5 {"time":"2020-12-13 13:14:37+01", "co2":571, "temp":18.9, "rh":50.9}
 *  CO2sensors/ESPd03cc5 {"time":"2020-12-13 13:14:48+01", "co2":573, "temp":18.9, "rh":50.2}
88
89
90
 *  ...
 *
 *  ❯ mosquitto_sub -h 'test.mosquitto.org' -t 'CO2sensors/#' -v
91
92
 *  CO2sensors/ESPd03cc5 {"time":"2020-12-13 13:15:09+01", "co2":568, "temp":18.9, "rh":50.1}
 *  CO2sensors/ESPd03cc5 {"time":"2020-12-13 13:15:20+01", "co2":572, "temp":18.9, "rh":50.3}
93
94
95
96
97
98
99
100
101
102
103
 *  ...
 */

/*
 * Allow sensor to be configured over MQTT? Very useful for debugging. For example:
 *   mosquitto_pub -h 'test.mosquitto.org' -t 'CO2sensors/ESPe08dc9/control' -m 'timer 30'
 *   mosquitto_pub -h 'test.mosquitto.org' -t 'CO2sensors/ESPe08dc9/control' -m 'calibrate'
 *   mosquitto_pub -h 'test.mosquitto.org' -t 'CO2sensors/ESPe08dc9/control' -m 'reset'
 */
#  define ALLOW_MQTT_COMMANDS false

104
105
106
107
108
// How often measurements should be sent to MQTT server?
// Probably a good idea to use a multiple of MEASUREMENT_TIMESTEP, so that averages can be calculated
// Set to 0 if you want to send values after each measurement
// #  define MQTT_SENDING_INTERVAL MEASUREMENT_TIMESTEP * 5 // [s]
#  define MQTT_SENDING_INTERVAL 60 // [s]
109
110
111
112
113
#  define MQTT_SERVER "test.mosquitto.org"  // MQTT server URL or IP address
#  define MQTT_PORT 8883
#  define MQTT_USER ""
#  define MQTT_PASSWORD ""

114
115
116
117
/**
 * LoRaWAN
 */

Eric Duminil's avatar
Eric Duminil committed
118
119
// 1) Requires "MCCI LoRaWAN LMIC library", which will be automatically used with PlatformIO but should be added in "Arduino IDE".
// 2) Region and transceiver type should be specified in:
Eric Duminil's avatar
Eric Duminil committed
120
121
//     * Arduino/libraries/MCCI_LoRaWAN_LMIC_library/project_config/lmic_project_config.h for Arduino IDE
//     * platformio.ini for PlatformIO
Eric Duminil's avatar
Eric Duminil committed
122
123
124
125
126
//    See https://github.com/mcci-catena/arduino-lmic#configuration for more information
// 3) It has been tested with "TTGO ESP32 SX1276 LoRa 868" and will only work with an ESP32 + LoRa modem
// 4) In order to use LoRaWAN, a gateway should be close to the co2ampel, and an account, an application and a device should be registered,
//      e.g. on https://www.thethingsnetwork.org/docs/applications/
// 5) The corresponding keys should be defined in LORAWAN_DEVICE_EUI, LORAWAN_APPLICATION_EUI and LORAWAN_APPLICATION_KEY
127
// How often should measurements be sent over LoRaWAN?
Eric Duminil's avatar
Notes    
Eric Duminil committed
128
#  define LORAWAN_SENDING_INTERVAL 300 // [s] This value should not be too low. See https://www.thethingsnetwork.org/docs/lorawan/duty-cycle.html#maximum-duty-cycle
Eric Duminil's avatar
Eric Duminil committed
129
130

// WARNING: If AMPEL_LORAWAN is enabled, you need to modify the 3 following constants!
131
132
133
134
135
136
137
138
139
140
141
// This EUI must be in little-endian format, so least-significant-byte first.
// When copying an EUI from ttnctl output, this means to reverse the bytes.
#  define LORAWAN_DEVICE_EUI      {0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11}
// This should also be in little endian format, see above.
// For TheThingsNetwork issued EUIs the last bytes should be 0xD5, 0xB3, 0x70.
#  define LORAWAN_APPLICATION_EUI {0x00, 0x00, 0x00, 0x00, 0x00, 0xD5, 0xB3, 0x70}
// This key should be in big endian format (or, since it is not really a
// number but a block of memory, endianness does not really apply). In
// practice, a key taken from ttnctl can be copied as-is.
#  define LORAWAN_APPLICATION_KEY {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }

142
143
144
145
146
147
148
149
150
151
152
153
154
/**
 * NTP
 */

#  define NTP_SERVER "pool.ntp.org"
#  define UTC_OFFSET_IN_SECONDS 3600 // [s] 3600 for UTC+1

/**
 * Others
 */
#  define BAUDS 115200 // Transmission rate

#endif