update instructions

This commit is contained in:
Norman Bos
2024-07-21 19:07:58 +02:00
parent 5ba38120f2
commit 3cc2172d5a
2 changed files with 203 additions and 139 deletions
+19
View File
@@ -12,3 +12,22 @@ Store WiFi secrets in a secrets.h like this:
#define SSID "your-ssid" #define SSID "your-ssid"
#define PASSWORD "your-password" #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
+180 -135
View File
@@ -14,19 +14,20 @@
Circuit: Circuit:
* LED attached to pin 13 (optional) - LED attached to pin 13 (optional)
* IR Transmitter attached to pin 4 (connect to 5v or 3v3) - IR Transmitter attached to pin 4 (connect to 5v or 3v3)
* SD-Module to load HTML and CSS from SD-card - SD-Module to load HTML and CSS from SD-card
*
* Connect the SD card to the following pins: Connect the SD card to the following pins:
*
* SD Card | ESP32 SD Card | ESP32
* 3v3 3.3V ------- | -----
* CS 5 3v3 | 3.3V
* MOSI 23 CS | 5
* CLK 18 MOSI | 23
* MISO 19 CLK | 18
* GND GND MISO | 19
GND | GND
developed for the ESP32vn IoT Uni board 2024 developed for the ESP32vn IoT Uni board 2024
*/ */
@@ -41,95 +42,112 @@
WiFiServer server(80); WiFiServer server(80);
/**** SD-Card Functions ****/ /**** SD-Card Functions ****/
void listDir(fs::FS &fs, const char * dirname, uint8_t levels){ void listDir(fs::FS &fs, const char *dirname, uint8_t levels)
Serial.printf("Listing directory: %s\n", dirname); {
Serial.printf("Listing directory: %s\n", dirname);
File root = fs.open(dirname); File root = fs.open(dirname);
if(!root){ if (!root)
Serial.println("Failed to open directory"); {
return; Serial.println("Failed to open directory");
} return;
if(!root.isDirectory()){ }
Serial.println("Not a directory"); if (!root.isDirectory())
return; {
} Serial.println("Not a directory");
return;
}
File file = root.openNextFile(); File file = root.openNextFile();
while(file){ while (file)
if(file.isDirectory()){ {
Serial.print(" DIR : "); if (file.isDirectory())
Serial.println(file.name()); {
if(levels){ Serial.print(" DIR : ");
listDir(fs, file.path(), levels -1); Serial.println(file.name());
} if (levels)
} else { {
Serial.print(" FILE: "); listDir(fs, file.path(), levels - 1);
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){ void readFile(fs::FS &fs, const char *path)
Serial.printf("Reading file: %s\n", path); {
Serial.printf("Reading file: %s\n", path);
File file = fs.open(path); File file = fs.open(path);
if(!file){ if (!file)
Serial.println("Failed to open file for reading"); {
return; Serial.println("Failed to open file for reading");
} return;
}
Serial.print("Read from file: "); Serial.print("Read from file: ");
while(file.available()){ while (file.available())
Serial.write(file.read()); {
} Serial.write(file.read());
file.close(); }
file.close();
} }
void testFileIO(fs::FS &fs, const char * path){ void testFileIO(fs::FS &fs, const char *path)
File file = fs.open(path); {
static uint8_t buf[512]; File file = fs.open(path);
size_t len = 0; static uint8_t buf[512];
uint32_t start = millis(); size_t len = 0;
uint32_t end = start; uint32_t start = millis();
if(file){ uint32_t end = start;
len = file.size(); if (file)
size_t flen = len; {
start = millis(); len = file.size();
while(len){ size_t flen = 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;
start = millis(); start = millis();
for(i=0; i<2048; i++){ while (len)
file.write(buf, 512); {
size_t toRead = len;
if (toRead > 512)
{
toRead = 512;
}
file.read(buf, toRead);
len -= toRead;
} }
end = millis() - start; 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(); 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 ============ */
@@ -141,34 +159,44 @@ void sendButton(int command)
} }
/* ============ Setup ============ */ /* ============ Setup ============ */
void setup() { void setup()
{
Serial.begin(115200); Serial.begin(115200);
pinMode(LED_PIN, OUTPUT); // set the LED pin mode pinMode(LED_PIN, OUTPUT); // set the LED pin mode
delay(10); delay(10);
/* ============ SD-Card Setup ============ */ /* ============ SD-Card Setup ============ */
if(!SD.begin()){ if (!SD.begin())
Serial.println("Card Mount Failed"); {
return; Serial.println("Card Mount Failed");
} return;
}
uint8_t cardType = SD.cardType(); uint8_t cardType = SD.cardType();
if(cardType == CARD_NONE){ if (cardType == CARD_NONE)
Serial.println("No SD card attached"); {
return; Serial.println("No SD card attached");
return;
} }
Serial.print("SD Card Type: "); Serial.print("SD Card Type: ");
if(cardType == CARD_MMC){ if (cardType == CARD_MMC)
Serial.println("MMC"); {
} else if(cardType == CARD_SD){ Serial.println("MMC");
Serial.println("SDSC"); }
} else if(cardType == CARD_SDHC){ else if (cardType == CARD_SD)
Serial.println("SDHC"); {
} else { Serial.println("SDSC");
Serial.println("UNKNOWN"); }
else if (cardType == CARD_SDHC)
{
Serial.println("SDHC");
}
else
{
Serial.println("UNKNOWN");
} }
uint64_t cardSize = SD.cardSize() / (1024 * 1024); uint64_t cardSize = SD.cardSize() / (1024 * 1024);
@@ -179,9 +207,8 @@ void setup() {
Serial.printf("Total space: %lluMB\n", SD.totalBytes() / (1024 * 1024)); Serial.printf("Total space: %lluMB\n", SD.totalBytes() / (1024 * 1024));
Serial.printf("Used space: %lluMB\n", SD.usedBytes() / (1024 * 1024)); Serial.printf("Used space: %lluMB\n", SD.usedBytes() / (1024 * 1024));
/* ============ IR Setup ============ */ /* ============ 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.println();
Serial.print(F("Send IR signals at pin ")); Serial.print(F("Send IR signals at pin "));
Serial.println(IR_SEND_PIN); Serial.println(IR_SEND_PIN);
@@ -197,7 +224,8 @@ void setup() {
WiFi.begin(SSID, PASSWORD); WiFi.begin(SSID, PASSWORD);
while (WiFi.status() != WL_CONNECTED) { while (WiFi.status() != WL_CONNECTED)
{
delay(500); delay(500);
Serial.print("."); Serial.print(".");
} }
@@ -210,21 +238,27 @@ void setup() {
server.begin(); server.begin();
} }
void loop() { void loop()
WiFiClient client = server.available(); // listen for incoming clients {
WiFiClient client = server.available(); // listen for incoming clients
if (client) { // if you get a client, if (client)
Serial.println("New Client."); // print a message out the serial port { // if you get a client,
String currentLine = ""; // make a String to hold incoming data from the client Serial.println("New Client."); // print a message out the serial port
while (client.connected()) { // loop while the client's connected String currentLine = ""; // make a String to hold incoming data from the client
if (client.available()) { // if there's bytes to read from the client, while (client.connected())
char c = client.read(); // read a byte, then { // loop while the client's connected
Serial.write(c); // print it out the serial monitor if (client.available())
if (c == '\n') { // if the byte is a newline character { // 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. // 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: // 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) // 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: // and a content-type so the client knows what's coming, then a blank line:
client.println("HTTP/1.1 200 OK"); client.println("HTTP/1.1 200 OK");
@@ -239,39 +273,52 @@ void loop() {
client.println(); client.println();
// break out of the while loop: // break out of the while loop:
break; break;
} else { // if you got a newline, then clear currentLine: }
else
{ // if you got a newline, then clear currentLine:
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": // Check to see if the client request was "GET /H" or "GET /L":
if (currentLine.endsWith("GET /H")) { if (currentLine.endsWith("GET /H"))
digitalWrite(LED_PIN, HIGH); // GET /H turns the LED on {
digitalWrite(LED_PIN, HIGH); // GET /H turns the LED on
} }
if (currentLine.endsWith("GET /L")) { if (currentLine.endsWith("GET /L"))
digitalWrite(LED_PIN, LOW); // GET /L turns the LED off {
digitalWrite(LED_PIN, LOW); // GET /L turns the LED off
} }
if (currentLine.endsWith("GET /power")) { if (currentLine.endsWith("GET /power"))
{
sendButton(POWER); sendButton(POWER);
} }
if (currentLine.endsWith("GET /play")) { if (currentLine.endsWith("GET /play"))
{
sendButton(PLAY); sendButton(PLAY);
} }
if (currentLine.endsWith("GET /pause")) { if (currentLine.endsWith("GET /pause"))
{
sendButton(PAUSE); sendButton(PAUSE);
} }
if (currentLine.endsWith("GET /stop")) { if (currentLine.endsWith("GET /stop"))
{
sendButton(STOP); sendButton(STOP);
} }
if (currentLine.endsWith("GET /prev")) { if (currentLine.endsWith("GET /prev"))
{
sendButton(PREV); sendButton(PREV);
} }
if (currentLine.endsWith("GET /next")) { if (currentLine.endsWith("GET /next"))
{
sendButton(NEXT); sendButton(NEXT);
} }
if (currentLine.endsWith("POST /api/control-deck")) { if (currentLine.endsWith("POST /api/control-deck"))
{
Serial.println("POST"); Serial.println("POST");
char c = client.read(); char c = client.read();
@@ -284,5 +331,3 @@ void loop() {
Serial.println("Client Disconnected."); Serial.println("Client Disconnected.");
} }
} }