#include <Arduino.h>
 
const uint32_t NVM_Offset = 0x290000;
uint8_t FLASH_Address = 0;
 
String StrIn = "Hi Dear Students do the Project with one real time application";
String StrOut;
 
template<typename T>
void FlashWrite(uint32_t address, const T& value) {
  ESP.flashEraseSector((NVM_Offset+address)/4096);
  ESP.flashWrite(NVM_Offset+address, (uint32_t*)&value, sizeof(value));
}
 
template<typename T>
void FlashRead(uint32_t address, T& value) {
  ESP.flashRead(NVM_Offset+address, (uint32_t*)&value, sizeof(value));
}
 
void setup() {
  Serial.begin(115200);
  FlashWrite<String>(FLASH_Address, StrIn);
  FlashRead<String>(FLASH_Address, StrOut);
  Serial.println(StrOut);
}
 
void loop() {
  delay(200);
}
esp:0
esp:2
esp:4
esp:5
esp:12
esp:13
esp:14
esp:15
esp:16
esp:17
esp:18
esp:19
esp:21
esp:22
esp:23
esp:25
esp:26
esp:27
esp:32
esp:33
esp:34
esp:35
esp:3V3
esp:EN
esp:VP
esp:VN
esp:GND.1
esp:D2
esp:D3
esp:CMD
esp:5V
esp:GND.2
esp:TX
esp:RX
esp:GND.3
esp:D1
esp:D0
esp:CLK