-
Notifications
You must be signed in to change notification settings - Fork 5.1k
Expand file tree
/
Copy pathtasmota_template.h
More file actions
3741 lines (3562 loc) · 185 KB
/
tasmota_template.h
File metadata and controls
3741 lines (3562 loc) · 185 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
/*
tasmota_template.h - template settings for Tasmota
Copyright (C) 2021 Theo Arends
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _TASMOTA_TEMPLATE_H_
#define _TASMOTA_TEMPLATE_H_
// User selectable GPIO functionality
// ATTENTION: Only add at the end of this list just before GPIO_SENSOR_END
// Then add the same name(s) in a nice location in array kGpioNiceList
enum UserSelectablePins {
GPIO_NONE, // Not used
GPIO_KEY1, GPIO_KEY1_NP, GPIO_KEY1_INV, GPIO_KEY1_INV_NP, // 4 x Button
GPIO_SWT1, GPIO_SWT1_NP, // 8 x User connected external switches
GPIO_REL1, GPIO_REL1_INV, // 8 x Relays
GPIO_LED1, GPIO_LED1_INV, // 4 x Leds
GPIO_CNTR1, GPIO_CNTR1_NP, // 4 x Counter
GPIO_PWM1, GPIO_PWM1_INV, // 5 x PWM
GPIO_BUZZER, GPIO_BUZZER_INV, // Buzzer
GPIO_LEDLNK, GPIO_LEDLNK_INV, // Link led
GPIO_I2C_SCL, GPIO_I2C_SDA, // Software I2C
GPIO_SPI_MISO, GPIO_SPI_MOSI, GPIO_SPI_CLK, GPIO_SPI_CS, GPIO_SPI_DC, // Hardware SPI
GPIO_SSPI_MISO, GPIO_SSPI_MOSI, GPIO_SSPI_SCLK, GPIO_SSPI_CS, GPIO_SSPI_DC, // Software SPI
GPIO_BACKLIGHT, // Display backlight control
GPIO_OLED_RESET, // OLED Display Reset
GPIO_IRSEND, GPIO_IRRECV, // IR interface
GPIO_RFSEND, GPIO_RFRECV, // RF interface
GPIO_DHT11, GPIO_DHT22, GPIO_SI7021, GPIO_DHT11_OUT, // DHT11, DHT21, DHT22, AM2301, AM2302, AM2321
GPIO_DSB, GPIO_DSB_OUT, // DS18B20 or DS18S20
GPIO_WS2812, // WS2812 Led string
GPIO_MHZ_TXD, GPIO_MHZ_RXD, // MH-Z19 Serial interface
GPIO_PZEM0XX_TX, GPIO_PZEM004_RX, GPIO_PZEM016_RX, GPIO_PZEM017_RX, // PZEM Serial Modbus interface
GPIO_SAIR_TX, GPIO_SAIR_RX, // SenseAir Serial interface
GPIO_PMS5003_TX, GPIO_PMS5003_RX, // Plantower PMS5003 Serial interface
GPIO_SDS0X1_TX, GPIO_SDS0X1_RX, // Nova Fitness SDS011 Serial interface
GPIO_SBR_TX, GPIO_SBR_RX, // Serial Bridge Serial interface
GPIO_SR04_TRIG, GPIO_SR04_ECHO, // SR04 interface
GPIO_SDM120_TX, GPIO_SDM120_RX, // SDM120 Serial interface
GPIO_SDM630_TX, GPIO_SDM630_RX, // SDM630 Serial interface
GPIO_TM1638CLK, GPIO_TM1638DIO, GPIO_TM1638STB, // TM1638 interface
GPIO_MP3_DFR562, // RB-DFR-562, DFPlayer Mini MP3 Player
GPIO_HX711_SCK, GPIO_HX711_DAT, // HX711 Load Cell interface
GPIO_TX2X_TXD_BLACK, // TX20/TX23 Transmission Pin
GPIO_TUYA_TX, GPIO_TUYA_RX, // Tuya Serial interface
GPIO_MGC3130_XFER, GPIO_MGC3130_RESET, // MGC3130 interface
GPIO_RF_SENSOR, // Rf receiver with sensor decoding
GPIO_AZ_TXD, GPIO_AZ_RXD, // AZ-Instrument 7798 Serial interface
GPIO_MAX31855CS, GPIO_MAX31855CLK, GPIO_MAX31855DO, // MAX31855 Serial interface
GPIO_NRG_SEL, GPIO_NRG_SEL_INV, GPIO_NRG_CF1, GPIO_HLW_CF, GPIO_HJL_CF, // HLW8012/HJL-01/BL0937 energy monitoring
GPIO_MCP39F5_TX, GPIO_MCP39F5_RX, GPIO_MCP39F5_RST, // MCP39F501 Energy monitoring (Shelly2)
GPIO_PN532_TXD, GPIO_PN532_RXD, // PN532 NFC Serial interface
GPIO_SM16716_CLK, GPIO_SM16716_DAT, GPIO_SM16716_SEL, // SM16716 SELECT
GPIO_DI, GPIO_DCKI, // my92x1 PWM controller
GPIO_CSE7766_TX, GPIO_CSE7766_RX, // CSE7766 Serial interface (S31 and Pow R2)
GPIO_ARIRFRCV, GPIO_ARIRFSEL, // Arilux RF Receive input
GPIO_TXD, GPIO_RXD, // Serial interface
GPIO_ROT1A, GPIO_ROT1B, // Rotary switch
GPIO_ADC_JOY, // Analog joystick
GPIO_SSPI_MAX31865_CS1, // MAX31865 Chip Select
GPIO_HRE_CLOCK, GPIO_HRE_DATA, // HR-E Water Meter
GPIO_ADE7953_IRQ, // ADE7953 IRQ
GPIO_SOLAXX1_TX, GPIO_SOLAXX1_RX, // Solax Inverter Serial interface
GPIO_ZIGBEE_TX, GPIO_ZIGBEE_RX, // Zigbee Serial interface
GPIO_RDM6300_RX, // RDM6300 RX
GPIO_IBEACON_TX, GPIO_IBEACON_RX, // HM17 IBEACON Serial interface
GPIO_A4988_DIR, GPIO_A4988_STP, GPIO_A4988_ENA, GPIO_A4988_MS1, // A4988 interface
GPIO_OUTPUT_HI, GPIO_OUTPUT_LO, // Fixed output state
GPIO_DDS2382_TX, GPIO_DDS2382_RX, // DDS2382 Serial interface
GPIO_DDSU666_TX, GPIO_DDSU666_RX, // DDSU666 Serial interface
GPIO_SM2135_CLK, GPIO_SM2135_DAT, // SM2135 PWM controller
GPIO_DEEPSLEEP, // Kill switch for deepsleep
GPIO_EXS_ENABLE, // EXS MCU Enable
GPIO_TASMOTACLIENT_TXD, GPIO_TASMOTACLIENT_RXD, // Client Serial interface
GPIO_TASMOTACLIENT_RST, GPIO_TASMOTACLIENT_RST_INV, // Client Reset
GPIO_HPMA_RX, GPIO_HPMA_TX, // Honeywell HPMA115S0 Serial interface
GPIO_GPS_RX, GPIO_GPS_TX, // GPS Serial interface
GPIO_HM10_RX, GPIO_HM10_TX, // HM10-BLE-Mijia-bridge Serial interface
GPIO_LE01MR_RX, GPIO_LE01MR_TX, // F&F LE-01MR energy meter
GPIO_CC1101_GDO0, GPIO_CC1101_GDO2, // CC1101 Serial interface
GPIO_HRXL_RX, // Data from MaxBotix HRXL sonar range sensor
GPIO_ELECTRIQ_MOODL_TX, // ElectriQ iQ-wifiMOODL Serial TX
GPIO_AS3935, // Franklin Lightning Sensor
GPIO_ADC_INPUT, // Analog input
GPIO_ADC_TEMP, // Analog Thermistor
GPIO_ADC_LIGHT, // Analog Light sensor
GPIO_ADC_BUTTON, GPIO_ADC_BUTTON_INV, // Analog Button
GPIO_ADC_RANGE, // Analog Range
GPIO_ADC_CT_POWER, // ANalog Current
#ifdef ESP32
GPIO_WEBCAM_PWDN, GPIO_WEBCAM_RESET, GPIO_WEBCAM_XCLK, // Webcam
GPIO_WEBCAM_SIOD, GPIO_WEBCAM_SIOC, // Webcam I2C
GPIO_WEBCAM_DATA,
GPIO_WEBCAM_VSYNC, GPIO_WEBCAM_HREF, GPIO_WEBCAM_PCLK,
GPIO_WEBCAM_PSCLK,
GPIO_WEBCAM_HSD,
GPIO_WEBCAM_PSRCS,
#endif
GPIO_BOILER_OT_RX, GPIO_BOILER_OT_TX, // OpenTherm Boiler TX pin
GPIO_WINDMETER_SPEED, // WindMeter speed counter pin
GPIO_KEY1_TC, // Touch pin as button
GPIO_BL0940_RX, // BL0940 serial interface
GPIO_TCP_TX, GPIO_TCP_RX, // TCP to serial bridge
#ifdef ESP32
GPIO_ETH_PHY_POWER, GPIO_ETH_PHY_MDC, GPIO_ETH_PHY_MDIO, // Ethernet
#endif
GPIO_TELEINFO_RX, // Teleinfo telemetry data receive pin
GPIO_TELEINFO_ENABLE, // Teleinfo Enable Receive Pin
GPIO_LMT01, // LMT01 input counting pin
GPIO_IEM3000_TX, GPIO_IEM3000_RX, // IEM3000 Serial interface
GPIO_ZIGBEE_RST, // Zigbee reset
GPIO_DYP_RX,
GPIO_MIEL_HVAC_TX, GPIO_MIEL_HVAC_RX, // Mitsubishi Electric HVAC
GPIO_WE517_TX, GPIO_WE517_RX, // ORNO WE517 Serial interface
GPIO_AS608_TX, GPIO_AS608_RX, // Serial interface AS608 / R503
GPIO_SHELLY_DIMMER_BOOT0, GPIO_SHELLY_DIMMER_RST_INV,
GPIO_RC522_RST, // RC522 reset
GPIO_P9813_CLK, GPIO_P9813_DAT, // P9813 Clock and Data
GPIO_OPTION_A, // Specific device options to be served in code
GPIO_FTC532, // FTC532 touch ctrlr serial input
GPIO_RC522_CS,
GPIO_NRF24_CS, GPIO_NRF24_DC,
GPIO_ILI9341_CS, GPIO_ILI9341_DC,
GPIO_ILI9488_CS,
GPIO_EPAPER29_CS,
GPIO_EPAPER42_CS,
GPIO_SSD1351_CS,
GPIO_RA8876_CS,
GPIO_ST7789_CS, GPIO_ST7789_DC,
GPIO_SSD1331_CS, GPIO_SSD1331_DC,
GPIO_SDCARD_CS,
GPIO_ROT1A_NP, GPIO_ROT1B_NP, // Rotary switch
GPIO_ADC_PH, // Analog PH Sensor
GPIO_BS814_CLK, GPIO_BS814_DAT, // Holtek BS814A2 touch ctrlr
GPIO_WIEGAND_D0, GPIO_WIEGAND_D1, // Wiegand Data lines
GPIO_NEOPOOL_TX, GPIO_NEOPOOL_RX, // Sugar Valley RS485 interface
GPIO_SDM72_TX, GPIO_SDM72_RX, // SDM72 Serial interface
GPIO_TM1637CLK, GPIO_TM1637DIO, // TM1637 interface
GPIO_PROJECTOR_CTRL_TX, GPIO_PROJECTOR_CTRL_RX, // LCD/DLP Projector Serial Control
GPIO_SSD1351_DC,
GPIO_XPT2046_CS, // XPT2046 SPI Chip Select
GPIO_CSE7761_TX, GPIO_CSE7761_RX, // CSE7761 Serial interface (Dual R3)
GPIO_VL53LXX_XSHUT1, // VL53LXX_XSHUT (the max number of sensors is VL53LXX_MAX_SENSORS)- Used when connecting multiple VL53LXX
GPIO_MAX7219CLK, GPIO_MAX7219DIN, GPIO_MAX7219CS, // MAX7219 interface
GPIO_TFMINIPLUS_TX, GPIO_TFMINIPLUS_RX, // TFmini Plus ToF sensor
GPIO_ZEROCROSS,
#ifdef ESP32
GPIO_HALLEFFECT,
GPIO_EPD_DATA, // Base connection EPD driver
#endif
GPIO_INPUT,
#ifdef ESP32
GPIO_KEY1_PD, GPIO_KEY1_INV_PD, GPIO_SWT1_PD,
#endif
GPIO_I2S_DOUT, GPIO_I2S_BCLK, GPIO_I2S_WS, GPIO_I2S_DIN,
GPIO_I2S_BCLK_IN, GPIO_I2S_WS_IN, // Spare since 20240603
GPIO_INTERRUPT,
GPIO_MCP2515_CS, // MCP2515 Chip Select
GPIO_HRG15_TX, GPIO_HRG15_RX, // Hydreon RG-15 rain sensor serial interface
GPIO_VINDRIKTNING_RX, // IKEA VINDRIKTNING Serial interface
GPIO_BL0939_RX, // BL0939 Serial interface (Dual R3 v2)
GPIO_BL0942_RX, // BL0942 Serial interface
GPIO_HM330X_SET, // HM330X SET pin (sleep when low)
GPIO_HEARTBEAT, GPIO_HEARTBEAT_INV,
GPIO_SHIFT595_SRCLK, GPIO_SHIFT595_RCLK, GPIO_SHIFT595_OE, GPIO_SHIFT595_SER, // 74x595 Shift register
GPIO_SOLAXX1_RTS, // Solax Inverter Serial interface
GPIO_OPTION_E, // Emulated module
GPIO_SDM230_TX, GPIO_SDM230_RX, // SDM230 Serial interface
GPIO_ADC_MQ, // Analog MQ Sensor
GPIO_CM11_TXD, GPIO_CM11_RXD, // CM11 Serial interface
GPIO_BL6523_TX, GPIO_BL6523_RX, // BL6523 based Watt meter Serial interface
GPIO_ADE7880_IRQ, // ADE7880 IRQ
GPIO_RESET, // Generic reset
GPIO_MS01, // Sonoff MS01 Moisture Sensor 1wire interface
GPIO_SDIO_CMD, GPIO_SDIO_CLK, GPIO_SDIO_D0, GPIO_SDIO_D1, GPIO_SDIO_D2, GPIO_SDIO_D3, // SD Card SDIO interface, including 1-bit and 4-bit modes
GPIO_FLOWRATEMETER_IN, // Flowrate Meter
GPIO_BP5758D_CLK, GPIO_BP5758D_DAT, // BP5758D PWM controller
GPIO_SM2335_CLK, GPIO_SM2335_DAT, // SM2335 PWM controller
GPIO_MP3_DFR562_BUSY, // RB-DFR-562, DFPlayer Mini MP3 Player busy flag
GPIO_TM1621_CS, GPIO_TM1621_WR, GPIO_TM1621_RD, GPIO_TM1621_DAT, // Sonoff POWR3xxD and THR3xxD LCD display
GPIO_REL1_BI, GPIO_REL1_BI_INV, // 8 x Relays bistable
GPIO_I2S_MCLK,
GPIO_MBR_TX, GPIO_MBR_RX, // Modbus Bridge Serial interface
GPIO_ADE7953_RST, // ADE7953 Reset
GPIO_NRG_MBS_TX, GPIO_NRG_MBS_RX, // Generic Energy Modbus device
GPIO_ADE7953_CS, // ADE7953 SPI Chip Select
GPIO_DALI_RX, GPIO_DALI_TX, // DALI
GPIO_BP1658CJ_CLK, GPIO_BP1658CJ_DAT,// BP1658CJ
GPIO_DINGTIAN_CLK, GPIO_DINGTIAN_SDI, GPIO_DINGTIAN_Q7, GPIO_DINGTIAN_PL, GPIO_DINGTIAN_RCK, // Dingtian relay board - 595's & 165's pins
GPIO_LD2410_TX, GPIO_LD2410_RX, // HLK-LD2410
GPIO_MBR_TX_ENA, GPIO_NRG_MBS_TX_ENA, // Modbus Bridge Serial Transmit Enable
GPIO_ME007_TRIG, GPIO_ME007_RX, // ME007 Serial/Trigger interface
GPIO_TUYAMCUBR_TX, GPIO_TUYAMCUBR_RX, // TuyaMCU Bridge
GPIO_BIOPDU_PZEM0XX_TX, GPIO_BIOPDU_PZEM016_RX, GPIO_BIOPDU_BIT, // Biomine BioPDU 625x12
GPIO_MCP23XXX_INT, GPIO_MCP23SXX_CS, // MCP23xxx Int and SPI Chip select
GPIO_PCF8574_INT, // PCF8574 interrupt
GPIO_LOX_O2_RX, // LOX-O2 RX
GPIO_GM861_TX, GPIO_GM861_RX, // GM861 Serial interface
GPIO_DINGTIAN_OE, // New version of Dingtian relay board where PL is not shared with OE
GPIO_HDMI_CEC, // Support for HDMI CEC
GPIO_HC8_RXD, // HC8 Serial interface
GPIO_I2S_DAC, // Audio DAC support for ESP32 and ESP32S2
GPIO_MAGIC_SWITCH, // MagicSwitch as in Sonoff BasicR4
GPIO_PIPSOLAR_TX, GPIO_PIPSOLAR_RX, // pipsolar inverter
GPIO_LORA_CS, GPIO_LORA_RST, GPIO_LORA_BUSY, GPIO_LORA_DI0, GPIO_LORA_DI1, GPIO_LORA_DI2, GPIO_LORA_DI3, GPIO_LORA_DI4, GPIO_LORA_DI5, // LoRa SPI
GPIO_TS_SPI_CS, GPIO_TS_RST, GPIO_TS_IRQ, // SPI for Universal Touch Screen
GPIO_RN2XX3_TX, GPIO_RN2XX3_RX, GPIO_RN2XX3_RST, // RN2XX3 LoRaWan node Serial interface
GPIO_TCP_TX_EN, // TCP to serial bridge, EN pin
GPIO_ASR650X_TX, GPIO_ASR650X_RX, // ASR650X LoRaWan node Serial interface
GPIO_WOOLIIS_RX, // Wooliis Battery capacity monitor Serial RX
GPIO_ADC_VOLTAGE, GPIO_ADC_CURRENT, // Analog Voltage and Current
GPIO_BL0906_RX, // BL0906 Serial interface
GPIO_DALI_RX_INV, GPIO_DALI_TX_INV, // DALI
GPIO_LD2410S_TX, GPIO_LD2410S_RX, // HLK-LD2410S
GPIO_I2C_SER_TX, GPIO_I2C_SER_RX, // I2C via Serial using SC18IM704 protocol (xdrv74)
GPIO_TM1640CLK, GPIO_TM1640DIN, // TM1640 (16 x seven-segment LED controler)
GPIO_TWAI_TX, GPIO_TWAI_RX, GPIO_TWAI_BO, GPIO_TWAI_CLK, // ESP32 TWAI serial interface
GPIO_C8_CO2_5K_TX, GPIO_C8_CO2_5K_RX, // C8-CO2-5K CO2 Sensor
GPIO_V9240_TX, GPIO_V9240_RX, // V9240 serial interface
GPIO_LD2402_TX, GPIO_LD2402_RX, // HLK-LD2402
#ifdef ESP32
GPIO_HSDIO_CMD, GPIO_HSDIO_CLK, GPIO_HSDIO_RST, GPIO_HSDIO_D0, GPIO_HSDIO_D1, GPIO_HSDIO_D2, GPIO_HSDIO_D3, // Hosted MCU SDIO interface, including 1-bit and 4-bit modes
#endif
GPIO_VID6608_F, GPIO_VID6608_CW, // VID6608
GPIO_MKSKYBLU_TX, GPIO_MKSKYBLU_RX, // MakeSkyBlue solar charge controller
GPIO_SENSOR_END };
// Error as warning to rethink GPIO usage with max 2045
static_assert(GPIO_SENSOR_END < 2000, "Too many UserSelectablePins");
enum ProgramSelectablePins {
GPIO_FIX_START = 2046,
GPIO_USER, // User configurable needs to be 2047
GPIO_MAX };
#define MAX_OPTIONS_A 9 // Increase if more bits are used from GpioOptionABits
typedef union { // Restricted by MISRA-C Rule 18.4 but so useful...
uint32_t data; // Allow bit manipulation using SetOption
struct { // GPIO Option_A1 .. Option_A32
uint32_t pwm1_input : 1; // bit 0 (v9.2.0.1) - Option_A1 - (Light) Change PWM1 to input on power off and no fade running (1)
uint32_t dummy_energy : 1; // bit 1 (v9.3.1.2) - Option_A2 - (Energy) Enable dummy values
uint32_t udisplay_driver : 1; // bit 2 (v9.3.1.2) - Option_A3 - (Display) Universal display driver
uint32_t enable_ccloader : 1; // bit 3 (v9.4.0.5) - Option_A4 - (Zigbee) Enable CCLoader using Zigbee Rx/Tx/Rst Gpios
uint32_t rotary_mi_desk : 1; // bit 4 (v9.5.0.5) - Option_A5 - (Rotary) Enable Mi Desk emulation
uint32_t linkind_support : 1; // bit 5 (v10.1.0.4) - Option_A6 - (Light) LinkInd support
uint32_t shelly_pro : 1; // bit 6 (v12.2.0.1) - Option_A7 - (Device) Shelly Pro
uint32_t ifan04_h : 1; // bit 7 (v14.1.0.4) - Option_A8 - (Device) Sonoff ifan04-H
uint32_t berry_energy : 1; // bit 8 (v14.2.0.4) - Option_A9 - (Energy) Enable Berry energy driver
uint32_t spare09 : 1; // bit 9
uint32_t spare10 : 1; // bit 10
uint32_t spare11 : 1; // bit 11
uint32_t spare12 : 1; // bit 12
uint32_t spare13 : 1; // bit 13
uint32_t spare14 : 1; // bit 14
uint32_t spare15 : 1; // bit 15
uint32_t spare16 : 1; // bit 16
uint32_t spare17 : 1; // bit 17
uint32_t spare18 : 1; // bit 18
uint32_t spare19 : 1; // bit 19
uint32_t spare20 : 1; // bit 20
uint32_t spare21 : 1; // bit 21
uint32_t spare22 : 1; // bit 22
uint32_t spare23 : 1; // bit 23
uint32_t spare24 : 1; // bit 24
uint32_t spare25 : 1; // bit 25
uint32_t spare26 : 1; // bit 26
uint32_t spare27 : 1; // bit 27
uint32_t spare28 : 1; // bit 28
uint32_t spare29 : 1; // bit 29
uint32_t spare30 : 1; // bit 30
uint32_t spare31 : 1; // bit 31
};
} GpioOptionABits;
#ifdef ESP32
enum SupportedEmulationModules {
SONOFF_BASIC, SONOFF_RF, SONOFF_SV, SONOFF_TH, SONOFF_DUAL, SONOFF_POW, SONOFF_4CH, SONOFF_S2X, SLAMPHER, SONOFF_TOUCH,
SONOFF_LED, CH1, CH4, MOTOR, ELECTRODRAGON, EXS_RELAY, WION, WEMOS_DUMMY, SONOFF_DEV, H801,
SONOFF_SC, SONOFF_BN, SONOFF_4CHPRO, HUAFAN_SS, SONOFF_BRIDGE, SONOFF_B1, AILIGHT, SONOFF_T11, SONOFF_T12, SONOFF_T13,
SUPLA1, WITTY, YUNSHAN, MAGICHOME, LUANIHVIO, KMC_70011, ARILUX_LC01, ARILUX_LC11, SONOFF_DUAL_R2, ARILUX_LC06,
SONOFF_S31, ZENGGE_ZF_WF017, SONOFF_POW_R2, SONOFF_IFAN02, BLITZWOLF_BWSHP, SHELLY1, SHELLY2, PHILIPS, NEO_COOLCAM, ESP_SWITCH,
OBI, TECKIN, APLIC_WDP303075, TUYA_DIMMER, GOSUND, ARMTRONIX_DIMMERS, SK03_TUYA, PS_16_DZ, TECKIN_US, MANZOKU_EU_4,
OBI2, YTF_IR_BRIDGE, DIGOO, KA10, ZX2820, MI_DESK_LAMP, SP10, WAGA, SYF05, SONOFF_L1,
SONOFF_IFAN03, EXS_DIMMER, PWM_DIMMER, SONOFF_D1, SONOFF_ZB_BRIDGE,
MAXMODULE_EMULATION };
#define MAX_OPTIONS_E 1 // Increase if more emulated modules are supported from kModuleEmulationList
const uint8_t kModuleEmulationList[] PROGMEM = {
PWM_DIMMER // (v10.1.0.4) - Option_E1 - (Light) USE_PWM_DIMMER support
};
#endif // ESP32
// Text in webpage Module Parameters and commands GPIOS and GPIO
const char kSensorNames[] PROGMEM =
D_SENSOR_NONE "|"
D_SENSOR_BUTTON "|" D_SENSOR_BUTTON "_n|" D_SENSOR_BUTTON "_i|" D_SENSOR_BUTTON "_in|"
D_SENSOR_SWITCH "|" D_SENSOR_SWITCH "_n|"
D_SENSOR_RELAY "|" D_SENSOR_RELAY "_i|"
D_SENSOR_LED "|" D_SENSOR_LED "_i|"
D_SENSOR_COUNTER "|" D_SENSOR_COUNTER "_n|"
D_SENSOR_PWM "|" D_SENSOR_PWM "_i|"
D_SENSOR_BUZZER "|" D_SENSOR_BUZZER "_i|"
D_SENSOR_LED_LINK "|" D_SENSOR_LED_LINK "_i|"
D_SENSOR_I2C_SCL "|" D_SENSOR_I2C_SDA "|"
D_SENSOR_SPI_MISO "|" D_SENSOR_SPI_MOSI "|" D_SENSOR_SPI_CLK "|" D_SENSOR_SPI_CS "|" D_SENSOR_SPI_DC "|"
D_SENSOR_SSPI_MISO "|" D_SENSOR_SSPI_MOSI "|" D_SENSOR_SSPI_SCLK "|" D_SENSOR_SSPI_CS "|" D_SENSOR_SSPI_DC "|"
D_SENSOR_BACKLIGHT "|" D_SENSOR_DISP_RESET "|"
D_SENSOR_IRSEND "|" D_SENSOR_IRRECV "|"
D_SENSOR_RFSEND "|" D_SENSOR_RFRECV "|"
D_SENSOR_DHT11 "|" D_SENSOR_AM2301 "|" D_SENSOR_SI7021 "|" D_SENSOR_DHT11 "_o|"
D_SENSOR_DS18X20 "|" D_SENSOR_DS18X20 "_o|"
D_SENSOR_WS2812 "|"
D_SENSOR_MHZ_TX "|" D_SENSOR_MHZ_RX "|"
D_SENSOR_PZEM0XX_TX "|" D_SENSOR_PZEM004_RX "|" D_SENSOR_PZEM016_RX "|" D_SENSOR_PZEM017_RX "|"
D_SENSOR_SAIR_TX "|" D_SENSOR_SAIR_RX "|"
D_SENSOR_PMS5003_TX "|" D_SENSOR_PMS5003_RX "|"
D_SENSOR_SDS0X1_TX "|" D_SENSOR_SDS0X1_RX "|"
D_SENSOR_SBR_TX "|" D_SENSOR_SBR_RX "|"
D_SENSOR_SR04_TRIG "|" D_SENSOR_SR04_ECHO "|"
D_SENSOR_SDM120_TX "|" D_SENSOR_SDM120_RX "|"
D_SENSOR_SDM630_TX "|" D_SENSOR_SDM630_RX "|"
D_SENSOR_TM1638_CLK "|" D_SENSOR_TM1638_DIO "|" D_SENSOR_TM1638_STB "|"
D_SENSOR_DFR562 "|"
D_SENSOR_HX711_SCK "|" D_SENSOR_HX711_DAT "|"
D_SENSOR_TX2X_TX "|"
D_SENSOR_TUYA_TX "|" D_SENSOR_TUYA_RX "|"
D_SENSOR_MGC3130_XFER "|" D_SENSOR_MGC3130_RESET "|"
D_SENSOR_RF_SENSOR "|"
D_SENSOR_AZ_TX "|" D_SENSOR_AZ_RX "|"
D_SENSOR_MAX31855_CS "|" D_SENSOR_MAX31855_CLK "|" D_SENSOR_MAX31855_DO "|"
D_SENSOR_NRG_SEL "|" D_SENSOR_NRG_SEL "_i|" D_SENSOR_NRG_CF1 "|" D_SENSOR_HLW_CF "|" D_SENSOR_HJL_CF "|"
D_SENSOR_MCP39F5_TX "|" D_SENSOR_MCP39F5_RX "|" D_SENSOR_MCP39F5_RST "|"
D_SENSOR_PN532_TX "|" D_SENSOR_PN532_RX "|"
D_SENSOR_SM16716_CLK "|" D_SENSOR_SM16716_DAT "|" D_SENSOR_SM16716_POWER "|"
D_SENSOR_MY92X1_DI "|" D_SENSOR_MY92X1_DCKI "|"
D_SENSOR_CSE7766_TX "|" D_SENSOR_CSE7766_RX "|"
D_SENSOR_ARIRFRCV "|" D_SENSOR_ARIRFSEL "|"
D_SENSOR_TXD "|" D_SENSOR_RXD "|"
D_SENSOR_ROTARY " A|" D_SENSOR_ROTARY " B|"
D_SENSOR_ADC_JOYSTICK "|"
D_SENSOR_MAX31865_CS "|"
D_SENSOR_HRE_CLOCK "|" D_SENSOR_HRE_DATA "|"
D_SENSOR_ADE7953_IRQ "|"
D_SENSOR_SOLAXX1_TX "|" D_SENSOR_SOLAXX1_RX "|"
D_SENSOR_ZIGBEE_TXD "|" D_SENSOR_ZIGBEE_RXD "|"
D_SENSOR_RDM6300_RX "|"
D_SENSOR_IBEACON_TX "|" D_SENSOR_IBEACON_RX "|"
D_SENSOR_A4988_DIR "|" D_SENSOR_A4988_STP "|" D_SENSOR_A4988_ENA "|" D_SENSOR_A4988_MS1 "|"
D_SENSOR_OUTPUT_HI "|" D_SENSOR_OUTPUT_LO "|"
D_SENSOR_DDS2382_TX "|" D_SENSOR_DDS2382_RX "|"
D_SENSOR_DDSU666_TX "|" D_SENSOR_DDSU666_RX "|"
D_SENSOR_SM2135_CLK "|" D_SENSOR_SM2135_DAT "|"
D_SENSOR_DEEPSLEEP "|" D_SENSOR_EXS_ENABLE "|"
D_SENSOR_CLIENT_TX "|" D_SENSOR_CLIENT_RX "|" D_SENSOR_CLIENT_RESET "|" D_SENSOR_CLIENT_RESET "_i|"
D_SENSOR_HPMA_RX "|" D_SENSOR_HPMA_TX "|"
D_SENSOR_GPS_RX "|" D_SENSOR_GPS_TX "|"
D_SENSOR_HM10_RX "|" D_SENSOR_HM10_TX "|"
D_SENSOR_LE01MR_RX "|" D_SENSOR_LE01MR_TX "|"
D_SENSOR_CC1101_GDO0 "|" D_SENSOR_CC1101_GDO2 "|"
D_SENSOR_HRXL_RX "|"
D_SENSOR_ELECTRIQ_MOODL "|"
D_SENSOR_AS3935 "|"
D_SENSOR_ADC_INPUT "|"
D_SENSOR_ADC_TEMP "|"
D_SENSOR_ADC_LIGHT "|"
D_SENSOR_ADC_BUTTON "|" D_SENSOR_ADC_BUTTON "_i|"
D_SENSOR_ADC_RANGE "|"
D_SENSOR_ADC_CT_POWER "|"
#ifdef ESP32
D_GPIO_WEBCAM_PWDN "|" D_GPIO_WEBCAM_RESET "|" D_GPIO_WEBCAM_XCLK "|"
D_GPIO_WEBCAM_SIOD "|" D_GPIO_WEBCAM_SIOC "|"
D_GPIO_WEBCAM_DATA "|"
D_GPIO_WEBCAM_VSYNC "|" D_GPIO_WEBCAM_HREF "|" D_GPIO_WEBCAM_PCLK "|"
D_GPIO_WEBCAM_PSCLK "|"
D_GPIO_WEBCAM_HSD "|"
D_GPIO_WEBCAM_PSRCS "|"
#endif
D_SENSOR_BOILER_OT_RX "|" D_SENSOR_BOILER_OT_TX "|"
D_SENSOR_WINDMETER_SPEED "|" D_SENSOR_BUTTON "_tc|"
D_SENSOR_BL0940_RX "|"
D_SENSOR_TCP_TXD "|" D_SENSOR_TCP_RXD "|"
#ifdef ESP32
D_SENSOR_ETH_PHY_POWER "|" D_SENSOR_ETH_PHY_MDC "|" D_SENSOR_ETH_PHY_MDIO "|"
#endif
D_SENSOR_TELEINFO_RX "|" D_SENSOR_TELEINFO_ENABLE "|"
D_SENSOR_LMT01_PULSE "|"
D_SENSOR_IEM3000_TX "|" D_SENSOR_IEM3000_RX "|"
D_SENSOR_ZIGBEE_RST "|"
D_SENSOR_DYP_RX "|"
D_SENSOR_MIEL_HVAC_TX "|" D_SENSOR_MIEL_HVAC_RX "|"
D_SENSOR_WE517_TX "|" D_SENSOR_WE517_RX "|"
D_SENSOR_AS608_TX "|" D_SENSOR_AS608_RX "|"
D_SENSOR_SHELLY_DIMMER_BOOT0 "|" D_SENSOR_SHELLY_DIMMER_RST_INV "|"
D_SENSOR_RC522_RST "|"
D_SENSOR_P9813_CLK "|" D_SENSOR_P9813_DAT "|"
D_SENSOR_OPTION " A|"
D_SENSOR_FTC532 "|"
D_SENSOR_RC522_CS "|"
D_SENSOR_NRF24_CS "|" D_SENSOR_NRF24_DC "|"
D_SENSOR_ILI9341_CS "|" D_SENSOR_ILI9341_DC "|"
D_SENSOR_ILI9488_CS "|"
D_SENSOR_EPAPER29_CS "|"
D_SENSOR_EPAPER42_CS "|"
D_SENSOR_SSD1351_CS "|"
D_SENSOR_RA8876_CS "|"
D_SENSOR_ST7789_CS "|" D_SENSOR_ST7789_DC "|"
D_SENSOR_SSD1331_CS "|" D_SENSOR_SSD1331_DC "|"
D_SENSOR_SDCARD_CS "|"
D_SENSOR_ROTARY " A_n|" D_SENSOR_ROTARY " B_n|"
D_SENSOR_ADC_PH "|"
D_SENSOR_BS814_CLK "|" D_SENSOR_BS814_DAT "|"
D_SENSOR_WIEGAND_D0 "|" D_SENSOR_WIEGAND_D1 "|"
D_SENSOR_NEOPOOL_TX "|" D_SENSOR_NEOPOOL_RX "|"
D_SENSOR_SDM72_TX "|" D_SENSOR_SDM72_RX "|"
D_SENSOR_TM1637_CLK "|" D_SENSOR_TM1637_DIO "|"
D_SENSOR_PROJECTOR_CTRL_TX "|" D_SENSOR_PROJECTOR_CTRL_RX "|"
D_SENSOR_SSD1351_DC "|"
D_SENSOR_XPT2046_CS "|"
D_SENSOR_CSE7761_TX "|" D_SENSOR_CSE7761_RX "|"
D_SENSOR_VL53LXX_XSHUT "|"
D_SENSOR_MAX7219_CLK "|" D_SENSOR_MAX7219_DIN "|" D_SENSOR_MAX7219_CS "|"
D_SENSOR_TFMINIPLUS_TX "|" D_SENSOR_TFMINIPLUS_RX "|"
D_SENSOR_ZEROCROSS "|"
#ifdef ESP32
D_SENSOR_HALLEFFECT "|"
D_SENSOR_EPD_DATA "|"
#endif
D_SENSOR_INPUT "|"
#ifdef ESP32
D_SENSOR_BUTTON "_d|" D_SENSOR_BUTTON "_id|" D_SENSOR_SWITCH "_d|"
#endif
D_SENSOR_I2S_DOUT "|" D_SENSOR_I2S_BCLK "|" D_SENSOR_I2S_WS "|" D_SENSOR_I2S_DIN "|"
D_SENSOR_I2S_BCLK_IN "|" D_SENSOR_I2S_WS_IN "|"
D_SENSOR_INTERRUPT "|"
D_SENSOR_MCP2515_CS "|"
D_SENSOR_HRG15_TX "|" D_SENSOR_HRG15_RX "|"
D_SENSOR_VINDRIKTNING_RX "|"
D_SENSOR_BL0939_RX "|"
D_SENSOR_BL0942_RX "|"
D_SENSOR_HM330X_SET "|"
D_SENSOR_HEARTBEAT "|" D_SENSOR_HEARTBEAT "_i|"
D_GPIO_SHIFT595_SRCLK "|" D_GPIO_SHIFT595_RCLK "|" D_GPIO_SHIFT595_OE "|" D_GPIO_SHIFT595_SER "|"
D_SENSOR_SOLAXX1_RTS "|"
D_SENSOR_OPTION " E|"
D_SENSOR_SDM230_TX "|" D_SENSOR_SDM230_RX "|"
D_SENSOR_ADC_MQ "|"
D_SENSOR_CM11_TX "|" D_SENSOR_CM11_RX "|"
D_SENSOR_BL6523_TX "|" D_SENSOR_BL6523_RX "|"
D_SENSOR_ADE7880_IRQ "|"
D_SENSOR_RESET "|"
D_SENSOR_MS01 "|"
D_SENSOR_SDIO_CMD "|" D_SENSOR_SDIO_CLK "|" D_SENSOR_SDIO_D0 "|" D_SENSOR_SDIO_D1 "|" D_SENSOR_SDIO_D2 "|" D_SENSOR_SDIO_D3 "|"
D_SENSOR_FLOWRATEMETER "|"
D_SENSOR_BP5758D_CLK "|" D_SENSOR_BP5758D_DAT "|"
D_SENSOR_SM2335_CLK "|" D_SENSOR_SM2335_DAT "|"
D_SENSOR_DFR562_BUSY "|"
D_GPIO_TM1621_CS "|" D_GPIO_TM1621_WR "|" D_GPIO_TM1621_RD "|" D_GPIO_TM1621_DAT "|"
D_SENSOR_RELAY "_b|" D_SENSOR_RELAY "_bi|"
D_SENSOR_I2S_MCLK "|"
D_SENSOR_MBR_TX "|" D_SENSOR_MBR_RX "|"
D_SENSOR_ADE7953_RST "|"
D_SENSOR_NRG_MBS_TX "|" D_SENSOR_NRG_MBS_RX "|"
D_SENSOR_ADE7953_CS "|"
D_SENSOR_DALI_RX "|" D_SENSOR_DALI_TX "|"
D_SENSOR_BP1658CJ_CLK "|" D_SENSOR_BP1658CJ_DAT "|"
D_GPIO_DINGTIAN_CLK "|" D_GPIO_DINGTIAN_SDI "|" D_GPIO_DINGTIAN_Q7 "|" D_GPIO_DINGTIAN_PL "|" D_GPIO_DINGTIAN_RCK "|"
D_SENSOR_LD2410_TX "|" D_SENSOR_LD2410_RX "|"
D_SENSOR_MBR_TX_ENA "|" D_SENSOR_NRG_MBS_TX_ENA "|"
D_SENSOR_ME007_TRIG "|" D_SENSOR_ME007_RX "|"
D_SENSOR_TUYAMCUBR_TX "|" D_SENSOR_TUYAMCUBR_RX "|"
D_SENSOR_BIOPDU_PZEM0XX_TX "|" D_SENSOR_BIOPDU_PZEM016_RX "|" D_SENSOR_BIOPDU_BIT "|"
D_SENSOR_MCP23XXX_INT "|" D_SENSOR_MCP23SXX_CS "|"
D_SENSOR_PCF8574_INT "|"
D_SENSOR_LOX_O2_RX "|"
D_SENSOR_GM861_TX "|" D_SENSOR_GM861_RX "|"
D_GPIO_DINGTIAN_OE "|"
D_SENSOR_HDMI_CEC "|"
D_SENSOR_HC8_RX "|"
D_SENSOR_I2S_DAC "|"
D_GPIO_MAGIC_SWITCH "|"
D_SENSOR_PIPSOLAR_TX "|" D_SENSOR_PIPSOLAR_RX "|"
D_GPIO_LORA_CS "|" D_GPIO_LORA_RST "|" D_GPIO_LORA_BUSY "|" D_GPIO_LORA_DI "0|" D_GPIO_LORA_DI "1|" D_GPIO_LORA_DI "2|" D_GPIO_LORA_DI "3|" D_GPIO_LORA_DI "4|" D_GPIO_LORA_DI "5|"
D_GPIO_TS_SPI_CS "|" D_GPIO_TS_RST "|" D_GPIO_TS_IRQ "|"
D_GPIO_RN2XX3_TX "|" D_GPIO_RN2XX3_RX "|" D_GPIO_RN2XX3_RST "|"
D_SENSOR_TCP_TXD_EN "|"
D_GPIO_ASR650X_TX "|" D_GPIO_ASR650X_RX "|"
D_SENSOR_WOOLIIS_RX "|"
D_SENSOR_ADC_VOLTAGE "|" D_SENSOR_ADC_CURRENT "|"
D_SENSOR_BL0906_RX "|"
D_SENSOR_DALI_RX "_i|" D_SENSOR_DALI_TX "_i|"
D_SENSOR_LD2410S_TX "|" D_SENSOR_LD2410S_RX "|"
D_SENSOR_I2C_SER_TX "|" D_SENSOR_I2C_SER_RX "|"
D_SENSOR_TM1640_CLK "|" D_SENSOR_TM1640_DIN "|"
D_SENSOR_TWAI_TX "|" D_SENSOR_TWAI_RX "|" D_SENSOR_TWAI_BO "|" D_SENSOR_TWAI_CLK "|"
D_SENSOR_C8_CO2_5K_TX "|" D_SENSOR_C8_CO2_5K_RX "|"
D_SENSOR_V9240_TX "|" D_SENSOR_V9240_RX "|"
D_SENSOR_LD2402_TX "|" D_SENSOR_LD2402_RX "|"
#ifdef ESP32
D_SENSOR_HSDIO_CMD "|" D_SENSOR_HSDIO_CLK "|" D_SENSOR_HSDIO_RST "|" D_SENSOR_HSDIO_D0 "|" D_SENSOR_HSDIO_D1 "|" D_SENSOR_HSDIO_D2 "|" D_SENSOR_HSDIO_D3 "|"
#endif
D_VID6608_F "|" D_VID6608_CW "|"
D_SENSOR_MKSKYBLU_TX "|" D_SENSOR_MKSKYBLU_RX "|"
;
const char kSensorNamesFixed[] PROGMEM =
D_SENSOR_USER;
// Max number of GPIOs
#define MAX_I2C 1 // Display no index if one bus
#ifdef USE_I2C_BUS2
#undef MAX_I2C
#define MAX_I2C 2
#endif
#define MAX_MAX31855S 6
#define MAX_MAX31865S 6
#define MAX_MCP23XXX 6
#define MAX_FLOWRATEMETER 2
#define MAX_A4988_MSS 3
#define MAX_WEBCAM_DATA 8
#define MAX_WEBCAM_HSD 3
#define MAX_SM2135_DAT 10
#define MAX_SM2335_DAT 16
#define MAX_DSB 4
#define MAX_BP1658CJ_DAT 16
#define MAX_DINGTIAN_SHIFT 4
#define MAX_MAGIC_SWITCH_MODES 2
#define MAX_BL0906_RX 6 // Model number of phases, 2 (EM2), 6 (EM6)
#define MAX_BL0942_RX 8 // Baudrates 1/5 (4800), 2/6 (9600), 3/7 (19200), 4/8 (38400), Support Positive values only 1..4, Support also negative values 5..8
#define MAX_CSE7761 2 // Model 1/2 (DUALR3), 2/2 (POWCT)
#define MAX_TWAI SOC_TWAI_CONTROLLER_NUM
#define MAX_GPS_RX 3 // Baudrates 1 (9600), 2 (19200), 3 (38400)
#ifdef ESP32
#define MAX_MKSKYBLU_IF 8 // MakeSkyBlue solar charger: ESP32-NRG supports up to 8 phases
#else
#define MAX_MKSKYBLU_IF 3 // MakeSkyBlue solar charger: ESP82xx-NRG supports up to 3 phases
#endif
const uint16_t kGpioNiceList[] PROGMEM = {
GPIO_NONE, // Not used
AGPIO(GPIO_OPTION_A) + AGMAX(MAX_OPTIONS_A), // Device specific options
#ifdef ESP32
AGPIO(GPIO_OPTION_E) + AGMAX(MAX_OPTIONS_E), // Device module emulation
#endif
AGPIO(GPIO_KEY1) + AGMAX(MAX_KEYS), // Buttons
AGPIO(GPIO_KEY1_NP) + AGMAX(MAX_KEYS),
#ifdef ESP32
AGPIO(GPIO_KEY1_PD) + AGMAX(MAX_KEYS),
#endif
AGPIO(GPIO_KEY1_INV) + AGMAX(MAX_KEYS),
AGPIO(GPIO_KEY1_INV_NP) + AGMAX(MAX_KEYS),
#ifdef ESP32
AGPIO(GPIO_KEY1_INV_PD) + AGMAX(MAX_KEYS),
#if defined(SOC_TOUCH_VERSION_1) || defined(SOC_TOUCH_VERSION_2)
AGPIO(GPIO_KEY1_TC) + AGMAX(MAX_KEYS), // Touch button
#endif // ESP32 SOC_TOUCH_VERSION_1 or SOC_TOUCH_VERSION_2
#endif
AGPIO(GPIO_SWT1) + AGMAX(MAX_SWITCHES), // User connected external switches
AGPIO(GPIO_SWT1_NP) + AGMAX(MAX_SWITCHES),
#ifdef ESP32
AGPIO(GPIO_SWT1_PD) + AGMAX(MAX_SWITCHES),
#endif
#ifdef ROTARY_V1
AGPIO(GPIO_ROT1A) + AGMAX(MAX_ROTARIES), // Rotary A Pin
AGPIO(GPIO_ROT1B) + AGMAX(MAX_ROTARIES), // Rotary B Pin
AGPIO(GPIO_ROT1A_NP) + AGMAX(MAX_ROTARIES), // Rotary A Pin No Pullup
AGPIO(GPIO_ROT1B_NP) + AGMAX(MAX_ROTARIES), // Rotary B Pin No Pullup
#endif
AGPIO(GPIO_REL1) + AGMAX(MAX_RELAYS), // Relays
AGPIO(GPIO_REL1_INV) + AGMAX(MAX_RELAYS),
AGPIO(GPIO_REL1_BI) + AGMAX(MAX_RELAYS), // Bistable (Latching) two coil relays
AGPIO(GPIO_REL1_BI_INV) + AGMAX(MAX_RELAYS),
AGPIO(GPIO_LED1) + AGMAX(MAX_LEDS), // Leds
AGPIO(GPIO_LED1_INV) + AGMAX(MAX_LEDS),
#ifdef USE_COUNTER
AGPIO(GPIO_CNTR1) + AGMAX(MAX_COUNTERS), // Counters
AGPIO(GPIO_CNTR1_NP) + AGMAX(MAX_COUNTERS),
#endif
AGPIO(GPIO_PWM1) + AGMAX(MAX_PWMS), // RGB Red or C Cold White
AGPIO(GPIO_PWM1_INV) + AGMAX(MAX_PWMS), // or extended PWM for ESP32
#ifdef USE_BUZZER
AGPIO(GPIO_BUZZER), // Buzzer
AGPIO(GPIO_BUZZER_INV), // Inverted buzzer
#endif
AGPIO(GPIO_LEDLNK), // Link led
AGPIO(GPIO_LEDLNK_INV), // Inverted link led
#ifdef USE_BERRY
AGPIO(GPIO_INPUT) + AGMAX(MAX_SWITCHES), // Pure digital input to be read via Berry
AGPIO(GPIO_INTERRUPT) + AGMAX(MAX_SWITCHES), // Interrupt pins to be catched by Berry
#endif
AGPIO(GPIO_OUTPUT_HI), // Fixed output high
AGPIO(GPIO_OUTPUT_LO), // Fixed output low
AGPIO(GPIO_HEARTBEAT), // Every second pulsed high
AGPIO(GPIO_HEARTBEAT_INV), // Every second pulsed low
AGPIO(GPIO_RESET), // Generic reset
#ifdef USE_FTC532
AGPIO(GPIO_FTC532), // FTC532 touch input
#endif
#ifdef USE_BS814A2
AGPIO(GPIO_BS814_CLK), // Holtek BS814A2 touch ctrlr
AGPIO(GPIO_BS814_DAT),
#endif
/*-------------------------------------------------------------------------------------------*\
* Protocol specifics
\*-------------------------------------------------------------------------------------------*/
#ifdef USE_I2C
AGPIO(GPIO_I2C_SCL) + AGMAX(MAX_I2C), // I2C SCL
AGPIO(GPIO_I2C_SDA) + AGMAX(MAX_I2C), // I2C SDA
#ifdef USE_PCF8574
AGPIO(GPIO_PCF8574_INT), // PCF8574 Interrupt
#endif // USE_PCF8574
#ifdef USE_I2C_SERIAL
AGPIO(GPIO_I2C_SER_TX) + AGMAX(MAX_I2C), // I2C via Serial TX
AGPIO(GPIO_I2C_SER_RX) + AGMAX(MAX_I2C), // I2C via Serial RX
#endif // USE_I2C_SERIAL
#endif
#if defined(USE_I2S_AUDIO) || defined (USE_I2S)
AGPIO(GPIO_I2S_MCLK) + AGMAX(MAX_I2S), // I2S master clock
AGPIO(GPIO_I2S_BCLK) + AGMAX(MAX_I2S), // I2S bit clock
AGPIO(GPIO_I2S_DOUT) + AGMAX(MAX_I2S), // I2S Out Data
AGPIO(GPIO_I2S_DAC) + AGMAX(2), // I2S DAC Output
AGPIO(GPIO_I2S_WS) + AGMAX(MAX_I2S), // I2S word select
AGPIO(GPIO_I2S_DIN) + AGMAX(MAX_I2S), // I2S IN Data
#endif
#ifdef USE_SPI
AGPIO(GPIO_SPI_MISO) + AGMAX(MAX_SPI), // SPI MISO
AGPIO(GPIO_SPI_MOSI) + AGMAX(MAX_SPI), // SPI MOSI
AGPIO(GPIO_SPI_CLK) + AGMAX(MAX_SPI), // SPI Clk
AGPIO(GPIO_SPI_CS) + AGMAX(MAX_SPI), // SPI Chip Select
AGPIO(GPIO_SPI_DC) + AGMAX(MAX_SPI), // SPI Data Direction
#ifdef USE_NRF24
AGPIO(GPIO_NRF24_CS),
AGPIO(GPIO_NRF24_DC),
#endif
#ifdef USE_RC522
AGPIO(GPIO_RC522_CS), // RC522 Rfid Chip Select
AGPIO(GPIO_RC522_RST), // RC522 Rfid Reset
#endif
#ifdef USE_SDCARD
AGPIO(GPIO_SDCARD_CS) + AGMAX(MAX_SPI), // SDCard in SPI mode
#endif // USE_SDCARD
#if defined(USE_MCP2515) || defined(USE_CANSNIFFER)
AGPIO(GPIO_MCP2515_CS),
#endif // USE_MCP2515
#ifdef USE_MCP23XXX_DRV
AGPIO(GPIO_MCP23SXX_CS) + AGMAX(MAX_MCP23XXX),
#endif // USE_MCP23XXX_DRV
#ifdef USE_SPI_LORA
AGPIO(GPIO_LORA_CS),
AGPIO(GPIO_LORA_RST),
AGPIO(GPIO_LORA_BUSY),
AGPIO(GPIO_LORA_DI0),
AGPIO(GPIO_LORA_DI1),
AGPIO(GPIO_LORA_DI2),
AGPIO(GPIO_LORA_DI3),
AGPIO(GPIO_LORA_DI4),
AGPIO(GPIO_LORA_DI5),
#endif // USE_SPI_LORA
#endif // USE_SPI
#if defined(USE_SDCARD) && defined(ESP32)
AGPIO(GPIO_SDIO_CMD), // SDCard in SDIO mode
AGPIO(GPIO_SDIO_CLK),
AGPIO(GPIO_SDIO_D0),
AGPIO(GPIO_SDIO_D1), // (opt) if in 4-bit mode, DAT1-3 are needed
AGPIO(GPIO_SDIO_D2),
AGPIO(GPIO_SDIO_D3),
#endif // USE_SDCARD
AGPIO(GPIO_SSPI_MISO), // Software SPI Master Input Client Output
AGPIO(GPIO_SSPI_MOSI), // Software SPI Master Output Client Input
AGPIO(GPIO_SSPI_SCLK), // Software SPI Serial Clock
AGPIO(GPIO_SSPI_CS), // Software SPI Chip Select
AGPIO(GPIO_SSPI_DC), // Software SPI Data or Command
#if defined(USE_DISPLAY) || defined(USE_LVGL)
#ifdef USE_UNIVERSAL_TOUCH
AGPIO(GPIO_TS_SPI_CS), // Touch CS
AGPIO(GPIO_TS_RST), // Touch Reset
AGPIO(GPIO_TS_IRQ), // Touch IRQ
#endif // USE_UNIVERSAL_TOUCH
// REMOVED
// #ifdef USE_DISPLAY_ILI9341
// AGPIO(GPIO_ILI9341_CS),
// AGPIO(GPIO_ILI9341_DC),
// #endif // USE_DISPLAY_ILI9341
#ifdef USE_XPT2046
AGPIO(GPIO_XPT2046_CS), // XPT2046 SPI Chip Select
#endif
#ifdef USE_DISPLAY_ILI9488
AGPIO(GPIO_ILI9488_CS),
#endif // USE_DISPLAY_ILI9488
#ifdef USE_DISPLAY_EPAPER_29
AGPIO(GPIO_EPAPER29_CS),
#endif // USE_DISPLAY_EPAPER_29
#ifdef USE_DISPLAY_EPAPER_42
AGPIO(GPIO_EPAPER42_CS),
#endif // USE_DISPLAY_EPAPER_42
// REMOVED
// #ifdef USE_DISPLAY_SSD1351
// AGPIO(GPIO_SSD1351_CS),
// AGPIO(GPIO_SSD1351_DC),
// #endif // USE_DISPLAY_SSD1351
#ifdef USE_DISPLAY_RA8876
AGPIO(GPIO_RA8876_CS),
#endif // USE_DISPLAY_RA8876
// REMOVED
// #ifdef USE_DISPLAY_ST7789
// AGPIO(GPIO_ST7789_CS),
// AGPIO(GPIO_ST7789_DC),
// #endif // USE_DISPLAY_ST7789
// REMOVED
// #ifdef USE_DISPLAY_SSD1331
// AGPIO(GPIO_SSD1331_CS),
// AGPIO(GPIO_SSD1331_DC),
// #endif // USE_DISPLAY_SSD1331
#ifdef USE_DISPLAY_MAX7219_MATRIX
#undef USE_DISPLAY_MAX7219
#undef USE_DISPLAY_TM1637
AGPIO(GPIO_MAX7219CLK),
AGPIO(GPIO_MAX7219DIN),
AGPIO(GPIO_MAX7219CS),
#endif // USE_DISPLAY_MAX7219_MATRIX
#ifdef USE_DISPLAY_MAX7219
AGPIO(GPIO_MAX7219CLK),
AGPIO(GPIO_MAX7219DIN),
AGPIO(GPIO_MAX7219CS),
#endif // USE_DISPLAY_MAX7219
#ifdef USE_DISPLAY_TM1637
AGPIO(GPIO_TM1637CLK),
AGPIO(GPIO_TM1637DIO),
AGPIO(GPIO_TM1638CLK),
AGPIO(GPIO_TM1638DIO),
AGPIO(GPIO_TM1638STB),
#endif // USE_DISPLAY_TM1637
#ifdef USE_DISPLAY_TM1640
AGPIO(GPIO_TM1640CLK),
AGPIO(GPIO_TM1640DIN),
#endif // USE_DISPLAY_TM1640
AGPIO(GPIO_BACKLIGHT), // Display backlight control
AGPIO(GPIO_OLED_RESET), // OLED Display Reset
#ifdef ESP32
AGPIO(GPIO_EPD_DATA), // Base connection EPD driver
#endif
#endif // USE_DISPLAY
#ifdef USE_DISPLAY_TM1621_SONOFF
// Initial support outside display driver
AGPIO(GPIO_TM1621_CS),
AGPIO(GPIO_TM1621_WR),
AGPIO(GPIO_TM1621_RD),
AGPIO(GPIO_TM1621_DAT),
#endif // USE_DISPLAY_TM1621_SONOFF
#ifdef USE_MAX31865
AGPIO(GPIO_SSPI_MAX31865_CS1) + AGMAX(MAX_MAX31865S),
#endif
#ifdef USE_MCP23XXX_DRV
AGPIO(GPIO_MCP23XXX_INT) + AGMAX(MAX_MCP23XXX),
#endif
#ifdef USE_HDMI_CEC
AGPIO(GPIO_HDMI_CEC), // HDMI CEC bus
#endif
AGPIO(GPIO_TXD), // Serial interface
AGPIO(GPIO_RXD), // Serial interface
/*-------------------------------------------------------------------------------------------*\
* Single wire sensors
\*-------------------------------------------------------------------------------------------*/
#ifdef USE_DHT
AGPIO(GPIO_DHT11), // DHT11
AGPIO(GPIO_DHT22), // DHT21, DHT22, AM2301, AM2302, AM2321
AGPIO(GPIO_SI7021), // iTead SI7021
AGPIO(GPIO_MS01), // Sonoff MS01
AGPIO(GPIO_DHT11_OUT), // Pseudo Single wire DHT11, DHT21, DHT22, AM2301, AM2302, AM2321
#endif
#ifdef USE_DS18x20
AGPIO(GPIO_DSB) + AGMAX(MAX_DSB), // Single wire DS18B20 or DS18S20
AGPIO(GPIO_DSB_OUT) + AGMAX(MAX_DSB), // Pseudo Single wire DS18B20 or DS18S20
#endif // USE_DS18x20
#ifdef USE_LMT01
AGPIO(GPIO_LMT01), // LMT01, count pulses on GPIO
#endif
/*-------------------------------------------------------------------------------------------*\
* Light
\*-------------------------------------------------------------------------------------------*/
#ifdef USE_LIGHT
#ifdef USE_WS2812
#if (USE_WS2812_HARDWARE == NEO_HW_P9813)
AGPIO(GPIO_P9813_CLK), // P9813 CLOCK
AGPIO(GPIO_P9813_DAT), // P9813 DATA
#else
AGPIO(GPIO_WS2812) + AGMAX(MAX_RMT), // WS2812 Led string, using RMT on ESP32
#endif // NEO_HW_P9813
#endif
#ifdef USE_ARILUX_RF
AGPIO(GPIO_ARIRFRCV), // AriLux RF Receive input
AGPIO(GPIO_ARIRFSEL), // Arilux RF Receive input selected
#endif
#ifdef USE_MY92X1
AGPIO(GPIO_DI), // my92x1 PWM input
AGPIO(GPIO_DCKI), // my92x1 CLK input
#endif // USE_MY92X1
#ifdef USE_SM16716
AGPIO(GPIO_SM16716_CLK), // SM16716 CLOCK
AGPIO(GPIO_SM16716_DAT), // SM16716 DATA
AGPIO(GPIO_SM16716_SEL), // SM16716 SELECT
#endif // USE_SM16716
#ifdef USE_SM2135
AGPIO(GPIO_SM2135_CLK), // SM2135 CLOCK
AGPIO(GPIO_SM2135_DAT) + AGMAX(MAX_SM2135_DAT), // SM2135 DATA
#endif // USE_SM2135
#ifdef USE_SM2335
AGPIO(GPIO_SM2335_CLK), // SM2335 CLOCK
AGPIO(GPIO_SM2335_DAT) + AGMAX(MAX_SM2335_DAT), // SM2335 DATA
#endif // USE_SM2335
#ifdef USE_BP1658CJ
AGPIO(GPIO_BP1658CJ_CLK), // BP1658CJ CLOCK
AGPIO(GPIO_BP1658CJ_DAT) + AGMAX(MAX_BP1658CJ_DAT), // BP1658CJ DATA
#endif // USE_BP1658CJ
#ifdef USE_BP5758D
AGPIO(GPIO_BP5758D_CLK), // BP5758D CLOCK
AGPIO(GPIO_BP5758D_DAT), // BP5758D DATA
#endif // USE_BP5758D
#ifdef USE_TUYA_MCU
AGPIO(GPIO_TUYA_TX), // Tuya Serial interface
AGPIO(GPIO_TUYA_RX), // Tuya Serial interface
#endif
#ifdef USE_EXS_DIMMER
AGPIO(GPIO_EXS_ENABLE), // EXS MCU Enable
#endif
#ifdef USE_ELECTRIQ_MOODL
AGPIO(GPIO_ELECTRIQ_MOODL_TX),
#endif
#ifdef USE_SHELLY_DIMMER
AGPIO(GPIO_SHELLY_DIMMER_BOOT0),
AGPIO(GPIO_SHELLY_DIMMER_RST_INV),
#endif
#endif // USE_LIGHT
#ifdef USE_DALI
AGPIO(GPIO_DALI_TX), // DALI TX
AGPIO(GPIO_DALI_TX_INV), // DALI TX inverted
AGPIO(GPIO_DALI_RX), // DALI RX
AGPIO(GPIO_DALI_RX_INV), // DALI RX inverted
#endif // USE_DALI
/*-------------------------------------------------------------------------------------------*\
* Transmission sensors
\*-------------------------------------------------------------------------------------------*/
#if defined(USE_IR_REMOTE) || defined(USE_IR_REMOTE_FULL)
AGPIO(GPIO_IRSEND) + AGMAX(MAX_IRSEND), // IR remote
#if defined(USE_IR_RECEIVE) || defined(USE_IR_REMOTE_FULL)
AGPIO(GPIO_IRRECV), // IR receiver
#endif
#endif
#ifdef USE_RC_SWITCH
AGPIO(GPIO_RFSEND), // RF transmitter
AGPIO(GPIO_RFRECV), // RF receiver
#endif
#ifdef USE_RF_SENSOR
AGPIO(GPIO_RF_SENSOR), // Rf receiver with sensor decoding
#endif
#ifdef USE_SR04
AGPIO(GPIO_SR04_TRIG) + AGMAX(MAX_SR04), // SR04 Tri/TXgger pin
AGPIO(GPIO_SR04_ECHO) + AGMAX(MAX_SR04), // SR04 Ech/RXo pin
#endif
#ifdef USE_ME007
AGPIO(GPIO_ME007_TRIG), // ME007 Trigger pin (xsns_23_me007.ino)
AGPIO(GPIO_ME007_RX), // ME007 Rx pin (xsns_23_me007.ino)
#endif
#ifdef USE_TM1638
AGPIO(GPIO_TM1638CLK), // TM1638 Clock
AGPIO(GPIO_TM1638DIO), // TM1638 Data I/O
AGPIO(GPIO_TM1638STB), // TM1638 Strobe
#endif
#ifdef USE_HX711
AGPIO(GPIO_HX711_SCK), // HX711 Load Cell clock
AGPIO(GPIO_HX711_DAT), // HX711 Load Cell data
#endif
#ifdef USE_TFMINIPLUS
AGPIO(GPIO_TFMINIPLUS_TX), // TFmini Plus TX pin
AGPIO(GPIO_TFMINIPLUS_RX), // TFmini Plus RX pin
#endif
/*-------------------------------------------------------------------------------------------*\
* Energy sensors
\*-------------------------------------------------------------------------------------------*/
#ifdef USE_ENERGY_SENSOR
#ifdef USE_HLW8012
AGPIO(GPIO_NRG_SEL), // HLW8012/HLJ-01 Sel output (1 = Voltage)
AGPIO(GPIO_NRG_SEL_INV), // HLW8012/HLJ-01 Sel output (0 = Voltage)
AGPIO(GPIO_NRG_CF1), // HLW8012/HLJ-01 CF1 voltage / current
AGPIO(GPIO_HLW_CF), // HLW8012 CF power
AGPIO(GPIO_HJL_CF), // HJL-01/BL0937 CF power
#endif
#if defined(USE_I2C) && defined(USE_ADE7880)
AGPIO(GPIO_ADE7880_IRQ) + AGMAX(2), // ADE7880 IRQ - (1 = IRQ1, 2 = IRQ2)
#endif
#ifdef USE_ADE7953
#if defined(USE_I2C) || defined(USE_SPI)
AGPIO(GPIO_ADE7953_IRQ) + AGMAX(6), // ADE7953 IRQ - (1 = Shelly 2.5, 2 = Shelly EM, 3 = Shelly Plus 2PM, 4 = Shelly Pro 1PM, 5 = Shelly Pro 2PM, 6 = Shelly Pro 4PM)
AGPIO(GPIO_ADE7953_RST), // ADE7953 Reset
#ifdef USE_SPI
AGPIO(GPIO_ADE7953_CS) + AGMAX(2), // ADE7953 SPI Chip Select (1 = CS1 (1PM, 2PM), 2 = CS2 (2PM))
#endif // USE_SPI
#endif // USE_I2C or USE_SPI
#endif // USE_ADE7953
#ifdef USE_CSE7761
AGPIO(GPIO_CSE7761_TX), // CSE7761 Serial interface (Dual R3)
AGPIO(GPIO_CSE7761_RX) + AGMAX(MAX_CSE7761), // CSE7761 Serial interface (1 = Dual R3, 2 = POWCT)
#endif
#ifdef USE_CSE7766
AGPIO(GPIO_CSE7766_TX), // CSE7766 Serial interface (S31 and Pow R2)
AGPIO(GPIO_CSE7766_RX), // CSE7766 Serial interface (S31 and Pow R2)
#endif
#ifdef USE_MCP39F501
AGPIO(GPIO_MCP39F5_TX), // MCP39F501 Serial interface (Shelly2)
AGPIO(GPIO_MCP39F5_RX), // MCP39F501 Serial interface (Shelly2)
AGPIO(GPIO_MCP39F5_RST), // MCP39F501 Reset (Shelly2)
#endif
AGPIO(GPIO_NRG_MBS_TX_ENA), // Generic Energy Modbus Transmit Enable
#if defined(USE_PZEM004T) || defined(USE_PZEM_AC) || defined(USE_PZEM_DC)
AGPIO(GPIO_PZEM0XX_TX), // PZEM0XX Serial interface
#endif
#ifdef USE_PZEM004T
AGPIO(GPIO_PZEM004_RX), // PZEM004T Serial interface
#endif
#ifdef USE_PZEM_AC
AGPIO(GPIO_PZEM016_RX), // PZEM-014,016 Serial Modbus interface
#endif
#ifdef USE_PZEM_DC
AGPIO(GPIO_PZEM017_RX), // PZEM-003,017 Serial Modbus interface
#endif
#ifdef USE_MODBUS_ENERGY
AGPIO(GPIO_NRG_MBS_TX), // Generic Energy Modbus device
AGPIO(GPIO_NRG_MBS_RX),
#endif
#ifdef USE_SDM120
AGPIO(GPIO_SDM120_TX), // SDM120 Serial interface
AGPIO(GPIO_SDM120_RX), // SDM120 Serial interface
#endif
#ifdef USE_SDM630
AGPIO(GPIO_SDM630_TX), // SDM630 Serial interface
AGPIO(GPIO_SDM630_RX), // SDM630 Serial interface
#endif
#ifdef USE_DDS2382
AGPIO(GPIO_DDS2382_TX), // DDS2382 Serial interface
AGPIO(GPIO_DDS2382_RX), // DDS2382 Serial interface
#endif
#ifdef USE_DDSU666
AGPIO(GPIO_DDSU666_TX), // DDSU666 Serial interface
AGPIO(GPIO_DDSU666_RX), // DDSU666 Serial interface
#endif // USE_DDSU666
#ifdef USE_SOLAX_X1
AGPIO(GPIO_SOLAXX1_TX), // Solax Inverter tx pin
AGPIO(GPIO_SOLAXX1_RX), // Solax Inverter rx pin
AGPIO(GPIO_SOLAXX1_RTS), // Solax Inverter RTS pin
#endif // USE_SOLAX_X1
#ifdef USE_LE01MR
AGPIO(GPIO_LE01MR_TX), // F7F LE-01MR energy meter tx pin
AGPIO(GPIO_LE01MR_RX), // F7F LE-01MR energy meter rx pin
#endif // USE_LE01MR
#ifdef ESP32
#ifdef USE_BL0906
AGPIO(GPIO_BL0906_RX) + AGMAX(MAX_BL0906_RX), // BL0906 Serial interface (Athom EM6)
#endif // USE_BL0906
#endif // ESP32
#if defined(USE_BL0940) || defined(USE_BL09XX)
AGPIO(GPIO_BL0939_RX), // BL0939 Serial interface (Dual R3 v2)
AGPIO(GPIO_BL0940_RX), // BL0940 Serial interface