faire un get via 3g

bonjour,

alors voila j ai un probleme dans mon code je pense car quand j envoie les commande manuel ca marche

mon code bloque apres Serial.println(port); Serial.flush();

car il est censé lire REQUEST et continuer mais rien ...

char data[1024];
int data_size;
int led = 13;
int onModulePin = 2;        // the pin to switch on the module (without press on button) 

int x = 0;

char server[ ]="www.google.lu";
char port[ ]="80";
void switchModule(){
    digitalWrite(onModulePin,HIGH);
    delay(2000);
    digitalWrite(onModulePin,LOW);
}

void setup(){

    Serial.begin(115200);                // UART baud rate
    delay(2000);
    pinMode(led, OUTPUT);
    pinMode(onModulePin, OUTPUT);
    switchModule();                    // switches the module ON

    for (int i=0;i< 5;i++){
        delay(5000);
    } 
    
  
    
    Serial.println("AT+CPIN=1234");     //active le code pin
    delay(8000);
      
    Serial.println("AT+CGDCONT=1,\"IP\",\"orange.lu\"");
    Serial.flush();
    while(Serial.read()!='K');  
    
}

void loop()
{

    Serial.print("AT+CHTTPACT=\""); //Connects with the HTTP server
    Serial.print(server);
    Serial.print("\",");
    Serial.println(port);        
    Serial.flush();
    
    x=0;
    do{
        while(Serial.available()==0);
        data[x]=Serial.read();  
        x++;  
    }while(!(data[x-1]=='T'&&data[x-2]=='S'));        //waits for response "REQUEST"
    
    Serial.println("GET /index.html HTTP/1.1");
    Serial.println("Host: www.google.lu");
    Serial.println("Content-Length: 0");
    Serial.write(0x1A);       //sends ++
    Serial.write(0x0D);
    Serial.write(0x0A);

  while(Serial.read()!='K');
  while(Serial.read()!=' ');

  data_size=0;  
  do{
    data_size*=10;
    data_size=data_size+(Serial.read()-0x30);
  }while(Serial.peek()!=0x0D);

  for(x=0;x< data_size;x++){
    data[x]=Serial.read();
  }

  Serial.print(data);

    while(1);
    
}

en manuel le code marche tres bien car j obtiens bien ce que je veux :

at+csq
+csq: 17,99

OK
AT+CGDCONT=1,"IP","orange.lu"
OK
AT+CHTTPACT="www.google.lu",80
+CHTTPACT: REQUEST
GET /index.html HTTP/1.1 Host: www.google.lu Content-Length: 0
OK

+CHTTPACT: DATA,1068
http/1.0 400 bad request
content-type: text/html; charset=utf-8
content-length: 925
date: thu, 10 may 2012 08:17:53 gmt
server: gfe/2.0

<!DOCTYPE html>
               <html lang=en>
                               <meta charset=utf-8>
                                                     <meta name=viewport content
="initial-scale=1, minimum-scale=1, width=device-width">
                                                          <title>Error 400 (Bad
Request)!!1</title>
                     <style>
                                *{margin:0;padding:0}html,code{font:15px/22px ar
ial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto
0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(/
/www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}
p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{b
order:0}@media screen and (max-width:772px){body{background:none;margin-top:0;ma
x-width:none;padding-right:0}}
                                </style>
                                          <a href=//www.google.com/><img src=//w
ww.google.com/images/errors/logo_sm.gif alt=Google></a>
                                                         <p><b>400.</b> <ins>Tha
t’s an error.</ins>
                       <p>Your client has issued a malformed or illegal request.
  <ins>That’s all we know.</ins>

+CHTTPACT: 0

bonjour,

bon je ne vois pas de chose anormal dans ton programme donc je ne serais pas te dire ce qui va pas, la vitesse est peut être inadapter? mais je ne crois, fait gaff avec le serial.println, il balance un fin de ligne + carriage return en fin de ce que tu envoie ce qui correspond a /r/n donc éssaye avec Serial.write(.. si tu veux mon avis.

Skizo !

le serial.println du port tu penses?

jai deja essayé de le modifier

c est une probleme avec request

car quand j enlève la verification de request ca va jusqu au get (ce qui est normal en meme tps)

du coup ca vient d avant ....

en gros un commentaire pour rien dire mais la flemme de l effacer

bonjour,
as tu essayé de remplacer

char server[ ]="www.google.lu";

par

char server[ ]={74,125,132,94};

je test ; )

non ca marche pas :confused:

c est ma réponse dans le sérial monitor

pour l instant jai rajouté la commande at+cgauth

plus que a avoir pourquoi jai pas la bonne réponse :wink:

AT+CPIN=1234
AT+CGAUTH=1,1,,
AT+CGDCONT=1,"IP","orange.lu"
AT+CHTTPACT="www.google.lu",80
GET /index.html HTTP/1.1
Host: www.google.lu
Content-Length: 0


ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÑå

je n'ai pas tout compris, mais prend garde au terminal, parfois ta donnée est juste, elle est juste mal traduite et tu peut avoir des caractère bizarre alors que ta variable est niquel..

Skizo !

tu me conseil quoi alors pour vérifier

jai testé avec hypertherminal

mais a mon avis il ya un probleme avec la réponse

djo54150:
tu me conseil quoi alors pour vérifier

je dirais que le mieux serait d'interroger un server perso et regarder les logs apache avec une page toute bête.

ba déja quel le type de ce que tu veux? char? byte? int?

parce que si j'ai bien vue tu à des caractère bizarre ici:

    Serial.println("Host: www.google.lu");
    Serial.println("Content-Length: 0");
    Serial.write(0x1A);       //apartir d'ici
    Serial.write(0x0D);
    Serial.write(0x0A);

donc c'st que ton 0x1A etc s'affiche mal, donc c'est la qu'il va falloir essayer, j'ai tester ça pour toi:

Serial.write(byte(0x0D)); donne rien
Serial.write(0x0D+48); donne "="
Serial.write(0x0D); donne rien

.. déjà la on est mal tu vois donc cherche par la..

la réponse est juste mais je dois mal la traité

avez vous un moyen simple de l afficher

a la ligne:

data[x]=Serial.read();

tu peut tenter de faire un cast byte ou char comme ça:

data[x]=char(Serial.read()); 
ou
 data[x]=byte(Serial.read());

je propose des truc comme ça ^^

Skizo !

Ce que tu reçois au final c'est une page web c'est ça? et tu comptait l'afficher comment? sur le terminal?

Skizo !

quand ca marche sur le terminal j obtiens ca

+CHTTPACT: DATA,1068
http/1.0 400 bad request
content-type: text/html; charset=utf-8
content-length: 925
date: tue, 08 may 2012 07:48:01 gmt
server: gfe/2.0

<!DOCTYPE html>
<html lang=en>
<meta charset=utf-8>
<meta name=viewport content
="initial-scale=1, minimum-scale=1, width=device-width">
<title>Error 400 (Bad
Request)!!1</title>
<style>
*{margin:0;padding:0}html,code{font:15px/22px ar
ial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto
0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(/
/www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}
p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{b
order:0}@media screen and (max-width:772px){body{background:none;margin-top:0;ma
x-width:none;padding-right:0}}
</style>
<a href=//www.google.com/><img src=//w
ww.google.com/images/errors/logo_sm.gif alt=Google></a>
<p><b>400.</b> <ins>Tha
t’s an error.</ins>
<p>Your client has issued a malformed or illegal request.
<ins>That’s all we know.</ins>

+CHTTPACT: 0

mais la c est en manuel :wink:

pour l instant j affiche dans le terminal mais par la suite je ferai autrment c est pour tester

bon c'est que de l'ascii essaye le caste char(ton caractère) et surtout essaie de mettre ça dans un string et de l'afficher ça passera surement mieux.

Skizo !

non mais j avais un pb de configuration avec AT+CGAUTH=1,1,,

et il sert a rien car en manuel ca marche sans

par contre si je le met jai erreur 227 ( erreur reseau)

donc je l enleve mais la il bloque à AT+CHTTPACT="www.google.lu",80

il doit y avoir une erreur avec les ""

je vais te mettre un resumé des commande en manuel avec lesquelles le programme marche:

AT+CPIN=1234

AT+CGDCONT=1,"IP","orange.lu" (répond ok)
AT+CHTTPACT="www.google.lu",80 (répond request)
GET /index.html HTTP/1.1 Host: www.google.lu Content-Length: 0 (répond ok apres appuie de ctrl+z donc 0x0A)