将数据发送到WEB服务器:正在发送数据,但只发送一次

时间:2014-04-16 14:37:15

标签: mysql web arduino send

此代码将数据发送到我的服务器,在那里用PHP获取并发送到mysql。 主要的问题是,我使用了循环void loop(),但它只执行一次任务。如果我将重置Arduino,那么它会发送两次数据等等。我试图发送多个带有延迟的数据而没有一个循环,但是它反复发送数据,这是先发送的..帮助:)

#include <SPI.h>
#include <Ethernet.h>
#include <stdlib.h>        //Including libraries

int moi_int = 12;
int temp_int = 13;                         //doing some convertion                                   
int moi_int1 = moi_int %10;                                                                                   
int moi_int2 = moi_int - moi_int1;
int moi_int3 = moi_int2/10;
char moi1 = (char)(((int)'0')+moi_int1);
char moi2 = (char)(((int)'0')+moi_int3);
 int temp_int1 = temp_int %10;                                                                                   
int temp_int2 = temp_int - temp_int1;
int temp_int3 = temp_int2/10;
char temp1 = (char)(((int)'0')+temp_int1);     //convertion
char temp2 = (char)(((int)'0')+temp_int3);     

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };   
byte server[] = { my server };    
IPAddress ip(my ip);
EthernetClient client;


void setup() {
  Serial.begin(9600);  
}




void SendInfo()     //Info
{
     char string[29];        //Here is displayed by char some adress (data) I need to send    

 string[0] = 'G';  string[1] = 'E'; string[2] = 'T';     string[3] = ' ';     string[4] = '/';     string[5] = 'a';    string[6] = 'd';     string[7] = 'd';
     string[8] = '.';     string[9] = 'p';     string[10] = 'h';     string[11] = 'p';     string[12] = '?';     string[13] = 't';     string[14] = 'e';     string[15] = 'm';
     string[16] = 'p';     string[17] = '1';     string[18] = '=';     string[19] = temp2;     string[20] = temp1;     string[21] = '&';     string[22] = '&';     
     string[23] = 'm';     string[24] = 'o';     string[25] = 'i';     string[26] = '1';     string[27] = '=';     string[28] = moi2;     string[29] = moi1; 

     String adresas(string);    
     client.println(adresas);        //   Sending Data 
     client.print(" HTTP/1.1");
     client.println( "Host: my server" );
     client.println("Connection: close");
     client.println();  
}



void Connect()              //Connecting
{
  Ethernet.begin(mac, ip);
  delay(1000);
  if (client.connect(server, 80)) {                      
    delay(1000);
    SendInfo();
    delay(1000);
  }
  else  Serial.println("connection failed");  
}


void loop()              //Main Loop
{ 
Connect();                
}

1 个答案:

答案 0 :(得分:0)

您应该只在设置中调用begin()一次:

void setup() {
  ...
  Ethernet.begin() 

你打电话

client.connect(server, 80)

但从不匹配断开连接。您需要添加其中一个来清理连接:

if (client.connect(server, 80)) {                      
  ...
  client.stop();
}

另一种方法是在每个循环上重新使用先前打开的连接。

// open the connection if needed
if(!client.connected()) {
  client.connect(server, 80);
}

// ensure connection is available before trying to write
if(client.connected()) {
  // do something with connection
}

如果您要传输非常频繁的小数据,那么第二种方法更好,因为连接的打开/关闭浪费的时间更少。