2013-03-14 120 views
0

我一直試圖成功地將我的Arduino連接到我的phpMyAdmin服務器,但是我一直未能。 Arduino有一些超聲波傳感器連接(測量距離),由於某些原因,並不是所有的值都被髮送到服務器。我不應該那麼複雜。試圖將C程序連接到phpMyAdmin

所以每個傳感器都有自己的ID,測量距離和傳感器所在的位置。

該id是識別傳感器(杜!),但由於某些原因,我得到的是這個值爲0,我認爲是因爲它只讀取第一個傳感器(ID爲0)的值。

所以讓我告訴你我的代碼,這是重複的方法,我認爲我的錯誤是無法多次發送信息,如分離每個傳感器的信息,它只發送前4個值這就是它在數據庫上顯示的內容。

void loop(){ 

    int distance; 

    //======= 

    for (uint8_t i = 0; i < SONAR_NUM; i++) { 

    if(cm[i] > 10 || cm[i]==0){ 

     distance = cm [i];//delete if no 
    } 
    else{ 
     distance = cm[i]; 
     //Serial.println(distance); 


    } 
    } 

    for (uint8_t i = 0; i < SONAR_NUM; i++) { 
    if (millis() >= pingTimer[i]) { 
     pingTimer[i] += PING_INTERVAL * SONAR_NUM; 
     if (i == 0 && currentSensor == SONAR_NUM - 1) 
     sonar[currentSensor].timer_stop(); 
     currentSensor = i; 
     cm[currentSensor] = 0; 

     sonar[currentSensor].ping_timer(echoCheck); 
    } 
    //client.stop(); 
    } 

    //=================================================== 
    if(client.connect(serverName, 80)) 
    { 
    //Serial.println("Connected"); 
    if (client.connected()){ 
     delay(100); 
     //Serial.println("Client is available, CONNECTED!"); 
     //client.print("GET /add.php?distance="); 
    ////////////// 
    int lvl = 0; 
    for (uint8_t i = 0; i < SONAR_NUM; i++) { 
    if(i<2) 
     lvl = 1; 
    else if (i>1 && i<3) 
     lvl =2; 
    else 
     lvl = 3; 

    Serial.print("SPOT: "); 
    client.print("GET /sendfromarduino.php?sensorID="); 
    Serial.print(i); 
    client.print (i); 

    Serial.print(" DISTANCE: "); 
    Serial.print(cm[i]); 
    distance = cm[i]; 
    client.print("&value="); 
    client.print(distance); 
    Serial.print("cm "); 

    Serial.print(" LEVEL: "); 
    client.print("&level="); 
    Serial.print (lvl); 
    client.print (lvl); 


    } 
    Serial.println(); 
    ////////////////////////////////////// 
//  Serial.print("Distance: "); 
//  client.print(distance); 
//  Serial.println(distance); 
     client.println("HTTP/1.1"); 
     client.println("Host: test.testserver.com"); 
     client.println("Content-Type: application/x-www-form-urlencoded"); 
     client.println(); 
     client.println(); 
     client.stop(); 
    } 
    else 
    { 
     //Serial.println(distance); 
     Serial.println("Connection Failed"); 
    } 
    } 
    delay(100); 
} 

,然後這裏是PHP文件的代碼,應根據我的知識和以往的經驗是完全確定:

<?php 


     $db = new PDO('mysql:host=localhost;dbname=test_alpha;charset=UTF-8', 'test_alpha', 'testtest'); 
     $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 

     $sensorID = intval($_GET['i']); 
     //$time = CURRENT_TIMESTAMP; 
     $value = intval($_GET['distance']); 
     $level = intval($_GET['lvl']); 


     $sql = "INSERT INTO `pspace`(`sensorID`, `time`, `value`, `level`) VALUES ('$sensorID',CURRENT_TIMESTAMP,'$value','$level')"; 

     $stmt = $db->query($sql); 
     //echo json_encode(array('spaces'=>$stmt->fetchAll(PDO::FETCH_ASSOC))); 

    ?> 

任何幫助,不勝感激!

+1

它是否將所有正確的信息打印到串口?那將是第一個解決問題的地方,如果它沒有脫離Arduino,那麼你的PHP就不存在了。如果是這樣,那麼請讓php將所有內容轉儲到文件中,以查看它獲取的數據是否有效。 – sachleen 2013-03-14 04:19:15

+0

@sachleen是的,它將所有信息正確地打印到串口,但是當涉及到客戶端時,它不會。我如何使php轉儲所有文件? – randomizertech 2013-03-14 13:35:30

+0

我會打印'GET'代碼到串口上,就像您試圖將其打印到以太網客戶端,然後嘗試在PC上執行請求,只是爲了確保您的查詢格式正確。 – angelatlarge 2013-03-15 01:22:50

回答

1

凡說if (client.connected())

應該while (client.connected())

問題解決了!感謝大家爲我的問題貢獻時間!