使用arduino GSM模块通过GPRS向web发送数据 #包括 软件串行GSM(9,10);//接收,发送 int传感器=5; 枚举状态{ PS\u检测\u消息\u类型, PS\u忽略命令\u ECHO, PS_HTTPACTION_类型, PS_HTTPACTION_结果, PS_HTTPACTION_长度, PS_HTTPREAD_长度, PS_HTTPREAD_内容 }; byte parseState=PS\u DETECT\u MSG\u TYPE; 字符缓冲区[80]; 字节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); 延迟(waitMs); while(GSM.available()){ parseATText(GSM.read()); } } 无效设置() { 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”); sendGSM(“AT+HTTPPARA=\“URL\”,\”http://afridiofkh.000webhostapp.com? sensor1=“”+传感器+“\”); sendGSM(“AT+HTTPACTION=0”); } void循环() { while(GSM.available()){ parseATText(GSM.read()); } } void parseATText(字节b){ 缓冲区[pos++]=b; 如果(位置>=sizeof(缓冲区)) resetBuffer();//为了安全起见 /* //详细调试 Serial.println(); Serial.print(“state=”); 序列号println(州); Serial.print(“b=”); 序列号println(b); Serial.print(“pos=”); 串行打印LN(pos); Serial.print(“buffer=”); 串行打印LN(缓冲区)*/ 开关(解析状态){ 案例PS\U检测\U消息\U类型: { 如果(b=='\n') resetBuffer(); 否则{ 如果(位置==3&&strcmp(缓冲区,“AT+”)==0){ parseState=PS\u忽略命令\u ECHO; } else如果(b==':'){ //串行打印(“检查消息类型:”); //串行打印LN(缓冲区); if(strcmp(缓冲区“+HTTPACTION:”)==0){ Serial.println(“收到的HTTPACTION”); parseState=PS_HTTPACTION_类型; } 否则如果(strcmp(缓冲区“+HTTPREAD:”)==0){ Serial.println(“收到的HTTPREAD”); parseState=PS\u HTTPREAD\u长度; } resetBuffer(); } } } 打破 案例PS\U忽略\U命令\U回显: { 如果(b=='\n'){ Serial.print(“忽略回音:”); 串行打印LN(缓冲区); parseState=PS\u DETECT\u MSG\u TYPE; resetBuffer(); } } 打破 案例PS_HTTPACTION_类型: { 如果(b==','){ 串行打印(“HTTPACTION类型为”); 串行打印LN(缓冲区); parseState=PS_HTTPACTION_结果; resetBuffer(); } } 打破 案例PS_HTTPACTION_结果: { 如果(b==','){ 串行打印(“HTTPACTION结果为”); 串行打印LN(缓冲区); parseState=PS_HTTPACTION_长度; resetBuffer(); } } 打破 案例PS_HTTPACTION_长度: { 如果(b=='\n'){ 串行打印(“HTTPACTION长度为”); 串行打印LN(缓冲区); //现在请求内容 GSM.print(“AT+HTTPREAD=0,”); GSM.println(缓冲区); parseState=PS\u DETECT\u MSG\u TYPE; resetBuffer(); } } 打破 外壳PS_HTTPREAD_长度: { 如果(b=='\n'){ contentLength=atoi(缓冲区); 串行打印(“HTTPREAD长度为”); Serial.println(contentLength); Serial.print(“HTTPREAD内容:”); parseState=PS_HTTPREAD_内容; resetBuffer(); } } 打破 案例PS_HTTPREAD_内容: { //对于这个演示,我只是在串行监视器中显示内容字节 串行写入(b); 内容长度--; 如果(contentLength

使用arduino GSM模块通过GPRS向web发送数据 #包括 软件串行GSM(9,10);//接收,发送 int传感器=5; 枚举状态{ PS\u检测\u消息\u类型, PS\u忽略命令\u ECHO, PS_HTTPACTION_类型, PS_HTTPACTION_结果, PS_HTTPACTION_长度, PS_HTTPREAD_长度, PS_HTTPREAD_内容 }; byte parseState=PS\u DETECT\u MSG\u TYPE; 字符缓冲区[80]; 字节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); 延迟(waitMs); while(GSM.available()){ parseATText(GSM.read()); } } 无效设置() { 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”); sendGSM(“AT+HTTPPARA=\“URL\”,\”http://afridiofkh.000webhostapp.com? sensor1=“”+传感器+“\”); sendGSM(“AT+HTTPACTION=0”); } void循环() { while(GSM.available()){ parseATText(GSM.read()); } } void parseATText(字节b){ 缓冲区[pos++]=b; 如果(位置>=sizeof(缓冲区)) resetBuffer();//为了安全起见 /* //详细调试 Serial.println(); Serial.print(“state=”); 序列号println(州); Serial.print(“b=”); 序列号println(b); Serial.print(“pos=”); 串行打印LN(pos); Serial.print(“buffer=”); 串行打印LN(缓冲区)*/ 开关(解析状态){ 案例PS\U检测\U消息\U类型: { 如果(b=='\n') resetBuffer(); 否则{ 如果(位置==3&&strcmp(缓冲区,“AT+”)==0){ parseState=PS\u忽略命令\u ECHO; } else如果(b==':'){ //串行打印(“检查消息类型:”); //串行打印LN(缓冲区); if(strcmp(缓冲区“+HTTPACTION:”)==0){ Serial.println(“收到的HTTPACTION”); parseState=PS_HTTPACTION_类型; } 否则如果(strcmp(缓冲区“+HTTPREAD:”)==0){ Serial.println(“收到的HTTPREAD”); parseState=PS\u HTTPREAD\u长度; } resetBuffer(); } } } 打破 案例PS\U忽略\U命令\U回显: { 如果(b=='\n'){ Serial.print(“忽略回音:”); 串行打印LN(缓冲区); parseState=PS\u DETECT\u MSG\u TYPE; resetBuffer(); } } 打破 案例PS_HTTPACTION_类型: { 如果(b==','){ 串行打印(“HTTPACTION类型为”); 串行打印LN(缓冲区); parseState=PS_HTTPACTION_结果; resetBuffer(); } } 打破 案例PS_HTTPACTION_结果: { 如果(b==','){ 串行打印(“HTTPACTION结果为”); 串行打印LN(缓冲区); parseState=PS_HTTPACTION_长度; resetBuffer(); } } 打破 案例PS_HTTPACTION_长度: { 如果(b=='\n'){ 串行打印(“HTTPACTION长度为”); 串行打印LN(缓冲区); //现在请求内容 GSM.print(“AT+HTTPREAD=0,”); GSM.println(缓冲区); parseState=PS\u DETECT\u MSG\u TYPE; resetBuffer(); } } 打破 外壳PS_HTTPREAD_长度: { 如果(b=='\n'){ contentLength=atoi(缓冲区); 串行打印(“HTTPREAD长度为”); Serial.println(contentLength); Serial.print(“HTTPREAD内容:”); parseState=PS_HTTPREAD_内容; resetBuffer(); } } 打破 案例PS_HTTPREAD_内容: { //对于这个演示,我只是在串行监视器中显示内容字节 串行写入(b); 内容长度--; 如果(contentLength,web,arduino,gsm,Web,Arduino,Gsm,您在代码中发出的http请求有一些错误。您不能像以前那样从arduino请求 当使用000webhost作为数据库时,最好的方法是使用PHP。您可以通过选择文件管理器上载PHP文件,然后选择“立即上载文件”。其中有一个名为“public_html”的文件夹,用于上载PHP代码 下面是您想要做的。您想要创建一个PHP代码,当请求此PHP代码的URL时,该代码将执行对数据库的插入操作。然后您可以从arduino请求此链接以执行插入 PHP代码是(请在提供的代码位置提供您的用户名、密码、数据库名、表名

您在代码中发出的http请求有一些错误。您不能像以前那样从arduino请求

当使用000webhost作为数据库时,最好的方法是使用PHP。您可以通过选择文件管理器上载PHP文件,然后选择“立即上载文件”。其中有一个名为“public_html”的文件夹,用于上载PHP代码

下面是您想要做的。您想要创建一个PHP代码,当请求此PHP代码的URL时,该代码将执行对数据库的插入操作。然后您可以从arduino请求此链接以执行插入

PHP代码是(请在提供的代码位置提供您的用户名、密码、数据库名、表名、列名,并按照我上面所说的上传):


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

您在代码中发出的http请求有一些错误。您不能像以前那样从arduino请求

当使用000webhost作为数据库时,最好的方法是使用PHP。您可以通过选择文件管理器上载PHP文件,然后选择“立即上载文件”。其中有一个名为“public_html”的文件夹,用于上载PHP代码

下面是您想要做的。您想要创建一个PHP代码,当请求此PHP代码的URL时,该代码将执行对数据库的插入操作。然后您可以从arduino请求此链接以执行插入

PHP代码是(请在提供的代码位置提供您的用户名、密码、数据库名、表名、列名,并按照我上面所说的上传):


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

我使用了相同的代码,并且它工作正常。我只需要与您需要的相同的输出。您能否解释一下您在上述代码中使用的Web主机的url您的http请求有一些错误我使用了相同的代码,它工作正常。我只想你能给我解释一下你在上面代码中使用的网络主机的url吗?你的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[80];
 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");
sendGSM("AT+HTTPPARA=\"URL\",\"http://afridiofkh.000webhostapp.com?
sensor1="" + sensor + ""\"""");
  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
$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);
?>
#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;
 }
}