these cases can be printed in PLA without supports.
if you wish to edit the cases you can import the `.stl` files into Tinkercad and edit them to suit your needs.
================================================
FILE: 3D_Printed_Cases/S3_DevKitC_1/README.md
================================================
# S3-DevKitC-1
================================================
FILE: 3D_Printed_Cases/UM_FeatherS2/README.md
================================================
# UM FeatherS2
================================================
FILE: 3D_Printed_Cases/UM_TinyS2/README.md
================================================
# UM TinyS2
================================================
FILE: 3D_Printed_Cases/Wemos_S2_Mini/README.md
================================================
# Wemos S2 Mini
S2_Mini_By_Doyle4.stl
================================================
FILE: ESP32_Server_900u/ESP32_Server_900u.ino
================================================
#include
#include "WiFi.h"
#include "ESPAsyncWebServer.h"
#include "esp_task_wdt.h"
#include
#include
#include
#if ARDUINO_USB_CDC_ON_BOOT
#error "The menu option 'Tools / USB CDC On Boot' must be set to 'Disabled'"
#elif ARDUINO_USB_DFU_ON_BOOT
#error "The menu option 'Tools / USB DFU On Boot' must be set to 'Disabled'"
#elif ARDUINO_USB_MSC_ON_BOOT
#error "The menu option 'Tools / USB MSC On Boot' must be set to 'Disabled'"
#elif defined(CONFIG_IDF_TARGET_ESP32S2) | defined(CONFIG_IDF_TARGET_ESP32S3) // ESP32-S2/S3 BOARDS(usb emulation)
#include "USB.h"
#include "USBMSC.h"
#include "exfathax.h"
#elif defined(CONFIG_IDF_TARGET_ESP32) // ESP32 BOARDS
#define USBCONTROL false // set to true if you are using usb control(wired up usb drive)
#define usbPin 4 // set the pin you want to use for usb control
#else
#error "Selected board not supported"
#endif
// use PsFree [ true / false ]
#define PSFREE true // use the newer psfree webkit exploit.
// this is fairly stable but may fail which will require you to try and load the payload again.
// use SD Card [ true / false ]
#define USESD false // a FAT32 formatted SD Card will be used instead of the onboard flash for the storage.
// this requires a board with a sd card slot or a sd card connected.
// use the T-Dongle-S3 SD Card [ true / false ]
#define USELILYSD false // a FAT32 formatted SD Card will be used instead of the onboard flash for the storage.
// this requires a LilyGO T-Dongle-S3 to be used with a sd card inserted.
// use FatFS not SPIFFS [ true / false ]
#define USEFAT false // FatFS will be used instead of SPIFFS for the storage filesystem or for larger partitons on boards with more than 4mb flash.
// you must select a partition scheme labeled with "FAT" or "FATFS" with this enabled.
// use LITTLEFS not SPIFFS [ true / false ]
#define USELFS false // LITTLEFS will be used instead of SPIFFS for the storage filesystem.
// you must select a partition scheme labeled with "SPIFFS" with this enabled and USEFAT must be false.
// enable internal goldhen.h [ true / false ]
#define INTHEN true // goldhen is placed in the app partition to free up space on the storage for other payloads.
// with this enabled you do not upload goldhen to the board, set this to false if you wish to upload goldhen.
// enable autohen [ true / false ]
#define AUTOHEN false // this will load goldhen instead of the normal index/payload selection page, use this if you only want hen and no other payloads.
// you can update goldhen by uploading the goldhen payload to the board storage with the filename "goldhen.bin".
// enable fan threshold [ true / false ]
#define FANMOD true // this will include a function to set the consoles fan ramp up temperature in °C
// this will not work if the board is a esp32 and the usb control is disabled.
//-------------------DEFAULT SETTINGS------------------//
// use config.ini [ true / false ]
#define USECONFIG true // this will allow you to change these settings below via the admin webpage.
// if you want to permanently use the values below then set this to false.
//create access point
boolean startAP = true;
String AP_SSID = "PS4_WEB_AP";
String AP_PASS = "password";
IPAddress Server_IP(10, 1, 1, 1);
IPAddress Subnet_Mask(255, 255, 255, 0);
//connect to wifi
boolean connectWifi = false;
String WIFI_SSID = "Home_WIFI";
String WIFI_PASS = "password";
String WIFI_HOSTNAME = "ps4.local";
//server port
int WEB_PORT = 80;
//Auto Usb Wait(milliseconds)
int USB_WAIT = 10000;
// Displayed firmware version
String firmwareVer = "1.00";
//ESP sleep after x minutes
boolean espSleep = false;
int TIME2SLEEP = 30; // minutes
//-----------------------------------------------------//
#include "Loader.h"
#include "Pages.h"
#include "jzip.h"
#if USESD
#include "SD.h"
#include "SPI.h"
#define SCK 12 // pins for sd card
#define MISO 13 // these values are set for the LILYGO TTGO T8 ESP32-S2 board
#define MOSI 11 // you may need to change these for other boards
#define SS 10
#define FILESYS SD
#elif USELILYSD
#include "SD_MMC.h"
#define SD0 14
#define SD1 17 // pins for the LilyGO T-Dongle-S3 sd card
#define SD2 21 // do not change these values
#define SD3 18 // the sd card slot is located in the usb A end of the dongle
#define CLK 12
#define CMD 16
#define FILESYS SD_MMC
#else
#if USEFAT
#include "FFat.h"
#define FILESYS FFat
#else
#if USELFS
#include
#define FILESYS LittleFS
#else
#include "SPIFFS.h"
#define FILESYS SPIFFS
#endif
#endif
#endif
#if INTHEN
#include "goldhen.h"
#endif
#if (!defined(USBCONTROL) | USBCONTROL) && FANMOD
#include "fan.h"
#endif
DNSServer dnsServer;
AsyncWebServer server(WEB_PORT);
boolean hasEnabled = false;
boolean isFormating = false;
long enTime = 0;
int ftemp = 70;
long bootTime = 0;
File upFile;
#if defined(CONFIG_IDF_TARGET_ESP32S2) | defined(CONFIG_IDF_TARGET_ESP32S3)
USBMSC dev;
#endif
//USBCDC USBSerial;
String split(String str, String from, String to) {
String tmpstr = str;
tmpstr.toLowerCase();
from.toLowerCase();
to.toLowerCase();
int pos1 = tmpstr.indexOf(from);
int pos2 = tmpstr.indexOf(to, pos1 + from.length());
String retval = str.substring(pos1 + from.length(), pos2);
return retval;
}
bool instr(String str, String search) {
int result = str.indexOf(search);
if (result == -1) {
return false;
}
return true;
}
String formatBytes(size_t bytes) {
if (bytes < 1024) {
return String(bytes) + " B";
} else if (bytes < (1024 * 1024)) {
return String(bytes / 1024.0) + " KB";
} else if (bytes < (1024 * 1024 * 1024)) {
return String(bytes / 1024.0 / 1024.0) + " MB";
} else {
return String(bytes / 1024.0 / 1024.0 / 1024.0) + " GB";
}
}
String urlencode(String str) {
String encodedString = "";
char c;
char code0;
char code1;
char code2;
for (int i = 0; i < str.length(); i++) {
c = str.charAt(i);
if (c == ' ') {
encodedString += '+';
} else if (isalnum(c)) {
encodedString += c;
} else {
code1 = (c & 0xf) + '0';
if ((c & 0xf) > 9) {
code1 = (c & 0xf) - 10 + 'A';
}
c = (c >> 4) & 0xf;
code0 = c + '0';
if (c > 9) {
code0 = c - 10 + 'A';
}
code2 = '\0';
encodedString += '%';
encodedString += code0;
encodedString += code1;
}
yield();
}
encodedString.replace("%2E", ".");
return encodedString;
}
void sendwebmsg(AsyncWebServerRequest *request, String htmMsg) {
String tmphtm = "