Commit fb352dd1eaa789706ec1175eb15f0e9dc112127b

Authored by aknockae
1 parent ff945ba6

programme terminé, communication série et websockets opérationnelle

Showing 1 changed file with 30 additions and 31 deletions   Show diff stats
@@ -18,7 +18,7 @@ @@ -18,7 +18,7 @@
18 #define WAIT_DELAY 50 18 #define WAIT_DELAY 50
19 19
20 20
21 -#define SERIAL_DEVICE "/dev/ttyACM0" 21 +#define SERIAL_DEVICE "/dev/ttyUSB0" //utiliser USB0 pour le shield Xbee branché en USB
22 22
23 /*****************************************************************************/ 23 /*****************************************************************************/
24 /**********************PARTIE WEBSOCKETS + COM SERIE**************************/ 24 /**********************PARTIE WEBSOCKETS + COM SERIE**************************/
@@ -26,17 +26,19 @@ @@ -26,17 +26,19 @@
26 26
27 //Fonction qui retourne un tableau de char, chaque char correspondant à une donnée d'un capteur 27 //Fonction qui retourne un tableau de char, chaque char correspondant à une donnée d'un capteur
28 28
29 -char * getDataFromSensors(char *request,int sizeOfRequest) 29 +char * getDataFromSensors(char *request,int sizeOfRequest,int sd)
30 { 30 {
31 - int sd=serialOpen(SERIAL_DEVICE,SERIAL_BOTH);  
32 - serialConfig(sd,B9600);  
33 31
34 int i; 32 int i;
35 - char *reponse = NULL; 33 + //la réponse est récupérée sous un type charactère non signé. Il est possible de la stocker dans un charactère signé, mais la valeur affichée par un printf sera différente
  34 + unsigned char *reponse = NULL;
  35 + reponse = malloc(4*sizeof(unsigned char));
  36 +
36 37
37 //On envoie le GET au FPGA pour récupérer les données 38 //On envoie le GET au FPGA pour récupérer les données
38 for(i = 0; i < sizeOfRequest;i++) 39 for(i = 0; i < sizeOfRequest;i++)
39 { 40 {
  41 +
40 if(write(sd,(void*)&request[i],sizeof(char))!=1) 42 if(write(sd,(void*)&request[i],sizeof(char))!=1)
41 { 43 {
42 perror("main.write"); exit(-1); 44 perror("main.write"); exit(-1);
@@ -45,20 +47,20 @@ char * getDataFromSensors(char *request,int sizeOfRequest) @@ -45,20 +47,20 @@ char * getDataFromSensors(char *request,int sizeOfRequest)
45 47
46 printf("\nReponse : "); 48 printf("\nReponse : ");
47 49
48 - reponse = malloc(3*sizeof(char)); 50 + //NE PAS OUBLIER DE LIBERER LA MEMOIRE EN DEHORS DE LA FONCTION
49 51
50 - for(i=0;i < 3;i++)  
51 - {  
52 - if(read(sd,(void*)&reponse[i],sizeof(char))!=1) 52 + for(i=0;i < 4;i++)
  53 + { //on lit ce que nous envoie l'arduino à la suite de la requete GET
  54 + if(read(sd,(void*)&reponse[i],sizeof(unsigned char))!=1)
53 { 55 {
54 perror("main.read"); exit(-1); 56 perror("main.read"); exit(-1);
55 } 57 }
56 } 58 }
57 - printf("\nTemperature : %d",reponse[1]);  
58 - printf("\nPressure : %d",reponse[0]);  
59 - printf("\nHumidity : %d\n",reponse[2]); 59 + printf("\nTemperature (C) : %d",reponse[1]);
  60 + printf("\nPression (hPa) : %d",reponse[0]+845);
  61 + printf("\nHumidite (pourcents) : %d",reponse[2]);
  62 + printf("\nLuminosité : %d\n",reponse[3]);
60 63
61 - serialClose(sd);  
62 64
63 return reponse; 65 return reponse;
64 } 66 }
@@ -74,15 +76,16 @@ static int callback_my(struct libwebsocket_context * this, struct libwebsocket * @@ -74,15 +76,16 @@ static int callback_my(struct libwebsocket_context * this, struct libwebsocket *
74 { 76 {
75 static char *requete = NULL; 77 static char *requete = NULL;
76 static char *reponse = NULL; 78 static char *reponse = NULL;
77 - static int msize=0; 79 + //Initialisation com Serie
  80 + int sd=serialOpen(SERIAL_DEVICE,SERIAL_BOTH);
  81 + serialConfig(sd,B9600);
78 82
79 switch(reason) 83 switch(reason)
80 { 84 {
81 - char test[2];  
82 case LWS_CALLBACK_ESTABLISHED: 85 case LWS_CALLBACK_ESTABLISHED:
83 printf("connection established\n"); 86 printf("connection established\n");
84 requete=NULL; 87 requete=NULL;
85 - // Declenchement d'un prochain envoi au navigateur 88 + // Declenchement d'un prochain envoi au navigateur
86 libwebsocket_callback_on_writable(this,wsi); 89 libwebsocket_callback_on_writable(this,wsi);
87 break; 90 break;
88 91
@@ -96,28 +99,21 @@ static int callback_my(struct libwebsocket_context * this, struct libwebsocket * @@ -96,28 +99,21 @@ static int callback_my(struct libwebsocket_context * this, struct libwebsocket *
96 perror("callback_my.malloc"); exit(EXIT_FAILURE); 99 perror("callback_my.malloc"); exit(EXIT_FAILURE);
97 } 100 }
98 101
99 - memcpy(requete+LWS_SEND_BUFFER_PRE_PADDING,in,len); 102 + memcpy(requete,in,len);
100 // Declenchement d'un prochain envoi au navigateur 103 // Declenchement d'un prochain envoi au navigateur
101 - msize=len;  
102 libwebsocket_callback_on_writable(this,wsi); 104 libwebsocket_callback_on_writable(this,wsi);
103 break; 105 break;
104 106
105 case LWS_CALLBACK_SERVER_WRITEABLE: 107 case LWS_CALLBACK_SERVER_WRITEABLE:
106 - // Ici sont envoyes les messages au navigateur  
107 - //Si la requete a pour valeur GET, on envoie les donnée au site  
108 - printf("entree dans envoie");  
109 - 108 + // Ici sont envoyes les messages au navigateur
  109 + //Si la requete a pour valeur GET, on envoie les donnée au site
  110 +
110 if(requete!= NULL) 111 if(requete!= NULL)
111 { 112 {
112 - char *test = requete + LWS_SEND_BUFFER_PRE_PADDING;  
113 - printf("entree dans envoir->requete");  
114 - printf("Message : %c%c%c\n",test[0],test[1],test[2]);  
115 - if(test[0] == 'G' && test[1] == 'E' && test[2] == 'T') 113 + if(requete[0] == 'G' && requete[1] == 'E' && requete[2] == 'T')
116 { 114 {
117 - reponse = malloc(3*sizeof(char));  
118 - reponse[0] = 'a';reponse[1] = 'b'; reponse[2] = 'c';  
119 - printf("\nSending : %c%c%c",reponse[0],reponse[1],reponse[2]);  
120 - int length = 3; 115 + reponse = getDataFromSensors(requete,3,sd);
  116 + int length = 4;
121 unsigned char *buf = malloc(LWS_SEND_BUFFER_PRE_PADDING + length + LWS_SEND_BUFFER_POST_PADDING); 117 unsigned char *buf = malloc(LWS_SEND_BUFFER_PRE_PADDING + length + LWS_SEND_BUFFER_POST_PADDING);
122 memcpy (buf + LWS_SEND_BUFFER_PRE_PADDING, reponse, length ); 118 memcpy (buf + LWS_SEND_BUFFER_PRE_PADDING, reponse, length );
123 libwebsocket_write(wsi, buf + LWS_SEND_BUFFER_PRE_PADDING, length, LWS_WRITE_BINARY); //LWS_WRITE_TEXT 119 libwebsocket_write(wsi, buf + LWS_SEND_BUFFER_PRE_PADDING, length, LWS_WRITE_BINARY); //LWS_WRITE_TEXT
@@ -132,6 +128,7 @@ static int callback_my(struct libwebsocket_context * this, struct libwebsocket * @@ -132,6 +128,7 @@ static int callback_my(struct libwebsocket_context * this, struct libwebsocket *
132 default: 128 default:
133 break; 129 break;
134 } 130 }
  131 + serialClose(sd);
135 return 0; 132 return 0;
136 } 133 }
137 134
@@ -170,7 +167,8 @@ int main(void){ @@ -170,7 +167,8 @@ int main(void){
170 info.uid=-1; 167 info.uid=-1;
171 struct libwebsocket_context *context=libwebsocket_create_context(&info); 168 struct libwebsocket_context *context=libwebsocket_create_context(&info);
172 169
173 - //Initialisation com Serie 170 +
  171 +
174 172
175 173
176 if(context==NULL) 174 if(context==NULL)
@@ -187,6 +185,7 @@ int main(void){ @@ -187,6 +185,7 @@ int main(void){
187 libwebsocket_service(context,WAIT_DELAY); 185 libwebsocket_service(context,WAIT_DELAY);
188 } 186 }
189 libwebsocket_context_destroy(context); 187 libwebsocket_context_destroy(context);
  188 +
190 return 0; 189 return 0;
191 190
192 } 191 }