diff --git a/C/C_Tutorial.pdf b/C/C_Tutorial.pdf index 2fdaabc..174b28b 100644 Binary files a/C/C_Tutorial.pdf and b/C/C_Tutorial.pdf differ diff --git a/C/Libraries/ESP32-audioI2S.zip b/C/Libraries/ESP32-audioI2S.zip new file mode 100644 index 0000000..e808e40 Binary files /dev/null and b/C/Libraries/ESP32-audioI2S.zip differ diff --git a/C/Libraries/ESP8266Audio.zip b/C/Libraries/ESP8266Audio.zip new file mode 100644 index 0000000..453f3bd Binary files /dev/null and b/C/Libraries/ESP8266Audio.zip differ diff --git a/C/Sketches/Sketch_03.1_SDMMC_Test/Sketch_03.1_SDMMC_Test.ino b/C/Sketches/Sketch_03.1_SDMMC_Test/Sketch_03.1_SDMMC_Test.ino new file mode 100644 index 0000000..2d77993 --- /dev/null +++ b/C/Sketches/Sketch_03.1_SDMMC_Test/Sketch_03.1_SDMMC_Test.ino @@ -0,0 +1,65 @@ +/********************************************************************** + Filename : SDMMC Test + Description : The SD card is accessed using the SDMMC one-bit bus + Auther : www.freenove.com + Modification: 2023/08/21 +**********************************************************************/ +#include "sd_read_write.h" +#include "SD_MMC.h" + +#define SD_MMC_CMD 15 //Please do not modify it. +#define SD_MMC_CLK 14 //Please do not modify it. +#define SD_MMC_D0 2 //Please do not modify it. + +void setup(){ + Serial.begin(115200); + SD_MMC.setPins(SD_MMC_CLK, SD_MMC_CMD, SD_MMC_D0); + if (!SD_MMC.begin("/sdcard", true, true, SDMMC_FREQ_DEFAULT, 5)) { + Serial.println("Card Mount Failed"); + return; + } + uint8_t cardType = SD_MMC.cardType(); + if(cardType == CARD_NONE){ + Serial.println("No SD_MMC card attached"); + return; + } + + Serial.print("SD_MMC 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"); + } + + uint64_t cardSize = SD_MMC.cardSize() / (1024 * 1024); + Serial.printf("SD_MMC Card Size: %lluMB\n", cardSize); + + listDir(SD_MMC, "/", 0); + + createDir(SD_MMC, "/mydir"); + listDir(SD_MMC, "/", 0); + + removeDir(SD_MMC, "/mydir"); + listDir(SD_MMC, "/", 2); + + writeFile(SD_MMC, "/hello.txt", "Hello "); + appendFile(SD_MMC, "/hello.txt", "World!\n"); + readFile(SD_MMC, "/hello.txt"); + + deleteFile(SD_MMC, "/foo.txt"); + renameFile(SD_MMC, "/hello.txt", "/foo.txt"); + readFile(SD_MMC, "/foo.txt"); + + testFileIO(SD_MMC, "/test.txt"); + + Serial.printf("Total space: %lluMB\r\n", SD_MMC.totalBytes() / (1024 * 1024)); + Serial.printf("Used space: %lluMB\r\n", SD_MMC.usedBytes() / (1024 * 1024)); +} + +void loop(){ + delay(10000); +} \ No newline at end of file diff --git a/C/Sketches/Sketch_03.1_SDMMC_Test/sd_read_write.cpp b/C/Sketches/Sketch_03.1_SDMMC_Test/sd_read_write.cpp new file mode 100644 index 0000000..fa0b15e --- /dev/null +++ b/C/Sketches/Sketch_03.1_SDMMC_Test/sd_read_write.cpp @@ -0,0 +1,154 @@ +#include "sd_read_write.h" + +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 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(); + } +} + +void createDir(fs::FS &fs, const char * path){ + Serial.printf("Creating Dir: %s\n", path); + if(fs.mkdir(path)){ + Serial.println("Dir created"); + } else { + Serial.println("mkdir failed"); + } +} + +void removeDir(fs::FS &fs, const char * path){ + Serial.printf("Removing Dir: %s\n", path); + if(fs.rmdir(path)){ + Serial.println("Dir removed"); + } else { + Serial.println("rmdir failed"); + } +} + +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; + } + + Serial.print("Read from file: "); + while(file.available()){ + Serial.write(file.read()); + } +} + +void writeFile(fs::FS &fs, const char * path, const char * message){ + Serial.printf("Writing file: %s\n", path); + + File file = fs.open(path, FILE_WRITE); + if(!file){ + Serial.println("Failed to open file for writing"); + return; + } + if(file.print(message)){ + Serial.println("File written"); + } else { + Serial.println("Write failed"); + } +} + +void appendFile(fs::FS &fs, const char * path, const char * message){ + Serial.printf("Appending to file: %s\n", path); + + File file = fs.open(path, FILE_APPEND); + if(!file){ + Serial.println("Failed to open file for appending"); + return; + } + if(file.print(message)){ + Serial.println("Message appended"); + } else { + Serial.println("Append failed"); + } +} + +void renameFile(fs::FS &fs, const char * path1, const char * path2){ + Serial.printf("Renaming file %s to %s\n", path1, path2); + if (fs.rename(path1, path2)) { + Serial.println("File renamed"); + } else { + Serial.println("Rename failed"); + } +} + +void deleteFile(fs::FS &fs, const char * path){ + Serial.printf("Deleting file: %s\n", path); + if(fs.remove(path)){ + Serial.println("File deleted"); + } else { + Serial.println("Delete failed"); + } +} + +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\r\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(); +} \ No newline at end of file diff --git a/C/Sketches/Sketch_03.1_SDMMC_Test/sd_read_write.h b/C/Sketches/Sketch_03.1_SDMMC_Test/sd_read_write.h new file mode 100644 index 0000000..9eb99a4 --- /dev/null +++ b/C/Sketches/Sketch_03.1_SDMMC_Test/sd_read_write.h @@ -0,0 +1,18 @@ +#ifndef __SD_READ_WRITE_H +#define __SD_READ_WRITE_H + +#include "Arduino.h" +#include "FS.h" + + +void listDir(fs::FS &fs, const char * dirname, uint8_t levels); +void createDir(fs::FS &fs, const char * path); +void removeDir(fs::FS &fs, const char * path); +void readFile(fs::FS &fs, const char * path); +void writeFile(fs::FS &fs, const char * path, const char * message); +void appendFile(fs::FS &fs, const char * path, const char * message); +void renameFile(fs::FS &fs, const char * path1, const char * path2); +void deleteFile(fs::FS &fs, const char * path); +void testFileIO(fs::FS &fs, const char * path); + +#endif diff --git a/C/Sketches/Sketch_03.1_WiFi_Station/Sketch_03.1_WiFi_Station.ino b/C/Sketches/Sketch_04.1_WiFi_Station/Sketch_04.1_WiFi_Station.ino similarity index 100% rename from C/Sketches/Sketch_03.1_WiFi_Station/Sketch_03.1_WiFi_Station.ino rename to C/Sketches/Sketch_04.1_WiFi_Station/Sketch_04.1_WiFi_Station.ino diff --git a/C/Sketches/Sketch_03.2_WiFi_AP/Sketch_03.2_WiFi_AP.ino b/C/Sketches/Sketch_04.2_WiFi_AP/Sketch_04.2_WiFi_AP.ino similarity index 100% rename from C/Sketches/Sketch_03.2_WiFi_AP/Sketch_03.2_WiFi_AP.ino rename to C/Sketches/Sketch_04.2_WiFi_AP/Sketch_04.2_WiFi_AP.ino diff --git a/C/Sketches/Sketch_03.3_AP_Station/Sketch_03.3_AP_Station.ino b/C/Sketches/Sketch_04.3_AP_Station/Sketch_04.3_AP_Station.ino similarity index 100% rename from C/Sketches/Sketch_03.3_AP_Station/Sketch_03.3_AP_Station.ino rename to C/Sketches/Sketch_04.3_AP_Station/Sketch_04.3_AP_Station.ino diff --git a/C/Sketches/Sketch_04.1_WiFiClient/Sketch_04.1_WiFiClient.ino b/C/Sketches/Sketch_05.1_WiFiClient/Sketch_05.1_WiFiClient.ino similarity index 100% rename from C/Sketches/Sketch_04.1_WiFiClient/Sketch_04.1_WiFiClient.ino rename to C/Sketches/Sketch_05.1_WiFiClient/Sketch_05.1_WiFiClient.ino diff --git a/C/Sketches/Sketch_04.1_WiFiClient/sketchWiFi/sketchWiFi.pde b/C/Sketches/Sketch_05.1_WiFiClient/sketchWiFi/sketchWiFi.pde similarity index 100% rename from C/Sketches/Sketch_04.1_WiFiClient/sketchWiFi/sketchWiFi.pde rename to C/Sketches/Sketch_05.1_WiFiClient/sketchWiFi/sketchWiFi.pde diff --git a/C/Sketches/Sketch_04.2_WiFiServer/Sketch_04.2_WiFiServer.ino b/C/Sketches/Sketch_05.2_WiFiServer/Sketch_05.2_WiFiServer.ino similarity index 100% rename from C/Sketches/Sketch_04.2_WiFiServer/Sketch_04.2_WiFiServer.ino rename to C/Sketches/Sketch_05.2_WiFiServer/Sketch_05.2_WiFiServer.ino diff --git a/C/Sketches/Sketch_04.2_WiFiServer/sketchWiFi/sketchWiFi.pde b/C/Sketches/Sketch_05.2_WiFiServer/sketchWiFi/sketchWiFi.pde similarity index 100% rename from C/Sketches/Sketch_04.2_WiFiServer/sketchWiFi/sketchWiFi.pde rename to C/Sketches/Sketch_05.2_WiFiServer/sketchWiFi/sketchWiFi.pde diff --git a/C/Sketches/Sketch_05.1_CameraWebServer/Sketch_05.1_CameraWebServer.ino b/C/Sketches/Sketch_06.1_CameraWebServer/Sketch_06.1_CameraWebServer.ino similarity index 100% rename from C/Sketches/Sketch_05.1_CameraWebServer/Sketch_05.1_CameraWebServer.ino rename to C/Sketches/Sketch_06.1_CameraWebServer/Sketch_06.1_CameraWebServer.ino diff --git a/C/Sketches/Sketch_05.1_CameraWebServer/app_httpd.cpp b/C/Sketches/Sketch_06.1_CameraWebServer/app_httpd.cpp similarity index 100% rename from C/Sketches/Sketch_05.1_CameraWebServer/app_httpd.cpp rename to C/Sketches/Sketch_06.1_CameraWebServer/app_httpd.cpp diff --git a/C/Sketches/Sketch_05.1_CameraWebServer/camera_index.h b/C/Sketches/Sketch_06.1_CameraWebServer/camera_index.h similarity index 100% rename from C/Sketches/Sketch_05.1_CameraWebServer/camera_index.h rename to C/Sketches/Sketch_06.1_CameraWebServer/camera_index.h diff --git a/C/Sketches/Sketch_05.1_CameraWebServer/camera_pins.h b/C/Sketches/Sketch_06.1_CameraWebServer/camera_pins.h similarity index 100% rename from C/Sketches/Sketch_05.1_CameraWebServer/camera_pins.h rename to C/Sketches/Sketch_06.1_CameraWebServer/camera_pins.h diff --git a/C/Sketches/Sketch_05.2_As_VideoWebServer/Sketch_05.2_As_VideoWebServer.ino b/C/Sketches/Sketch_06.2_As_VideoWebServer/Sketch_06.2_As_VideoWebServer.ino similarity index 100% rename from C/Sketches/Sketch_05.2_As_VideoWebServer/Sketch_05.2_As_VideoWebServer.ino rename to C/Sketches/Sketch_06.2_As_VideoWebServer/Sketch_06.2_As_VideoWebServer.ino diff --git a/C/Sketches/Sketch_05.2_As_VideoWebServer/app_httpd.cpp b/C/Sketches/Sketch_06.2_As_VideoWebServer/app_httpd.cpp similarity index 100% rename from C/Sketches/Sketch_05.2_As_VideoWebServer/app_httpd.cpp rename to C/Sketches/Sketch_06.2_As_VideoWebServer/app_httpd.cpp diff --git a/C/Sketches/Sketch_05.2_As_VideoWebServer/camera_pins.h b/C/Sketches/Sketch_06.2_As_VideoWebServer/camera_pins.h similarity index 100% rename from C/Sketches/Sketch_05.2_As_VideoWebServer/camera_pins.h rename to C/Sketches/Sketch_06.2_As_VideoWebServer/camera_pins.h