2017-05-29 93 views
1
#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; 
} 
} 

我甚至不明白的代碼,但我的想法,當我試圖發佈數據網絡它不工作,我不知道什麼是錯發送使用Arduino的GSM模塊的數據網絡與它 我正在獲取網絡內容,但我不能發佈數據到網絡 我試過既得到和發佈方法非他們給我帶來好運使用GPRS

+0

我使用了相同的代碼,它工作。我只是想要你輸入相同的數據。你可以解釋一下你在上面代碼中使用的webhost的url。 – Billa

+0

你的http請求有一些錯誤 – Billa

回答

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); 
?> 

獲取的URL上傳的PHP代碼(右鍵單擊上傳的文件並單擊查看,然後在瀏覽器中複製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很容易,因爲它可以用來擴展操作。

+0

試試這個。告訴我它是否有效,或者你是否面臨任何問題。 – Billa

+0

今晚我會嘗試這一個,當我得到免費的感謝您的回覆 –

+0

@Hazrat Bilal你試過嗎? – Billa