Que tal, estoy tratando de establecer comunicación desde una PC al Pic usando el modulo ESP8266
Ya tengo el enlace establecido, solo que al mandar un dato (espero prender un led para saber que funciono ) no hace nada. En el modulo ESP8266 veo el led indicador de que si recibe el dato pero no enciende el led.
Primero pensé que no interpretaba bien los datos, pero en proteus funciona bien
Espero que alguien me pueda orientar.....
Dejo el codigo del Pic y adjunto el proyecto de Proteus
Tengo varias lineas comentadas por los experimentos que estuve haciendo
pss:
Ya tengo el enlace establecido, solo que al mandar un dato (espero prender un led para saber que funciono ) no hace nada. En el modulo ESP8266 veo el led indicador de que si recibe el dato pero no enciende el led.
Primero pensé que no interpretaba bien los datos, pero en proteus funciona bien
Espero que alguien me pueda orientar.....
Dejo el codigo del Pic y adjunto el proyecto de Proteus
Tengo varias lineas comentadas por los experimentos que estuve haciendo
Código:
#include <18f4431.h>
#device PASS_STRINGS=IN_RAM
#include <string.h>
//#include <esp8266.h>
//#include <stdint.h>
#use delay(internal=8M)
//#use delay(clock=4000000)
//#fuses HS,PUT,NOPROTECT
#FUSES NOWDT, XT, NOPUT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG
//#use RS232(baud=4800,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stop=1)
#use RS232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stop=1)
//#use RS232(uart1,baud=9600)
// -> CONSTANTES <-/////////////////////////////////////////////////////////////
int const lenbuff=80; // Longitud de buffer
// -> VARIABLES <-//////////////////////////////////////////////////////////////
int xbuff=0; // Índice: siguiente char en cbuff
char cbuff[lenbuff]; // Buffer
char rcvchar=0x00; // último carácter recibido
int1 flagcommand=0; // Flag para indicar posible comando disponible
int1 flagrealcommand=0; // Flag para indicar comando disponible
// -> FUNCIONES <-//////////////////////////////////////////////////////////////
void inicbuff(void); // Borra buffer
void addcbuff(char c); // añade carácter recibido al buffer
void echos(char c); // Eco selectivo sobre RS232
void procesa_comando(void); // Procesa comando*/
void configura_wifi(void); // Configuracion de Modulo ESP8266
// char Keypress=' ';
// -> INTERRUPCIONES <-/////////////////////////////////////////////////////////
#int_rda
void rd_isr(void) //Función de recepción de datos USART
{
// output_high(pin_a1);
rcvchar=0x00; // Inicializo carácter recibido
if(kbhit()) // Si hay algo pendiente de recibir ...
{
rcvchar=getc(); // lo descargo y ...
addcbuff(rcvchar); // lo añado al buffer y ...
putchar(rcvchar);
//rcvchar=0x00;
// echos(rcvchar); // hago eco (si procede).
}
}
// -> PROGRAMA PRINCIPAL <-/////////////////////////////////////////////////////
void main() // TODO: USER CODE!!
{
inicbuff(); //Borra buffer de USART
enable_interrupts(int_rda); // Habilita Interrupción RDA
enable_interrupts(global); // Habilita interrupciones
configura_wifi();
//inicbuff();
while(true)
{
if(flagcommand)
{
//output_high(pin_a1);
procesa_comando();
}
output_high(pin_a0);
delay_ms(800);
output_low(pin_a0);
delay_ms(800);
}
}
// -> CUERPO DE FUNCIONES <-////////////////////////////////////////////////////
void configura_wifi(void)
{
puts("AT+CWMODE=3");
delay_ms(300);
puts("AT+CIPMUX=1");
delay_ms(300);
puts("AT+CIPSERVER=1,80");
delay_ms(300);
puts("AT+CWQA");
delay_ms(300);
puts("AT+CWJAP=\"dfgr\",\"54321\"");
delay_ms(300);
puts("AT+CIFSR");
delay_ms(300);
//puts("AT+UART_CUR=240,8,1,0,3");
//delay_ms(300);
}
void addcbuff(char c) // Añade a cbuff -----------------------
{
switch(c)
{
case 0x0D:// Enter -> Habilita Flag para procesar
{
//output_high(pin_a2);
// cbuff[xbuff++]=c;
flagcommand=1; // Comando en Main
break;
}
case 0x08: // Del -> Borra último caracter del Buffer
{
if(xbuff>0) cbuff[--xbuff]=0x00;
break;
}
default:
{
cbuff[xbuff++]=c; // Añade carácter recibido al Buffer
}
}
}
void inicbuff(void) // Inicia a \0 cbuff -------------------
{
int i;
for(i=0;i<lenbuff;i++) // Bucle que pone a 0 todos los
{
cbuff[i]=0x00; // caracteres en el buffer
}
xbuff=0x00; // Inicializo el índice de siguiente carácter
}
void procesa_comando(void)
{
int i=0,i2=0;
char arg[lenbuff]=""; // Argumento de comando (si lo tiene)
disable_interrupts(int_rda);
flagcommand=0; // Desactivo flag de comando pendiente.
for(i=0;i<lenbuff;i++) // Bucle que pone a 0 todos los
{
//arg[i]=0x00; // caracteres en el argumento
//putchar(arg[i]);
if(cbuff[i]=='<')
{
i++;
while(cbuff[i]!='>' & (i<lenbuff))
{
arg[i2++]=cbuff[i++];
}
}
}
// if(flagrealcommand==0)
// {
// return;
// }
puts(arg); // Monitorizamos el argumento.
if(strcmp(arg,"p")==0)
{
output_high(pin_a2);
}
if(strcmp(arg,"o")==0)
{
output_low(pin_a2);
}
inicbuff(); // Borro buffer.
enable_interrupts(int_rda);
}