This commit is contained in:
Stefan Ostermann 2023-06-24 14:16:30 +02:00
parent 1258a23dc4
commit eb0d631ea2
2 changed files with 126 additions and 12 deletions

View File

@ -9,23 +9,31 @@ This library only works on multi-core ESP32 chips like the ESP32-S3. It does not
## Pins
### Amplifier
```
Amplifier:
25 -> DIN
D8 -> BCLK
D4 -> LRC
26 -> DIN
27 -> BCLK
25 -> LRC
5V -> Vin
GND -> GND
DAC Channel ESP32 = PIN 25
SD Card:
CS -> D1
MOSI -> D7
CLK -> D5
MISO -> D6
```
### SD Card
```
CS -> 22 (D1)
MOSI -> 23 (D7)
CLK -> 18 (D5)
MISO -> 19 (D6)
```
## Buttons
```
Start / Stop -> 17 and GND
```
## TODOs
* Card Reader with SPI. Configure hspi, second SPI channel? Or does SD Card + RFID run at the same channel?

View File

@ -19,6 +19,7 @@
// define pins for RFID
#define CS_RFID 32
#define RST_RFID 33
#define IRQ_RFID 34
// Audio DAC
#define I2S_DOUT 26 // connect to DAC pin DIN
@ -27,6 +28,8 @@
#define BTN_START_STOP 17 // Button on D3 and GND
#define CS_SDCARD 22
#include "globals.h"
#include "WebContent.h"
@ -50,10 +53,28 @@ DirectoryNode *currentNode = NULL;
boolean blockState = false;
volatile bool newRfidInt = false;
MFRC522 rfid(CS_RFID, RST_RFID); // instatiate a MFRC522 reader object.
void activateSD() {
digitalWrite(CS_SDCARD, LOW);
}
void deactivateSD() {
digitalWrite(CS_SDCARD, HIGH);
}
void activateRFID() {
digitalWrite(CS_RFID, LOW);
}
void deactivateRFID() {
digitalWrite(CS_RFID, HIGH);
}
void playNextMp3()
{
blockState = true;
@ -168,6 +189,22 @@ void audio_eof_mp3(const char *info) {
playNextMp3();
}
void readRFID() {
rfid.PICC_ReadCardSerial();
Serial.print("Tag UID: ");
String uidString = String(rfid.uid.uidByte[0]) + " " + String(rfid.uid.uidByte[1]) + " " +
String(rfid.uid.uidByte[2]) + " " + String(rfid.uid.uidByte[3]);
Serial.println(uidString);
}
void clearInt(MFRC522 mfrc522) {
mfrc522.PCD_WriteRegister(mfrc522.ComIrqReg, 0x7F);
}
void IRAM_ATTR rfid_interrupt() {
newRfidInt = true;
}
void setup()
{
// put your setup code here, to run once:
@ -175,11 +212,50 @@ void setup()
pinMode(BTN_START_STOP, INPUT_PULLUP);
/* setup the IRQ pin*/
pinMode(IRQ_RFID, INPUT_PULLUP);
// Init MFRC522
// Init SPI bus
SPI.begin();
rfid.PCD_Init();
/*
* Allow the ... irq to be propagated to the IRQ pin
* For test purposes propagate the IdleIrq and loAlert
*/
rfid.PCD_WriteRegister(rfid.ComIEnReg, 0xA0);
newRfidInt = false; //interrupt flag
attachInterrupt(IRQ_RFID, rfid_interrupt, FALLING);
do { //clear a spourious interrupt at start
;
} while (!newRfidInt);
newRfidInt = false;
//switch off RFID Reader:
//pinMode(RST_RFID, OUTPUT);
//digitalWrite(RST_RFID, LOW);
// first parameter is name of access point, second is the password
AsyncWiFiManager wifiManager(&server, &dns);
wifiManager.autoConnect("HannaBox");
deactivateRFID();
Serial.print("Initializing SD card...");
if (!SD.begin(D1))
@ -192,6 +268,16 @@ void setup()
rootNode.buildDirectoryTree("/");
rootNode.printDirectoryTree();
Serial.println("RFID");
// clear RFID Reset
//digitalWrite(RST_RFID, HIGH);
activateRFID();
// printDirectoryTree(&rootNode, 0);
// printDirectory(root, 0);
@ -227,9 +313,28 @@ void setup()
server.begin();
}
void loop()
{
if (newRfidInt) {
deactivateSD();
activateRFID();
if(rfid.PICC_IsNewCardPresent()) {
readRFID();
}
deactivateRFID();
activateSD();
clearInt(rfid);
newRfidInt = false;
stop();
}
audio.loop();
if (buttonPressed(BTN_START_STOP)) {
@ -240,6 +345,7 @@ void loop()
}
}
}
boolean buttonPressed(const uint8_t pin) {