Esp32 with FreeRTOS - Wifi AP
C FreeRTOS Arduino xTaskCreatePinnedToCore wifi SPIFFS
Table of contents
File FreeRTOS_Esp32_wifi_AP.ino
void setup() {
Serial.begin(115200);
delay(1000);
// Initialize SPIFFS
// if (!SPIFFS.begin(true)) {
if (!SPIFFS.begin(FORMAT_SPIFFS_IF_FAILED)) {
Serial.println("An Error has occurred while mounting SPIFFS");
return;
} else {
Serial.println("SPIFFS mounted");
}
Serial.println("SPIFFS listing:");
File root = SPIFFS.open("/");
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("\tSIZE: ");
Serial.println(file.size());
}
file = root.openNextFile();
}
WiFi.mode(WIFI_AP);
if (WiFi.softAP(ssid, password)) {
Serial.println("softAP Ready");
} else {
Serial.println("softAP Failed");
}
delay(1000);
// while (WiFi.status() != WL_CONNECTED) {
// delay(1000);
// Serial.println("Connecting to WiFi..");
// Serial.println(WiFi.status());
// }
if (WiFi.softAPConfig(local_IP, gateway, subnet)) {
Serial.println("softAPConfig Ready");
} else {
Serial.println("softAPConfig Failed");
}
IPAddress myIP = WiFi.softAPIP();
Serial.print("SSID: ");
Serial.println(ssid);
Serial.print("Passworkd: ");
Serial.println(password);
Serial.print("AP IP address: ");
Serial.println(myIP);
// AsyncCallbackWebHandler& on(
// const char* uri,
// WebRequestMethodComposite method,
// ArRequestHandlerFunction onRequest,
// ArUploadHandlerFunction onUpload,
// ArBodyHandlerFunction onBody);
// WebRequestMethodComposite
//
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) {
// Send file
Serial.println("/");
Serial.println(request->url());
// request->send(SPIFFS, "/index.html", String(), false, processor);
request->send(SPIFFS, "/index.html");
Serial.println("/ END");
});
server.on("/style.css", HTTP_GET, [](AsyncWebServerRequest *request) {
// Send file
Serial.println("/style.css");
request->send(SPIFFS, "/style.css", "text/css");
});
server.on("/on", HTTP_GET, [](AsyncWebServerRequest *request) {
Serial.println("/on");
digitalWrite(ledPin, HIGH);
request->send(SPIFFS, "/index.html", String(), false, processor);
});
server.on("/off", HTTP_GET, [](AsyncWebServerRequest *request) {
Serial.println("/off");
digitalWrite(ledPin, LOW);
request->send(SPIFFS, "/index.html", String(), false, processor);
});
server.begin();
}
void loop() {}
Compiling the project
# ESP32-WROOM-DA Module esp32:esp32:esp32da
# ESP32S3 Dev Module Octal (WROOM2) esp32:esp32:esp32s3-octal
# Fri3d Badge 2024 (ESP32-S3-WROOM-1) esp32:esp32:fri3d_2024_esp32s3
# uPesy ESP32 Wroom DevKit esp32:esp32:uPesy_wroom
# LilyGo T-Display esp32:esp32:lilygo_t_display
# LilyGo T-Display-S3 esp32:esp32:lilygo_t_display_s3
# LilyGo T-ETH-Lite esp32:esp32:lilygo_t_eth_lite
# LilyGo T-Watch-S3 esp32:esp32:twatchs3
# LilyGo T-Watch-Ultra esp32:esp32:twatch_ultra
# LilyGo T3-S3 esp32:esp32:lilygo_t3s3
# LilyGo-T-LoRa-Pager esp32:esp32:tlora_pager
BOARD?= esp32:esp32:esp32da
PORT?= /dev/ttyUSB0
BAUD?= 115200
PROJECT_NAME?= FreeRTOS_Esp32_blink
FILE_SYSTEM?=spiffs
# littlefs or spiffs
UPLOAD_SPEED?=921600
FLASH_SIZE?=4M
CPU_FREQ?=240
#PARTITION_SCHEME?= app3M_fat9M_16MB
PARTITION_SCHEME?= default
# VERBOSE?= --verbose
CLEAN?= --clean
BOARD_OPTIONS=FlashMode=qio,PartitionScheme=$(PARTITION_SCHEME),FlashSize=$(FLASH_SIZE),CPUFreq=$(CPU_FREQ)
# --board-options FlashMode=qio,FlashSize=16M,LoopCore=1,EventsCore=1,USBMode=hwcdc,CDCOnBoot=default,MSCOnBoot=default,DFUOnBoot=default,UploadMode=default,PartitionScheme=default_8MB,CPUFreq=240,UploadSpeed=921600,DebugLevel=none,EraseFlash=none
# board := "esp32:esp32:esp32s3"
# monitor_speed := "115200"
# flash_size := "16M"
# cpu_freq := "240"
# partition_scheme := "app3M_fat9M_16MB"
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/min_spiffs.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/app3M_fat9M_16MB.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/app3M_fat9M_fact512k_16MB.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/app3M_spiffs9M_fact512k_16MB.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/bare_minimum_2MB.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/boot_app0.bin
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/default_16MB.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/default_32MB.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/default_8MB.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/default.bin
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/default.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/default_ffat_8MB.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/default_ffat.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/esp_sr_16.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/ffat.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/huge_app.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/large_fat_32MB.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/large_ffat_8MB.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/large_littlefs_32MB.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/large_spiffs_16MB.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/large_spiffs_8MB.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/m5stack_partitions_16MB_factory_4_apps.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/m5stack_partitions_16MB_factory_6_apps.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/max_app_4MB.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/max_app_8MB.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/minimal.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/min_spiffs.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/no_fs.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/noota_3g.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/noota_3gffat.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/no_ota.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/noota_ffat.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/ota_nofs_4MB.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/rainmaker_4MB_no_ota.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/rainmaker_8MB.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/rainmaker.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/tinyuf2-partitions-16MB.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/tinyuf2-partitions-16MB-noota.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/tinyuf2-partitions-4MB.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/tinyuf2-partitions-4MB-noota.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/tinyuf2-partitions-8MB.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/tinyuf2-partitions-8MB-noota.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/zigbee_2MB.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/zigbee_8MB.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/zigbee.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/zigbee_zczr_2MB.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/zigbee_zczr_8MB.csv
# /home/geraldo/.arduino15/packages/esp32/hardware/esp32/3.2.0/tools/partitions/zigbee_zczr.csv
#partitioncmd := --build-property build.partitions=${PARTITIONTYPE} --build-property upload.maximum_size=${PARTITIONMAX}
all:
$(Q)echo "Compiling $(PROJECT_NAME)..."
$(Q)mkdir -p out
$(Q)arduino-cli compile \
$(VERBOSE) \
$(CLEAN) \
--fqbn $(BOARD) \
--board-options "$(BOARD_OPTIONS)" \
--output-dir out \
$(PROJECT_NAME).ino
$(MAKE) til
$(MAKE) til_copy
clean:
$(RM) -r out
$(RM) -r til
Update config, toolchain, libraries
.PHONY: update
update:
$(Q)echo create config at /home/geraldo/.arduino15/arduino-cli.yaml
$(Q)arduino-cli config init || echo Config file already exists
$(Q)arduino-cli config set network.connection_timeout 600s
$(Q)cat /home/geraldo/.arduino15/arduino-cli.yaml
$(Q)arduino-cli core update-index
$(Q)arduino-cli core install arduino:avr
$(Q)arduino-cli core install esp32:esp32
$(Q)arduino-cli lib uninstall AsyncTCP # 1.1.4
$(Q)arduino-cli lib uninstall ESPAsyncTCP #
$(Q)arduino-cli lib uninstall ESPAsyncWebServer # ESPAsyncWebServer@3.1.0
$(Q)arduino-cli lib install "ESP Async TCP" # 2.0.0
$(Q)arduino-cli lib install "Async TCP" # 3.4.4
$(Q)arduino-cli lib install "ESP Async WebServer" # ESP Async WebServer@3.7.8
$(Q)arduino-cli upgrade
Upload binary to the board
.PHONY: upload
upload:
$(Q)arduino-cli upload \
$(VERBOSE) \
$(shell pwd) \
--input-dir out/ \
--port $(PORT) \
--fqbn $(BOARD) \
--board-options "$(BOARD_OPTIONS)" \
--verify
Upload binary to the board
.PHONY: upload_with_data
upload_with_data:
$(Q)arduino-cli upload \
$(VERBOSE) \
"$(shell pwd)","$(FILE_SYSTEM)" \
--input-dir out/ \
--port $(PORT) \
--fqbn $(BOARD) \
--board-options "$(BOARD_OPTIONS)" \
--verify
Open serial monitor in another terminal
.PHONY: serial
serial10:
$(Q)xfce4-terminal -x picocom $(PORT) \
--baud $(BAUD) \
--echo \
--exit-after 10000
serial:
$(Q)xfce4-terminal -x picocom $(PORT) \
--baud $(BAUD) \
--echo \