Browse Source

Added support for port-expander PCA9555

master
Torsten Stauder 4 years ago
parent
commit
7b5b3dd24d
  1. 10
      README.md
  2. 29
      changelog.md
  3. 232
      src/main.cpp
  4. 15
      src/settings-custom.h
  5. 15
      src/settings-espa1s.h
  6. 15
      src/settings-lolin32.h
  7. 15
      src/settings-lolin_d32.h
  8. 15
      src/settings-lolin_d32_pro.h
  9. 15
      src/settings-ttgo_t8.h
  10. 7
      src/settings.h

10
README.md

@ -5,9 +5,9 @@
* DE: Ich habe ein primär deutschsprachiges Forum aufgesetzt, welches ich mit reichlich Doku versehen habe. Würde mich freuen, euch dort zu sehen: https://forum.espuino.de. Ihr könnt euch dort mit eurem Github-Login einloggen, jedoch auch "normal" anmelden. Dokumenation findet ihr insbesondere hier: https://forum.espuino.de/c/dokumentation/anleitungen/10 * DE: Ich habe ein primär deutschsprachiges Forum aufgesetzt, welches ich mit reichlich Doku versehen habe. Würde mich freuen, euch dort zu sehen: https://forum.espuino.de. Ihr könnt euch dort mit eurem Github-Login einloggen, jedoch auch "normal" anmelden. Dokumenation findet ihr insbesondere hier: https://forum.espuino.de/c/dokumentation/anleitungen/10
## Changelog ## Changelog
Moved to [another location](changelog.md) as it became to prominent here. Only last three events are kept: Moved to [another location](changelog.md) as it became to prominent here. Only last three events are kept:
* 25.02.2020: Added support for .m4a and .wav-files.
* 26.02.2020: Shutdown via webgui is now available.
* 05.03.2020: Added support for remote control via infrared. Make sure to enable `IR_CONTROL_ENABLE` to use this feature and don't forget to assign corresponding rc-commands of *your* remote control to actions.
* 26.02.2021: Shutdown via webgui is now available.
* 05.03.2021: Added support for remote control via infrared. Make sure to enable `IR_CONTROL_ENABLE` to use this feature and don't forget to assign corresponding rc-commands of *your* remote control to actions.
* 19.03.2021: Added support for port-expander PCA9555. Can be used for everything, that is "button-like": buttons, headphone-detect, PN5180.IRQ.
## Known bugs ## Known bugs
* Some webstreams don't run. Guess it's a combination of saturated connection-pool and lack of heap-memory. Works probably better if ESP32-WROVER (e.g. Lolin D32 pro) is used, as this chip has PSRAM. Advice: Don't enable modules (e.g. MQTT) if you don't need them as this could save memory (and trouble). * Some webstreams don't run. Guess it's a combination of saturated connection-pool and lack of heap-memory. Works probably better if ESP32-WROVER (e.g. Lolin D32 pro) is used, as this chip has PSRAM. Advice: Don't enable modules (e.g. MQTT) if you don't need them as this could save memory (and trouble).
* English translation/version for webgui is currently pretty outdated. This will be fixed soon when i18n-support will be integrated. * English translation/version for webgui is currently pretty outdated. This will be fixed soon when i18n-support will be integrated.
@ -219,6 +219,10 @@ This toggles the current WiFi-status: if it's currently enabled, it will be disa
## Bluetooth ## Bluetooth
ESPuino can be used as bluetooth-sink (a2dp). This mode can be enabled/disabled via a RFID-modification-card. Applying one will restart ESPuino immediately. Two modes are available which are toggled in between: "normal" and "bluetooth". Normal means: SD + WiFi are available whereas in mode "bluetooth" only bluetooth-support can be provided. If bluetooth is active, this is indicated by four slow rotating *blue* LEDs. Now you can stream to your ESPuino e.g. with your mobile device. Tested this with Android 8 and worked 100% flawless. ESPuino can be used as bluetooth-sink (a2dp). This mode can be enabled/disabled via a RFID-modification-card. Applying one will restart ESPuino immediately. Two modes are available which are toggled in between: "normal" and "bluetooth". Normal means: SD + WiFi are available whereas in mode "bluetooth" only bluetooth-support can be provided. If bluetooth is active, this is indicated by four slow rotating *blue* LEDs. Now you can stream to your ESPuino e.g. with your mobile device. Tested this with Android 8 and worked 100% flawless.
## Port-expander
There might be situations where you run out of GPIOs. To address this, port-expander [PCA9555](https://www.nxp.com/docs/en/data-sheet/PCA9555.pdf) can be used to extend number of input-channels (output-mode is not supported by ESPuino). This port-expander provides 2 ports with 8 channels each - so 16 channels in total. To activate PCA9555 you need to set `PORT_EXPANDER_ENABLE`. Like GPIOs in your develboard-specific settings-file, you can assign numbers. Range is 100->115 where 100: port 0 channel 0 -> 107: port 0 channel 7; 108: port 1 channel 0 -> 115: port 1 channel 7. If you only need 8 channels: connect stuff only to port 0 and change `portsToRead` to 1. Via `expanderI2cAddress` port-expander's I2C-address can be changed. 0x20 is true, if all A0, A1, A2 are wired to GND.<br />
Port-expander is read by hardware-timer. Interrupt-pin can be connected optionally and is only used to wake up ESP32. If so I suggest to use `WAKEUP_BUTTON`.
## After ESPuino is connected to your WiFi ## After ESPuino is connected to your WiFi
After bringing ESPuino part of your LAN/WiFi, the 'regular' webgui is available at the IP assigned by your router (or the configured hostname). Using this GUI, you can configure: After bringing ESPuino part of your LAN/WiFi, the 'regular' webgui is available at the IP assigned by your router (or the configured hostname). Using this GUI, you can configure:
* WiFi * WiFi

29
changelog.md

@ -18,17 +18,18 @@
* 20.12.2020: Due to memory-issues with webstreams, FTP needs to be activated by pressing pause+next-button now * 20.12.2020: Due to memory-issues with webstreams, FTP needs to be activated by pressing pause+next-button now
<br />More to come... <br />More to come...
* 23.12.2020: User-config is now split into general part (settings.h) and develboard-specific part (e.g. settings-lolin32.h) * 23.12.2020: User-config is now split into general part (settings.h) and develboard-specific part (e.g. settings-lolin32.h)
* 13.01.2020: Added fileexlorer to webgui (thanks @grch87 for contribution!). Now files and directories can be renamed, uploaded and deleted via webgui.
* 17.01.2020: Added directive `STATIC_IP_ENABLE`: (optional) static IPv4-configuration
* 18.01.2020: Added directive `PN5180_ENABLE_LPCD`: awake from deepsleep with PN5180 is now possible (but needs another GPIO)
* 25.01.2020: Added directive `USE_LAST_VOLUME_AFTER_REBOOT`: Remembers volume used at last shutdown after reboot. This overwrites initial volume from GUI.
* 28.01.2020: Removed cached RFID-filebrowser and replaced by realtime-browser
* 01.02.2020: Introducing PCB: Lolin32 with SD_MMC + PN5180
* 06.02.2020: German umlauts now supported. When uploading via FTP make sure to change charset to CP437.
* 09.02.2020: Added support for bluetooth-sink (a2dp). Thanks @grch87 & @elmar-ops for providing this feature!
* 25.02.2020: Added support for dynamic button-layout. Rotary-encoder is now optional and up to five buttons can be used.
* 25.02.2020: Actions can be freely assigned to buttons (multi-button, single-button (short), single-button (long))
* 25.02.2020: Added support for webcontrol: basic control (volume, play/pause, next, previous, first, last track) can now be controlled via webgui.
* 25.02.2020: Added support for .m4a and .wav-files.
* 26.02.2020: Shutdown via webgui is now available.
* 05.03.2020: Added support for remote control via infrared. Make sure to enable `IR_CONTROL_ENABLE` to use this feature and don't forget to assign corresponding rc-commands of *your* remote control to actions.
* 13.01.2021: Added fileexlorer to webgui (thanks @grch87 for contribution!). Now files and directories can be renamed, uploaded and deleted via webgui.
* 17.01.2021: Added directive `STATIC_IP_ENABLE`: (optional) static IPv4-configuration
* 18.01.2021: Added directive `PN5180_ENABLE_LPCD`: awake from deepsleep with PN5180 is now possible (but needs another GPIO)
* 25.01.2021: Added directive `USE_LAST_VOLUME_AFTER_REBOOT`: Remembers volume used at last shutdown after reboot. This overwrites initial volume from GUI.
* 28.01.2021: Removed cached RFID-filebrowser and replaced by realtime-browser
* 01.02.2021: Introducing PCB: Lolin32 with SD_MMC + PN5180
* 06.02.2021: German umlauts now supported. When uploading via FTP make sure to change charset to CP437.
* 09.02.2021: Added support for bluetooth-sink (a2dp). Thanks @grch87 & @elmar-ops for providing this feature!
* 25.02.2021: Added support for dynamic button-layout. Rotary-encoder is now optional and up to five buttons can be used.
* 25.02.2021: Actions can be freely assigned to buttons (multi-button, single-button (short), single-button (long))
* 25.02.2021: Added support for webcontrol: basic control (volume, play/pause, next, previous, first, last track) can now be controlled via webgui.
* 25.02.2021: Added support for .m4a and .wav-files.
* 26.02.2021: Shutdown via webgui is now available.
* 05.03.2021: Added support for remote control via infrared. Make sure to enable `IR_CONTROL_ENABLE` to use this feature and don't forget to assign corresponding rc-commands of *your* remote control to actions.
* 19.03.2021: Added support for port-expander PCA9555. Can be used for everything, that is "button-like": buttons, headphone-detect, PN5180.IRQ.

232
src/main.cpp

@ -47,8 +47,10 @@
#ifdef RFID_READER_TYPE_MFRC522_SPI #ifdef RFID_READER_TYPE_MFRC522_SPI
#include <MFRC522.h> #include <MFRC522.h>
#endif #endif
#ifdef RFID_READER_TYPE_MFRC522_I2C
#if defined(RFID_READER_TYPE_MFRC522_I2C) || defined(PORT_EXPANDER_ENABLE)
#include "Wire.h" #include "Wire.h"
#endif
#ifdef RFID_READER_TYPE_MFRC522_I2C
#include <MFRC522_I2C.h> #include <MFRC522_I2C.h>
#endif #endif
#ifdef RFID_READER_TYPE_PN5180 #ifdef RFID_READER_TYPE_PN5180
@ -259,6 +261,18 @@ TaskHandle_t fileStorageTaskHandle;
TaskHandle_t LED; TaskHandle_t LED;
#endif #endif
// I2C
#if defined(RFID_READER_TYPE_MFRC522_I2C) || defined(PORT_EXPANDER_ENABLE)
static TwoWire i2cBusTwo = TwoWire(1);
#endif
#ifdef RFID_READER_TYPE_MFRC522_I2C
static MFRC522 mfrc522(MFRC522_ADDR, MFRC522_RST_PIN, i2cBusTwo);
#endif
#ifdef PORT_EXPANDER_ENABLE
uint8_t expanderPorts[portsToRead];
#endif
#if (HAL == 2) #if (HAL == 2)
#include "AC101.h" #include "AC101.h"
static TwoWire i2cBusOne = TwoWire(0); static TwoWire i2cBusOne = TwoWire(0);
@ -267,10 +281,6 @@ TaskHandle_t fileStorageTaskHandle;
#ifdef RFID_READER_TYPE_MFRC522_SPI #ifdef RFID_READER_TYPE_MFRC522_SPI
static MFRC522 mfrc522(RFID_CS, RST_PIN); static MFRC522 mfrc522(RFID_CS, RST_PIN);
#endif #endif
#ifdef RFID_READER_TYPE_MFRC522_I2C
static TwoWire i2cBusTwo = TwoWire(1);
static MFRC522 mfrc522(MFRC522_ADDR, MFRC522_RST_PIN, i2cBusTwo);
#endif
// FTP // FTP
#ifdef FTP_ENABLE #ifdef FTP_ENABLE
@ -327,24 +337,40 @@ QueueHandle_t rfidCardQueue;
RingbufHandle_t explorerFileUploadRingBuffer; RingbufHandle_t explorerFileUploadRingBuffer;
QueueHandle_t explorerFileUploadStatusQueue; QueueHandle_t explorerFileUploadStatusQueue;
// Only enable those buttons that use GPIOs <= 39
// Only enable those buttons that are not disabled (99 or >115)
// 0 -> 39: GPIOs
// 100 -> 115: Port-expander
#if (NEXT_BUTTON >= 0 && NEXT_BUTTON <= 39) #if (NEXT_BUTTON >= 0 && NEXT_BUTTON <= 39)
#define BUTTON_0_ENABLE #define BUTTON_0_ENABLE
#elif (NEXT_BUTTON >= 100 && NEXT_BUTTON <= 115)
#define EXPANDER_0_ENABLE
#endif #endif
#if (PREVIOUS_BUTTON >= 0 && PREVIOUS_BUTTON <= 39) #if (PREVIOUS_BUTTON >= 0 && PREVIOUS_BUTTON <= 39)
#define BUTTON_1_ENABLE #define BUTTON_1_ENABLE
#elif (PREVIOUS_BUTTON >= 100 && PREVIOUS_BUTTON <= 115)
#define EXPANDER_1_ENABLE
#endif #endif
#if (PAUSEPLAY_BUTTON >= 0 && PAUSEPLAY_BUTTON <= 39) #if (PAUSEPLAY_BUTTON >= 0 && PAUSEPLAY_BUTTON <= 39)
#define BUTTON_2_ENABLE #define BUTTON_2_ENABLE
#elif (PAUSEPLAY_BUTTON >= 100 && PAUSEPLAY_BUTTON <= 115)
#define EXPANDER_2_ENABLE
#endif #endif
#ifdef USEROTARY_ENABLE #ifdef USEROTARY_ENABLE
#define BUTTON_3_ENABLE
#if (DREHENCODER_BUTTON >= 0 && DREHENCODER_BUTTON <= 39)
#define BUTTON_3_ENABLE
#elif (DREHENCODER_BUTTON >= 100 && DREHENCODER_BUTTON <= 115)
#define EXPANDER_3_ENABLE
#endif
#endif #endif
#if (BUTTON_4 >= 0 && BUTTON_4 <= 39) #if (BUTTON_4 >= 0 && BUTTON_4 <= 39)
#define BUTTON_4_ENABLE #define BUTTON_4_ENABLE
#elif (BUTTON_4 >= 100 && BUTTON_4 <= 115)
#define EXPANDER_4_ENABLE
#endif #endif
#if (BUTTON_5 >= 0 && BUTTON_5 <= 39) #if (BUTTON_5 >= 0 && BUTTON_5 <= 39)
#define BUTTON_5_ENABLE #define BUTTON_5_ENABLE
#elif (BUTTON_5 >= 100 && BUTTON_5 <= 115)
#define EXPANDER_5_ENABLE
#endif #endif
// Prototypes // Prototypes
@ -353,6 +379,7 @@ static int arrSortHelper(const void* a, const void* b);
void batteryVoltageTester(void); void batteryVoltageTester(void);
void buttonHandler(); void buttonHandler();
void deepSleepManager(void); void deepSleepManager(void);
bool digitalReadFromAll(const uint8_t _channel);
void doButtonActions(void); void doButtonActions(void);
void doRfidCardModifications(const uint32_t mod); void doRfidCardModifications(const uint32_t mod);
void doCmdAction(const uint16_t mod); void doCmdAction(const uint16_t mod);
@ -385,6 +412,9 @@ float measureBatteryVoltage(void);
#endif #endif
size_t nvsRfidWriteWrapper (const char *_rfidCardId, const char *_track, const uint32_t _playPosition, const uint8_t _playMode, const uint16_t _trackLastPlayed, const uint16_t _numberOfTracks); size_t nvsRfidWriteWrapper (const char *_rfidCardId, const char *_track, const uint32_t _playPosition, const uint8_t _playMode, const uint16_t _trackLastPlayed, const uint16_t _numberOfTracks);
void onWebsocketEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventType type, void * arg, uint8_t *data, size_t len); void onWebsocketEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventType type, void * arg, uint8_t *data, size_t len);
#ifdef PORT_EXPANDER_ENABLE
bool portExpanderHandler();
#endif
bool processJsonRequest(char *_serialJson); bool processJsonRequest(char *_serialJson);
void randomizePlaylist (char *str[], const uint32_t count); void randomizePlaylist (char *str[], const uint32_t count);
char ** returnPlaylistFromWebstream(const char *_webUrl); char ** returnPlaylistFromWebstream(const char *_webUrl);
@ -431,19 +461,6 @@ void logger(const uint8_t _currentLogLevel, const char *_logBuffer, const uint8_
} }
int countChars(const char* string, char ch) {
int count = 0;
int length = strlen(string);
for (uint8_t i = 0; i < length; i++) {
if (string[i] == ch) {
count++;
}
}
return count;
}
void IRAM_ATTR onTimer() { void IRAM_ATTR onTimer() {
xSemaphoreGiveFromISR(timerSemaphore, NULL); xSemaphoreGiveFromISR(timerSemaphore, NULL);
} }
@ -510,6 +527,52 @@ void IRAM_ATTR onTimer() {
} }
#endif #endif
#ifdef PORT_EXPANDER_ENABLE
// Reads input from port-expander and writes output into global array
// Datasheet: https://www.nxp.com/docs/en/data-sheet/PCA9555.pdf
bool portExpanderHandler() {
i2cBusTwo.beginTransmission(expanderI2cAddress);
for (uint8_t i=0; i<portsToRead; i++) {
i2cBusTwo.write(0x00+i); // Go to input-register...
i2cBusTwo.endTransmission();
i2cBusTwo.requestFrom(expanderI2cAddress, 1); // ...and read its byte
if (i2cBusTwo.available()) {
expanderPorts[i] = i2cBusTwo.read();
} else {
return false;
}
}
return false;
}
#endif
// Wrapper: reads from GPIOs (via digitalRead()) or from port-expander (if enabled)
// Behaviour like digitalRead(): returns true if not pressed and false if pressed
bool digitalReadFromAll(const uint8_t _channel) {
switch (_channel) {
case 0 ... 39: // GPIO
return digitalRead(_channel);
#ifdef PORT_EXPANDER_ENABLE
case 100 ... 107: // Port-expander (port 0)
return (expanderPorts[0] & (1 << (_channel-100))); // Remove offset 100 (return false if pressed)
case 108 ... 115: // Port-expander (port 1)
if (portsToRead == 2) { // Make sure portsToRead != 1 when channel > 107
return (expanderPorts[1] & (1 << (_channel-108))); // Remove offset 100 + 8 (return false if pressed)
} else {
return true;
}
#endif
default: // Everything else (doesn't make sense at all) isn't supposed to be pressed
return true;
}
}
// If timer-semaphore is set, read buttons (unless controls are locked) // If timer-semaphore is set, read buttons (unless controls are locked)
void buttonHandler() { void buttonHandler() {
@ -517,24 +580,30 @@ void buttonHandler() {
if (lockControls) { if (lockControls) {
return; return;
} }
#ifdef PORT_EXPANDER_ENABLE
portExpanderHandler();
#endif
unsigned long currentTimestamp = millis(); unsigned long currentTimestamp = millis();
#ifdef BUTTON_0_ENABLE
buttons[0].currentState = digitalRead(NEXT_BUTTON);
// Buttons can be mixed between GPIO and port-expander.
// But at the same time only one of them can be for example NEXT_BUTTON
#if defined(BUTTON_0_ENABLE) || defined(EXPANDER_0_ENABLE)
buttons[0].currentState = digitalReadFromAll(NEXT_BUTTON);
#endif #endif
#ifdef BUTTON_1_ENABLE
buttons[1].currentState = digitalRead(PREVIOUS_BUTTON);
#if defined(BUTTON_1_ENABLE) || defined(EXPANDER_1_ENABLE)
buttons[1].currentState = digitalReadFromAll(PREVIOUS_BUTTON);
#endif #endif
#ifdef BUTTON_2_ENABLE
buttons[2].currentState = digitalRead(PAUSEPLAY_BUTTON);
#if defined(BUTTON_2_ENABLE) || defined(EXPANDER_2_ENABLE)
buttons[2].currentState = digitalReadFromAll(PAUSEPLAY_BUTTON);
#endif #endif
#ifdef BUTTON_3_ENABLE
buttons[3].currentState = digitalRead(DREHENCODER_BUTTON);
#if defined(BUTTON_3_ENABLE) || defined(EXPANDER_3_ENABLE)
buttons[3].currentState = digitalReadFromAll(DREHENCODER_BUTTON);
#endif #endif
#ifdef BUTTON_4_ENABLE
buttons[4].currentState = digitalRead(BUTTON_4);
#if defined(BUTTON_4_ENABLE) || defined(EXPANDER_4_ENABLE)
buttons[4].currentState = digitalReadFromAll(BUTTON_4);
#endif #endif
#ifdef BUTTON_5_ENABLE
buttons[5].currentState = digitalRead(BUTTON_5);
#if defined(BUTTON_5_ENABLE) || defined(EXPANDER_5_ENABLE)
buttons[5].currentState = digitalReadFromAll(BUTTON_5);
#endif #endif
// Iterate over all buttons in struct-array // Iterate over all buttons in struct-array
@ -551,15 +620,12 @@ void buttonHandler() {
buttons[i].lastState = buttons[i].currentState; buttons[i].lastState = buttons[i].currentState;
} }
} }
doButtonActions();
} }
// Do corresponding actions for all buttons // Do corresponding actions for all buttons
void doButtonActions(void) { void doButtonActions(void) {
if (lockControls) {
return; // Avoid button-handling if buttons are locked
}
if (buttons[0].isPressed && buttons[1].isPressed) { if (buttons[0].isPressed && buttons[1].isPressed) {
buttons[0].isPressed = false; buttons[0].isPressed = false;
buttons[1].isPressed = false; buttons[1].isPressed = false;
@ -2355,7 +2421,7 @@ void gotoLPCD() {
Serial.println(F("prepare low power card detection...")); Serial.println(F("prepare low power card detection..."));
nfc.prepareLPCD(); nfc.prepareLPCD();
nfc.clearIRQStatus(0xffffffff); nfc.clearIRQStatus(0xffffffff);
Serial.print(F("PN5180 IRQ PIN: ")); Serial.println(digitalRead(RFID_IRQ));
Serial.print(F("PN5180 IRQ PIN: ")); Serial.println(digitalReadFromAll(RFID_IRQ));
// turn on LPCD // turn on LPCD
uint16_t wakeupCounterInMs = 0x3FF; // must be in the range of 0x0 - 0xA82. max wake-up time is 2960 ms. uint16_t wakeupCounterInMs = 0x3FF; // must be in the range of 0x0 - 0xA82. max wake-up time is 2960 ms.
if (nfc.switchToLPCD(wakeupCounterInMs)) { if (nfc.switchToLPCD(wakeupCounterInMs)) {
@ -3739,7 +3805,7 @@ void setupVolume(void) {
maxVolume = maxVolumeSpeaker; maxVolume = maxVolumeSpeaker;
return; return;
#else #else
if (digitalRead(HP_DETECT)) {
if (digitalReadFromAll(HP_DETECT)) {
maxVolume = maxVolumeSpeaker; // 1 if headphone is not connected maxVolume = maxVolumeSpeaker; // 1 if headphone is not connected
} else { } else {
maxVolume = maxVolumeHeadphone; // 0 if headphone is connected (put to GND) maxVolume = maxVolumeHeadphone; // 0 if headphone is connected (put to GND)
@ -3753,7 +3819,7 @@ void setupVolume(void) {
#ifdef HEADPHONE_ADJUST_ENABLE #ifdef HEADPHONE_ADJUST_ENABLE
void headphoneVolumeManager(void) { void headphoneVolumeManager(void) {
bool currentHeadPhoneDetectionState = digitalRead(HP_DETECT);
bool currentHeadPhoneDetectionState = digitalReadFromAll(HP_DETECT);
if (headphoneLastDetectionState != currentHeadPhoneDetectionState && (millis() - headphoneLastDetectionTimestamp >= headphoneLastDetectionDebounce)) { if (headphoneLastDetectionState != currentHeadPhoneDetectionState && (millis() - headphoneLastDetectionTimestamp >= headphoneLastDetectionDebounce)) {
if (currentHeadPhoneDetectionState) { if (currentHeadPhoneDetectionState) {
@ -4330,7 +4396,7 @@ void printWakeUpReason() {
nfc14443.setupRF(); nfc14443.setupRF();
if (!nfc14443.isCardPresent()) { if (!nfc14443.isCardPresent()) {
nfc14443.clearIRQStatus(0xffffffff); nfc14443.clearIRQStatus(0xffffffff);
Serial.print(F("Logic level at PN5180' IRQ-PIN: ")); Serial.println(digitalRead(RFID_IRQ));
Serial.print(F("Logic level at PN5180' IRQ-PIN: ")); Serial.println(digitalReadFromAll(RFID_IRQ));
// turn on LPCD // turn on LPCD
uint16_t wakeupCounterInMs = 0x3FF; // needs to be in the range of 0x0 - 0xA82. max wake-up time is 2960 ms. uint16_t wakeupCounterInMs = 0x3FF; // needs to be in the range of 0x0 - 0xA82. max wake-up time is 2960 ms.
if (nfc14443.switchToLPCD(wakeupCounterInMs)) { if (nfc14443.switchToLPCD(wakeupCounterInMs)) {
@ -4470,32 +4536,32 @@ void setup() {
#endif #endif
#ifdef NEOPIXEL_ENABLE // Try to find button that is used for shutdown via longpress-action (only necessary for Neopixel) #ifdef NEOPIXEL_ENABLE // Try to find button that is used for shutdown via longpress-action (only necessary for Neopixel)
#ifdef BUTTON_0_ENABLE
#if defined(BUTTON_0_ENABLE) || defined(EXPANDER_0_ENABLE)
#if (BUTTON_0_LONG == CMD_SLEEPMODE) #if (BUTTON_0_LONG == CMD_SLEEPMODE)
shutdownButton = 0; shutdownButton = 0;
#endif #endif
#endif #endif
#ifdef BUTTON_1_ENABLE
#if defined(BUTTON_1_ENABLE) || defined(EXPANDER_1_ENABLE)
#if (BUTTON_1_LONG == CMD_SLEEPMODE) #if (BUTTON_1_LONG == CMD_SLEEPMODE)
shutdownButton = 1; shutdownButton = 1;
#endif #endif
#endif #endif
#ifdef BUTTON_2_ENABLE
#if defined(BUTTON_2_ENABLE) || defined(EXPANDER_2_ENABLE)
#if (BUTTON_2_LONG == CMD_SLEEPMODE) #if (BUTTON_2_LONG == CMD_SLEEPMODE)
shutdownButton = 2; shutdownButton = 2;
#endif #endif
#endif #endif
#ifdef BUTTON_3_ENABLE
#if defined(BUTTON_3_ENABLE) || defined(EXPANDER_3_ENABLE)
#if (BUTTON_3_LONG == CMD_SLEEPMODE) #if (BUTTON_3_LONG == CMD_SLEEPMODE)
shutdownButton = 3; shutdownButton = 3;
#endif #endif
#endif #endif
#ifdef BUTTON_4_ENABLE
#if defined(BUTTON_4_ENABLE) || defined(EXPANDER_4_ENABLE)
#if (BUTTON_4_LONG == CMD_SLEEPMODE) #if (BUTTON_4_LONG == CMD_SLEEPMODE)
shutdownButton = 4; shutdownButton = 4;
#endif #endif
#endif #endif
#ifdef BUTTON_5_ENABLE
#if defined(BUTTON_5_ENABLE) || defined(EXPANDER_5_ENABLE)
#if (BUTTON_5_LONG == CMD_SLEEPMODE) #if (BUTTON_5_LONG == CMD_SLEEPMODE)
shutdownButton = 5; shutdownButton = 5;
#endif #endif
@ -4547,34 +4613,34 @@ void setup() {
prefsRfid.putString("228064156042", "#0#0#110#0"); // modification-card (repeat playlist) prefsRfid.putString("228064156042", "#0#0#110#0"); // modification-card (repeat playlist)
prefsRfid.putString("212130160042", "#/mp3/Hoerspiele/Yakari/Sammlung2#0#3#0");*/ prefsRfid.putString("212130160042", "#/mp3/Hoerspiele/Yakari/Sammlung2#0#3#0");*/
#ifdef NEOPIXEL_ENABLE
xTaskCreatePinnedToCore(
showLed, /* Function to implement the task */
"LED", /* Name of the task */
2000, /* Stack size in words */
NULL, /* Task input parameter */
1 | portPRIVILEGE_BIT, /* Priority of the task */
&LED, /* Task handle. */
0 /* Core where the task should run */
);
#endif
#ifdef NEOPIXEL_ENABLE
xTaskCreatePinnedToCore(
showLed, /* Function to implement the task */
"LED", /* Name of the task */
2000, /* Stack size in words */
NULL, /* Task input parameter */
1 | portPRIVILEGE_BIT, /* Priority of the task */
&LED, /* Task handle. */
0 /* Core where the task should run */
);
#endif
#if (HAL == 2)
i2cBusOne.begin(IIC_DATA, IIC_CLK, 40000);
#if (HAL == 2)
i2cBusOne.begin(IIC_DATA, IIC_CLK, 40000);
while (not ac.begin()) {
Serial.println(F("AC101 Failed!"));
delay(1000);
}
Serial.println(F("AC101 via I2C - OK!"));
while (not ac.begin()) {
Serial.println(F("AC101 Failed!"));
delay(1000);
}
Serial.println(F("AC101 via I2C - OK!"));
pinMode(22, OUTPUT);
digitalWrite(22, HIGH);
pinMode(22, OUTPUT);
digitalWrite(22, HIGH);
pinMode(GPIO_PA_EN, OUTPUT);
digitalWrite(GPIO_PA_EN, HIGH);
Serial.println(F("Built-in amplifier enabled\n"));
#endif
pinMode(GPIO_PA_EN, OUTPUT);
digitalWrite(GPIO_PA_EN, HIGH);
Serial.println(F("Built-in amplifier enabled\n"));
#endif
#ifdef RFID_READER_TYPE_MFRC522_SPI #ifdef RFID_READER_TYPE_MFRC522_SPI
SPI.begin(RFID_SCK, RFID_MISO, RFID_MOSI, RFID_CS); SPI.begin(RFID_SCK, RFID_MISO, RFID_MOSI, RFID_CS);
@ -4610,7 +4676,8 @@ void setup() {
#endif #endif
} }
#ifdef RFID_READER_TYPE_MFRC522_I2C
// Init 2nd i2c-bus if RC522 is used with i2c or if port-expander is enabled
#if defined(RFID_READER_TYPE_MFRC522_I2C) || defined(PORT_EXPANDER_ENABLE)
i2cBusTwo.begin(ext_IIC_DATA, ext_IIC_CLK, 40000); i2cBusTwo.begin(ext_IIC_DATA, ext_IIC_CLK, 40000);
delay(50); delay(50);
loggerNl(serialDebug, (char *) FPSTR(rfidScannerReady), LOGLEVEL_DEBUG); loggerNl(serialDebug, (char *) FPSTR(rfidScannerReady), LOGLEVEL_DEBUG);
@ -4634,18 +4701,18 @@ void setup() {
// print wake-up reason // print wake-up reason
printWakeUpReason(); printWakeUpReason();
#ifdef PN5180_ENABLE_LPCD #ifdef PN5180_ENABLE_LPCD
// disable pin hold from deep sleep
gpio_deep_sleep_hold_dis();
gpio_hold_dis(gpio_num_t(RFID_CS)); // NSS
gpio_hold_dis(gpio_num_t(RFID_RST)); // RST
// disable pin hold from deep sleep
gpio_deep_sleep_hold_dis();
gpio_hold_dis(gpio_num_t(RFID_CS)); // NSS
gpio_hold_dis(gpio_num_t(RFID_RST)); // RST
#endif #endif
// show SD card type
// show SD card type
#ifdef SD_MMC_1BIT_MODE #ifdef SD_MMC_1BIT_MODE
loggerNl(serialDebug, (char *) FPSTR(sdMountedMmc1BitMode), LOGLEVEL_NOTICE);
uint8_t cardType = SD_MMC.cardType();
loggerNl(serialDebug, (char *) FPSTR(sdMountedMmc1BitMode), LOGLEVEL_NOTICE);
uint8_t cardType = SD_MMC.cardType();
#else #else
loggerNl(serialDebug, (char *) FPSTR(sdMountedSpiMode), LOGLEVEL_NOTICE);
uint8_t cardType = SD.cardType();
loggerNl(serialDebug, (char *) FPSTR(sdMountedSpiMode), LOGLEVEL_NOTICE);
uint8_t cardType = SD.cardType();
#endif #endif
Serial.print(F("SD card type: ")); Serial.print(F("SD card type: "));
if (cardType == CARD_MMC) { if (cardType == CARD_MMC) {
@ -4660,7 +4727,7 @@ void setup() {
#ifdef HEADPHONE_ADJUST_ENABLE #ifdef HEADPHONE_ADJUST_ENABLE
pinMode(HP_DETECT, INPUT); pinMode(HP_DETECT, INPUT);
headphoneLastDetectionState = digitalRead(HP_DETECT);
headphoneLastDetectionState = digitalReadFromAll(HP_DETECT);
#endif #endif
// Create queues // Create queues
@ -4898,7 +4965,7 @@ void setup() {
timerSemaphore = xSemaphoreCreateBinary(); timerSemaphore = xSemaphoreCreateBinary();
timer = timerBegin(0, 240, true); // Prescaler: CPU-clock in MHz timer = timerBegin(0, 240, true); // Prescaler: CPU-clock in MHz
timerAttachInterrupt(timer, &onTimer, true); timerAttachInterrupt(timer, &onTimer, true);
timerAlarmWrite(timer, 1000, true); // 1000 Hz
timerAlarmWrite(timer, 10000, true); // 100 Hz
timerAlarmEnable(timer); timerAlarmEnable(timer);
// Create tasks // Create tasks
@ -5050,7 +5117,6 @@ void loop() {
batteryVoltageTester(); batteryVoltageTester();
#endif #endif
buttonHandler(); buttonHandler();
doButtonActions();
sleepHandler(); sleepHandler();
deepSleepManager(); deepSleepManager();
rfidPreferenceLookupHandler(); rfidPreferenceLookupHandler();

15
src/settings-custom.h

@ -49,18 +49,25 @@
#ifdef USEROTARY_ENABLE #ifdef USEROTARY_ENABLE
#define DREHENCODER_CLK 34 // If you want to reverse encoder's direction, just switch GPIOs of CLK with DT (in software or hardware) #define DREHENCODER_CLK 34 // If you want to reverse encoder's direction, just switch GPIOs of CLK with DT (in software or hardware)
#define DREHENCODER_DT 35 // Info: Lolin D32 / Lolin D32 pro 35 are using 35 for battery-voltage-monitoring! #define DREHENCODER_DT 35 // Info: Lolin D32 / Lolin D32 pro 35 are using 35 for battery-voltage-monitoring!
#define DREHENCODER_BUTTON 32 // Button 3: is used to switch ESPuino on and off
#define DREHENCODER_BUTTON 32 // (set to 99 to disable; 0->39 for GPIO; 100->115 for port-expander)
#endif #endif
// Control-buttons (set to 99 to disable)
// Control-buttons (set to 99 to DISABLE; 0->39 for GPIO; 100->115 for port-expander)
#define NEXT_BUTTON 4 // Button 0: GPIO to detect next #define NEXT_BUTTON 4 // Button 0: GPIO to detect next
#define PREVIOUS_BUTTON 2 // Button 1: GPIO to detect previous (Important: as of 19.11.2020 changed from 33 to 2; make sure to change in SD-MMC-mode) #define PREVIOUS_BUTTON 2 // Button 1: GPIO to detect previous (Important: as of 19.11.2020 changed from 33 to 2; make sure to change in SD-MMC-mode)
#define PAUSEPLAY_BUTTON 0 // Button 2: GPIO to detect pause/play #define PAUSEPLAY_BUTTON 0 // Button 2: GPIO to detect pause/play
#define BUTTON_4 99 // Button 4: unnamed optional button #define BUTTON_4 99 // Button 4: unnamed optional button
#define BUTTON_5 99 // Button 5: unnamed optional button #define BUTTON_5 99 // Button 5: unnamed optional button
// Wake-up button
// Please note: only RTC-GPIOs (0, 4, 12, 13, 14, 15, 25, 26, 27, 32, 33, 34, 35, 36, 39, 99) can be used! Set to 99 to disable.
// I2C-configuration (necessary for RC522 [only via i2c - not spi!] or port-expander)
#if defined(RFID_READER_TYPE_MFRC522_I2C) || defined(PORT_EXPANDER_ENABLE)
#define ext_IIC_CLK 4 // i2c-SCL (clock)
#define ext_IIC_DATA 2 // i2c-SDA (data)
#endif
// Wake-up button => this also is the interrupt-pin if port-expander is enabled!
// Please note: only RTC-GPIOs (0, 4, 12, 13, 14, 15, 25, 26, 27, 32, 33, 34, 35, 36, 39, 99) can be used! Set to 99 to DISABLE.
// Please note #2: this button can be used as interrupt-pin for port-expander. If so, all pins connected to port-expander can wake up ESPuino.
#define WAKEUP_BUTTON DREHENCODER_BUTTON // Defines the button that is used to wake up ESPuino from deepsleep. #define WAKEUP_BUTTON DREHENCODER_BUTTON // Defines the button that is used to wake up ESPuino from deepsleep.
// (optional) Power-control // (optional) Power-control

15
src/settings-espa1s.h

@ -43,18 +43,25 @@
#ifdef USEROTARY_ENABLE #ifdef USEROTARY_ENABLE
#define DREHENCODER_CLK 5 // If you want to reverse encoder's direction, just switch GPIOs of CLK with DT (in software or hardware) #define DREHENCODER_CLK 5 // If you want to reverse encoder's direction, just switch GPIOs of CLK with DT (in software or hardware)
#define DREHENCODER_DT 18 // Info: Lolin D32 / Lolin D32 pro 35 are using 35 for battery-voltage-monitoring! #define DREHENCODER_DT 18 // Info: Lolin D32 / Lolin D32 pro 35 are using 35 for battery-voltage-monitoring!
#define DREHENCODER_BUTTON 4 // Button 3: is used to switch ESPuino on and off
#define DREHENCODER_BUTTON 4 // (set to 99 to disable; 0->39 for GPIO; 100->115 for port-expander)
#endif #endif
// Control-buttons (set to 99 to disable)
// Control-buttons (set to 99 to DISABLE; 0->39 for GPIO; 100->115 for port-expander)
#define NEXT_BUTTON 199 // Button 0: GPIO to detect next #define NEXT_BUTTON 199 // Button 0: GPIO to detect next
#define PREVIOUS_BUTTON 198 // Button 1: GPIO to detect previous (Important: as of 19.11.2020 changed from 33 to 2; make sure to change in SD-MMC-mode) #define PREVIOUS_BUTTON 198 // Button 1: GPIO to detect previous (Important: as of 19.11.2020 changed from 33 to 2; make sure to change in SD-MMC-mode)
#define PAUSEPLAY_BUTTON 36 // Button 2: GPIO to detect pause/play #define PAUSEPLAY_BUTTON 36 // Button 2: GPIO to detect pause/play
#define BUTTON_4 99 // Button 4: unnamed optional button #define BUTTON_4 99 // Button 4: unnamed optional button
#define BUTTON_5 99 // Button 5: unnamed optional button #define BUTTON_5 99 // Button 5: unnamed optional button
// Wake-up button
// Please note: only RTC-GPIOs (0, 4, 12, 13, 14, 15, 25, 26, 27, 32, 33, 34, 35, 36, 39, 99) can be used! Set to 99 to disable.
// I2C-configuration (necessary for RC522 [only via i2c - not spi!] or port-expander)
#if defined(RFID_READER_TYPE_MFRC522_I2C) || defined(PORT_EXPANDER_ENABLE)
#define ext_IIC_CLK 5 // i2c-SCL (clock)
#define ext_IIC_DATA 2 // i2c-SDA (data)
#endif
// Wake-up button => this also is the interrupt-pin if port-expander is enabled!
// Please note: only RTC-GPIOs (0, 4, 12, 13, 14, 15, 25, 26, 27, 32, 33, 34, 35, 36, 39, 99) can be used! Set to 99 to DISABLE.
// Please note #2: this button can be used as interrupt-pin for port-expander. If so, all pins connected to port-expander can wake up ESPuino.
#define WAKEUP_BUTTON DREHENCODER_BUTTON // Defines the button that is used to wake up ESPuino from deepsleep. #define WAKEUP_BUTTON DREHENCODER_BUTTON // Defines the button that is used to wake up ESPuino from deepsleep.
// Power-control // Power-control

15
src/settings-lolin32.h

@ -53,18 +53,25 @@
#ifdef USEROTARY_ENABLE #ifdef USEROTARY_ENABLE
#define DREHENCODER_CLK 34 // If you want to reverse encoder's direction, just switch GPIOs of CLK with DT (in software or hardware) #define DREHENCODER_CLK 34 // If you want to reverse encoder's direction, just switch GPIOs of CLK with DT (in software or hardware)
#define DREHENCODER_DT 35 // Info: Lolin D32 / Lolin D32 pro 35 are using 35 for battery-voltage-monitoring! #define DREHENCODER_DT 35 // Info: Lolin D32 / Lolin D32 pro 35 are using 35 for battery-voltage-monitoring!
#define DREHENCODER_BUTTON 32 // Button 3: is used to switch ESPuino on and off
#define DREHENCODER_BUTTON 32 // (set to 99 to disable; 0->39 for GPIO; 100->115 for port-expander)
#endif #endif
// Control-buttons (set to 99 to disable)
// Control-buttons (set to 99 to DISABLE; 0->39 for GPIO; 100->115 for port-expander)
#define NEXT_BUTTON 4 // Button 0: GPIO to detect next #define NEXT_BUTTON 4 // Button 0: GPIO to detect next
#define PREVIOUS_BUTTON 2 // Button 1: GPIO to detect previous (Important: as of 19.11.2020 changed from 33 to 2; make sure to change in SD-MMC-mode) #define PREVIOUS_BUTTON 2 // Button 1: GPIO to detect previous (Important: as of 19.11.2020 changed from 33 to 2; make sure to change in SD-MMC-mode)
#define PAUSEPLAY_BUTTON 5 // Button 2: GPIO to detect pause/play #define PAUSEPLAY_BUTTON 5 // Button 2: GPIO to detect pause/play
#define BUTTON_4 99 // Button 4: unnamed optional button #define BUTTON_4 99 // Button 4: unnamed optional button
#define BUTTON_5 99 // Button 5: unnamed optional button #define BUTTON_5 99 // Button 5: unnamed optional button
// Wake-up button
// Please note: only RTC-GPIOs (0, 4, 12, 13, 14, 15, 25, 26, 27, 32, 33, 34, 35, 36, 39, 99) can be used! Set to 99 to disable.
// I2C-configuration (necessary for RC522 [only via i2c - not spi!] or port-expander)
#if defined(RFID_READER_TYPE_MFRC522_I2C) || defined(PORT_EXPANDER_ENABLE)
#define ext_IIC_CLK 5 // i2c-SCL (clock)
#define ext_IIC_DATA 2 // i2c-SDA (data)
#endif
// Wake-up button => this also is the interrupt-pin if port-expander is enabled!
// Please note: only RTC-GPIOs (0, 4, 12, 13, 14, 15, 25, 26, 27, 32, 33, 34, 35, 36, 39, 99) can be used! Set to 99 to DISABLE.
// Please note #2: this button can be used as interrupt-pin for port-expander. If so, all pins connected to port-expander can wake up ESPuino.
#define WAKEUP_BUTTON DREHENCODER_BUTTON // Defines the button that is used to wake up ESPuino from deepsleep. #define WAKEUP_BUTTON DREHENCODER_BUTTON // Defines the button that is used to wake up ESPuino from deepsleep.
// (optional) Power-control // (optional) Power-control

15
src/settings-lolin_d32.h

@ -56,18 +56,25 @@
#ifdef USEROTARY_ENABLE #ifdef USEROTARY_ENABLE
#define DREHENCODER_CLK 34 // If you want to reverse encoder's direction, just switch GPIOs of CLK with DT (in software or hardware) #define DREHENCODER_CLK 34 // If you want to reverse encoder's direction, just switch GPIOs of CLK with DT (in software or hardware)
#define DREHENCODER_DT 33 // Info: Lolin D32 is using 35 for battery-voltage-monitoring! #define DREHENCODER_DT 33 // Info: Lolin D32 is using 35 for battery-voltage-monitoring!
#define DREHENCODER_BUTTON 32 // Button is used to switch ESPuino on and off
#define DREHENCODER_BUTTON 32 // (set to 99 to disable; 0->39 for GPIO; 100->115 for port-expander)
#endif #endif
// Control-buttons (set to 99 to disable)
// Control-buttons (set to 99 to DISABLE; 0->39 for GPIO; 100->115 for port-expander)
#define NEXT_BUTTON 4 // Button 0: GPIO to detect next #define NEXT_BUTTON 4 // Button 0: GPIO to detect next
#define PREVIOUS_BUTTON 2 // Button 1: GPIO to detect previous (Important: as of 19.11.2020 changed from 33 to 2; make sure to change in SD-MMC-mode) #define PREVIOUS_BUTTON 2 // Button 1: GPIO to detect previous (Important: as of 19.11.2020 changed from 33 to 2; make sure to change in SD-MMC-mode)
#define PAUSEPLAY_BUTTON 5 // Button 2: GPIO to detect pause/play #define PAUSEPLAY_BUTTON 5 // Button 2: GPIO to detect pause/play
#define BUTTON_4 99 // Button 4: unnamed optional button #define BUTTON_4 99 // Button 4: unnamed optional button
#define BUTTON_5 99 // Button 5: unnamed optional button #define BUTTON_5 99 // Button 5: unnamed optional button
// Wake-up button
// Please note: only RTC-GPIOs (0, 4, 12, 13, 14, 15, 25, 26, 27, 32, 33, 34, 35, 36, 39, 99) can be used! Set to 99 to disable.
// I2C-configuration (necessary for RC522 [only via i2c - not spi!] or port-expander)
#if defined(RFID_READER_TYPE_MFRC522_I2C) || defined(PORT_EXPANDER_ENABLE)
#define ext_IIC_CLK 5 // i2c-SCL (clock)
#define ext_IIC_DATA 2 // i2c-SDA (data)
#endif
// Wake-up button => this also is the interrupt-pin if port-expander is enabled!
// Please note: only RTC-GPIOs (0, 4, 12, 13, 14, 15, 25, 26, 27, 32, 33, 34, 35, 36, 39, 99) can be used! Set to 99 to DISABLE.
// Please note #2: this button can be used as interrupt-pin for port-expander. If so, all pins connected to port-expander can wake up ESPuino.
#define WAKEUP_BUTTON DREHENCODER_BUTTON // Defines the button that is used to wake up ESPuino from deepsleep. #define WAKEUP_BUTTON DREHENCODER_BUTTON // Defines the button that is used to wake up ESPuino from deepsleep.
// (optional) Power-control // (optional) Power-control

15
src/settings-lolin_d32_pro.h

@ -51,18 +51,25 @@
#ifdef USEROTARY_ENABLE #ifdef USEROTARY_ENABLE
#define DREHENCODER_CLK 34 // If you want to reverse encoder's direction, just switch GPIOs of CLK with DT (in software or hardware) #define DREHENCODER_CLK 34 // If you want to reverse encoder's direction, just switch GPIOs of CLK with DT (in software or hardware)
#define DREHENCODER_DT 39 // 39 = 'VN'; Info: Lolin D32 pro is using 35 for battery-voltage-monitoring! #define DREHENCODER_DT 39 // 39 = 'VN'; Info: Lolin D32 pro is using 35 for battery-voltage-monitoring!
#define DREHENCODER_BUTTON 36 // Button 3: is used to switch ESPuino on and off; 36 = 'VP'
#define DREHENCODER_BUTTON 36 // (set to 99 to disable; 0->39 for GPIO; 100->115 for port-expander)
#endif #endif
// Control-buttons (set to 99 to disable)
// Control-buttons (set to 99 to DISABLE; 0->39 for GPIO; 100->115 for port-expander)
#define NEXT_BUTTON 0 // Button 0: GPIO to detect next #define NEXT_BUTTON 0 // Button 0: GPIO to detect next
#define PREVIOUS_BUTTON 2 // Button 1: GPIO to detect previous (Important: as of 19.11.2020 changed from 33 to 2; make sure to change in SD-MMC-mode) #define PREVIOUS_BUTTON 2 // Button 1: GPIO to detect previous (Important: as of 19.11.2020 changed from 33 to 2; make sure to change in SD-MMC-mode)
#define PAUSEPLAY_BUTTON 32 // Button 2: GPIO to detect pause/play #define PAUSEPLAY_BUTTON 32 // Button 2: GPIO to detect pause/play
#define BUTTON_4 99 // Button 4: unnamed optional button #define BUTTON_4 99 // Button 4: unnamed optional button
#define BUTTON_5 99 // Button 5: unnamed optional button #define BUTTON_5 99 // Button 5: unnamed optional button
// Wake-up button
// Please note: only RTC-GPIOs (0, 4, 12, 13, 14, 15, 25, 26, 27, 32, 33, 34, 35, 36, 39, 99) can be used! Set to 99 to disable.
// I2C-configuration (necessary for RC522 [only via i2c - not spi!] or port-expander)
#if defined(RFID_READER_TYPE_MFRC522_I2C) || defined(PORT_EXPANDER_ENABLE)
#define ext_IIC_CLK 5 // i2c-SCL (clock)
#define ext_IIC_DATA 2 // i2c-SDA (data)
#endif
// Wake-up button => this also is the interrupt-pin if port-expander is enabled!
// Please note: only RTC-GPIOs (0, 4, 12, 13, 14, 15, 25, 26, 27, 32, 33, 34, 35, 36, 39, 99) can be used! Set to 99 to DISABLE.
// Please note #2: this button can be used as interrupt-pin for port-expander. If so, all pins connected to port-expander can wake up ESPuino.
#define WAKEUP_BUTTON DREHENCODER_BUTTON // Defines the button that is used to wake up ESPuino from deepsleep. #define WAKEUP_BUTTON DREHENCODER_BUTTON // Defines the button that is used to wake up ESPuino from deepsleep.
// (optional) Power-control // (optional) Power-control

15
src/settings-ttgo_t8.h

@ -51,18 +51,25 @@
#ifdef USEROTARY_ENABLE #ifdef USEROTARY_ENABLE
#define DREHENCODER_CLK 34 // If you want to reverse encoder's direction, just switch GPIOs of CLK with DT (in software or hardware) #define DREHENCODER_CLK 34 // If you want to reverse encoder's direction, just switch GPIOs of CLK with DT (in software or hardware)
#define DREHENCODER_DT 33 // Info: Lolin D32 / Lolin D32 pro 35 are using 35 for battery-voltage-monitoring! #define DREHENCODER_DT 33 // Info: Lolin D32 / Lolin D32 pro 35 are using 35 for battery-voltage-monitoring!
#define DREHENCODER_BUTTON 32 // Button 3: is used to switch ESPuino on and off
#define DREHENCODER_BUTTON 32 // (set to 99 to disable; 0->39 for GPIO; 100->115 for port-expander)
#endif #endif
// Control-buttons (set to 99 to disable)
// Control-buttons (set to 99 to DISABLE; 0->39 for GPIO; 100->115 for port-expander)
#define NEXT_BUTTON 0 // Button 0: GPIO to detect next #define NEXT_BUTTON 0 // Button 0: GPIO to detect next
#define PREVIOUS_BUTTON 36 // Button 1: GPIO to detect previous (Important: as of 19.11.2020 changed from 33 to 2; make sure to change in SD-MMC-mode) #define PREVIOUS_BUTTON 36 // Button 1: GPIO to detect previous (Important: as of 19.11.2020 changed from 33 to 2; make sure to change in SD-MMC-mode)
#define PAUSEPLAY_BUTTON 39 // Button 2: GPIO to detect pause/play #define PAUSEPLAY_BUTTON 39 // Button 2: GPIO to detect pause/play
#define BUTTON_4 99 // Button 4: unnamed optional button #define BUTTON_4 99 // Button 4: unnamed optional button
#define BUTTON_5 99 // Button 5: unnamed optional button #define BUTTON_5 99 // Button 5: unnamed optional button
// Wake-up button
// Please note: only RTC-GPIOs (0, 4, 12, 13, 14, 15, 25, 26, 27, 32, 33, 34, 35, 36, 39, 99) can be used! Set to 99 to disable.
// I2C-configuration (necessary for RC522 [only via i2c - not spi!] or port-expander)
#if defined(RFID_READER_TYPE_MFRC522_I2C) || defined(PORT_EXPANDER_ENABLE)
#define ext_IIC_CLK 5 // i2c-SCL (clock)
#define ext_IIC_DATA 2 // i2c-SDA (data)
#endif
// Wake-up button => this also is the interrupt-pin if port-expander is enabled!
// Please note: only RTC-GPIOs (0, 4, 12, 13, 14, 15, 25, 26, 27, 32, 33, 34, 35, 36, 39, 99) can be used! Set to 99 to DISABLE.
// Please note #2: this button can be used as interrupt-pin for port-expander. If so, all pins connected to port-expander can wake up ESPuino.
#define WAKEUP_BUTTON DREHENCODER_BUTTON // Defines the button that is used to wake up ESPuino from deepsleep. #define WAKEUP_BUTTON DREHENCODER_BUTTON // Defines the button that is used to wake up ESPuino from deepsleep.
// (optional) Power-control // (optional) Power-control

7
src/settings.h

@ -21,6 +21,7 @@
//########################## MODULES ################################# //########################## MODULES #################################
//#define PORT_EXPANDER_ENABLE // When enabled, buttons can be connected via port-expander PCA9555
#define MDNS_ENABLE // When enabled, you don't have to handle with ESPuino's IP-address. If hostname is set to "ESPuino", you can reach it via ESPuino.local #define MDNS_ENABLE // When enabled, you don't have to handle with ESPuino's IP-address. If hostname is set to "ESPuino", you can reach it via ESPuino.local
#define MQTT_ENABLE // Make sure to configure mqtt-server and (optionally) username+pwd #define MQTT_ENABLE // Make sure to configure mqtt-server and (optionally) username+pwd
#define FTP_ENABLE // Enables FTP-server; DON'T FORGET TO ACTIVATE AFTER BOOT BY PRESSING PAUSE + NEXT-BUTTONS (IN PARALLEL)! #define FTP_ENABLE // Enables FTP-server; DON'T FORGET TO ACTIVATE AFTER BOOT BY PRESSING PAUSE + NEXT-BUTTONS (IN PARALLEL)!
@ -57,6 +58,12 @@
#endif #endif
//############# Port-expander-configuration ######################
#ifdef PORT_EXPANDER_ENABLE
const uint8_t portsToRead = 2; // PCA9555 has two ports à 8 channels. If 8 channels are sufficient, set to 1 and only use the first port!
uint8_t expanderI2cAddress = 0x20; // I2C-address of PCA9555
#endif
//################## BUTTON-Layout ################################## //################## BUTTON-Layout ##################################
/* German documentation: https://forum.espuino.de/t/das-dynamische-button-layout/224 /* German documentation: https://forum.espuino.de/t/das-dynamische-button-layout/224
Please note the following numbers as you need to know them in order to define actions for buttons. Please note the following numbers as you need to know them in order to define actions for buttons.

Loading…
Cancel
Save