0

ArduinoをphpMyAdminサーバーに正常に接続しようとしましたが、接続できませんでした。Arduinoには(距離を測定するために)いくつかの超音波センサーが接続されており、何らかの理由ですべての値がサーバーに送信されているわけではありません。私はそれほど複雑であるべきではありません。

したがって、各センサーには、独自のID、測定距離、およびセンサーが配置されているレベルがあります。

idはセンサーを識別するためのものです(duh!)が、何らかの理由で、この値に対して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)));

    ?>

どんな助けでも大歓迎です!

4

1 に答える 1

1

それが言うところif (client.connected())

そのはずwhile (client.connected())

問題が解決しました!私の質問に時間を割いてくれた皆さんに感謝します!

于 2013-03-18T16:36:44.787 に答える