Version:0.9 StartHTML:0000000105 EndHTML:0000281394 StartFragment:0000001578 EndFragment:0000281378
#define Version "160513"
// rajout Nb echanges OK
// test SEND OK plutot que le STATUS=3
#define Version "160513"
// rajout drapeau_first_run pour validation Pourcent seulement
// apres 10 boucles programme
// remplace Byte CPT par float Pourcentage de connection
//taux > 95%
//#define Version "160510"
// add delay 100ms apres ecriture UART1 , avant envoi sur UART2
// SANS Memory manager
//#define Version "160509"
// PB calcul taille webpage
// usage malloc ????
// voir WiFI3_Serveur_UART2_UART1_LCD_I2C_Malloc_Test.c
// usage
//#define Version "160506"
// doublé taille buffer1 et buffer2
// envoi WebPage coupée en 2 ..car pb si > 256 cars
//#define Version "160505"
// remis UART2 à 19200 bauds (was 9600
//#define Version "160504"
// rajout gestion perte connection STATUS <> 3
//define Version "160502"
// ok mais saut de ligne sur page web ???
//#define Version "160429"
// rajout terminal HID
#define Projet "WiFI3_Serveur_18F87J50_UART1_2_LCD_I2C2_Mai_2016.mcppi"
#define Source "WiFI3_Serveur_UART2_UART1_LCD_I2C_HID_mikrobus1"
// Tools -> Options -> cocher Case sensitive
// WiFI3_click_18F87J50_UART1_2_LCD_I2C2.hex
#define Nom_Reseau_Wifi "ON_Air"
#define Mot_de_Passe ""
#define test_Page_HTML
#define With_LCD2119
#define USE_I2C2
#define LCD2119_ADR 0x74 // LCD 2119 2x16 car OK avec alim 3,3V
//#define With_HID
#define With_UART
//#define Version "160427"
// corrigé bug strrchr(buffer1, "x") au lieu de strrchr((buffer2,'*')
//#define Version "06 Avril 2016"
// test web page
//#define Version "05 Avril 2016"
// test avec Telnet (fenetre dos) et port 23) 192.168.0.108:23
// on ne peut pas modifier le timeout CIPST0 ?
//#define Version "03 Avril 2016"
// test avec On_air + cle WEP !!!
// p=Send_Cde_Test_response("AT+CWJAP=\"On_Air\",\"ACCA9135F318DBFBE476D3D95D\",\"3\",\"WEP\"\r\n","OK");
// 16:57:51.890> AT+CIFSR
// 16:57:51.890>
// 16:57:51.953> 192.168.4.1
// 16:57:51.953> 192.168.0.108
/*
avec page web 192.168.0.108:80 depuis chrome Windows 10
18:40:06.531> AT+CIFSR
18:40:06.531>
18:40:06.531> 192.168.4.1
18:40:06.531> 192.168.0.108
18:40:06.531>
18:40:06.531> OK
18:40:06.531>
18:40:06.718>
18:40:06.718>
18:40:06.781> MODE TEST AVEC TERMINAL VBRAY :
18:40:14.718> Reçu : Link
18:40:14.718>
18:40:15.781> Reçu : 1+½5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36A
18:46:44.546> Reçu : UnlinkL
18:49:45.984> Reçu : Link
18:49:45.984>
*/
//#define Version "02 Avril 2016"
// 1ere connection semblant reussie avec WIFI
//10:27:58.734> +CWLAP:(0,"FreeWifi",-83,"f4:ca:e5:aa:7a:79",2)
//10:28:36.421> AT+CIFSR
//10:28:36.421>
//10:28:36.421> 192.168.4.1
//10:28:36.421> 10.48.222.233 ou 10.18.134.254
//#define Version "01 Avril 2016"
// + CWLAP: <ecn>,<ssid>,<rssi>,<mac>
// 17:54:35.156> +CWLAP:(1,"On_Air",-70,"4a:39:bc:3d:ba:d0",3)
//17:54:35.218> +CWLAP:(0,"FreeWifi",-71,"4a:39:bc:3d:ba:d2",3)
// ecn=0=>OPEN ecn=1=>WEP ecn=2=> WPA_PSK ecn=3=> WPA2_PSK
//#define Version "29 Mars 2016"
// test avec adresse IP sans guillemets
//#define Version "27 Mars 2016"
// rajout LCD 2119 sur bus I2C2
// bug delai via Timer0 trouvé .. il manquait simplement les parentehses Arme_Timer0();
// et de ce fait, la fonction n'etait pas executée donc flag_timer0 restait à 1
//#define Version "11 Mars 2016" // .. presque OK"
//ac:datasheet
//ac:Pinout_18F87J50
//ac:Interliaisons_PIC_Wifi3
/* **************************************
PIC18FxxJxx Specifics
Shared Address SFRs
mikroC PRO for PIC does not provide auto setting of bit for acessing alternate register.
This is new feature added to PIC18fxxJxx family and will be supported in future.
In several locations in the SFR bank, a single address is used to access two
different hardware registers. In these cases, a “legacy” register of the standard PIC18
SFR set (such as OSCCON, T1CON, etc.) shares its address with an alternate register.
These alternate registers are associated with enhanced configuration options for peripherals,
or with new device features not included in the standard PIC18 SFR map.
A complete list of shared register addresses and the registers associated with them
is provided in datasheet.
************************************** */
// .. PB Timer0"
// passe à FOSC 8MHz interne au lieu de 48Mhz
//C:\_MikroC\_MesProjets_MikroC\_WIFI3_ESP8266\P18F87J50_internal_Fosc_8MHz_USB_PLL_48Mhz.cfgsch
// #define Version "09 Mars 2016"
// Toujours PB avec Timer0 interrupt utilisée dans subroutine
/// reduction vitesse UART1 et 2 -> 19200 bds
// Vu que Timer0 est TOUJOURS en Hihg level interrupt
// problemes liés à la taille RAM de buffer1 et buffer2 de 300
// si taille limitée à 256, l'interrupt timer0 repond bien
// par contre il faut veiller à ce que buffer2 ne deborde pas
// surtout avec la commande de decouverte reseau..
//
// A nouveau probleme de confusion entre INT0IF et TMR0IF dans l'IT timer0!!
// Big probleme avec timer0 dans sub routine Stack problem ?
// remplacée par Delay_ms
// #define Version "08 Mars 2016 a"
// modif cas special recherche des reseaux Wifi AT+CWLAP ,
// car necessite 7 à 10 secondes , meme à 38400 bds!
// ATTENTION : modif vitesse en baud à 38400... avec AT+CIOBAUD=38400 (was 19200)
// il faut etre à la vitesse préalable UART=19200 pour pouvoir le faire
// et ensuite modifier l'init UART2 = 38400 pour correspondre à la nouvelle valeur
// modif : test "LF ou CR " sur reception buffer2 ( was LF only) pour armer le flag UART2_DataReady
// int Send_Cde_Test_response(const char *cde,const char * answ)
// pour liste des reseaux dispo
// Activation IT RXW UART1 pour cde directe modukle WIFI3
// modif UART2 à 19200 bauds
//carte clicker2 18F87J50 cramée en envoyant +12V sur VSYS bornier (5V)!
// mais encore operationelle si alimentée en 3,3V (hormis la partie 5V et cgageur de batterie)
//#define Version "05-03-2016"
// modif test sur reception UART1
//#define Version "05-12-2015\r\n"
//#define Test_With_VBRAY
// ***** mode TESTS *****************************
// Le module WIFI3 est retiré du mikrobus et relié en externe..
// via liaisons au PIC Clicker2 avec des fils prologateurs Male-femelle
// 4 fils : pour PWD et GPIO15 , 0V, +3,3V
// 2 fils : alimenter l'interface 2TR en 3,3V
// 2 fils liaison UART
// ATTENTION : croiser RX et TX entre WIFI3 module et Interface 2Tr Terminal
// testé OK avec COM2 9600 fiche cable PC DB9 noire + empilement connecteurs DB9 inverseur !
// Avec cette meme connectique
// test avec programme ESP8266 User Progr V1.1 firatdeveci.com ... OK
/*
29/08/2015
sur PC XP affichage monitor LINKSYS WUSB54G
sur l'onglet Site Survey
apparait en plus le module WIFI3 :
ESP_9C100C 1 70% infrastructure channel 1 Security No MAC= 1A-FE-34-9C-19-0C
SSID= ESP_9C100C
Wireless mode = Infrastructure
channel = 1
Security = No
MAC= 1A-FE-34-9C-19-0C
adresse IP : 192.168.0.110
AT+CIPA= 192.158.1.4 ??
rajouté dans NORTON_Securite reseau _ Approbation .. totale
*/
/*
* Project name:
WiFI3 click board example;
* Copyright:
(c) MikroElektronika, 2015.
* Revision History:
20150126: - initial release (FJ) for 18F45K22 Easypic V7;
REV Paulfjujo Aout 2015
* Description:
This is a simple project which demonstrates the use of WiFi3 click board.
After establishing the connection, user should send messages via UDP terminal
The WiFI3 click board receives them and displays them at the Lcd.
* Test configuration:
MCU: PIC18F87J50
Dev.Board: PICClicker2
Oscillator: HS-PLL 32.0000 MHz, 8.0000 MHz Crystal
ext. modules: wifi3 click board -
UART2 + terminal VBRAY
SW: mikroC PRO 6.50 for PIC
NOTES:
- Place WiFi3 click board in the mikroBUS socket #1
- Put power supply jumper (J5) on the EasyPIC7 board in 3.3V position.
- Configure SSId, password and port to match your network settings.
- Use UDP terminal tool to connect to the WiFi module and send data to it.
//MicroBus Socket #1
//--- left ---------
//RA0 AN STAT
//RD2 RST POWERKEY
//---- right -------
//RG3 PWM RI PWD
//RB3 INT CTS GIO15
//RG2 RX TXD
//RG1 TX RXD
//
// nota: PIC 18F87J50 Clicker2
// Pins reservés , non utilisables
// RJ5 Stat
// partie Alim carte
// RF6 Vsense
// RE2 input Test presence alim USB
// RE5 Sensel
// RE6 Fault
//
// RD4 affecté à LD1 LED tirée au Gnd 1= Allumée
// RE4 affecté à LD2 LED tirée au Gnd 1= Allumée
// RD7 affecté à T2 BP1 tiré au +Vcc 1= BP Ouvert
// RH3 affecté à T3 BP2 tiré au +Vcc 1= BP Ouvert
// LCD éx16 car sur I2C2
// RD6 SCL I2C2 --> LCD2119 pin 3 fil vert
// RD5 SDA I2C2 --> LCD2119 pin4 fil jaune
// +3,3V ---------- LCD2119 pin2 fil rouge
// Gnd ---------- LCD2119 pin1 fil Noir
*/
//
//
//#include "WiFI3_click_UART2_.h"
#define Lo(param) ((char *)¶m)[0]
#define Hi(param) ((char *)¶m)[1]
//-- commandes terminal VT220
#define CLS 12 // effacement de page sur Terminal VBRAY
#define CR 13
#define VT 10
#define LF 10
#define TAB 9
#define Bell 7
#define Byte unsigned char
#define uint8 unsigned char
#define NULL 0
unsigned const char WebHead[]=
"<html>\
<head>\
<meta http-equiv=\"Content-Type\"\
content=\"text/html; charset=iso-8859-1\">\
<meta http-equiv=\"refresh\" content=\"10\">\
<title>WIFI3-Click</title>\
</head>\
<body>\
<h2><br>";
unsigned char WebVar0[]="Temper. Ext :<br> 10.54 °C<br>";
unsigned char WebVar1[]="Temper. Amb :<br> 17.63 °C<br>";
unsigned char WebVar2[]="BP1 = x<br>";
unsigned char WebVar3[]="BP2 = x<br>";
unsigned char WebVar4[]="Taux= xx.x %<br>";
unsigned char WebVar5[]="NbEchanges= xxxxx<br>";
unsigned const char WebTail[]= "</h2></body></html>" ;
#define Byte unsigned Char
#define Word unsigned int
#define MAXLEN1 320
unsigned char buffer1[MAXLEN1];
unsigned char * PBuffer1;
#define MAXLEN2 512
unsigned char buffer2[MAXLEN2];
unsigned char * PBuffer2;
#define MAXLEN3 512
unsigned char WebPage[MAXLEN3];
unsigned char *PWeb;
static char msg[128];
static char TEXTE[256];
char CRam1[80];
char *txt;
unsigned char *p;
unsigned char Web_Status='0';
unsigned char Envoi_Status='0';
unsigned int PageLen;
unsigned long L1;
unsigned char *pOrg;
unsigned int Index1=0;
unsigned int i1=0;
unsigned int UART1_DataReady=0;
unsigned char c1=0;
unsigned char cx;
unsigned int i,j,k;
unsigned int Flag_Timer0;
unsigned int Cpt0;
int Vbray;
int Max_Timer0=2;
unsigned int Flag_Timer1;
unsigned int Cpt1;
int Max_Timer1=10;
unsigned char LCD_ADR=LCD2119_ADR; //0x74;
unsigned char NbCarPL; // 16
unsigned char addr ;
unsigned int EAx,EA0,EA1,EA2;
float Degres1,Degres2;
char received_data[16], ip_address[16];
unsigned char tmp,c2;
int UART2_DataReady;
unsigned int i2,Index2;
unsigned int Step;
unsigned char IPD=0;
unsigned char Cpt=0;
unsigned int NbC=0;
unsigned int NbB=0;
float Pourcent;
volatile struct chbits { // 8 flags
unsigned res1:1;
unsigned res2:1;
unsigned res3:1;
unsigned res4:1;
unsigned res5:1;
unsigned res6:1;
unsigned First_Run:1;
}Drapeaux ;
// module connections click#1
sbit CH_PD at LATA0_bit; // resert pin
sbit GPIO15 at LATD2_bit;
sbit CH_PD_Direction at LATA0_bit;
sbit GPIO15_Direction at LATD2_bit;
// LEDs on PIC18F87J50 Clicker2
sbit LD1 at LATD4_bit;
sbit LD2 at LATE4_bit;
sbit LD1_Direction at TRISD4_bit;
sbit LD2_Direction at TRISE4_bit;
// BPs on PIC18F87J50 Clicker2
sbit BP1 at RD7_bit;
sbit BP2 at RH3_bit;
sbit BP1_Direction at TRISD7_bit;
sbit BP2_Direction at TRISH3_bit;
#ifdef With_HID
unsigned char readbuff[64] absolute 0x500; // Buffers should be in USB RAM, please consult datasheet
unsigned char writebuff[64] absolute 0x540;// RFID Click Connections
void CRLF_HID(void);
void Send_Text_HID(char * msg );
void Send_CText_HID(const char * msgC );
#endif
void Arme_Timer0(void);
void Init_Timer0(void);
void strConstRamCpy(char *dest, const char *source);
void Init_ADC(void);
char * Send_Cde_Test_response(const char *cde,const char * answ);
void WiFI_Configure(void);
char * ESP_Connetion(void);
void CRLF1(void) ;
void UART1_Write_String(unsigned char * St,int MaxCars);
void UART1_Write_CText(const char *txt);
void RAZ_UART1(void);
void CRLF2(void) ;
void UART2_Write_String(unsigned char * St,int MaxCars);
void UART2_Write_CText(const char *txt) ;
void RAZ_UART2(void);
void LCD_CLS(void);
void LCD_Clear(void); // <-- PB >> au lieu de space.. à suivre
int LCD2119_Init(void);
void LCD_RAZ_Ligne(int L);
void LCD_Write_Chr_At(int Ligne,int Col,char c1) ;
void LCD_Write_Text_At(unsigned int Ligne,unsigned int col,char * t1);
void LCD_Write_CText_At(unsigned int Ligne,unsigned int col,const char * t1);
void LCD_Write_CText(const char * t1);
void Cree_Euro(void) ;
void Cree_8_cars_CGRAM(void) ;
void LCD_Cde(unsigned char Cde);
void LCD_Gauche(void);
void LCD_Droite(void);
unsigned char check_device(unsigned char dev_address); // necessite liaison RS232 UART1
void Float2Ascii (float x, unsigned char *str,char precision);
// interrupt handler
void Interrupts() iv 0x0008 ics ICS_AUTO
{
// UART2
if((RC2IF_bit==1) && (RC2IE_bit==1))
{
c2 =RCREG2; //UART2_Read();
if(OERR2_bit)
{
CREN2_bit = 0;
CREN2_bit = 1;
OERR2_bit = 0;
}
if(FERR2_bit==1) c2 = RCREG2;
if (i2 < (MAXLEN2-2))
{
buffer2[i2]=c2;
Index2=i2;
i2++;
}
else RC2IE_bit=0;
}
//UART1
if((RC1IF_bit==1) && (RC1IE_bit==1))
{
c1 = RCREG1;
//TXREG1='*';
if(OERR1_bit)
{
CREN1_bit = 0;
CREN1_bit = 1;
OERR2_bit = 0;
}
if(FERR1_bit)
{
c1 = RCREG1;
}
if ((c1==13) || (i1>(MAXLEN1-2))) //|| (c1==10))
{
UART1_DataReady=1;
buffer1[i1]=0;
Index1=i1;
i1=0;
c1=0;
}
else
{
if (c1>0)
{
buffer1[i1]=c1;
Index1=i1;
i1++;
}
}
}
#ifdef With_HID
// ==== IT Timer0 =============
if ((TMR0IE_bit==1) && (TMR0IF_bit==1)) // (TMR0IF_bit){
{
TMR0IF_bit = 0;
TMR0H = 0x48; // 18661 prescaler=1/256 8Mhz
TMR0L = 0xE5;
Cpt0++;
if( Cpt0 > Max_Timer0 ) // 1sec * Max_Timer0
{
Flag_Timer0=1;
TMR0IE_bit=0;
Cpt0=0;
}
}
USB_Interrupt_Proc(); // for HID
#endif
}
void Interrupt_LOW() iv 0x0018 ics ICS_AUTO
{
// ----- timer 1 ----------------
if ( (TMR1IE_bit==1) && ( TMR1IF_bit==1))
{ // Test "Peripheral Interrupt Request Register 1" for Timer1 Flag
Cpt1++;
if (Cpt1 >=Max_Timer1) // every x250 ms si 8Mhz (PLL=0) , every 50mS si 40Mhz (PLL=1)
{
Cpt1=0;
Flag_Timer1=1;
TMR1ON_bit=0;
TMR1IE_bit=0;
}
TMR1H= 0x0B; // Hi (3035);
TMR1L= 0xDB; // Lo (3035);
PIR1.TMR1IF=0;
}
}
#include "LCD2119_I2Cx_routines.h"
void Float2Ascii (float x, unsigned char *str,char precision)
{
/* converts a floating point number to an ascii string */
/* x is stored into str, which should be at least 30 chars long */
int ie, i, k, ndig;
double y;
ndig = ( precision<=0) ? 7 : (precision > 22 ? 23 : precision+1);
ie = 0;
/* if x negative, write minus and reverse */
if ( x < 0)
{
*str++ = '-';
x = -x;
}
/* put x in range 1 <= x < 10 */
if (x > 0.0) while (x < 1.0)
{
x *= 10.0; // a la place de =*
ie--;
}
while (x >= 10.0)
{
x = x/10.0;
ie++;
}
// in f format, number of digits is related to size
ndig += ie; // a la place de =+
//round. x is between 1 and 10 and ndig will be printed to
// right of decimal point so rounding is ...
for (y = i = 1; i < ndig; i++)
y = y/10.;
x += y/2.;
if (x >= 10.0) {x = 1.0; ie++;}
if (ie<0)
{
*str++ = '0'; *str++ = '.';
if (ndig < 0) ie = ie-ndig;
for (i = -1; i > ie; i--) *str++ = '0';
}
for (i=0; i < ndig; i++)
{
k = x;
*str++ = k + '0';
if (i == ie ) *str++ = '.';
x -= (y=k);
x *= 10.0;
}
*str = '\0';
}
// Send Status SMS
void Send_Msg(const char* Msg)
{
UART2_Write_CText(Msg);
UART2_Write(0x1A); // Send CTRL + Z as end character
UART2_Write(0x0D); // Send CR
//Get_Response("Ok"); // Wait OK as confirmation that the message was sent
}
// --- Copie le texte depuis ROM vers RAM
void strConstRamCpy(char *dest, const char *source)
{
while(*source) *dest++ = *source++ ;
*dest = 0 ; // terminateur
}
void Init_ADC()
{
//config lecture ADC 10 bits
ADCON0.VCFG1=0; // - AVss=Gnd;
ADCON0.VCFG0=0; // +Avdd;
ADCON0.CHS3=0; // channel1
ADCON0.CHS2=0;
ADCON0.CHS1=0;
ADCON0.CHS0=1;
ADCON0.ADON=1; // ADC enabled
ADCON1.ADFM=1; // right justified
ADCON1.ADCAL=0;
ADCON1.ACQT2=1;
ADCON1.ACQT1=1;
ADCON1.ACQT0=0; // 110=> 16 TAD
ADCON1.ADCS1=1;
ADCON1.ADCS2=1;
ADCON1.ADCS0=0; // 110 => Fosc/64
}
void UART2_Write_String(unsigned char * St,int MaxCars)
{
// nota: plantage si passage direct valeur pointee
// il faut passer par une variable intermediaire
int i;
unsigned char c0;
i=0;
while(1)
{
c0= *(St+i);
if(c0==0) break;
UART2_Write(c0);
i++;
if (i>MaxCars) break;
}
}
void UART1_Write_String(unsigned char * St,int MaxCars)
{
int i;
unsigned char c0;
i=0;
while(1)
{
c0= *(St+i);
if(c0==0) break;
UART1_Write(c0);
i++;
if (i>MaxCars) break;
}
}
void UART1_Write_CText(const char *txt1)
{
while (*txt1)
UART1_Write(*txt1++);
}
void CRLF1()
{
UART1_Write(CR);
UART1_Write(LF);
}
void RAZ_UART1()
{ RC1IE_bit=0 ;
for (Index1=0;Index1<MAXLEN1;Index1++) buffer1[Index1]=0;
Index1=0;
i1=0;
UART1_DataReady=0;
c1=0;
RC1IE_bit=1 ;
}
void CRLF2()
{
UART2_Write(CR);
UART2_Write(LF);
}
void UART2_Write_CText(const char *txt2)
{
while (*txt2)
UART2_Write(*txt2++);
}
void RAZ_UART2()
{ RC2IE_bit=0 ;
for (Index2=0;Index2<MAXLEN2;Index2++) buffer2[Index2]=0;
Index2=0;
i2=0;
UART2_DataReady=0;
c2=0;
RC2IE_bit=1 ;
}
void Hardware_Init(void)
{
TRISG=0xFF;
TRISA=0xFF;
TRISB=0xFF ;
TRISC=0xFF;
TRISD=0xFD;
TRISE=0xFF; // all input
TRISH=0xFF; // all input
//ADSHR_bit = 1; // plante si lecture ADC
//REGISTER 21-3: ANCON0: A/D PORT CONFIGURATION REGISTER 2
ANCON0=0xFF ; // 0= analog 1= digital
ANCON0.F4=1; // PCFG4_bit=1; // RA4 digital
ANCON0.F3=1; // PCFG3_bit=1; // RA3 digital
ANCON0.F2=0; // PCFG2_bit=0; // RA2 Analog inp
ANCON0.F1=0; // PCFG1_bit=0; // RA1 Analog inp
ANCON0.F0=1; // PCFG0_bit=1; // RA0 digital
// REGISTER 21-4: ANCON1: A/D PORT CONFIGURATION REGISTER 1
ANCON1=0xFF; // No analog on AN15--AN10
// 2 BP poussoir clicker2
BP1_Direction = 1; // Set direction for buttons
BP2_Direction = 1; // RH3
// 2 Leds sur cliker2
LD1_Direction = 0; // Set direction for LEDs
LD2_Direction = 0;
LD1 = 0; // turn off LEDs
LD2 = 0;
//
CH_PD_Direction=0;
GPIO15_Direction=0;
}
void Init_Timer0()
{
T0CON.PSA=0; // Timer0 prescaler assigned to Clock
T0CON.T0PS2=1; //
T0CON.T0PS1=1; //
T0CON.T0PS0=1; // prescler =>111 => 1/256
T0CON.T0CS=0; // internal cycle clock
T0CON.T08BIT=0 ; // Mode 16 bits
// 3035 prescaler=32 1sec at 8Mhe
// 18661 prescaler =256 1sec at 48MHz 48E5
// 28036 prescaler=32 48MHz => 100mS 6D84
// 3035 prescaler =128 0,5sec @64Mhz
// 3035 prescaler=128 2sec at 16Mhz
// 3035 prescaler=256 2sec at 32Mhz
// 34286 prescaler=128 1,0sec at 16Mhz 85EE
// T0CON = 0x84; //
//
// 1 = Enables Timer0
// 0 = Timer0 is configured as a 16-bit timer/counter
// 0 = Internal instruction cycle clock
// 0 = Increment on low-to-high
// 0 = Timer0 prescaler is assigned
// 100 = 1:32 Prescale value
//
TMR0H = 0x48; // 18661
TMR0L = 0xE5;
Max_Timer0=2;
Cpt0=0;
Flag_Timer0=0;
TMR0IF_bit=0;
TMR0IE_bit = 1;
}
void Arme_Timer0()
{
//TMR0IF_bit = 0;
//TMR0H = 0x0B; //3035
//TMR0L = 0xDC;
Cpt0=0;
Flag_Timer0=0;
TMR0IE_bit = 1;
}
//Timer1
//Prescaler 1:8; TMR1 Preload = 3036; Actual Interrupt Time : 50 ms
//Place/Copy this part in declaration section
void Init_Timer1(void)
{
T1CON = 0x31; // prescaler 1:8
TMR1IF_bit = 0;
TMR1H = 0x0B; // at 8Mhz => 250mS
TMR1L = 0xDC;
TMR1IE_bit = 1;
TMR1IP_bit=0; // .. low level interrupt
INTCON = 0xC0;
}
void Arme_Timer1()
{
//TMR1IF_bit = 0;
TMR1H = 0x0B;
TMR1L = 0xDC;
Cpt1=0;
Flag_Timer1=0;
TMR1ON_bit=1; // Timer0 ON
TMR1IE_bit = 1;
}
char * Send_Cde_Test_response(const char *cde,const char * answ)
{
char dummy[40];
int n;
strConstRamCpy(dummy,answ);
n=strlen(dummy);
RAZ_UART2();
UART1_Write_CText(cde);CRLF1();
Delay_ms(100);
UART2_Write_CText(cde);
Arme_Timer1();
p=0;
while (Flag_Timer1==0);
// pour debugger le probleme ci dessous
RC2IE_bit=0;
// CRLF1();
// k=strlen(buffer2);
//WordToStr(k,CRam1);
//UART1_Write_CText(" len buffer2= ");
//UART1_Write_Text(CRam1);
//CRLF1();
buffer2[MAXLEN3-1]=0; // limite la longueur => OK
p=strpbrk(dummy,buffer2);
// p=strstr(buffer2,dummy);
if (p>0 ) Step++;
UART1_Write_String(buffer2,100);
CRLF1();
CRam1[0]=0;
p=&CRam1[0];
ByteToStr(Step,CRam1);
CRam1[8]=0;
LCD_Write_Text_At(2,8,CRam1);
return p;
}
void WiFI_Configure()
{
Max_Timer1=20;
Step=0;
//UART1_Write_CText("Step %c Connect to WIFI3 \r\n");
UART1_Write_CText(" Step 0 \r\nEtablissement premiere Connection avec WIFI3 :" );
p=Send_Cde_Test_response("AT\r\n","OK");
Delay_ms(200);
// UART1_Write_CText("Reseting Module :\r\n");
sprintf(msg," Step %s \r\nReseting Module : ",p );
UART1_Write_Text(msg);
p=Send_Cde_Test_response("AT+RST\r\n","ready");
Delay_ms(200);
sprintf(msg,"Step %s \r\nDisable ECHO ",p );
UART1_Write_Text(msg);
p= Send_Cde_Test_response("ATE0\r\n","OK");
Delay_ms(200);
if (BP1==0)
{
UART1_Write_CText("Init Maximum (car BP1 actionné) \r\n");
sprintf(msg,"Step %s \r\nSet speed 19200 bds ",p );
UART1_Write_Text(msg);
p= Send_Cde_Test_response("AT+CIOBAUD=19200\r\n","OK");
Delay_ms(200);
sprintf(msg,"Step %s \r\nTimeOut Value ? ",p );
UART1_Write_Text(msg);
p= Send_Cde_Test_response("AT+CIPSTO?\r\n","OK"); // <-- lecture OK
Delay_ms(200);
sprintf(msg,"Step %s \r\n Version ESP : ",p );
UART1_Write_Text(msg);
p= Send_Cde_Test_response("AT+GMR\r\n","OK");
Delay_ms(200);
sprintf(msg,"Step %s \r\nDisConnecte l'ancien Spot Wifi AP : ",p );
UART1_Write_Text(msg);
Max_Timer0=20;
p= Send_Cde_Test_response("AT+CWQAP=?\r\n","OK");
Delay_ms(200);
}
else
UART1_Write_CText("Init Minimum (car BP1 au repos) \r\n");
sprintf(msg,"Step %s \r\nSetting Station & AP mode : ",p );
UART1_Write_Text(msg);
p= Send_Cde_Test_response("AT+CWMODE=3\r\n","OK");
Delay_ms(100);
sprintf(msg,"Step %s \r\nMultiple connexions : ",p );
UART1_Write_Text(msg);
Max_Timer1=20;
p= Send_Cde_Test_response("AT+CIPMUX=1\r\n","OK");
Delay_ms(100);
if (BP1==0)
{
sprintf(msg,"Step %s \r\nDecouverte des Reseaux visibles WIFI : ",p);
UART1_Write_Text(msg);
UART1_Write_CText("wait.. (16 sec)!\r\n");
Max_Timer1=64; // 64 * 0.25=16 sec
p= Send_Cde_Test_response("AT+CWLAP\r\n","OK");
Delay_ms(200);
Max_Timer1=4;
UART1_Write_CText("\r\nFin de recherche\r\n");
}
sprintf(msg,"Step %s \r\nGetting Adresse IP Server & Client : ",p );
UART1_Write_Text(msg);
Max_Timer1=20;
p= Send_Cde_Test_response("AT+CIFSR\r\n","OK");
Delay_ms(200) ;
sprintf(msg,"Step %s \r\nSet Connecting to AP ",Step);
UART1_Write_Text(msg);
Max_Timer1=10;
p=Send_Cde_Test_response("AT+CWJAP=\"On_Air\",\"ACCA9135F318DBFBE476D3D95D\",\"3\",\"WEP\"\r\n","OK");
Delay_ms(100);
Max_Timer1=4;
sprintf(msg,"Step %s \r\nQuel Reseau connecté ?",Step);
UART1_Write_Text(msg);
Max_Timer1=10;
p=Send_Cde_Test_response("AT+CWSAP?\r\n","OK");
Delay_ms(100);
Max_Timer1=4;
}
#ifdef With_HID
void CRLF_HID()
{
*(&writebuff)=13;
*(&writebuff+1)=10;
*(&writebuff+2)=0;
while(!HID_Write(&writebuff,64));
}
#ifdef With_HID
void Send_Text_HID(char * msg )
{
strcpy(&writebuff, msg);
while(!HID_Write(&writebuff, 64));
}
void Send_CText_HID(const char * msgC )
{
strConstRamCpy(&writebuff,msgC);
while(!HID_Write(&writebuff, 64));
}
#endif
#endif
void Test_2_leds()
{
LD1 = 0; LD2 = 0; Delay_ms(250);
LD1 = 1; Delay_ms(250);
LD1 = 0; LD2 = 1; Delay_ms(250);
LD1 = 1; LD2 = 0; Delay_ms(250);
LD1 = 0; LD2 = 0;
}
void main()
{
// internal FOSC=8Mhz
OSCTUNE=0;
OSCTUNE.PLLEN = 1;
OSCCON.IDLEN=0;
OSCCON.IRCF2=1; // 8Mhz
OSCCON.IRCF1=1;
OSCCON.IRCF0=1;
//11 = Postscaled internal clock (INTRC/INTOSC derived)
// periferc idem as FOSC
OSCCON.SCS1=1;
OSCCON.SCS0=1;
while(OSCCON.OSTS==0);
Hardware_Init();
Drapeaux.First_Run=1;
ADC_Init();
Delay_ms(250);
// Initialize variables
k=0;
tmp = 0;
Vbray=0;
txt=&TEXTE[0];
i = 0;
UART2_Init(19200); // Initialize UART2 module
Delay_ms(100);
UART1_Init(19200);
UART1_Write(CLS);
Delay_ms(500);
CRLF1();
UART1_Write_CText("Projet : "Projet"\r\n");
UART1_Write_CText(Source"_"Version"c\r\n");
UART1_Write_CText("FOSC interne 8Mhz USB at 48MHz\r\n");
UART1_Write_CText("Uart1 19200 bds = Espion/debugging \r\n");
UART1_Write_CText("Uart2 19200 bds = MCU <--> ESP dialogue\r\n");
UART1_Write_CText("LCD 2x16 cars Tracage programme\r\n");
Test_2_leds() ;
// Initialize WiFI module
UART1_Write_CText("Init Wifi3 Power ON pendant 5sec \r\n" );
// Reset WIFI3
CH_PD=0;
GPIO15=1;
// verif Horloge FOSC via Delai et application delai pour POWER ON WIFI3
CRLF1();
UART1_Write('#');
CRLF1();
Delay_ms(5000);
CRLF1();
UART1_Write('$');
CRLF1();
CH_PD= 1;
GPIO15=1;
RAZ_UART2();
RAZ_UART1();
// Read_Msg_Eeprom(0x60);
txt=&TEXTE[0];
UART1_Write_CText("\r\nInit I2C2 at 400Khz\r\n");
LD1=1;
I2C2_Init(400000);
CRLF1();
LD1=0;
NbB=1;
NbC=1;
PWeb=&WebPage[0];
PBuffer1=&buffer1[0];
PBuffer2=&buffer2[0];
#ifdef test_Page_HTML
UART1_Write_CText("\r\n TEST PAGE HTML \r\n");
// refresh Datas
EA1=ADC_Read(1);
Degres1=(float)EA1*330/1024; // 10mV par degres C
sprintf(txt,"% 2.2f",Degres1);
memcpy(WebVar0+17,txt,5);
EA2=ADC_Read(2);
EA2=100; // 33°C forcé car entree analog non connecté au capteur
Degres2=(float)EA2*330/1024; // 10mV par degres C
sprintf(txt,"% 2.2f",Degres2);
memcpy(WebVar1+17,txt,5);
WebVar2[6]=BP1+48;
WebVar3[6]=BP2+48;
// mesure Float
Pourcent=92.7;
sprintf(CRam1,"% 2.1f",Pourcent);
WebVar4[6]= CRam1[0];
WebVar4[7]= CRam1[1];
WebVar4[8]=CRam1[2];
WebVar4[9]=CRam1[3];
//WebVar5[]="NbEchanges= xxxxx<br>";
NbC=63767;
WebVar5[12]= ((NbC/10000)%10) + 48;
WebVar5[13]= ((NbC/1000)%10) + 48;
WebVar5[14]= ((NbC/100)%10) + 48;
WebVar5[15]= ((NbC/10)%10) + 48;
WebVar5[16]= (NbC%10) + 48;
NbC=0;
// version Cpt compteur sur 8 bits
// WebVar4[6]=((Cpt/100)%10) + 48; // extrait centaines
// WebVar4[7]=((Cpt/10)%10) + 48; // extrait dizaines
// WebVar4[8]=(Cpt%10) + 48; // recupere Unites
// build WebPage
strConstRamCpy(PWeb,WebHead);
k=strlen(PWeb);
WordToStr(k,CRam1);
UART1_Write_CText("1_ ");UART1_Write_Text(CRam1);CRLF1();
strcat(PWeb+k,WebVar0);
k=strlen(PWeb);
WordToStr(k,CRam1);
UART1_Write_CText("2_ ");UART1_Write_Text(CRam1);CRLF1();
strcat(PWeb+k,WebVar1);
k=strlen(PWeb);
WordToStr(k,CRam1);
UART1_Write_CText("3_ ");UART1_Write_Text(CRam1);CRLF1();
strcat(PWeb+k,WebVar2);
k=strlen(PWeb);
WordToStr(k,CRam1);
UART1_Write_CText("4_ ");UART1_Write_Text(CRam1);CRLF1();
strcat(PWeb+k,WebVar3);
k=strlen(PWeb);
WordToStr(k,CRam1);
UART1_Write_CText("5_ ");UART1_Write_Text(CRam1);CRLF1();
strcat(PWeb+k,WebVar4);
k=strlen(PWeb);
WordToStr(k,CRam1);
UART1_Write_CText("6_ ");UART1_Write_Text(CRam1);CRLF1();
strcat(PWeb+k,WebVar5);
k=strlen(PWeb);
WordToStr(k,CRam1);
UART1_Write_CText("7_ ");UART1_Write_Text(CRam1);CRLF1();
strConstRamCpy(PWeb+k,WebTail);
IPD=48;
strConstRamCpy(msg,"AT+CIPSEND=x,");
msg[11]= IPD;
k=strlen(msg);
PageLen=strlen(PWeb);
WordToStr(PageLen,CRam1);
strcat(msg+k,Ltrim(CRam1));
UART1_Write_CText("Envoi msg : ");
UART1_Write_Text(msg);CRLF1();
UART1_Write_CText("Test envoi WebPage sur UART1 \r\n ");
UART1_Write_String(PWeb,512);CRLF1();
#endif
addr= LCD_ADR; // 0x74; // LCD 2119 2x16 car OK avec alim 3,3V
NbCarPL= 16;
k=check_device(addr) ;
CRLF1();
UART1_Write_CText("Init LCD 2119 2x16\r\n");
k=LCD2119_Init();
Delay_ms(50);
LCD_CLS();
Delay_ms(50);
// Presentation sur LCD
// LCD_RAZ_Ligne(1);
LCD_Write_CText_At(1,1,"18F87J50 F=8MHz");
LCD_Write_CText_At(2,1,"LCD2119 en I2C2");
Delay_ms(1500); // sans ce delai ,les 3 premiers caracteres sont bouffes sur le LCD
LCD_Write_CText_At(1,1,"MikroC 6.62 1603");
LCD_RAZ_Ligne(2);
Delay_ms(2000);
CRLF1();
Max_Timer0=2;
Max_Timer1=10;
Init_Timer1(); // 1 sec @ 8Mhz x Max_timer1
UART1_Write_CText("Init Interrupts\r\n" );
RC2IE_bit=1 ;
RC1IE_bit=1 ;
RC1IP_bit=1;
RC2IP_bit=1;
PEIE_bit=1;
RCON.IPEN = 1; // enable priority levels
PEIE_bit = 1; // Enable Peripheral interrupt
GIE_bit = 1; // Enable Global interrupt
#ifdef With_HID
// tests durees via timer0 ci-dessous ..OK
CRLF1();
UART1_Write_CText(" test Timer0 1sec *5 => 5sec\r\n" );
Max_Timer0=5;
Arme_Timer0();
UART1_Write("#"); CRLF1();
while( Flag_Timer0==0);
UART1_Write("@"); CRLF1();
#endif
// attention : HID terminal ne semble pas fonctionner avec carte 18F87J50 1/2 HS !
#ifdef With_HID
Max_Timer0=10;
UART1_Write_CText("Init HID USB link ..." );
HID_Enable(&readbuff,&writebuff); // Enable HID communication
UART1_Write_CText("..OK \r\n" );
// CRLF_HID() ;
//Send_CText_HID("\r\n Test fonctionalites HID USB \r\n") ;
while(1)
{
Max_Timer0=5;
UART1_Write_CText("Wait for data from HID USB Terminal\r\n" );
Init_Timer0();
while(!HID_Read() && (Flag_Timer0==0)); // wait for data on USB
if(Flag_Timer0==0)
{
k=strlen(&readbuff);
strcpy( txt,&readbuff);
strConstRamCpy( &writebuff,"Reception de: ");
while(!HID_Write(&writebuff,64));
strcpy( &writebuff,txt);
while(!HID_Write(&writebuff,64));
CRLF_HID();
if(strncmp(&readbuff,"LD1_ON",6)==0 )
{
LD1=1;
strConstRamCpy( &writebuff,"Fire LD1\r\n");
while(!HID_Write(&writebuff,64));
}
if(strncmp(&readbuff,"LD1_OFF",7)==0 )
{
LD1=0;
strConstRamCpy( &writebuff,"Shutdown LD1\r\n");
while(!HID_Write(&writebuff,64));
}
if(strncmp(&readbuff,"LD2_ON",6)==0)
{
LD2=1;
strConstRamCpy( &writebuff,"Fire LD2\r\n");
while(!HID_Write(&writebuff,64));
}
if(strncmp(&readbuff,"LD2_OFF",7)==0)
{
LD2=0;
strConstRamCpy( &writebuff,"Shutdown LD2\r\n");
while(!HID_Write(&writebuff,64));
}
}
}
#endif
// Configure WiFI module
UART1_Write_CText("Wifi3 Configure via UART2\r\n" );
// Configure WiFI module
LCD_Write_CText_At(1,1,"Wifi3 Configure ");
LCD_Write_CText_At(2,1," Step ");
WiFI_Configure();
Delay_ms(100);
LCD_Write_Text_At(2,1,"Fin d'init. ESP ");
UART1_Write_CText(" Fin d'init. ESP8266 \r\n");
Delay_ms(500);
CRLF1();
UART1_Write_CText("\r\n Attente connection SERVER pendant 60 x 5sec =>300 sec>\r\n");
LCD_CLS();
RAZ_UART1();
RAZ_UART2();
LCD_Write_Text_At(1,1,"Server connect. ");
LCD_Write_Text_At(2,1,"Essai Num: ");
i=0;
Max_Timer1=10;
Vbray=0;
i=0;
while(IPD==0)
{
IPD=0;
sprintf(msg,"Step %s \r\nSet Serveur port 80 : ",p );
UART1_Write_Text(msg);
RAZ_UART2();
// AT+ CIPSERVER= <mode>[,<port>]
// <mode> 0 Delete server (need to follow by restart)
// 1 Create server
// <port> port number, default is 333
// A Server can only be created when AT+CIPMUX=1
// A Server monitor will automatically be created when Server is created.
// When a client is connected to the server, it will take up one connectionCbe gave an id.
// p= Send_Cde_Test_response("AT+CIPSERVER=1,10001\r\n","OK");
// p= Send_Cde_Test_response("AT+CIPSERVER=1,23\r\n","OK");
Max_Timer1=3; // 1sec
p= Send_Cde_Test_response("AT+CIPSERVER=1,80\r\n","GET");
UART1_Write_CText("buffer2 :\r\n");
UART1_Write_String(buffer2,512);CRLF1();
strConstRamCpy( CRam1,"+IPD,");
p= strstr(buffer2,CRam1);
UART1_Write_String(p,100); CRLF1();
if (p>0)
{
IPD=*(p+5);
strConstRamCpy(CRam1,"recu IPD = ");
CRam1[10]=IPD; // IPD peut varier de 0 à4
LCD_Write_Text_At(2,1,CRam1);
UART1_Write_Text(CRam1);CRLF1();
if((IPD>=48) && (IPD<=52))
{
LCD_Write_CText_At(1,1,"Liaison SERVER OK");
// UART1_Write_Text(p);CRLF1();
strConstRamCpy(CRam1,"recu IPD = ");
CRam1[10]=IPD; // IPD peut varier de 0 à4
LCD_Write_Text_At(2,1,CRam1);
UART1_Write_Text(CRam1);CRLF1();
break;
}
else
{
strConstRamCpy(CRam1,"recu BAD IPD = ");
CRam1[14]=IPD; // IPD peut varier de 0 à4
UART1_Write_Text(CRam1);CRLF1();
IPD=0;
}
}
WordToStr(i,txt);
*(txt+5)=0;
UART1_Write_Text(txt);
UART1_Write(TAB); UART1_Write_String(buffer2,100);
CRLF1();
i++;
LCD_Write_Text_At(2,11,txt);
if (UART2_DataReady==2) RAZ_UART2();
if (i>=60) break; // 60*5=300 sec
EA1=ADC_Read(1);
Degres1=(float)EA1*330/1024; // 10mV par degres C
// Float2Ascii (Degres,txt,2);
sprintf(txt,"Tp.Ext= % 2.2f ",Degres1);
LCD_Write_Text_At(1,1,txt);
UART1_Write_Text(txt);CRLF1();
EA2=ADC_Read(2);
Degres2=(float)EA2*330/1024; // 10mV par degres C
// Float2Ascii (Degres,txt,2);
sprintf(txt,"Tp.Amb= % 2.2f ",Degres2);
LCD_Write_Text_At(2,1,txt);
UART1_Write_Text(txt);CRLF1();
RAZ_UART1();
Max_Timer1=10;
p= Send_Cde_Test_response("AT+CIPSERVER=0\r\n","OK");
Delay_ms(500);
Max_Timer1=20;
p= Send_Cde_Test_response("AT+RST\r\n","OK");
Delay_ms(1500);
Max_Timer1=20;
p= Send_Cde_Test_response("AT+CIPMUX=1\r\n","OK");
Delay_ms(500);
if (i>59)
{
UART1_Write_CText("\r\nProbleme de Liaison avec SERVER \r\n");
i=0;
do
{
LCD_Write_CText_At(1,1,"PB avec Server. ");
LCD_Write_CText_At(2,1,"Timeout=>Reset. ");
UART1_Write('.');
i++;
if((i%80)==0) CRLF1();
Delay_ms(2000);
LCD_CLS() ;
IPD=0;
}while(1);
}
i++;
} //while
i=0;
j=0;
// page 512 bytes maxi
Cpt=0;
Envoi_Status=0;
Pourcent=0.02;
while(1)
{
Max_Timer0=20;
Max_Timer1=20;
RAZ_UART1();
RAZ_UART2();
// local Display on LCD 2x16
LCD_Write_CText_At(1,1,"BP1 = BP2= ");
// LCD_Write_CText_At(2,1,"Temp Amb. ");
LCD_Write_CText_At(2,1,"Te Ta ");
// refresh Datas
EA1=ADC_Read(1);
Degres1=(float)EA1*330/1024; // 10mV par degres C
sprintf(txt,"% 2.2f",Degres1);
LCD_Write_Text_At(2,3,txt);
//unsigned char WebVar1[]="Temper. Ext :<br> 17.63 °C<br>";
memcpy(WebVar0+17,txt,5);
EA2=ADC_Read(2);
EA2=62; // simulee ici car non raccordé sur EA2
Degres2=(float)EA2*330/1024; // 10mV par degres C
sprintf(txt,"% 2.2f",Degres2);
LCD_Write_Text_At(2,12,txt);
//unsigned char WebVar1[]="Temper. Amb :<br> 17.63 °C<br>";
memcpy(WebVar1+17,txt,5);
LCD_Write_Chr_At(1,6,BP1+48);
LCD_Write_Chr_At(1,14,BP2+48);
WebVar2[6]=BP1+48;
WebVar3[6]=BP2+48;
// mesure 8 bits
// WebVar4[6]=((Cpt/100)%10) + 48; // extrait centaines
// WebVar4[7]=((Cpt/10)%10) + 48; // extrait dizaines
// WebVar4[8]=(Cpt%10) + 48; // recupere Unites
// mesure Float
// Pourcent=10.1;
sprintf(CRam1,"% 2.1f",Pourcent);
WebVar4[6]= CRam1[0];
WebVar4[7]= CRam1[1];
WebVar4[8]=CRam1[2];
WebVar4[9]=CRam1[3];
WebVar5[12]= ((NbC/10000)%10) + 48;
WebVar5[13]= ((NbC/1000)%10) + 48;
WebVar5[14]= ((NbC/100)%10) + 48;
WebVar5[15]= ((NbC/10)%10) + 48;
WebVar5[16]= (NbC%10) + 48;
// build WebPage
strConstRamCpy(WebPage,WebHead);
k=strlen(WebPage);
strcat(WebPage+k,WebVar0);
k=strlen(WebPage);
strcat(WebPage+k,WebVar1);
k=strlen(WebPage);
strcat(WebPage+k,WebVar2);
k=strlen(WebPage);
strcat(WebPage+k,WebVar3);
k=strlen(WebPage);
strcat(WebPage+k,WebVar4);
k=strlen(WebPage);
strcat(WebPage+k,WebVar5);
k=strlen(WebPage);
strConstRamCpy(WebPage+k,WebTail);
strConstRamCpy(msg,"AT+CIPSEND=x,");
msg[11]= IPD;
PageLen=strlen(WebPage);
WordToStr(PageLen,CRam1);
strcat(msg,Ltrim(CRam1));
RC2IE_bit=0;
UART1_Write_CText("Envoi msg : ");
UART1_Write_Text(msg);CRLF1();
UART2_Write_Text(msg); CRLF2();
Delay_ms(1000);
UART1_Write_String(WebPage,320); CRLF1();
UART2_Write_String(WebPage,320); //CRLF2();
RAZ_UART2();
Delay_ms(2000);
UART1_Write_CText("response: "); CRLF1(); // SEND OK ?
UART1_Write_String(buffer2,60); CRLF1();
RC2IE_bit=0;
buffer2[MAXLEN2-1]=0;
strConstRamCpy(msg,"SEND OK" );
p=strstr(buffer2,msg);
if (p>0)
{
Envoi_Status=0;
UART1_Write_CText("test ENVOI : ");
UART1_Write_String(p,8);
CRLF1();
// test OK
if ((*(p+5)=='O') && (*(p+6)=='K'))
{
Envoi_Status=1;
}
}
Delay_ms(1000);
LCD_Write_CText_At(1,1,"Close Web page ");
strConstRamCpy(msg,"AT+CIPCLOSE=x\r\n");
msg[12]=IPD;
UART1_Write_Text(msg);
RAZ_UART2();
UART2_Write_Text(msg);
Delay_ms(1500);
UART1_Write_String(buffer2,100);
CRLF1();
Delay_ms(1000);
// etat connection
Max_Timer1=3;
p= Send_Cde_Test_response("AT+CIPSTATUS\r\n","+CIP");
// UART1_Write_CText( "Test ETAT AT+CIPSTATUS\r\n");
// UART2_Write_CText( "AT+CIPSTATUS\r\n");
// RAZ_UART2();
// Delay_ms(600);
RC2IE_bit=0;
buffer2[MAXLEN2-1]=0;
strConstRamCpy(msg,"STATUS:" );
p=strstr(buffer2,msg);
//p=strtok(buffer2,msg);
//p=strtok(0,msg);
if (p>0)
{ k=strncmp(buffer2,"STATUS:3",8);
//if (k==0 )
//{
Web_Status='0';
UART1_Write_CText("check status : ");
UART1_Write_String(p,80); CRLF1();
Web_Status=*(p+7);
}
else
{
UART1_Write_CText("\r\nbad answer\r\n");
}
//strConstRamCpy(msg,"STATUS:?" );
//Web_Status= memcmp(buffer2,msg,8);
// gestion perte de connetion
if ((Web_Status=='3') && (Envoi_Status==1))
{
j=0;
if ( Drapeaux.First_Run==0) NbC++;
}
else
{
// Cpt=0;
j++;
}
if (j>3)
{
j=0;
Max_Timer1=8;
p= Send_Cde_Test_response("AT+CIPSERVER=0\r\n","OK");
p=0;
Max_Timer1=20;
p= Send_Cde_Test_response("AT+RST\r\n","OK");
p=0;
Max_Timer1=4;
p= Send_Cde_Test_response("AT+CIPMUX=1\r\n","OK");
p=0;
Max_Timer1=12; // 3sec
p=Send_Cde_Test_response("AT+CIPSERVER=1,80\r\n","GET");
p=0;
}
else
Delay_ms(2000);
NbB++;
// attendre la 1ere bonne connection
if ((Drapeaux.First_Run==1) && (NbB>10) && (Web_Status=='3') )
{
Drapeaux.First_Run=0;
NbB=10;
NbC=10;
Pourcent=0.0;
}
if (Drapeaux.First_Run==0)
{
Pourcent=((float) NbC * 100.0)/(float)NbB;
}
UART1_Write_CText("Nb essai j =");
UART1_Write(j+48);
UART1_Write_CText(" CIP STATUS = ");
UART1_Write(Web_Status);
UART1_Write_CText(" ENVOI STATUS = ");
UART1_Write(Envoi_Status+48);
UART1_Write_CText(" NbB =");
WordToStr(NbB ,CRam1);
UART1_Write_Text(CRam1);
UART1_Write_CText(" NbC =");
WordToStr(NbC ,CRam1);
UART1_Write_Text(CRam1);
UART1_Write_CText(" Taux % =");
Float2Ascii (Pourcent,CRam1,1) ;
UART1_Write_Text(CRam1);
CRLF1();
if(UART1_DataReady==1)
{
RAZ_UART2();
UART1_Write_CText("Envoi de : ");
UART1_Write_String(buffer1,40);
CRLF1();
UART2_Write_String(buffer1,40);
CRLF2();
Delay_ms(2500);
UART1_Write_String(buffer2,40);CRLF1();
RAZ_UART2();
RAZ_UART1();
}
if( UART1_DataReady==2)
{
UART1_Write_CText("\r\n Debordement Buffer1 UART1 \r\n");
UART1_Write_String(buffer1,60);
RAZ_UART1();
}
LD2 =!LD2; // clignote Led 2
} // while 1
}
/*
<title>WIFI3-Click</title><h2><br>Temper. Amb :<br> 28.03 °C<br>BP1 = 1<br>BP2 = 1<br></h2>
*/