Go Down

Topic: Comunicacion ESP8266 12E con arduino UNO a traves de I2c  (Read 3032 times) previous topic - next topic

MICKA_IPN

Hola que tal soy nuevo en el foro, miren tengo un problema.

Tengo un arduino que esta conectado con varias cosas, con un display 16x2 y otros objetos.
Tengo un modulo wifi ESP8266 12-E, ya hice su circuito para poderlo montar a la protoboard.
Tengo un alimentador de voltaje de 3.3v/5v es un Ywrobot.

Ahora quiero comunicar arduino con I2C con la librería Wire con el modulo ESP 12E, el problema es que el arduino es de 5v en su salida y el modulo solo quiere max. 3.6v.

Coloque los pines de SCL y SDA con dos reguladores de voltaje salida 3.3v, uno para cada pin y lo conecto a los pines GPIO4 y GPIO5 que yo vi (SDA:4, SCL:5), ambas sirven para I2C. Pero no comunican, el arduino manda un mensaje de "hola soy arduino" y el modulo debe de decir "HOLA ARDUINO SOY ESP". Por que conecte mis 2 arduinos y si se mandaron los mensajes, pero ya de esta manera no.
Los reguladores de voltaje estan conectados a los 5v del alimentador. El ESP esta a 3.3v del alimentador. Los objetos como el display estan conectados a arduino.

Me gustaría saber también como seria un codigo basico para que ambos se comuniquen ya que he visto que con la libreria Wire con el ESP8266 es "wire.begin(4,5)", por el SDA Y SCL antes mencionadas.
Tambien he leido que el ESP no puede ser esclavo, por eso requiero de algun codigo que me ayude a comunicarlos a traves de los canales.

Aveces desconecto los cables del arduino SCL y SDA y manda mensaje, pero no es el chiste y no se por que no lo envia. Me recomendaron comprar optoacoplador que es mejor que un regulador para mi caso, aun no lo implemento, pero me gustaría saber si habrá una respuesta para que el modulo de 3.3v reciba un mensaje o pulsación de arduino 5v a través de I2c por medio de reguladores de voltaje sin que se quemen??? Pues he visto a muchos que lo conectan directamente a TX y RX pero se supone que la salida de todo arduino es de 5v. No se les quema y ni tienen problemas, si es así podría quitar mi reguladores de voltaje y conectarlo directamente, pero no me quiero arriesgar.

Me serian de gran ayuda :3, gracias por su tiempo.

Otra, estoy utilizando IDE de arduino sencillo con el pluggin, no estoy utilizando nada de AT.

Codigo que tengo, para que se comuniquen, no quiero la gran cosa, de hecho solo envian 1 y 0 de un led en mi proyecto, lo que necesito.

//MAESTRO MODULO


Code: [Select]


#include <Wire.h>
char asd=0;

void setup() {
Wire.begin(4,5);
Serial.begin(115200);
}

void loop() {
if (Serial.available())
{
char valor = Serial.read();

if (valor == 'a')
{
  Wire.requestFrom(?, 30); //no se que canal va aqui
  Serial.println("Hola soy arduino!");
}    
}

while(Wire.available()){
asd=Wire.read();  
Serial.print(asd);  
}

delay(2500);
}





//ARDUINO UNO ESCLAVO
Code: [Select]


#include <wire.h>

void setup(){
Wire.begin();
Wire.onRequest(peticion);
Serial.begin(115200);
}
void loop(){ }

void peticion(){
Serial.print("Hola arduino yo soy ESP8266");
Wire.write("canal ESP");
}

surbyte

Quote
Coloque los pines de SCL y SDA con dos reguladores de voltaje salida 3.3v, uno para cada pin y lo conecto a los pines GPIO4 y GPIO5 que yo vi (SDA:4, SCL:5), ambas sirven para I2C.
No.
Requieres adaptadores de nivel.
Busca en google : level shifter 3.3V to 5V luego selecciona imágenes y ahi tienes las opciones.

MICKA_IPN

A ok entonces, asi quito los reguladores de voltaje que son de un solo canal, para que el arduino mande mensaje de "soy arduino" de 5v se convierta a 3.3v y el modulo wifi diga "yo soy ESP8266", mientras que este envia "canal ESP" de 3.3v a 5v por medio del regulador bidireccional??

surbyte

Un regulador es un dispositivo unidireccional que recibe X tension y devuelve una tensión Y.
Además si no es LDO nada con 5v te va a entregar 3.3V, inisito, no es bidireccional como lo que te propuese con los level shifter.
Te recomiendo la opcion que usa integrado o el 2n7000 con las resistencias.

MICKA_IPN

Me gusto las el "level shifter 3.3V to 5V"  :), bueno con eso me ayudas a resolver el por que tal vez no se comunican, pero ahora me pueden decir si el codigo esta bien?

He leido que el ESP no puede ser esclavo, ademas el Wire.begin(4,5) con los GPIO 4 y 5 del ESP 8266 12E.
En la parte de " Wire.requestFrom(?, 30);" he visto muchos que le ponen hexadecimal, pero creo ese es el canal, pero no se si poner 4 o 5 u otro numero diferente, al igual que el otro codigo con "Wire.begin();". Tambien deveria llevar canal.

surbyte

Para reproducir tu problema debo armar tu configuración. No me es posible. Espera a que alguien lo haga o tenga la respuesta.

MICKA_IPN

de acuerdo pues, comprare el level Shifter y espero que con eso me ayude a realizar mis actividades con el codigo que tengo. Una pregunta mas
ESP solo admite ser maestro? entonces que ejemplos rapidos que podria yo aplicar como arduino esclavo y ESP maestro.?? para darme una idea y asi poder implementar codigo. Se podria?
Muchisimas Gracias!!

surbyte

Quote
ESP solo admite ser maestro?
Donde lo leíste? Lo que yo he leído es que siempre lo usan como tal y que la librería se pensé de ese modo pero simplemente porque nadie creo una librería para que actue como slave (esclavo).
No tiene limites. Nunca vi un microcontrolador que estuviera limitado en cosas como ésta.

Busca mejor porque debe haber alguna documentación.

MICKA_IPN

Donde lo leíste? Lo que yo he leído es que siempre lo usan como tal y que la librería se pensé de ese modo pero simplemente porque nadie creo una librería para que actue como slave (esclavo).
No tiene limites. Nunca vi un microcontrolador que estuviera limitado en cosas como ésta.

Busca mejor porque debe haber alguna documentación.
OHHH!! ya veo, alomejor por lo mismo que se conecta directamente no hay respuesta por eso, el modulo siempre envia pero no recibe, bueno eso me da a pensar, pero esta bien, yo revisare como me va con el level shifter (espero que mejor). También con el Wire.begin(4,5) del ESP12E

Go Up