grabar en memoria eeprom

saludos, estoy programando un modulo esp8266 con arduino para un control via web con html pero quiero poder cambiar el ssid y la clave por la interfaz web pero no logro grabar el ssid ni la clave en la memoria eeprom y no logro saber porque.
logro obterner el ssid en una variable pero no entiendo porque no la graba al momento logro que se conecte a la red wifi pero cuando apago y enciendo el modulo de nuevo lee de la memoria eeprom solo estos caracteres ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
este es el codigo donde obtego el ssid y la clave de un cuadro de texto de la pagina web, hay algunas cosas de mas ya que he probado varias formas pero no llego, como dije en el momento me puedo conectar al ssid pero no lo logro retener en la memoria ya que lo reinicio y no me lee
void handleRoot() {

String header;
String ssid1;
String password1;
String msg;

if (server.hasArg("SSID1") && server.hasArg("PASSWORD1")) {
if (server.arg("SSID1") == server.arg("SSID1")) { // aca obtengo el ssid y la clave en el string ssid1
Serial.println("clearing eeprom"); // borro la memoria grabandola con 0
for (int i = 0; i < 16; ++i)
{ EEPROM.write(i, 0); }
Serial.println(" eeprom delete");
ssid1 = server.arg("SSID1");
ssid1.toCharArray(ssid2, 16); // aca paso el string a char por cuestiones de prueba
for (int i = 0; i < 16; i++)
{
ssid_=ssid2*; // aca ya la varible ssid tiene los caracteres obtenidos del ssid*_

* }*
* for (int i = 0; i < ssid1.length(); i++)*
* {*

_ EEPROM.write(i, ssid1*); // aca grabo a la memoria eeprom lo obtenido en ssid1*
Serial.println(ssid*);
}*_

* password1 = server.arg("PASSWORD1");*
* password1.toCharArray(password2, 16);*
* for (int e = 0; e < 16; e++)*
* {*
* password[e] = password2[e];*
* }*
* EEPROM.put(18, password);*
* Serial.println(password);*
* msg = "access point changed";*
* WiFi.begin(ssid, password);*
* WiFi.config(ip, gateway, subnet);*
* Serial.println("");*
* // Wait for connection*
* while (WiFi.status() != WL_CONNECTED) {
_ delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());*_

* }*
* msg = "Wrong username/password! try again.";*
* Serial.println("Log in Failed");*
* }*
* String content = "";*
* // output the value of each analog input pin*
* content += "";*
* content += "SSID*
";
* content += "*
";
* content += "Password*
";
* content += "*
";
* content += "";*
* content += ""+ msg + "";*
* header += "Content-Length:";*
* header += (int)(content.length());*
* header += "\r\n\r\n";*
* server.send(200, "text/html", content);*
}
y esta es la parte del codigo donde leo la memoria
void setup(void) {
* Serial.begin(115200);*
* EEPROM.begin(512);*
* delay(10);*

* for (int i = 0; i < 16; ++i)*
* {*
_ ssid = (EEPROM.read(i));
Serial.println(ssid*);
}*_

Bueno, yo me concentraría en el problema que es justamente trabajar con la EEPROM.
Te sugiero uses EEPROM.put en lugar de EEPROM.write es una versión mas avanzada que permite guardar diferentes tipos de variables. Mira el ejemplo y adáptalo a tu programa.

saludos, muchas gracias por tu respuesta, efectivamente ese es el problema, estoy usando un modulo esp8266 con el entorno del arduino, alli en el codigo para la clave use el EEPROM.put para probar pero igual no me funciona. yo realize la prueba con un arduino uno y si graba bien en la eeprom de este muchas gracias

Investigué tu tema y parece haber un problema con el ESP8266 en versiones superiores al IDE 1.6.1.
Prueba con esto en lugar de lo anterior.

#include "EEPROM.h"
//Call EEPROM.begin(4096); in setup()

void eeprom_read_block(uint8_t * data, uint32_t address, size_t len){
 int i;
 for(i=0; i<len; i++){
 data[i] = EEPROM.read(address+i);
 }
}

void eeprom_write_block(uint8_t * data, uint32_t address, size_t len){
 int i;
 for(i=0; i<len; i++){
 EEPROM.write(address+i, data[i]);
 }
 EEPROM.commit();
}

Lee esto también y ésto

Saludos muchas gracias por tu dedicacion y atencion. disculpa mi ignorancia el codigo que me colocas alli no es mismo que estoy usando? de no ser asi cual es el cambio es algo de la libreria.
Este es el que uso para leer
void setup(void) {
Serial.begin(115200);
EEPROM.begin(512);
delay(10);

for (int i = 0; i < 16; ++i)
{
ssid = (EEPROM.read(i));
_ Serial.println(ssid*);_
_
}_
Y este para escribir
for (int i = 0; i < ssid1.length(); i++)
_
{*_

_ EEPROM.write(i, ssid1*);
Serial.println(ssid);
}*_

El código que esta alli esta asociado a dos hilos, lee los hilos y encuentra la solución que mas se adapte a tu problema.
Es un problema relacionado con la versión del IDE como menciona uno de los hilos.
Como no lo comentas (que versión de IDE usas), entiendo que no lo leiste y no lo tomaste en cuenta.
También te sugerí que hagas la prueba directamente con el ESP8266 y su EEPROM y te olvides que funciona en el UNO.

gracias nuevamente por tu respuesta. uso el IDE 1.6.6, Disculpa pero no entiendo de que no lo tome en cuenta leí lo que me comentaste y el codigo que me colocaste solo que no le veo cambio respecto al que tengo solo que al leer la memoria al final EEPROM.commit(); que yo no lo tenia, el codigo lo estoy probando directamente en el esp8266-12 de hecho es un control domotico que estoy haciendo y le quite las otras funciones que tenia y solo deje para leer la memoria y cambiar el ssid que es lo que estoy probando para concentrarme en eso y que no exista otra cosa que me este afectando.
si lo estoy probando colocandole el ssid y la clave por la interfaz web y como comente de momento me conecta bien a la red pero luego al reiniciar veo por el serial monitor que lee los caracteres ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ de nuevo muchas gracias por tu ayuda, yo estuve buscando el problema y no encontre nada de la version del ide lo cual tambien te agradezco

a esto me refería

**isexton **commented on 11 Jun 2015
EEPROM functionality seems to have ceased working in a recent release. Garbage is returned after a power cycle.
@me-no-dev
**me-no-dev **commented on 12 Jun 2015
you need to EEPROM.commit() or EEPROM.end() to save the changes after write
have you done any of those?
@isexton
**isexton **commented on 12 Jun 2015
Yes, I have an earlier version (Arduino 1.6.1) where it works fine, but it doesn't seem to work with the current release.

y sigue con consideraciones y códigos justamente haciendo lo que tu quieres hacer.
Este es el enlace del hilo

EYSAKU:
gracias nuevamente por tu respuesta. uso el IDE 1.6.6, Disculpa pero no entiendo de que no lo tome en cuenta leí lo que me comentaste y el codigo que me colocaste solo que no le veo cambio respecto al que tengo solo que al leer la memoria al final EEPROM.commit(); que yo no lo tenia, el codigo lo estoy probando directamente en el esp8266-12 de hecho es un control domotico que estoy haciendo y le quite las otras funciones que tenia y solo deje para leer la memoria y cambiar el ssid que es lo que estoy probando para concentrarme en eso y que no exista otra cosa que me este afectando.
si lo estoy probando colocandole el ssid y la clave por la interfaz web y como comente de momento me conecta bien a la red pero luego al reiniciar veo por el serial monitor que lee los caracteres ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ de nuevo muchas gracias por tu ayuda, yo estuve buscando el problema y no encontre nada de la version del ide lo cual tambien te agradezco

Si usas esp8266 te sugiero simplemente instalar el core para ese nucleo desde el manager board y desde arduino lo programas directamente.
Para los datos del wifi estoy colaborando con wifimanager que crea un portal cuando inicia y no encuentra un ssid conocido y te permite cargar los datos y los almacena directamente.
Desde el esp8266 podes manejar como arduino entrada y salidas y la eeprom interna y mas cosas