diff --git a/README.md b/README.md index 48ecb6d..0eae959 100644 --- a/README.md +++ b/README.md @@ -12,3 +12,22 @@ Store WiFi secrets in a secrets.h like this: #define SSID "your-ssid" #define PASSWORD "your-password" ``` + +## Circuit + +Circuit: + +- LED attached to pin 13 (optional) +- IR Transmitter attached to pin 4 (connect to 5v or 3v3) +- SD-Module to load HTML and CSS from SD-card + +Connect the SD card to the following pins: + +SD Card | ESP32 +------- | ----- +3v3 | 3.3V +CS | 5 +MOSI | 23 +CLK | 18 +MISO | 19 +GND | GND diff --git a/arduino-sony-minidisc-ir-remote.ino b/arduino-sony-minidisc-ir-remote.ino index f4efa5d..e17c0dc 100644 --- a/arduino-sony-minidisc-ir-remote.ino +++ b/arduino-sony-minidisc-ir-remote.ino @@ -14,19 +14,20 @@ Circuit: - * LED attached to pin 13 (optional) - * IR Transmitter attached to pin 4 (connect to 5v or 3v3) - * SD-Module to load HTML and CSS from SD-card - * - * Connect the SD card to the following pins: - * - * SD Card | ESP32 - * 3v3 3.3V - * CS 5 - * MOSI 23 - * CLK 18 - * MISO 19 - * GND GND + - LED attached to pin 13 (optional) + - IR Transmitter attached to pin 4 (connect to 5v or 3v3) + - SD-Module to load HTML and CSS from SD-card + + Connect the SD card to the following pins: + + SD Card | ESP32 + ------- | ----- + 3v3 | 3.3V + CS | 5 + MOSI | 23 + CLK | 18 + MISO | 19 + GND | GND developed for the ESP32vn IoT Uni board 2024 */ @@ -41,98 +42,115 @@ WiFiServer server(80); +/**** SD-Card Functions ****/ +void listDir(fs::FS &fs, const char *dirname, uint8_t levels) +{ + Serial.printf("Listing directory: %s\n", dirname); -/**** SD-Card Functions ****/ -void listDir(fs::FS &fs, const char * dirname, uint8_t levels){ - Serial.printf("Listing directory: %s\n", dirname); + File root = fs.open(dirname); + if (!root) + { + Serial.println("Failed to open directory"); + return; + } + if (!root.isDirectory()) + { + Serial.println("Not a directory"); + return; + } - File root = fs.open(dirname); - if(!root){ - Serial.println("Failed to open directory"); - return; + File file = root.openNextFile(); + while (file) + { + if (file.isDirectory()) + { + Serial.print(" DIR : "); + Serial.println(file.name()); + if (levels) + { + listDir(fs, file.path(), levels - 1); + } } - if(!root.isDirectory()){ - Serial.println("Not a directory"); - return; - } - - File file = root.openNextFile(); - while(file){ - if(file.isDirectory()){ - Serial.print(" DIR : "); - Serial.println(file.name()); - if(levels){ - listDir(fs, file.path(), levels -1); - } - } else { - Serial.print(" FILE: "); - Serial.print(file.name()); - Serial.print(" SIZE: "); - Serial.println(file.size()); - } - file = root.openNextFile(); + else + { + Serial.print(" FILE: "); + Serial.print(file.name()); + Serial.print(" SIZE: "); + Serial.println(file.size()); } + file = root.openNextFile(); + } } -void readFile(fs::FS &fs, const char * path){ - Serial.printf("Reading file: %s\n", path); +void readFile(fs::FS &fs, const char *path) +{ + Serial.printf("Reading file: %s\n", path); - File file = fs.open(path); - if(!file){ - Serial.println("Failed to open file for reading"); - return; - } + File file = fs.open(path); + if (!file) + { + Serial.println("Failed to open file for reading"); + return; + } - Serial.print("Read from file: "); - while(file.available()){ - Serial.write(file.read()); - } - file.close(); + Serial.print("Read from file: "); + while (file.available()) + { + Serial.write(file.read()); + } + file.close(); } -void testFileIO(fs::FS &fs, const char * path){ - File file = fs.open(path); - static uint8_t buf[512]; - size_t len = 0; - uint32_t start = millis(); - uint32_t end = start; - if(file){ - len = file.size(); - size_t flen = len; - start = millis(); - while(len){ - size_t toRead = len; - if(toRead > 512){ - toRead = 512; - } - file.read(buf, toRead); - len -= toRead; - } - end = millis() - start; - Serial.printf("%u bytes read for %u ms\n", flen, end); - file.close(); - } else { - Serial.println("Failed to open file for reading"); - } - - - file = fs.open(path, FILE_WRITE); - if(!file){ - Serial.println("Failed to open file for writing"); - return; - } - - size_t i; +void testFileIO(fs::FS &fs, const char *path) +{ + File file = fs.open(path); + static uint8_t buf[512]; + size_t len = 0; + uint32_t start = millis(); + uint32_t end = start; + if (file) + { + len = file.size(); + size_t flen = len; start = millis(); - for(i=0; i<2048; i++){ - file.write(buf, 512); + while (len) + { + size_t toRead = len; + if (toRead > 512) + { + toRead = 512; + } + file.read(buf, toRead); + len -= toRead; } end = millis() - start; - Serial.printf("%u bytes written for %u ms\n", 2048 * 512, end); + Serial.printf("%u bytes read for %u ms\n", flen, end); file.close(); + } + else + { + Serial.println("Failed to open file for reading"); + } + + file = fs.open(path, FILE_WRITE); + if (!file) + { + Serial.println("Failed to open file for writing"); + return; + } + + size_t i; + start = millis(); + for (i = 0; i < 2048; i++) + { + file.write(buf, 512); + } + end = millis() - start; + Serial.printf("%u bytes written for %u ms\n", 2048 * 512, end); + file.close(); } -/* ============ IR Functions ============ */ +/* ============ IR Functions ============ */ void sendButton(int command) { Serial.println(command); @@ -140,35 +158,45 @@ void sendButton(int command) IrSender.sendSony(0xF, command, 2, 12); } -/* ============ Setup ============ */ -void setup() { +/* ============ Setup ============ */ +void setup() +{ Serial.begin(115200); - pinMode(LED_PIN, OUTPUT); // set the LED pin mode - + pinMode(LED_PIN, OUTPUT); // set the LED pin mode + delay(10); /* ============ SD-Card Setup ============ */ - if(!SD.begin()){ - Serial.println("Card Mount Failed"); - return; - } + if (!SD.begin()) + { + Serial.println("Card Mount Failed"); + return; + } uint8_t cardType = SD.cardType(); - if(cardType == CARD_NONE){ - Serial.println("No SD card attached"); - return; + if (cardType == CARD_NONE) + { + Serial.println("No SD card attached"); + return; } Serial.print("SD Card Type: "); - if(cardType == CARD_MMC){ - Serial.println("MMC"); - } else if(cardType == CARD_SD){ - Serial.println("SDSC"); - } else if(cardType == CARD_SDHC){ - Serial.println("SDHC"); - } else { - Serial.println("UNKNOWN"); + if (cardType == CARD_MMC) + { + Serial.println("MMC"); + } + else if (cardType == CARD_SD) + { + Serial.println("SDSC"); + } + else if (cardType == CARD_SDHC) + { + Serial.println("SDHC"); + } + else + { + Serial.println("UNKNOWN"); } uint64_t cardSize = SD.cardSize() / (1024 * 1024); @@ -179,14 +207,13 @@ void setup() { Serial.printf("Total space: %lluMB\n", SD.totalBytes() / (1024 * 1024)); Serial.printf("Used space: %lluMB\n", SD.usedBytes() / (1024 * 1024)); - /* ============ IR Setup ============ */ - IrSender.begin(IR_SEND_PIN, ENABLE_LED_FEEDBACK, USE_DEFAULT_FEEDBACK_LED_PIN); // Specify send pin and enable feedback LED at default feedback LED pin + IrSender.begin(IR_SEND_PIN, ENABLE_LED_FEEDBACK, USE_DEFAULT_FEEDBACK_LED_PIN); // Specify send pin and enable feedback LED at default feedback LED pin Serial.println(); Serial.print(F("Send IR signals at pin ")); Serial.println(IR_SEND_PIN); - /* ============ Webserver Setup ============ */ + /* ============ Webserver Setup ============ */ // We start by connecting to a WiFi network @@ -197,7 +224,8 @@ void setup() { WiFi.begin(SSID, PASSWORD); - while (WiFi.status() != WL_CONNECTED) { + while (WiFi.status() != WL_CONNECTED) + { delay(500); Serial.print("."); } @@ -210,21 +238,27 @@ void setup() { server.begin(); } -void loop() { - WiFiClient client = server.available(); // listen for incoming clients +void loop() +{ + WiFiClient client = server.available(); // listen for incoming clients - if (client) { // if you get a client, - Serial.println("New Client."); // print a message out the serial port - String currentLine = ""; // make a String to hold incoming data from the client - while (client.connected()) { // loop while the client's connected - if (client.available()) { // if there's bytes to read from the client, - char c = client.read(); // read a byte, then - Serial.write(c); // print it out the serial monitor - if (c == '\n') { // if the byte is a newline character + if (client) + { // if you get a client, + Serial.println("New Client."); // print a message out the serial port + String currentLine = ""; // make a String to hold incoming data from the client + while (client.connected()) + { // loop while the client's connected + if (client.available()) + { // if there's bytes to read from the client, + char c = client.read(); // read a byte, then + Serial.write(c); // print it out the serial monitor + if (c == '\n') + { // if the byte is a newline character // if the current line is blank, you got two newline characters in a row. // that's the end of the client HTTP request, so send a response: - if (currentLine.length() == 0) { + if (currentLine.length() == 0) + { // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK) // and a content-type so the client knows what's coming, then a blank line: client.println("HTTP/1.1 200 OK"); @@ -239,39 +273,52 @@ void loop() { client.println(); // break out of the while loop: break; - } else { // if you got a newline, then clear currentLine: + } + else + { // if you got a newline, then clear currentLine: currentLine = ""; } - } else if (c != '\r') { // if you got anything else but a carriage return character, - currentLine += c; // add it to the end of the currentLine + } + else if (c != '\r') + { // if you got anything else but a carriage return character, + currentLine += c; // add it to the end of the currentLine } // Check to see if the client request was "GET /H" or "GET /L": - if (currentLine.endsWith("GET /H")) { - digitalWrite(LED_PIN, HIGH); // GET /H turns the LED on + if (currentLine.endsWith("GET /H")) + { + digitalWrite(LED_PIN, HIGH); // GET /H turns the LED on } - if (currentLine.endsWith("GET /L")) { - digitalWrite(LED_PIN, LOW); // GET /L turns the LED off + if (currentLine.endsWith("GET /L")) + { + digitalWrite(LED_PIN, LOW); // GET /L turns the LED off } - if (currentLine.endsWith("GET /power")) { + if (currentLine.endsWith("GET /power")) + { sendButton(POWER); } - if (currentLine.endsWith("GET /play")) { + if (currentLine.endsWith("GET /play")) + { sendButton(PLAY); } - if (currentLine.endsWith("GET /pause")) { + if (currentLine.endsWith("GET /pause")) + { sendButton(PAUSE); } - if (currentLine.endsWith("GET /stop")) { + if (currentLine.endsWith("GET /stop")) + { sendButton(STOP); } - if (currentLine.endsWith("GET /prev")) { + if (currentLine.endsWith("GET /prev")) + { sendButton(PREV); } - if (currentLine.endsWith("GET /next")) { + if (currentLine.endsWith("GET /next")) + { sendButton(NEXT); } - if (currentLine.endsWith("POST /api/control-deck")) { + if (currentLine.endsWith("POST /api/control-deck")) + { Serial.println("POST"); char c = client.read(); @@ -284,5 +331,3 @@ void loop() { Serial.println("Client Disconnected."); } } - -