Thomas Buck 1 год назад
Родитель
Сommit
26ce959c57
10 измененных файлов: 573 добавлений и 5 удалений
  1. 386
    0
      include/User_Setup.h
  2. 1
    1
      include/config.h
  3. 4
    0
      include/mqtt.h
  4. 20
    0
      include/ui.h
  5. 28
    0
      platformio.ini
  6. 1
    1
      src/SimpleInflux.cpp
  7. 15
    2
      src/main.cpp
  8. 10
    0
      src/mqtt.cpp
  9. 3
    1
      src/sensors.cpp
  10. 105
    0
      src/ui.cpp

+ 386
- 0
include/User_Setup.h Просмотреть файл

@@ -0,0 +1,386 @@
1
+//                            USER DEFINED SETTINGS
2
+//   Set driver type, fonts to be loaded, pins used and SPI control method etc
3
+//
4
+//   See the User_Setup_Select.h file if you wish to be able to define multiple
5
+//   setups and then easily select which setup file is used by the compiler.
6
+//
7
+//   If this file is edited correctly then all the library example sketches should
8
+//   run without the need to make any more changes for a particular hardware setup!
9
+//   Note that some sketches are designed for a particular TFT pixel width/height
10
+
11
+// User defined information reported by "Read_User_Setup" test & diagnostics example
12
+#define USER_SETUP_INFO "User_Setup"
13
+
14
+// Define to disable all #warnings in library (can be put in User_Setup_Select.h)
15
+//#define DISABLE_ALL_LIBRARY_WARNINGS
16
+
17
+// ##################################################################################
18
+//
19
+// Section 1. Call up the right driver file and any options for it
20
+//
21
+// ##################################################################################
22
+
23
+// Define STM32 to invoke optimised processor support (only for STM32)
24
+//#define STM32
25
+
26
+// Defining the STM32 board allows the library to optimise the performance
27
+// for UNO compatible "MCUfriend" style shields
28
+//#define NUCLEO_64_TFT
29
+//#define NUCLEO_144_TFT
30
+
31
+// STM32 8 bit parallel only:
32
+// If STN32 Port A or B pins 0-7 are used for 8 bit parallel data bus bits 0-7
33
+// then this will improve rendering performance by a factor of ~8x
34
+//#define STM_PORTA_DATA_BUS
35
+//#define STM_PORTB_DATA_BUS
36
+
37
+// Tell the library to use parallel mode (otherwise SPI is assumed)
38
+//#define TFT_PARALLEL_8_BIT
39
+//#defined TFT_PARALLEL_16_BIT // **** 16 bit parallel ONLY for RP2040 processor ****
40
+
41
+// Display type -  only define if RPi display
42
+//#define RPI_DISPLAY_TYPE // 20MHz maximum SPI
43
+
44
+// Only define one driver, the other ones must be commented out
45
+//#define ILI9341_DRIVER       // Generic driver for common displays
46
+#define ILI9341_2_DRIVER     // Alternative ILI9341 driver, see https://github.com/Bodmer/TFT_eSPI/issues/1172
47
+//#define ST7735_DRIVER      // Define additional parameters below for this display
48
+//#define ILI9163_DRIVER     // Define additional parameters below for this display
49
+//#define S6D02A1_DRIVER
50
+//#define RPI_ILI9486_DRIVER // 20MHz maximum SPI
51
+//#define HX8357D_DRIVER
52
+//#define ILI9481_DRIVER
53
+//#define ILI9486_DRIVER
54
+//#define ILI9488_DRIVER     // WARNING: Do not connect ILI9488 display SDO to MISO if other devices share the SPI bus (TFT SDO does NOT tristate when CS is high)
55
+//#define ST7789_DRIVER      // Full configuration option, define additional parameters below for this display
56
+//#define ST7789_2_DRIVER    // Minimal configuration option, define additional parameters below for this display
57
+//#define R61581_DRIVER
58
+//#define RM68140_DRIVER
59
+//#define ST7796_DRIVER
60
+//#define SSD1351_DRIVER
61
+//#define SSD1963_480_DRIVER
62
+//#define SSD1963_800_DRIVER
63
+//#define SSD1963_800ALT_DRIVER
64
+//#define ILI9225_DRIVER
65
+//#define GC9A01_DRIVER
66
+
67
+// Some displays support SPI reads via the MISO pin, other displays have a single
68
+// bi-directional SDA pin and the library will try to read this via the MOSI line.
69
+// To use the SDA line for reading data from the TFT uncomment the following line:
70
+
71
+// #define TFT_SDA_READ      // This option is for ESP32 ONLY, tested with ST7789 and GC9A01 display only
72
+
73
+// For ST7735, ST7789 and ILI9341 ONLY, define the colour order IF the blue and red are swapped on your display
74
+// Try ONE option at a time to find the correct colour order for your display
75
+
76
+//  #define TFT_RGB_ORDER TFT_RGB  // Colour order Red-Green-Blue
77
+//  #define TFT_RGB_ORDER TFT_BGR  // Colour order Blue-Green-Red
78
+
79
+// For M5Stack ESP32 module with integrated ILI9341 display ONLY, remove // in line below
80
+
81
+// #define M5STACK
82
+
83
+// For ST7789, ST7735, ILI9163 and GC9A01 ONLY, define the pixel width and height in portrait orientation
84
+// #define TFT_WIDTH  80
85
+// #define TFT_WIDTH  128
86
+// #define TFT_WIDTH  172 // ST7789 172 x 320
87
+#define TFT_WIDTH  240 // ST7789 240 x 240 and 240 x 320
88
+// #define TFT_HEIGHT 160
89
+// #define TFT_HEIGHT 128
90
+// #define TFT_HEIGHT 240 // ST7789 240 x 240
91
+#define TFT_HEIGHT 320 // ST7789 240 x 320
92
+// #define TFT_HEIGHT 240 // GC9A01 240 x 240
93
+
94
+#define LCD_WIDTH TFT_HEIGHT
95
+#define LCD_HEIGHT TFT_WIDTH
96
+
97
+// For ST7735 ONLY, define the type of display, originally this was based on the
98
+// colour of the tab on the screen protector film but this is not always true, so try
99
+// out the different options below if the screen does not display graphics correctly,
100
+// e.g. colours wrong, mirror images, or stray pixels at the edges.
101
+// Comment out ALL BUT ONE of these options for a ST7735 display driver, save this
102
+// this User_Setup file, then rebuild and upload the sketch to the board again:
103
+
104
+// #define ST7735_INITB
105
+// #define ST7735_GREENTAB
106
+// #define ST7735_GREENTAB2
107
+// #define ST7735_GREENTAB3
108
+// #define ST7735_GREENTAB128    // For 128 x 128 display
109
+// #define ST7735_GREENTAB160x80 // For 160 x 80 display (BGR, inverted, 26 offset)
110
+// #define ST7735_ROBOTLCD       // For some RobotLCD arduino shields (128x160, BGR, https://docs.arduino.cc/retired/getting-started-guides/TFT)
111
+// #define ST7735_REDTAB
112
+// #define ST7735_BLACKTAB
113
+// #define ST7735_REDTAB160x80   // For 160 x 80 display with 24 pixel offset
114
+
115
+// If colours are inverted (white shows as black) then uncomment one of the next
116
+// 2 lines try both options, one of the options should correct the inversion.
117
+
118
+// #define TFT_INVERSION_ON
119
+// #define TFT_INVERSION_OFF
120
+
121
+
122
+// ##################################################################################
123
+//
124
+// Section 2. Define the pins that are used to interface with the display here
125
+//
126
+// ##################################################################################
127
+
128
+// If a backlight control signal is available then define the TFT_BL pin in Section 2
129
+// below. The backlight will be turned ON when tft.begin() is called, but the library
130
+// needs to know if the LEDs are ON with the pin HIGH or LOW. If the LEDs are to be
131
+// driven with a PWM signal or turned OFF/ON then this must be handled by the user
132
+// sketch. e.g. with digitalWrite(TFT_BL, LOW);
133
+
134
+#define TFT_BL   21            // LED back-light control pin
135
+#define TFT_BACKLIGHT_ON HIGH  // Level to turn ON back-light (HIGH or LOW)
136
+
137
+
138
+
139
+// We must use hardware SPI, a minimum of 3 GPIO pins is needed.
140
+// Typical setup for ESP8266 NodeMCU ESP-12 is :
141
+//
142
+// Display SDO/MISO  to NodeMCU pin D6 (or leave disconnected if not reading TFT)
143
+// Display LED       to NodeMCU pin VIN (or 5V, see below)
144
+// Display SCK       to NodeMCU pin D5
145
+// Display SDI/MOSI  to NodeMCU pin D7
146
+// Display DC (RS/AO)to NodeMCU pin D3
147
+// Display RESET     to NodeMCU pin D4 (or RST, see below)
148
+// Display CS        to NodeMCU pin D8 (or GND, see below)
149
+// Display GND       to NodeMCU pin GND (0V)
150
+// Display VCC       to NodeMCU 5V or 3.3V
151
+//
152
+// The TFT RESET pin can be connected to the NodeMCU RST pin or 3.3V to free up a control pin
153
+//
154
+// The DC (Data Command) pin may be labelled AO or RS (Register Select)
155
+//
156
+// With some displays such as the ILI9341 the TFT CS pin can be connected to GND if no more
157
+// SPI devices (e.g. an SD Card) are connected, in this case comment out the #define TFT_CS
158
+// line below so it is NOT defined. Other displays such at the ST7735 require the TFT CS pin
159
+// to be toggled during setup, so in these cases the TFT_CS line must be defined and connected.
160
+//
161
+// The NodeMCU D0 pin can be used for RST
162
+//
163
+//
164
+// Note: only some versions of the NodeMCU provide the USB 5V on the VIN pin
165
+// If 5V is not available at a pin you can use 3.3V but backlight brightness
166
+// will be lower.
167
+
168
+
169
+// ###### EDIT THE PIN NUMBERS IN THE LINES FOLLOWING TO SUIT YOUR ESP8266 SETUP ######
170
+
171
+// For NodeMCU - use pin numbers in the form PIN_Dx where Dx is the NodeMCU pin designation
172
+//#define TFT_CS   PIN_D8  // Chip select control pin D8
173
+//#define TFT_DC   PIN_D3  // Data Command control pin
174
+//#define TFT_RST  PIN_D4  // Reset pin (could connect to NodeMCU RST, see next line)
175
+//#define TFT_RST  -1    // Set TFT_RST to -1 if the display RESET is connected to NodeMCU RST or 3.3V
176
+
177
+//#define TFT_BL PIN_D1  // LED back-light (only for ST7789 with backlight control pin)
178
+
179
+//#define TOUCH_CS PIN_D2     // Chip select pin (T_CS) of touch screen
180
+
181
+//#define TFT_WR PIN_D2       // Write strobe for modified Raspberry Pi TFT only
182
+
183
+
184
+// ######  FOR ESP8266 OVERLAP MODE EDIT THE PIN NUMBERS IN THE FOLLOWING LINES  ######
185
+
186
+// Overlap mode shares the ESP8266 FLASH SPI bus with the TFT so has a performance impact
187
+// but saves pins for other functions. It is best not to connect MISO as some displays
188
+// do not tristate that line when chip select is high!
189
+// Note: Only one SPI device can share the FLASH SPI lines, so a SPI touch controller
190
+// cannot be connected as well to the same SPI signals.
191
+// On NodeMCU 1.0 SD0=MISO, SD1=MOSI, CLK=SCLK to connect to TFT in overlap mode
192
+// On NodeMCU V3  S0 =MISO, S1 =MOSI, S2 =SCLK
193
+// In ESP8266 overlap mode the following must be defined
194
+
195
+//#define TFT_SPI_OVERLAP
196
+
197
+// In ESP8266 overlap mode the TFT chip select MUST connect to pin D3
198
+//#define TFT_CS   PIN_D3
199
+//#define TFT_DC   PIN_D5  // Data Command control pin
200
+//#define TFT_RST  PIN_D4  // Reset pin (could connect to NodeMCU RST, see next line)
201
+//#define TFT_RST  -1  // Set TFT_RST to -1 if the display RESET is connected to NodeMCU RST or 3.3V
202
+
203
+
204
+// ###### EDIT THE PIN NUMBERS IN THE LINES FOLLOWING TO SUIT YOUR ESP32 SETUP   ######
205
+
206
+// For ESP32 Dev board (only tested with ILI9341 display)
207
+// The hardware SPI can be mapped to any pins
208
+
209
+#define TFT_MISO 12
210
+#define TFT_MOSI 13
211
+#define TFT_SCLK 14
212
+#define TFT_CS   15  // Chip select control pin
213
+#define TFT_DC    2  // Data Command control pin
214
+//#define TFT_RST   4  // Reset pin (could connect to RST pin)
215
+#define TFT_RST  -1  // Set TFT_RST to -1 if display RESET is connected to ESP32 board RST
216
+
217
+// For ESP32 Dev board (only tested with GC9A01 display)
218
+// The hardware SPI can be mapped to any pins
219
+
220
+//#define TFT_MOSI 15 // In some display driver board, it might be written as "SDA" and so on.
221
+//#define TFT_SCLK 14
222
+//#define TFT_CS   5  // Chip select control pin
223
+//#define TFT_DC   27  // Data Command control pin
224
+//#define TFT_RST  33  // Reset pin (could connect to Arduino RESET pin)
225
+//#define TFT_BL   22  // LED back-light
226
+
227
+//#define TOUCH_CS 21     // Chip select pin (T_CS) of touch screen
228
+
229
+//#define TFT_WR 22    // Write strobe for modified Raspberry Pi TFT only
230
+
231
+// For the M5Stack module use these #define lines
232
+//#define TFT_MISO 19
233
+//#define TFT_MOSI 23
234
+//#define TFT_SCLK 18
235
+//#define TFT_CS   14  // Chip select control pin
236
+//#define TFT_DC   27  // Data Command control pin
237
+//#define TFT_RST  33  // Reset pin (could connect to Arduino RESET pin)
238
+//#define TFT_BL   32  // LED back-light (required for M5Stack)
239
+
240
+// ######       EDIT THE PINs BELOW TO SUIT YOUR ESP32 PARALLEL TFT SETUP        ######
241
+
242
+// The library supports 8 bit parallel TFTs with the ESP32, the pin
243
+// selection below is compatible with ESP32 boards in UNO format.
244
+// Wemos D32 boards need to be modified, see diagram in Tools folder.
245
+// Only ILI9481 and ILI9341 based displays have been tested!
246
+
247
+// Parallel bus is only supported for the STM32 and ESP32
248
+// Example below is for ESP32 Parallel interface with UNO displays
249
+
250
+// Tell the library to use 8 bit parallel mode (otherwise SPI is assumed)
251
+//#define TFT_PARALLEL_8_BIT
252
+
253
+// The ESP32 and TFT the pins used for testing are:
254
+//#define TFT_CS   33  // Chip select control pin (library pulls permanently low
255
+//#define TFT_DC   15  // Data Command control pin - must use a pin in the range 0-31
256
+//#define TFT_RST  32  // Reset pin, toggles on startup
257
+
258
+//#define TFT_WR    4  // Write strobe control pin - must use a pin in the range 0-31
259
+//#define TFT_RD    2  // Read strobe control pin
260
+
261
+//#define TFT_D0   12  // Must use pins in the range 0-31 for the data bus
262
+//#define TFT_D1   13  // so a single register write sets/clears all bits.
263
+//#define TFT_D2   26  // Pins can be randomly assigned, this does not affect
264
+//#define TFT_D3   25  // TFT screen update performance.
265
+//#define TFT_D4   17
266
+//#define TFT_D5   16
267
+//#define TFT_D6   27
268
+//#define TFT_D7   14
269
+
270
+// ######       EDIT THE PINs BELOW TO SUIT YOUR STM32 SPI TFT SETUP        ######
271
+
272
+// The TFT can be connected to SPI port 1 or 2
273
+//#define TFT_SPI_PORT 1 // SPI port 1 maximum clock rate is 55MHz
274
+//#define TFT_MOSI PA7
275
+//#define TFT_MISO PA6
276
+//#define TFT_SCLK PA5
277
+
278
+//#define TFT_SPI_PORT 2 // SPI port 2 maximum clock rate is 27MHz
279
+//#define TFT_MOSI PB15
280
+//#define TFT_MISO PB14
281
+//#define TFT_SCLK PB13
282
+
283
+// Can use Ardiuno pin references, arbitrary allocation, TFT_eSPI controls chip select
284
+//#define TFT_CS   D5 // Chip select control pin to TFT CS
285
+//#define TFT_DC   D6 // Data Command control pin to TFT DC (may be labelled RS = Register Select)
286
+//#define TFT_RST  D7 // Reset pin to TFT RST (or RESET)
287
+// OR alternatively, we can use STM32 port reference names PXnn
288
+//#define TFT_CS   PE11 // Nucleo-F767ZI equivalent of D5
289
+//#define TFT_DC   PE9  // Nucleo-F767ZI equivalent of D6
290
+//#define TFT_RST  PF13 // Nucleo-F767ZI equivalent of D7
291
+
292
+//#define TFT_RST  -1   // Set TFT_RST to -1 if the display RESET is connected to processor reset
293
+                        // Use an Arduino pin for initial testing as connecting to processor reset
294
+                        // may not work (pulse too short at power up?)
295
+
296
+// ##################################################################################
297
+//
298
+// Section 3. Define the fonts that are to be used here
299
+//
300
+// ##################################################################################
301
+
302
+// Comment out the #defines below with // to stop that font being loaded
303
+// The ESP8366 and ESP32 have plenty of memory so commenting out fonts is not
304
+// normally necessary. If all fonts are loaded the extra FLASH space required is
305
+// about 17Kbytes. To save FLASH space only enable the fonts you need!
306
+
307
+#define LOAD_GLCD   // Font 1. Original Adafruit 8 pixel font needs ~1820 bytes in FLASH
308
+#define LOAD_FONT2  // Font 2. Small 16 pixel high font, needs ~3534 bytes in FLASH, 96 characters
309
+#define LOAD_FONT4  // Font 4. Medium 26 pixel high font, needs ~5848 bytes in FLASH, 96 characters
310
+#define LOAD_FONT6  // Font 6. Large 48 pixel font, needs ~2666 bytes in FLASH, only characters 1234567890:-.apm
311
+#define LOAD_FONT7  // Font 7. 7 segment 48 pixel font, needs ~2438 bytes in FLASH, only characters 1234567890:-.
312
+#define LOAD_FONT8  // Font 8. Large 75 pixel font needs ~3256 bytes in FLASH, only characters 1234567890:-.
313
+//#define LOAD_FONT8N // Font 8. Alternative to Font 8 above, slightly narrower, so 3 digits fit a 160 pixel TFT
314
+#define LOAD_GFXFF  // FreeFonts. Include access to the 48 Adafruit_GFX free fonts FF1 to FF48 and custom fonts
315
+
316
+// Comment out the #define below to stop the SPIFFS filing system and smooth font code being loaded
317
+// this will save ~20kbytes of FLASH
318
+#define SMOOTH_FONT
319
+
320
+
321
+// ##################################################################################
322
+//
323
+// Section 4. Other options
324
+//
325
+// ##################################################################################
326
+
327
+// For RP2040 processor and SPI displays, uncomment the following line to use the PIO interface.
328
+//#define RP2040_PIO_SPI // Leave commented out to use standard RP2040 SPI port interface
329
+
330
+// For RP2040 processor and 8 or 16 bit parallel displays:
331
+// The parallel interface write cycle period is derived from a division of the CPU clock
332
+// speed so scales with the processor clock. This means that the divider ratio may need
333
+// to be increased when overclocking. I may also need to be adjusted dependant on the
334
+// display controller type (ILI94341, HX8357C etc). If RP2040_PIO_CLK_DIV is not defined
335
+// the library will set default values which may not suit your display.
336
+// The display controller data sheet will specify the minimum write cycle period. The
337
+// controllers often work reliably for shorter periods, however if the period is too short
338
+// the display may not initialise or graphics will become corrupted.
339
+// PIO write cycle frequency = (CPU clock/(4 * RP2040_PIO_CLK_DIV))
340
+//#define RP2040_PIO_CLK_DIV 1 // 32ns write cycle at 125MHz CPU clock
341
+//#define RP2040_PIO_CLK_DIV 2 // 64ns write cycle at 125MHz CPU clock
342
+//#define RP2040_PIO_CLK_DIV 3 // 96ns write cycle at 125MHz CPU clock
343
+
344
+// For the RP2040 processor define the SPI port channel used (default 0 if undefined)
345
+//#define TFT_SPI_PORT 1 // Set to 0 if SPI0 pins are used, or 1 if spi1 pins used
346
+
347
+// For the STM32 processor define the SPI port channel used (default 1 if undefined)
348
+//#define TFT_SPI_PORT 2 // Set to 1 for SPI port 1, or 2 for SPI port 2
349
+
350
+// Define the SPI clock frequency, this affects the graphics rendering speed. Too
351
+// fast and the TFT driver will not keep up and display corruption appears.
352
+// With an ILI9341 display 40MHz works OK, 80MHz sometimes fails
353
+// With a ST7735 display more than 27MHz may not work (spurious pixels and lines)
354
+// With an ILI9163 display 27 MHz works OK.
355
+
356
+// #define SPI_FREQUENCY   1000000
357
+// #define SPI_FREQUENCY   5000000
358
+// #define SPI_FREQUENCY  10000000
359
+// #define SPI_FREQUENCY  20000000
360
+//#define SPI_FREQUENCY  27000000
361
+// #define SPI_FREQUENCY  40000000
362
+#define SPI_FREQUENCY  55000000 // STM32 SPI1 only (SPI2 maximum is 27MHz)
363
+// #define SPI_FREQUENCY  80000000
364
+
365
+// Optional reduced SPI frequency for reading TFT
366
+#define SPI_READ_FREQUENCY  20000000
367
+
368
+// The XPT2046 requires a lower SPI clock rate of 2.5MHz so we define that here:
369
+#define SPI_TOUCH_FREQUENCY  2500000
370
+
371
+// The ESP32 has 2 free SPI ports i.e. VSPI and HSPI, the VSPI is the default.
372
+// If the VSPI port is in use and pins are not accessible (e.g. TTGO T-Beam)
373
+// then uncomment the following line:
374
+//#define USE_HSPI_PORT
375
+
376
+// Comment out the following #define if "SPI Transactions" do not need to be
377
+// supported. When commented out the code size will be smaller and sketches will
378
+// run slightly faster, so leave it commented out unless you need it!
379
+
380
+// Transaction support is needed to work with SD library but not needed with TFT_SdFat
381
+// Transaction support is required if other SPI devices are connected.
382
+
383
+// Transactions are automatically enabled by the library for an ESP32 (to use HAL mutex)
384
+// so changing it here has no effect
385
+
386
+// #define SUPPORT_TRANSACTIONS

+ 1
- 1
include/config.h Просмотреть файл

@@ -15,7 +15,7 @@
15 15
 #define __ESP_ENV_CONFIG__
16 16
 
17 17
 // Sketch version
18
-#define ESP_ENV_VERSION "0.6.1"
18
+#define ESP_ENV_VERSION "0.7.0"
19 19
 
20 20
 // location of sensor, used in DB and hostname
21 21
 //#define SENSOR_LOCATION_LIVINGROOM

+ 4
- 0
include/mqtt.h Просмотреть файл

@@ -17,4 +17,8 @@
17 17
 void initMQTT();
18 18
 void runMQTT();
19 19
 
20
+#ifdef FEATURE_UI
21
+void writeMQTTtopic(const char *topic, const char *data, bool retain = true);
22
+#endif // FEATURE_UI
23
+
20 24
 #endif // __MQTT_H__

+ 20
- 0
include/ui.h Просмотреть файл

@@ -0,0 +1,20 @@
1
+/*
2
+ * ui.h
3
+ *
4
+ * ESP8266 / ESP32 Environmental Sensor
5
+ *
6
+ * ----------------------------------------------------------------------------
7
+ * "THE BEER-WARE LICENSE" (Revision 42):
8
+ * <xythobuz@xythobuz.de> wrote this file.  As long as you retain this notice
9
+ * you can do whatever you want with this stuff. If we meet some day, and you
10
+ * think this stuff is worth it, you can buy me a beer in return.   Thomas Buck
11
+ * ----------------------------------------------------------------------------
12
+ */
13
+
14
+#ifndef __UI_H__
15
+#define __UI_H__
16
+
17
+void ui_init(void);
18
+void ui_run(void);
19
+
20
+#endif // __UI_H__

+ 28
- 0
platformio.ini Просмотреть файл

@@ -8,6 +8,32 @@
8 8
 ; Please visit documentation for the other options and examples
9 9
 ; https://docs.platformio.org/page/projectconf.html
10 10
 
11
+[env:cyd]
12
+platform = platformio/espressif32@6.4.0
13
+board = esp32dev
14
+framework = arduino
15
+upload_protocol = esptool
16
+upload_port = /dev/ttyUSB1
17
+monitor_port = /dev/ttyUSB1
18
+monitor_speed = 115200
19
+build_flags =
20
+  -DSENSOR_HOSTNAME_PREFIX=\"cyd-\"
21
+  "-DNAME_OF_FEATURE=\"Remote Control\""
22
+  -DENABLE_WEBSOCKETS
23
+  -DENABLE_DEBUGLOG
24
+  -DENABLE_MQTT
25
+  -DNEW_ESP32_LIB
26
+  -DFEATURE_UI
27
+  -DUSER_SETUP_LOADED=1
28
+  -include include/User_Setup.h
29
+lib_ldf_mode = deep
30
+lib_deps =
31
+    https://github.com/knolleary/pubsubclient.git#2d228f2f862a95846c65a8518c79f48dfc8f188c
32
+    https://github.com/rlogiacco/CircularBuffer.git#f29cf01b6e8603422f3668d51036ac124f803404
33
+    https://github.com/Links2004/arduinoWebSockets.git#30d5e136665a52880f641ddd7245b3ba05ecd32b
34
+    https://github.com/Bodmer/TFT_eSPI.git#01483a1043a4915c4e34c928fb48a87d3b38a248
35
+    https://github.com/PaulStoffregen/XPT2046_Touchscreen.git#5d5120e93ab5d28b3f1db6d754819c354c2da019
36
+
11 37
 [env:esp8266env]
12 38
 platform = espressif8266
13 39
 board = esp01_1m
@@ -44,6 +70,7 @@ build_flags =
44 70
   -DENABLE_BME280
45 71
   -DENABLE_CCS811
46 72
   -DENABLE_INFLUXDB_LOGGING
73
+  -DENABLE_SIMPLE_INFLUX
47 74
   -DENABLE_MQTT
48 75
 lib_deps =
49 76
     Wire
@@ -169,6 +196,7 @@ build_flags =
169 196
   -DENABLE_BME280
170 197
   -DMOISTURE_ADC_ARDUINO
171 198
   -DENABLE_INFLUXDB_LOGGING
199
+  -DENABLE_SIMPLE_INFLUX
172 200
 lib_deps =
173 201
     Wire
174 202
     Adafruit Unified Sensor

+ 1
- 1
src/SimpleInflux.cpp Просмотреть файл

@@ -15,7 +15,7 @@
15 15
 #include "DebugLog.h"
16 16
 #include "SimpleInflux.h"
17 17
 
18
-#ifndef USE_INFLUXDB_LIB
18
+#ifdef DENABLE_SIMPLE_INFLUX
19 19
 
20 20
 #if defined(ARDUINO_ARCH_AVR)
21 21
 #include <WiFiLink.h>

+ 15
- 2
src/main.cpp Просмотреть файл

@@ -32,6 +32,7 @@
32 32
 #include "mqtt.h"
33 33
 #include "html.h"
34 34
 #include "servers.h"
35
+#include "ui.h"
35 36
 
36 37
 unsigned long last_led_blink_time = 0;
37 38
 
@@ -66,6 +67,11 @@ void setup() {
66 67
         delay(LED_INIT_BLINK_INTERVAL);
67 68
     }
68 69
 
70
+#ifdef FEATURE_UI
71
+    debug.println(F("UI"));
72
+    ui_init();
73
+#endif // FEATURE_UI
74
+
69 75
     config = mem_read();
70 76
 
71 77
 #ifdef FEATURE_RELAIS
@@ -123,7 +129,11 @@ void setup() {
123 129
         esp_deep_sleep_start();
124 130
         delay(100);
125 131
         ESP.restart();
132
+#ifdef NEW_ESP32_LIB
133
+    }, WiFiEvent_t::ARDUINO_EVENT_WIFI_STA_DISCONNECTED);
134
+#else
126 135
     }, WiFiEvent_t::SYSTEM_EVENT_STA_DISCONNECTED);
136
+#endif
127 137
 
128 138
     // Connect to WiFi AP
129 139
     debug.print(F("Connecting WiFi"));
@@ -173,14 +183,17 @@ void setup() {
173 183
 }
174 184
 
175 185
 void loop() {
176
-    unsigned long time = millis();
177
-
178 186
     runServers();
179 187
     runSensors();
180 188
     runMQTT();
181 189
     runInflux();
182 190
 
191
+#ifdef FEATURE_UI
192
+    ui_run();
193
+#endif
194
+
183 195
     // blink heartbeat LED
196
+    unsigned long time = millis();
184 197
     if ((time - last_led_blink_time) >= LED_BLINK_INTERVAL) {
185 198
         last_led_blink_time = time;
186 199
         digitalWrite(BUILTIN_LED_PIN, !digitalRead(BUILTIN_LED_PIN));

+ 10
- 0
src/mqtt.cpp Просмотреть файл

@@ -170,6 +170,10 @@ static void mqttReconnect() {
170 170
             mqtt.subscribe(topic.c_str());
171 171
         }
172 172
 #endif // FEATURE_RELAIS
173
+
174
+#ifdef FEATURE_UI
175
+        mqtt.subscribe("livingroom/light_kitchen");
176
+#endif // FEATURE_UI
173 177
     }
174 178
 }
175 179
 
@@ -194,6 +198,12 @@ void runMQTT() {
194 198
     mqtt.loop();
195 199
 }
196 200
 
201
+#ifdef FEATURE_UI
202
+void writeMQTTtopic(const char *topic, const char *data, bool retain) {
203
+    mqtt.publish(topic, data, retain);
204
+}
205
+#endif
206
+
197 207
 #else
198 208
 
199 209
 void initMQTT() { }

+ 3
- 1
src/sensors.cpp Просмотреть файл

@@ -217,8 +217,10 @@ void initSensors() {
217 217
     // Init I2C and try to connect to sensors
218 218
 #if defined(ARDUINO_ARCH_ESP8266)
219 219
 
220
+#if defined(ENABLE_BME280) || defined(ENABLE_CCS811)
220 221
     debug.println(F("Wire2"));
221 222
     Wire2.begin(I2C_SDA_PIN, I2C_SCL_PIN);
223
+#endif
222 224
 
223 225
 #ifdef ENABLE_BME280
224 226
     debug.println(F("BME"));
@@ -234,7 +236,7 @@ void initSensors() {
234 236
 
235 237
 #elif defined(ARDUINO_ARCH_ESP32) || defined(ARDUINO_ARCH_AVR)
236 238
 
237
-#if defined(ARDUINO_ARCH_ESP32)
239
+#if defined(ARDUINO_ARCH_ESP32) && (defined(ENABLE_BME280) || defined(ENABLE_CCS811))
238 240
     debug.println(F("Wire"));
239 241
     Wire.begin();
240 242
 #endif

+ 105
- 0
src/ui.cpp Просмотреть файл

@@ -0,0 +1,105 @@
1
+/*
2
+ * ui.cpp
3
+ *
4
+ * https://github.com/witnessmenow/ESP32-Cheap-Yellow-Display/blob/main/Examples/Basics/2-TouchTest/2-TouchTest.ino
5
+ * https://github.com/witnessmenow/ESP32-Cheap-Yellow-Display/blob/main/Examples/Basics/4-BacklightControlTest/4-BacklightControlTest.ino
6
+ *
7
+ * ESP8266 / ESP32 Environmental Sensor
8
+ *
9
+ * ----------------------------------------------------------------------------
10
+ * "THE BEER-WARE LICENSE" (Revision 42):
11
+ * <xythobuz@xythobuz.de> wrote this file.  As long as you retain this notice
12
+ * you can do whatever you want with this stuff. If we meet some day, and you
13
+ * think this stuff is worth it, you can buy me a beer in return.   Thomas Buck
14
+ * ----------------------------------------------------------------------------
15
+ */
16
+
17
+#include <Arduino.h>
18
+
19
+#include "config.h"
20
+#include "mqtt.h"
21
+#include "ui.h"
22
+
23
+#ifdef FEATURE_UI
24
+
25
+#include <SPI.h>
26
+#include <XPT2046_Touchscreen.h>
27
+#include <TFT_eSPI.h>
28
+
29
+#define XPT2046_IRQ 36
30
+#define XPT2046_MOSI 32
31
+#define XPT2046_MISO 39
32
+#define XPT2046_CLK 25
33
+#define XPT2046_CS 33
34
+
35
+#define LEDC_CHANNEL_0 0
36
+#define LEDC_TIMER_12_BIT 12
37
+#define LEDC_BASE_FREQ 5000
38
+
39
+void ledcAnalogWrite(uint8_t channel, uint32_t value, uint32_t valueMax = 255) {
40
+    uint32_t duty = (4095 / valueMax) * min(value, valueMax);
41
+    ledcWrite(channel, duty);
42
+}
43
+
44
+SPIClass mySpi = SPIClass(HSPI);
45
+XPT2046_Touchscreen ts(XPT2046_CS, XPT2046_IRQ);
46
+
47
+TFT_eSPI tft = TFT_eSPI();
48
+
49
+void ui_init(void) {
50
+    mySpi.begin(XPT2046_CLK, XPT2046_MISO, XPT2046_MOSI, XPT2046_CS);
51
+    ts.begin(mySpi);
52
+    ts.setRotation(1);
53
+
54
+    tft.init();
55
+    tft.setRotation(1);
56
+
57
+    ledcSetup(LEDC_CHANNEL_0, LEDC_BASE_FREQ, LEDC_TIMER_12_BIT);
58
+    ledcAttachPin(TFT_BL, LEDC_CHANNEL_0);
59
+    ledcAnalogWrite(LEDC_CHANNEL_0, 255);
60
+
61
+    tft.fillScreen(TFT_BLACK);
62
+
63
+    int x = LCD_WIDTH / 2;
64
+    int y = LCD_HEIGHT / 2;
65
+    int fontSize = 2;
66
+    tft.drawCentreString("Initializing ESP-ENV", x, y - 16, fontSize);
67
+    tft.drawCentreString("xythobuz.de", x, y + 16, fontSize);
68
+}
69
+
70
+void printTouchToDisplay(TS_Point p) {
71
+    tft.fillScreen(TFT_BLACK);
72
+    tft.setTextColor(TFT_WHITE, TFT_BLACK);
73
+
74
+    int x = LCD_WIDTH / 2;
75
+    int y = 100;
76
+    int fontSize = 2;
77
+
78
+    String temp = "Pressure = " + String(p.z);
79
+    tft.drawCentreString(temp, x, y, fontSize);
80
+
81
+    y += 16;
82
+    temp = "X = " + String(p.x);
83
+    tft.drawCentreString(temp, x, y, fontSize);
84
+
85
+    y += 16;
86
+    temp = "Y = " + String(p.y);
87
+    tft.drawCentreString(temp, x, y, fontSize);
88
+}
89
+
90
+void ui_run(void) {
91
+    if (ts.tirqTouched() && ts.touched()) {
92
+        TS_Point p = ts.getPoint();
93
+        printTouchToDisplay(p);
94
+
95
+        if (p.x < 1000) {
96
+            writeMQTTtopic("livingroom/light_kitchen", "off");
97
+        } else if (p.x > 3000) {
98
+            writeMQTTtopic("livingroom/light_kitchen", "on");
99
+        }
100
+
101
+        delay(1000);
102
+    }
103
+}
104
+
105
+#endif // FEATURE_UI

Загрузка…
Отмена
Сохранить