Bonjour,
J'ai une board équipé d'une SIM808, et je suis en train de mettre en place le système d'api de mon programme.
Les api sont déjà créer et fonctionnel sur le serveur http (Postman envoi et reçois sans problème).
Cependant, avec les fonctions que j'ai créées, je ne reçois pas de réponse du serveur lors de mon post, alors qu'il y en a une.
La fonction pour le POST :
la fonction pour le GET :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 int8_t post_http(char *url, char *data) { char buffer[200]; int8_t answer, success = 0; if ((answer = sendATcommand("AT+HTTPPARA=\"CID\",1\r\n", "OK", NULL, NULL, 5000, 1)) == 1) // Sets CID parameter { sendATcommand("AT+HTTPPARA=\"CONTENT\",\"application/json\"\r\n", "OK", NULL, NULL, 5000, 1); snprintf(buffer, sizeof(buffer), "AT+HTTPPARA=\"URL\",\"%s\"\r\n", url); // Sets url sendATcommand(buffer, "OK", NULL, NULL, 3000, 1); delay_ms(3000); snprintf(buffer, sizeof(buffer), "AT+HTTPDATA=%d,120000\r\n", strlen(data)); //Précise le nombre de bytes a récupérer, et le temps max (bytes,temps) sendATcommand(buffer, "DOWNLOAD", NULL, NULL, 1000, 1); snprintf(buffer, sizeof(buffer), "%s\r\n", data); //Chargement du buffer a envoyer sendATcommand(buffer, "OK", NULL, NULL, -1, 1); delay_s(1); answer = sendATcommand("AT+HTTPACTION=1\r\n", "OK", "200", NULL, 10000000, 1); //Envoi du buffer delay_s(5); if (answer == 1 || answer == 2) //200 Success { sendATcommand("AT+HTTPREAD\r\n", "+HTTPREAD", NULL, NULL, -1, 1); //Mode reception readline(3000, 1); //Lecture de la réponse du serveur success = 1; } else printf("POST HTTP : server unavaible\r\n"); } return (success); }
la fonction pour lire le retour :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 int8_t get_http(char *url, char *data) { char buffer[250]; int8_t answer, success = 0; if ((answer = sendATcommand("AT+HTTPPARA=\"CID\",1\r\n", "OK", NULL, NULL, 5000, 1)) == 1) { snprintf(buffer, sizeof(buffer), "AT+HTTPPARA=\"URL\",\"%s\"\r\n", url); sendATcommand(buffer, "OK", NULL, NULL, 2000, 1); sendATcommand("AT+HTTPACTION=0\r\n", "200", NULL, NULL, 10000000, 1); delay_s(5); sendATcommand("AT+HTTPREAD\r\n", "+HTTPREAD", NULL, NULL, 1000, 1); success = readline(3000, 1); } return (success); }
Voici l’exécution :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 uint8_t readline(uint16_t timeout) { uint8_t buffer[255]; usart_read_buffer_wait(&usart_instance_sim808, &buffer, 255); printf("%s", buffer); return (1); }
Je vois dans la datasheet de la sim808, page 261 "Read data when AT+HTTPACTION=0 or AT+HTTPDATA is executed.". Cela signifie que je ne peux pas recevoir de réponse du serveur quand je suis dans le mode "POST" (HTTPACTION=1) ?Usart init
AT+CSQ
+CSQ: 20,0
OK
module is on
AT+CPIN?
+CPIN: READY
OK
AT+SAPBR=3,1,"CONTYPE","GPRS"
OK
AT+SAPBR=3,1,"APN","free"
OK
AT+SAPBR=2,1
+SAPBR: 1,1,"10.128.xxx.x" // c'est moi qui ai mis les 'x'
OK
AT+HTTPINIT
OK
http initialized
AT+HTTPPARA="CID",1
OK
AT+HTTPPARA="URL","http://2xx.xxx.xxx.xx:xxxx/api/url/xxxx"
OK
AT+HTTPPARA="CONTENT","application/json"
OK
AT+HTTPDATA=104,120000
DOWNLOAD
OK
AT+HTTPACTION=1
OK
/* HTTPREAD est ici ! mais rien reçu :(
*/
AT+SAPBR=0,1
http ended
Merci d'avance ! :)
Partager