Comunicación PIC a PIC usando WiFi

Buenos días, espero me puedan ayudar, Me mandaron como tarea a comunicar 2 PIC mediante WiFi, en el primer PIC debiera estar un teclado matricial y en el segundo un LCD, y lo que ingreso en el teclado debería aparecer en el LCD, pero todo esto mediante WiFi. (aunque me conformaría con hacer encender un led)
He estado varios días buscando información pero no encuentro nada, por favor si alguien me puede ayudar se lo agradecería mucho.
 
la conexión de pic a pic via wifi, necesitaría un medio como el esp8266, busca al respecto
 
yo apostaría que un menos de 5 segundo con una busqueda rapida en google lo encuentro
Pues lo único que encuentro es como hacerlo con RF o Bluetooth, con wifi utilizando el modulo ESP8266 pero solo encuentro ejemplos que se conectan a computadoras o celulares, mas no con otro PIC
 
Es lo mismo, pero con otro PIC, en vez de la PC o celular.
La conexion deber directa o a travez de un modem/router?
 
Hay que usar dos ESP 32 o dos ESP8255 y llegados a ese punto sobran los PICs, programas que el ESP haga lo que hace el PIC que le sobra potencia por todos los lados imaginables y ya está.

Claro, los detalles son otra historia, los ESP han de conectarse a una infraestructura (router, punto de acceso, PC que genera la red) o que uno de ellos sea el que genere la infraetructura y el otr se acople a ella.



Total que no es lógico conectar dos PIC por wifi porque en ese caso sobran ambos pic
 
Total que no es lógico conectar dos PIC por wifi porque en ese caso sobran ambos pic
yo no se que tanta experiencia tengan en eso de los ESP, pero desde mi opinión es mucho mejor tener dedicado al servicio wifi al ESP, y otro microcontrolador dedicado a las actividades del proyecto.
es decir un PIC haciendo todas las operaciones como senseo y activacion de perifericos como motores, y el ESP solo dedicado a la comunicacion por la red.
idealmente un ESP puede hacer lo que sea, en la practica es diferente, sobretodo usando el IDE de arduino que no es ninguna maravilla.
 



 

Dr. Zoidberg

Well-known-Papá Pitufo
pero desde mi opinión es mucho mejor tener dedicado al servicio wifi al ESP, y otro microcontrolador dedicado a las actividades del proyecto.
Eso es duplicar el hardware y los puntos de falla, sin contar el incremento de costo y la complicación adicional en el software.
En este caso es un trabajo para la escuela y poco importa como se haga, pero parece que requiere el uso de los pics y entonces tendrá que usarlos.

idealmente un ESP puede hacer lo que sea, en la practica es diferente, sobretodo usando el IDE de arduino que no es ninguna maravilla.
El IDE de Arduino es lo que es, pero yo lo he usado para programar timers e interrupciones sin usar la API de Arduino (que es bastante mala), he accedido a los puertos I/O directamente y configurado partes de dos puertos para armar uno solo y cuanto malabarismo se te ocurra y no he tenido ningun problema.
A fin de cuentas no es mas que un editor y atrás tenes toda la potencia del AVR-GCC y sus herramientas de apoyo adecuadamente "escondidas".
 
Eso es duplicar el hardware y los puntos de falla, sin contar el incremento de costo y la complicación adicional en el software.
estoy deacuerdo que depende de cada proyecto y depende de la programacion, en eso no tengo ninguna duda...

pero hagamos esta reflexion, porque la mayoria de las tablets y telefonos, utilizan todo modulado o separado? porque no utilizan todo en el mismo procesador? entiendo que es un poco burda la comparacion... pero mi punto es que para mi es mejor que el modulo de comunicacion se dedique a eso y no cuelgue todo lo demas, porque interrupciones son interrupciones no importa de cuanto, no se si me doy a entender.
 
No le veo sentido, tener un procesador de 32 bits con ram rom y de todos dos veces y ponerle al lado un churro de 8 bits haciendo no se sabe bien que.

Ojo yo lo haría a día de hoy así de mal porque.... no sé usar el esp , apenas lo he tocado nada.

Pero desde luego estoy perdiendo dinero cada día que paso sin exprimir un esp, eso lo tengo claro.
Lógica, es como usar un PC de modem de un ZXspectrum que es el que lleva la contabilidad de la empresa. De locos total.
 
No le veo sentido, tener un procesador de 32 bits con ram rom y de todos dos veces y ponerle al lado un churro de 8 bits haciendo no se sabe bien que.
es que no es por recursos, el esp32 esta de sobra, en recursos. pero por ejemplo ahora mismo estoy investigando como mantener la conexion viva en un esp8266 mientras necesito estar leyendo por el puerto analogo y no encuentro nada, no se si es posible...

por ejemplo este codigo:
C:
void loop(void) {
  server.handleClient();
  MDNS.update();
}
lo primeramente logico de hacer es esto:
C:
void loop(void) {
var=analogRead(0); // aqui leo el puerto analogo...
  server.handleClient();
  MDNS.update();
}
obvio no funciona y pues eso significa que no mantiene viva la conexion, ahora si agregas otras funciones pues tienes que estar metiendo parches que hacen inestable el sistema y ahi es a donde yo voy.
es mucho mas facil meter un PIC que mantenga leyendo el analogo y cuando se requiera el servicio web se ocupe el esp8266...
 
Gracias Dr. le voy a dar una leida con detenimiento, hay una libreria DHT que no habia visto y puede que ahi este el secreto... he visto muchisimos ejemplos que a petición del cliente el servidor hace la lectura del sensor y este responde, eso si es facil, lo que pretendo es que siempre este leyendo el analogo que es un sensor de movimiento y que se active una sirena, nada que ver con el servicio web, el servicio web tendra otras funciones espero que ese link me aclare varias dudas que tengo puesto que yo también básicamente estoy aprendiendo a sacarles provecho.
ya que lo analice me retracto o confirmo lo que les he estado comentando.
 

Dr. Zoidberg

Well-known-Papá Pitufo
Lo primero que debes averiguar es si las funciones de tcp/ip son bloqueantes o nó ya que de eso depende como diseñar tu sistema. Los ejemplos son bastante bobos y no siempre muestran la parte interesante.
 
Pues me retracto y no tanto o sea depende...
analice el link y lo que me faltaba para que funcionara es algo que no nos gusta mucho :ROFLMAO:

asi si funiona...
Código:
void loop(void) {
var=analogRead(0); // aqui leo el puerto analogo...
  server.handleClient();
  MDNS.update();
  delay(1000); //agregar un delay.
}
Seguramente hay alguna otra solución, pero vuelvo a lo mismo, según el proyecto dependería si vale o no la pena usar un procesador independiente que es a lo que me refiero.
 
Podríamos analizar varias soluciones en cuanto a eficiencia, costo... pero... no han leído que el amigo le da igual una lcd que un LED? Lo ha dicho él.

ESP8266 + Arduino me parece la solución más práctica. Quién lo va a hacer es otro cantar
 

Dr. Zoidberg

Well-known-Papá Pitufo
Seguramente hay alguna otra solución, pero vuelvo a lo mismo, según el proyecto dependería si vale o no la pena usar un procesador independiente que es a lo que me refiero.
Sinceramente, no entiendo nada de lo que estás haciendo. Con ese pedacito de código no se puede saber como estás gestionando el servidor (??) ni de donde sale el método handleClient()
Si pegás todo el código tal vez podamos discernir que es lo que sucede y por que hay que poner un delay de 1 segundo...

La programación "en red" no es complicada, pero si no tenés algo de entrenamiento previo para conocer las APIs entonces estás trabajando a ciegas. Y te repito, los ejemplos que hay son MALOS en su absoluta mayoría.

Este ejemplo está "un poco mejor"...al menos sigue la secuencia normal de los servidores bloqueantes.
 
en realidad no es algún código en especifico, en mi caso lo solucione poniendo ese delay que para mi aplicación no es tan critico el tiempo de espera... que por cierto hasta con 10mS es suficiente o quizas un poco menos sin que sea inestable...

pero en este ejemplo completo...
Código:
#include <ESP8266WiFi.h>

const char* ssid = "********";
const char* password = "********";

WiFiServer server(80);


void setup()
{
  Serial.begin(115200);
  Serial.println();

  Serial.printf("Connecting to %s ", ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println(" connected");

  server.begin();
  Serial.printf("Web server started, open %s in a web browser\n", WiFi.localIP().toString().c_str());
}


// prepare a web page to be send to a client (web browser)
String prepareHtmlPage()
{
  String htmlPage =
     String("HTTP/1.1 200 OK\r\n") +
            "Content-Type: text/html\r\n" +
            "Connection: close\r\n" +  // the connection will be closed after completion of the response
            "Refresh: 5\r\n" +  // refresh the page automatically every 5 sec
            "\r\n" +
            "<!DOCTYPE HTML>" +
            "<html>" +
            "Analog input:  " + String(analogRead(A0)) +
            "</html>" +
            "\r\n";
  return htmlPage;
}


void loop()
{
  WiFiClient client = server.available();
  // wait for a client (web browser) to connect
  if (client)
  {
    Serial.println("\n[Client connected]");
    while (client.connected())
    {
      // read line by line what the client (web browser) is requesting
      if (client.available())
      {
        String line = client.readStringUntil('\r');
        Serial.print(line);
        // wait for end of client's request, that is marked with an empty line
        if (line.length() == 1 && line[0] == '\n')
        {
          client.println(prepareHtmlPage());
          break;
        }
      }
    }
    delay(1); // give the web browser time to receive the data

    // close the connection:
    client.stop();
    Serial.println("[Client disonnected]");
  }
}
sacado del ultimo link que pusiste también requiere de un delay... considero que para una aplicación muy precisa en tiempos, no seria muy buena idea usar solo un ESP, claro que estoy consciente que para una aplicacion mas precisa hay otras plataformas y etc.
para el caso del compañero que inicio el tema claro que estaría de sobra supongo.
 

Arriba