feat: add esp32s3 support

- add beta simulator environment
This commit is contained in:
ZanzyTHEbar 2023-03-09 20:21:10 +00:00
parent b4d56af69c
commit 3eeae182ee
8 changed files with 305 additions and 90 deletions

76
ESP/diagram.json Normal file
View File

@ -0,0 +1,76 @@
{
"version": 1,
"author": "DaOfficialWizard",
"editor": "wokwi",
"parts": [
{
"type": "wokwi-esp32-devkit-v1",
"id": "esp",
"top": 0,
"left": 0,
"attrs": {}
},
{
"type": "wokwi-led",
"id": "led1",
"top": 82.91,
"left": 128.93,
"rotate": 180,
"attrs": {
"color": "red"
}
},
{
"type": "wokwi-resistor",
"id": "r1",
"top": 149.11,
"left": 125.63,
"attrs": {
"value": "1000"
}
}
],
"connections": [
[
"esp:TX0",
"$serialMonitor:RX",
"",
[]
],
[
"esp:RX0",
"$serialMonitor:TX",
"",
[]
],
[
"esp:GND.1",
"r1:1",
"black",
[
"h0"
]
],
[
"led1:C",
"r1:2",
"green",
[
"v-4.6",
"h38.86",
"v72.64"
]
],
[
"led1:A",
"esp:D4",
"green",
[
"v-3.11",
"h-23.78",
"v30.85"
]
]
],
"dependencies": {}
}

View File

@ -130,7 +130,7 @@ build_flags = ${env.build_flags}
board = esp-wrover-kit
board_build.f_flash = 80000000L
board_build.flash_mode = qio
build_type = debug
build_type = release
build_flags = ${env.build_flags}
-DDEBUG_MODE=0 ; Set the debug mode
-DCORE_DEBUG_LEVEL=1
@ -145,4 +145,34 @@ upload_protocol = espota
upload_flags =
--port=${ota.otaserverport}
--auth=${ota.otapassword}
[env:wrovers3]
board = esp32-s3-devkitc-1
#board_build.f_flash = 80000000L
#board_build.flash_mode = qio
build_type = debug
build_flags = ${env.build_flags}
-DCORE_DEBUG_LEVEL=4 ; set the debug level
-DDEBUG_MODE=1 ; Set the debug mode
; CAMERA PINOUT DEFINITIONS
${pinoutsESPWROVER.build_flags}
[env:wrovers3_release]
board = esp32-s3-devkitc-1
#board_build.f_flash = 80000000L
#board_build.flash_mode = qio
build_type = release
build_flags = ${env.build_flags}
-DDEBUG_MODE=0 ; Set the debug mode
-DCORE_DEBUG_LEVEL=1
-DDEBUG_ESP_OTA
; CAMERA PINOUT DEFINITIONS
${pinoutsESPWROVER.build_flags}
[env:wrovers3_OTA]
extends = env:wrover_release
upload_port = ${ota.otaserverip}
upload_protocol = espota
upload_flags =
--port=${ota.otaserverport}
--auth=${ota.otapassword}

40
ESP/ini/sim.ini Normal file
View File

@ -0,0 +1,40 @@
[sim]
ssid = "Wokwi-GUEST" # required for simulator
password = ""
[env:esp32AIThinker_sim]
board = esp32cam
build_type = debug
extra_scripts =
${env.extra_scripts}
post:tools/createwokwi.py
build_flags = -DENABLE_ADHOC=${wifi.enableadhoc}
-DADHOC_CHANNEL=${wifi.adhocchannel}
-DWIFI_CHANNEL=${wifi.channel}
-DDEBUG_ESP_PORT=Serial ; set the debug port
'-DMDNS_HOSTNAME=${wifi.mDNSName}' ; Set the OTA password
# required for simulator
'-DWIFI_SSID=${sim.ssid}'
'-DWIFI_PASSWORD=${sim.password}'
'-DWIFI_AP_SSID=${wifi.ap_ssid}'
'-DWIFI_AP_PASSWORD=${wifi.ap_password}'
'-DWIFI_AP_CHANNEL=${wifi.adhocchannel}'
-DENABLE_OTA=${ota.enableota}
-DOTA_SERVER_PORT=${ota.otaserverport}
'-DOTA_PASSWORD=${ota.otapassword}' ; Set the OTA password
'-DOTA_IP=${ota.otaserverip}' ; Set the OTA password
-O2 ; optimize for speed
-DASYNCWEBSERVER_REGEX ; enable regex in asyncwebserver
# Comment these out if you are not using psram
-DBOARD_HAS_PSRAM ; enable psram
-mfix-esp32-psram-cache-issue ; fix for psram
; Compile with -DHTTP_PARSER_STRICT=0 to make less checks, but run faster
-DHTTP_PARSER_STRICT=0
-DCORE_DEBUG_LEVEL=4 ; set the debug level
-DDEBUG_MODE=1
-DSIM_ENABLED
; CAMERA PINOUT DEFINITIONS
${pinoutsAIThinker.build_flags}

View File

@ -15,8 +15,8 @@
#define XHTTP_OPTIONS 0b01000000;
#define XHTTP_ANY 0b01111111; */
#define HTTP_ANY 0b01111111
#define HTTP_GET 0b00000001
//constexpr int HTTP_GET = 0b00000001;
constexpr int HTTP_ANY = 0b01111111;
#include <ESPAsyncWebServer.h>
#include <AsyncTCP.h>

View File

@ -9,10 +9,11 @@
; https://docs.platformio.org/page/projectconf.html
[platformio]
default_envs = esp32AIThinker ; do not change this value unless you know what you are doing
default_envs = esp32AIThinker ; do not change this value unless you know what you are doing
description = Open Source ESP Camera firmware
extra_configs =
ini/boards.ini
ini/pinouts.ini
ini/user_config.ini
ini/dev_config.ini
ini/sim.ini

View File

@ -1,17 +1,18 @@
#include <Arduino.h>
#include <network/WifiHandler/WifiHandler.hpp>
#include <network/mDNS/MDNSManager.hpp>
#include <io/camera/cameraHandler.hpp>
#include <io/LEDManager/LEDManager.hpp>
#include <network/stream/streamServer.hpp>
#include <io/camera/cameraHandler.hpp>
#include <network/WifiHandler/WifiHandler.hpp>
#include <network/api/webserverHandler.hpp>
#include <network/mDNS/MDNSManager.hpp>
#include <network/stream/streamServer.hpp>
//! TODO: Setup OTA enabled state to be controllable by API if enabled at compile time
//! TODO: Setup OTA enabled state to be controllable by API if enabled at
//! compile time
#if ENABLE_OTA
#include <network/OTA/OTA.hpp>
#endif // ENABLE_OTA
#include <logo/logo.hpp>
#endif // ENABLE_OTA
#include <data/config/project_config.hpp>
#include <logo/logo.hpp>
int STREAM_SERVER_PORT = 80;
int CONTROL_SERVER_PORT = 81;
@ -25,96 +26,115 @@ ProjectConfig deviceConfig("openiris", MDNS_HOSTNAME);
#if ENABLE_OTA
OTA ota(&deviceConfig);
#endif // ENABLE_OTA
#endif // ENABLE_OTA
LEDManager ledManager(33);
#ifndef SIM_ENABLED
CameraHandler cameraHandler(&deviceConfig, &ledStateManager);
#endif // SIM_ENABLED
WiFiHandler wifiHandler(&deviceConfig,
&wifiStateManager,
WIFI_SSID,
WIFI_PASSWORD,
WIFI_CHANNEL);
WiFiHandler wifiHandler(&deviceConfig, &wifiStateManager, WIFI_SSID, WIFI_PASSWORD, WIFI_CHANNEL);
APIServer apiServer(CONTROL_SERVER_PORT, &deviceConfig, &cameraHandler, &wifiStateManager, "/control");
#ifndef SIM_ENABLED
APIServer apiServer(CONTROL_SERVER_PORT,
&deviceConfig,
&cameraHandler,
&wifiStateManager,
"/control");
#else
APIServer apiServer(CONTROL_SERVER_PORT,
&deviceConfig,
NULL,
&wifiStateManager,
"/control");
#endif // SIM_ENABLED
MDNSHandler mdnsHandler(&mdnsStateManager, &deviceConfig);
#ifndef SIM_ENABLED
StreamServer streamServer(STREAM_SERVER_PORT, &wifiStateManager);
#endif // SIM_ENABLED
void setup()
{
setCpuFrequencyMhz(240); // set to 240mhz for performance boost
Serial.begin(115200);
//Serial.setDebugOutput(DEBUG_MODE);
//Serial.println("Free Heap: " + String(ESP.getFreeHeap()));
Logo::printASCII();
Serial.flush();
//Serial.println("Free Heap: " + String(ESP.getFreeHeap()));
void setup() {
setCpuFrequencyMhz(240); // set to 240mhz for performance boost
Serial.begin(115200);
// Serial.setDebugOutput(DEBUG_MODE);
// Serial.println("Free Heap: " + String(ESP.getFreeHeap()));
Logo::printASCII();
Serial.flush();
// Serial.println("Free Heap: " + String(ESP.getFreeHeap()));
ledManager.begin();
deviceConfig.attach(&cameraHandler);
deviceConfig.attach(&mdnsHandler);
deviceConfig.initConfig();
deviceConfig.load();
wifiHandler._enable_adhoc = ENABLE_ADHOC;
wifiHandler.setupWifi();
mdnsHandler.startMDNS();
ledManager.begin();
#ifndef SIM_ENABLED
deviceConfig.attach(&cameraHandler);
#endif // SIM_ENABLED
deviceConfig.attach(&mdnsHandler);
deviceConfig.initConfig();
deviceConfig.load();
wifiHandler._enable_adhoc = ENABLE_ADHOC;
wifiHandler.setupWifi();
mdnsHandler.startMDNS();
/* mdnsStateManager.setState(MDNSState_e::MDNSState_Starting);
switch (mdnsStateManager.getCurrentState())
{
case MDNSState_e::MDNSState_Starting:
break;
case MDNSState_e::MDNSState_Error:
break;
case MDNSState_e::MDNSState_QueryComplete:
mdnsHandler.startMDNS();
break;
default:
break;
} */
/* mdnsStateManager.setState(MDNSState_e::MDNSState_Starting);
switch (mdnsStateManager.getCurrentState())
{
case MDNSState_e::MDNSState_Starting:
break;
case MDNSState_e::MDNSState_Error:
break;
case MDNSState_e::MDNSState_QueryComplete:
mdnsHandler.startMDNS();
break;
default:
break;
} */
switch (wifiStateManager.getCurrentState())
{
case WiFiState_e::WiFiState_Disconnected:
{
//! TODO: Implement
break;
}
case WiFiState_e::WiFiState_Disconnecting:
{
//! TODO: Implement
break;
}
case WiFiState_e::WiFiState_ADHOC:
{
streamServer.startStreamServer();
log_d("[SETUP]: Starting Stream Server");
apiServer.begin();
log_d("[SETUP]: Starting API Server");
break;
}
case WiFiState_e::WiFiState_Connected:
{
streamServer.startStreamServer();
log_d("[SETUP]: Starting Stream Server");
apiServer.begin();
log_d("[SETUP]: Starting API Server");
break;
}
case WiFiState_e::WiFiState_Connecting:
{
//! TODO: Implement
break;
}
case WiFiState_e::WiFiState_Error:
{
//! TODO: Implement
break;
}
}
switch (wifiStateManager.getCurrentState()) {
case WiFiState_e::WiFiState_Disconnected: {
//! TODO: Implement
break;
}
case WiFiState_e::WiFiState_Disconnecting: {
//! TODO: Implement
break;
}
case WiFiState_e::WiFiState_ADHOC: {
#ifndef SIM_ENABLED
streamServer.startStreamServer();
log_d("[SETUP]: Starting Stream Server");
#endif // SIM_ENABLED
apiServer.begin();
log_d("[SETUP]: Starting API Server");
break;
}
case WiFiState_e::WiFiState_Connected: {
#ifndef SIM_ENABLED
streamServer.startStreamServer();
log_d("[SETUP]: Starting Stream Server");
#endif // SIM_ENABLED
apiServer.begin();
log_d("[SETUP]: Starting API Server");
break;
}
case WiFiState_e::WiFiState_Connecting: {
//! TODO: Implement
break;
}
case WiFiState_e::WiFiState_Error: {
//! TODO: Implement
break;
}
}
#if ENABLE_OTA
ota.begin();
#endif // ENABLE_OTA
ota.begin();
#endif // ENABLE_OTA
}
void loop()
{
void loop() {
#if ENABLE_OTA
ota.handleOTAUpdate();
#endif // ENABLE_OTA
ledManager.handleLED(&ledStateManager);
ota.handleOTAUpdate();
#endif // ENABLE_OTA
ledManager.handleLED(&ledStateManager);
}

41
ESP/tools/createwokwi.py Normal file
View File

@ -0,0 +1,41 @@
#!/usr/bin/env python3
# https://docs.wokwi.com/vscode/getting-started
# TODO: Add generation of diagram.json file per board environment
Import("env")
try:
def createTOML(source, target, env):
try:
firmware_name = env.subst("$BUILD_DIR\${PROGNAME}")
firmware_name = firmware_name.split(".pio")[1]
firmware_name = firmware_name.replace("\\", "/")
print("Creating wokwi.toml for %s" % firmware_name)
wokwi_string = """\
[wokwi]
version = 1
elf = ".pio{name}.elf"
firmware = ".pio{name}.bin"
[[net.forward]]
from = "localhost:8180"
to = "target:80"
"""
toml_string = wokwi_string.format(name=firmware_name)
print(toml_string)
with open("wokwi.toml", "w") as f:
f.write(toml_string)
f.close()
print("wokwi.toml created \n")
except Exception as e:
print("Error creating wokwi.toml: %s" % e)
env.AddPostAction("$BUILD_DIR\${PROGNAME}.bin", createTOML)
except Exception as e:
print("Error creating wokwi.toml: %s" % e)

7
ESP/wokwi.toml Normal file
View File

@ -0,0 +1,7 @@
[wokwi]
version = 1
elf = ".pio/build/esp32AIThinker_sim/OpenIris-v1.9.4-esp32AIThinker_sim-b4d56af-master.elf"
firmware = ".pio/build/esp32AIThinker_sim/OpenIris-v1.9.4-esp32AIThinker_sim-b4d56af-master.bin"
[[net.forward]]
from = "localhost:8180"
to = "target:80"