diff --git a/README.md b/README.md
index 5125214..2fce7da 100644
--- a/README.md
+++ b/README.md
@@ -12,7 +12,7 @@ Finally, the long announced Tonuino-PCB for Wemos' Lolin32 is [there](https://gi
* 17.11.2020: Introduced a distinct volume for headphone for optional headphone-PCB.
* 20.11.2020: Added directive `MEASURE_BATTERY_VOLTAGE`: monitoring battery's voltage is now supported.
* 25.11.2020: WiFi can now be enabled/disabled instantly by pressing two buttons.
-* 28.11.2020: Battery's voltage can now be visualized by Neopixel by short-press of rotary encoder's burtton.
+* 28.11.2020: Battery's voltage can now be visualized by Neopixel by short-press of rotary encoder's button.
* 28.11.2020: Added directive `PLAY_LAST_RFID_AFTER_REBOOT`: Tonuino will recall the last RFID played after reboot.
* 05.12.2020: Added filebrowser to webgui (thanks @mariolukas for contribution!)
* 05.12.2020: Moved all user-relevant settings to src/settings.h
@@ -25,6 +25,7 @@ Finally, the long announced Tonuino-PCB for Wemos' Lolin32 is [there](https://gi
* 20.12.2020: Due to memory-issues with webstreams, FTP needs to be activated by pressing pause+next-button now
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)
+* 28.12.2020: Added display (via i2c)
## 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 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.
@@ -42,7 +43,7 @@ The core of my implementation is based on the popular [ESP32 by Espressif](https
The basic idea of Tonuino is to provide a way, to use the Arduino-platform for a music-control-concept that supports locally stored music-files without DRM-restrictions. This basically means that RFID-tags are used to direct a music-player. Even for kids this concept is simple: place an RFID-object (card, character) on top of a box and the music starts to play. Place another RFID-object on it and anything else is played. Simple as that.
## Hardware-setup
-The heart of my project is an ESP32 on a [Wemos Lolin32 development-board](https://www.ebay.de/itm/4MB-Flash-WEMOS-Lolin32-V1-0-0-WIFI-Bluetooth-Card-Based-ESP-32-ESP-WROOM-32/162716855489). If ordered in China (Aliexpress, eBay e.g.) it's pretty cheap (around 4€) but even in Europe it's only around 8€. Make sure to install the drivers for the USB/Serial-chip (CP2102 e.g.). But probably it's besser to use it's successor: [Wemos Lolin D32](https://de.aliexpress.com/item/32808551116.html).
+The heart of my project is an ESP32 on a [Wemos Lolin32 development-board](https://www.ebay.de/itm/4MB-Flash-WEMOS-Lolin32-V1-0-0-WIFI-Bluetooth-Card-Based-ESP-32-ESP-WROOM-32/162716855489). If ordered in China (Aliexpress, eBay e.g.) it's pretty cheap (around 4€) but even in Europe it's only around 8€. Make sure to install the drivers for the USB/Serial-chip (CP2102 e.g.). But probably it's better to use it's successor (which has battery-measurement already included): [Wemos Lolin D32](https://de.aliexpress.com/item/32808551116.html). Or, if you're planning to hear webstreams regularly, [Wemos Lolin D32 pro](https://de.aliexpress.com/item/32883116057.html) might be a good decision. It comes with uSD-slot onboard and because of its ESP32-WROVER-B has PSRAM included. PSRAM is used as webstream-cache and might be used more intensively in future.
* [MAX98357A (like Adafruit's)](https://de.aliexpress.com/item/32999952454.html)
* [uSD-card-reader; 3.3V only; supports SPI + SD-MMC](https://www.ebay.de/itm/Micro-SPI-Kartenleser-Card-Reader-2GB-SD-8GB-SDHC-Card-3-3V-ESP8266-Arduino-NEU/333796577968)
* [RFID-reader](https://www.amazon.de/AZDelivery-Reader-Arduino-Raspberry-gratis/dp/B074S8MRQ7)
@@ -95,8 +96,8 @@ Please note: via GUI upper and lower voltage cut-offs for visualisation of batte
Having SD working is mandatory. So there are two modes available to access SD-cards: SPI and SD-MMC (1 bit).
Advantages SD-MMC (1 bit) over SPI:
* Needs only three GPIOs (instead of four)
-* It is almost twice as fast in FTP-transfer
-So why using SPI if SD-MMC is better? The primary problem of SD-MMC is: you cannot choose different GPIOs. That doesn't sound bad but this can (depends on the ESP-develboard) be a problem because GPIO2 is pulled HIGH in SD-MMC-mode. And if that's the case, you'll probably not able to flash the firmware as the ESP32 doesn't enter flash-mode. Tested it with Lolin32 and had to remove SD's wire to GPIO2 until flash-mode was entered. As soon as flash-mode was entered, it's safe to re-connect it. So be advised: SD-MMC is nice and fast, but if you want to update the firmware and ESP32 is deeply burried in Tonuino's enclosure, this can be problem.
+* It is almost twice as fast in FTP-transfer
+So why using SPI if SD-MMC seems to be better? The primary problem of SD-MMC is: you cannot choose different GPIOs. That doesn't sound bad but this can (depending on the uSD-card-reader-module) be a problem because maybe GPIO2 is pulled HIGH to 3.3V by a resistor. For example this is the case when using the reader-module named above in hardware-setup. It's a problem because if GPIO2 is pulled high, ESP32 doesn't enter flash-mode. As soon as flash-mode is entered, it's no longer a problem. However, this behaviour can be an issue if ESP32 is deeply "burried" in Tonuino's enclosure and you want to update its firmware. But fortunately there's a way to bypass this problem: remove the [pullup-resistor shown in the picture](https://raw.githubusercontent.com/biologist79/Tonuino-ESP32-I2S/master/pictures/Pullup-removal.jpg). It can be removed safely because if MMC-mode is set, pullup is done in software using `pinMode(2, INPUT_PULLUP);`.
## RFID: RC522 or PN5180?
RC522 is so to say the Tonuino-standard. It's cheap and works, but RFID-tag has to be placed near the reader. PN5180 instead has better RFID range/sensitivity and can read ISO-15693 / iCode SLIX2-tags aka 'Tonies'. Disadvantages: is a bit more expensive and needs more GPIOs (6 instead of 4). Refer PN5180's wire-section below for further informations.
@@ -165,7 +166,7 @@ In general I recommend using a [uSD-card-reader](https://www.ebay.de/itm/Micro-S
| ------------- | --------------------- | ------ | ------------------------------------------------------------ |
| -- | SD-reader | CS | no CS required |
| 15 | SD-reader | MOSI | |
-| 2 | SD-reader | MISO | 10K hardware pullup may be required |
+| 2 | SD-reader | MISO | make sure there's no hardware-pullup |
| 14 | SD-reader | SCK | |
Make sure to enable `SD_MMC_1BIT_MODE` if you want to use this feature. SD-MMC-mode requires these fixed PINs listed above. You can find a good comparison of different SD-card-modes here: (https://www.instructables.com/Select-SD-Interface-for-ESP32/).
diff --git a/pictures/Pullup-removal.jpg b/pictures/Pullup-removal.jpg
new file mode 100644
index 0000000..9b338d2
Binary files /dev/null and b/pictures/Pullup-removal.jpg differ
diff --git a/src/main.cpp b/src/main.cpp
index 34547d4..a243c8a 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -8,9 +8,9 @@
#elif (HAL == 2)
#include "settings-espa1s.h" // Contains all user-relevant settings for ESP32-A1S Audiokit
#elif (HAL == 3)
- #include "settings-lolin_D32.h" // Contains all user-relevant settings for Wemos Lolin D32
+ #include "settings-lolin_d32.h" // Contains all user-relevant settings for Wemos Lolin D32
#elif (HAL == 4)
- #include "settings-lolin_D32_pro.h" // Contains all user-relevant settings for Wemos Lolin D32 pro
+ #include "settings-lolin_d32_pro.h" // Contains all user-relevant settings for Wemos Lolin D32 pro
#endif
#include
@@ -38,8 +38,8 @@
#include
#endif
#ifdef RFID_READER_TYPE_MFRC522_I2C
- #include "Wire.h"
- #include
+ #include "Wire.h"
+ #include
#endif
#ifdef RFID_READER_TYPE_PN5180
#include
@@ -269,10 +269,10 @@ AsyncEventSource events("/events");
// Audio/mp3
#ifndef SD_MMC_1BIT_MODE
-SPIClass spiSD(HSPI);
-fs::FS FSystem = (fs::FS)SD;
+ SPIClass spiSD(HSPI);
+ fs::FS FSystem = (fs::FS)SD;
#else
-fs::FS FSystem = (fs::FS)SD_MMC;
+ fs::FS FSystem = (fs::FS)SD_MMC;
#endif
TaskHandle_t mp3Play;
@@ -283,7 +283,7 @@ TaskHandle_t rfid;
#endif
#if (HAL == 2)
-#include "AC101.h"
+ #include "AC101.h"
static TwoWire i2cBusOne = TwoWire(0);
static AC101 ac(i2cBusOne);
#endif
@@ -3868,20 +3868,6 @@ void setup() {
a2dp_sink.start("Tonuino");
#endif
- #ifdef DISPLAY_I2C
- // OLED Display - https://github.com/olikraus/u8g2/wiki/u8g2setupcpp#sh1106-128x64_noname-1
- U8G2_SH1106_128X64_NONAME_1_2ND_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE);
- u8g2.begin();
- u8g2.firstPage();
- do {
- u8g2.setFont(u8g2_font_ncenB08_tr);
- u8g2.drawStr(0,8,"Tonuino gestartet");
- u8g2.drawStr(0,16,"Papas Projekt");
- u8g2.drawStr(0,24,"Dritte Statuszeile passt");
- u8g2.drawStr(0,16,"und noch eine vierte Zeile");
- } while ( u8g2.nextPage() );
- #endif
-
// Create queues
volumeQueue = xQueueCreate(1, sizeof(int));
if (volumeQueue == NULL) {
@@ -4148,7 +4134,7 @@ void setup() {
// Create empty index json-file when no file exists.
if (!fileExists(FSystem,DIRECTORY_INDEX_FILE)) {
createFile(FSystem,DIRECTORY_INDEX_FILE,"[]");
- ESP.restart();
+ esp_deep_sleep_start();
}
bootComplete = true;
diff --git a/src/settings-lolin32.h b/src/settings-lolin32.h
index e5c6719..3a2f9bd 100644
--- a/src/settings-lolin32.h
+++ b/src/settings-lolin32.h
@@ -8,7 +8,7 @@
Caveats: None
Status:
tested with 2x SPI: RC522 & SD (by biologist79)
- tested with 1x SPI: PN5180, SD (MMC) (by tueddy)
+ tested with 1x SPI: PN5180, SD (MMC) (by tueddy and biologist79) => don't enable SINGLE_SPI_ENABLE
*/
//################## GPIO-configuration ##############################
@@ -17,8 +17,8 @@
//
// SD_MMC uses fixed pins
// MOSI 15
- // SCKK 14
- // MISO 2 // hardware pullup may required
+ // SCK 14
+ // MISO 2
#else
// uSD-card-reader (via SPI)
#define SPISD_CS 15 // GPIO for chip select (SD)
@@ -53,7 +53,7 @@
// Control-buttons
#define PAUSEPLAY_BUTTON 5 // GPIO to detect pause/play
#define NEXT_BUTTON 4 // GPIO to detect next
-#define PREVIOUS_BUTTON 2 // GPIO to detect previous (Important: as of 19.11.2020 changed from 33 to 2)
+#define PREVIOUS_BUTTON 2 // GPIO to detect previous (Important: as of 19.11.2020 changed from 33 to 2; make sure to change in SD-MMC-mode)
// (optional) Power-control
#define POWER 17 // GPIO used to drive transistor-circuit, that switches off peripheral devices while ESP32-deepsleep
diff --git a/src/settings-lolin_d32.h b/src/settings-lolin_d32.h
index e60f31f..a802681 100644
--- a/src/settings-lolin_d32.h
+++ b/src/settings-lolin_d32.h
@@ -17,8 +17,8 @@
//
// SD_MMC uses fixed pins
// MOSI 15
- // SCKK 14
- // MISO 2 // hardware pullup may required
+ // SCK 14
+ // MISO 2
#else
// uSD-card-reader (via SPI)
#define SPISD_CS 15 // GPIO for chip select (SD)
diff --git a/src/settings-lolin_d32_pro.h b/src/settings-lolin_d32_pro.h
index 6cb1659..f7be6bf 100644
--- a/src/settings-lolin_d32_pro.h
+++ b/src/settings-lolin_d32_pro.h
@@ -6,19 +6,14 @@
PCB: None so far
Infos: https://www.wemos.cc/en/latest/d32/d32_pro.html
Schematics: https://www.wemos.cc/en/latest/_static/files/sch_d32_pro_v2.0.0.pdf
- Caveats: GPIO35 (battery monitoring) + SD can't be changed, it's built in
+ Caveats: GPIO35 (battery monitoring) + SD can't be changed, it's built in (and because of the SD-pinout used, it is not compatible with MMC-mode)
Status:
tested with 2xSPI: RC522 & SD (by biologist79)
*/
//################## GPIO-configuration ##############################
#ifdef SD_MMC_1BIT_MODE
- // uSD-card-reader (via SD-MMC 1Bit)
- //
- // SD_MMC uses fixed pins
- // MOSI 15
- // SCKK 14
- // MISO 2 // hardware pullup may required
+ // NOT SUPPORTED BY D32 pro as 15 / 14 / 2 doesn't match D32 pro's SD-pinout
#else
// uSD-card-reader (via SPI) => Cannot be changed, it's built in!
#define SPISD_CS 4 // GPIO for chip select (SD)