// Include Arduino.h (To Access ESP.h)
#include <Arduino.h>
 
const uint32_t NVM_Offset = 0x290000;
uint8_t FLASH_Address = 0;
 
float Pi = 3.14159;
float Read_Pi;
 
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<float>(FLASH_Address, Pi);
  FlashRead<float>(FLASH_Address, Read_Pi);
  Serial.println(Read_Pi, 5);
}
 
void loop() {
  delay(100);
}