使用GPRS使用arduino GSM模块将数据发送到Web

时间:2017-05-29 08:25:58

标签: web arduino gsm

private void showWithClickHandling() {
    Notify.show(new NotifyItem()
            .setTitle("Notification can be also clicked")
            .setBody("Click here to navigate to project's GitHub page")
            .setIcon(new ThemeResource("images/github.png"))
            .setClickListener(e -> {
                Page.getCurrent().setLocation(GITHUB_URL);
            }));
}

我甚至不理解代码,但我明白了这个想法,当我试图将数据发布到网络上时,它无法正常工作我不知道它有什么问题 我正在收回网页内容,但我无法将数据发布到网上 我尝试了get和post方法,但没有给我带来好运

1 个答案:

答案 0 :(得分:0)

你在代码中提出的http请求有一些错误。你不能像你一样从arduino请求。

当使用000webhost用于数据库时,最好的方法是使用PHP。你可以通过选择文件管理器上传PHP文件,然后选择“立即上传文件”。在那里有一个名为“public_html”的文件夹“,这是PHP代码的上传地点。

现在这就是你想要做的。你想创建一个PHP代码,当你请求这个php代码的URL时,它将对数据库执行插入操作。然后你可以从arduino请求这个链接来执行插入。

PHP代码是(请在提供的代码位置提供您的用户名,密码,dbname,表名,列名,并按上述说明上传):

<?php
$servername = "localhost";
$username = "provide your username here";
$password = "password here";
$dbname = "database name here";

// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}



$sql = "INSERT INTO table_name (column_name) VALUES ('".mysqli_real_escape_string($conn,$_GET['sensor1'])."')";

if (mysqli_query($conn, $sql)) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}

mysqli_close($conn);
?>

获取上传的PHP代码的URL(右键单击上传的文件并单击视图,然后在浏览器中复制URL)。您可以在Arduino草图中使用它。

你的arduino代码看起来应该是这样的(这个草图中的URL是不完整的,用上面说的[http://afridiofkh.000webhostapp.com/phpfilename.php替换它取而代之。这是要替换的那个。从http开始直到?标记被替换] ):

#include <SoftwareSerial.h>
SoftwareSerial GSM(9, 10); // RX, TX
int sensor=5;

enum _parseState {
PS_DETECT_MSG_TYPE,

PS_IGNORING_COMMAND_ECHO,

PS_HTTPACTION_TYPE,
PS_HTTPACTION_RESULT,
PS_HTTPACTION_LENGTH,

PS_HTTPREAD_LENGTH,
PS_HTTPREAD_CONTENT
};

byte parseState = PS_DETECT_MSG_TYPE;
char buffer[130],url[130]; //adjust as your url length
 byte pos = 0;

 int contentLength = 0;

 void resetBuffer() {
  memset(buffer, 0, sizeof(buffer));
  pos = 0;
 }

  void sendGSM(const char* msg, int waitMs = 500) {
  GSM.println(msg);
 delay(waitMs);
 while(GSM.available()) {
  parseATText(GSM.read());
   }
   }

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

  sendGSM("AT+SAPBR=3,1,\"APN\",\"zongwap\"");  
 sendGSM("AT+SAPBR=1,1",300);
sendGSM("AT+HTTPINIT");  
sendGSM("AT+HTTPPARA=\"CID\",1");
sprintf(url, "AT+HTTPPARA=\"URL\",\"http://afridiofkh.000webhostapp.com/phpfilename.php?sensor1=%d\"",sensor);
  sendGSM(url);
  sendGSM("AT+HTTPACTION=0"); 
  }

void loop()
   {  
   while(GSM.available()) {
    parseATText(GSM.read());
    }
   }

  void parseATText(byte b) {

 buffer[pos++] = b;

    if ( pos >= sizeof(buffer) )
    resetBuffer(); // just to be safe

   /*
  // Detailed debugging
    Serial.println();
   Serial.print("state = ");
   Serial.println(state);
   Serial.print("b = ");
   Serial.println(b);
  Serial.print("pos = ");
  Serial.println(pos);
  Serial.print("buffer = ");
  Serial.println(buffer);*/

  switch (parseState) {
  case PS_DETECT_MSG_TYPE: 
    {
  if ( b == '\n' )
    resetBuffer();
  else {        
    if ( pos == 3 && strcmp(buffer, "AT+") == 0 ) {
      parseState = PS_IGNORING_COMMAND_ECHO;
    }
    else if ( b == ':' ) {
      //Serial.print("Checking message type: ");
      //Serial.println(buffer);

      if ( strcmp(buffer, "+HTTPACTION:") == 0 ) {
        Serial.println("Received HTTPACTION");
        parseState = PS_HTTPACTION_TYPE;
      }
      else if ( strcmp(buffer, "+HTTPREAD:") == 0 ) {
        Serial.println("Received HTTPREAD");            
        parseState = PS_HTTPREAD_LENGTH;
      }
      resetBuffer();
    }
  }
}
break;

   case PS_IGNORING_COMMAND_ECHO:
     {
     if ( b == '\n' ) {
    Serial.print("Ignoring echo: ");
    Serial.println(buffer);
    parseState = PS_DETECT_MSG_TYPE;
    resetBuffer();
  }
}
break;

  case PS_HTTPACTION_TYPE:
   {
  if ( b == ',' ) {
    Serial.print("HTTPACTION type is ");
    Serial.println(buffer);
    parseState = PS_HTTPACTION_RESULT;
    resetBuffer();
  }
}
break;

 case PS_HTTPACTION_RESULT:
   {
  if ( b == ',' ) {
    Serial.print("HTTPACTION result is ");
    Serial.println(buffer);
    parseState = PS_HTTPACTION_LENGTH;
    resetBuffer();
  }
}
break;

  case PS_HTTPACTION_LENGTH:
  {
  if ( b == '\n' ) {
    Serial.print("HTTPACTION length is ");
    Serial.println(buffer);

    // now request content
    GSM.print("AT+HTTPREAD=0,");
    GSM.println(buffer);

    parseState = PS_DETECT_MSG_TYPE;
    resetBuffer();
  }
}
break;

  case PS_HTTPREAD_LENGTH:
    {
  if ( b == '\n' ) {
    contentLength = atoi(buffer);
    Serial.print("HTTPREAD length is ");
    Serial.println(contentLength);

    Serial.print("HTTPREAD content: ");

    parseState = PS_HTTPREAD_CONTENT;
    resetBuffer();
  }
}
break;

   case PS_HTTPREAD_CONTENT:
    {
  // for this demo I'm just showing the content bytes in the serial monitor
  Serial.write(b);

  contentLength--;

  if ( contentLength <= 0 ) {

    // all content bytes have now been read

    parseState = PS_DETECT_MSG_TYPE;
    resetBuffer();
  }
}
break;
 }
}

这将根据需要执行插入操作.PHP很容易,因为它可以用来扩展操作。