Arduino ile iyi güzel post yapabiliyorum.Ancak data belirli bir uzunluğu aşınca bir sorun çıkıyor ve post yapmadığı gibi hiç bir html sayfası göstermiyor.Bunun nedenini anlayamadım.Bir şekilde uzunca bir data göndermem gerekiyor. void httpsendRequest(){ if (client.connect(server, 80)) { String data1=“Finish=1&Data0=52&Data1=24&Data2=66&Data3=39&Data4=38&Data5=26&Data6=11&Data7=3&Data8=100&Data9=10”; client.println(“POST / HTTP/1.1”); client.println(“Host: arduinocontrol.somee.com”); client.println(“User-Agent: Arduino/1.0”); client.println(“Connection: close”); client.println(“Content-Type: application/x-www-form-urlencoded;”); client.print("Content-Length: "); client.println(data1.length()); client.println(); client.println(data1); delay(5000); Serial.println(“Data Send”); }} Bu kod Data9=10 eklediğimde çalışmıyor.Geri dönen html sayfasını void loop(){ while(client.available()) { char c = client.read(); Serial.write(c); } şeklinde okuyorum ancak Data9 dan itibaren html okumuyor ve post yapmıyor.
sunucu tarafında gelen post satırını bir yerlere kaydedin bakın satır tam geliyormu belki siz sunucu tarafında data9 tanımlanmadığı için gelmiyor sanıyorsunuz… network trafiğini izleyen bir yazılımla attığınız paketi bir inceleyin yada…
şimdi sorunun onunla ilgili olmadığını biliyorum çünkü Unity3D den de post yaptım ve 20 tane deneme için Data isimleriyle gönderdim.İstediğim sonucu aldım.Sorunun arduino tarafında olduğunu düşünüyorum daha çok.Post yapamıyor bu sayıda data olunca tek gördüğüm bu.Data ismi tanımlı olmasada başka bir hata verir html olarak görebilirim yada hatalı göndersem her şekilde hata geri döner ama bunda hiç bir şey öğrenemiyorum.Post göndermediğini gözlemliyorum.
benim aklıma gelen data1.lenght() fonksionu eksik hesap yapıyor sanki. data1.uzunluğunu elle sayın birde fonksiyonun hesapladığının karşılaştırın. 1-2 byte eksik hesaplasa sondaki dataları görmez…
şurada dediğine göre 90 char dan uzun postlar gitmiyormuş http://forum.arduino.cc/index.php?topic=161642.0 gidiyor diyen de var mega da gidiyormuş due de gitmiyormuş filan. sizin post ettiğiniz dataları kısaltın gerekirse String data1=“Finish=1&Data0=52&Data1=24&Data2=66&Data3=39&Data4=38&Data5=26&Data6=11&Data7=3&Data8=100&Data9=10”; yerine şunu yollayabiliyorsanız olur sanki… String data1=“F=1&D0=52&D1=24&D2=66&D3=39&D4=38&D5=26&D6=11&D7=3&D8=100&D9=10”;
Evet onu yaptım tabi 180 datam var benim normalde nasıl gönderildiğini paylaşayım byte byte gönderebiliyorsunuz. void httpsendRequest(){ client.stop(); Serial.print(F(“Connecting..”)); if (client.connect(server, 80)) { String data=“F=1&D0=230&D1=34&D2=34&D3=35&D4=35&D5=35&D6=35&D7=24&D8=37&D9=38&D10=38..D180”//istediğiniz kadar uzun olabilir. client.println(“POST /Graph.aspx HTTP/1.1”); client.print("Host: "); client.println(server); client.println(“Connection: close”); client.println(“Content-Type: application/x-www-form-urlencoded”); client.print("Content-Length: "); client.println(data.length()); client.println(); //client.println(data); int x = data.length(), i=0,j; const char * charptr=data.c_str(); // get access to the internal c_str of data. while (ix) j = x - i;
client.write(&charptr[i],j); // starting at charptr[i] send then next j bytes.
i = i + j;
}
Serial.print(F(“Send”));
}
else{
Serial.print(F(“error”));
}