Проблема в постоянном обновлении данных датчиков на сайте, полученных от arduino uno - PullRequest
0 голосов
/ 20 октября 2018

Я новичок в Arduino uno.Моя задача - отправить данные датчика Ir в веб-приложение.Я использовал команду AT+CIPSEND для отправки данных в веб-приложение.Я использую панель управления xampp для создания сервера на моем компьютере, но проблема заключается в том, что значение, которое я получаю от php, вызывает ошибку неопознанного индекса.С моей точки зрения, может быть проблема с задержкой.Я пытался использовать setInterval() для выполнения вызова ajax каждые 1 секунду, но проблема все та же.

Код Arduino

    #include <SoftwareSerial.h>
    #define RX 10
    #define TX 11
    String AP = "Tenda_2704A8";       // CHANGE ME
    String PASS = "8108805837"; // CHANGE ME
    String HOST = "192.168.0.104";
    String PORT = "80";
    String Data;
    int countTrueCommand;
    int countTimeCommand;
    boolean found = false;

    int LED = 13; // Use the onboard Uno LED
    int isObstaclePin = 7;  // This is our input pin
    int isObstacle = HIGH;  // HIGH MEANS NO OBSTACLE


    SoftwareSerial esp8266(RX, TX);


    void setup() {
      pinMode(LED, OUTPUT);
      pinMode(isObstaclePin, INPUT);
      Serial.begin(9600);
      esp8266.begin(115200);
      sendCommand("AT", 5, "OK");
      sendCommand("AT+CWMODE=1", 5, "OK");
      sendCommand("AT+CWJAP=\"" + AP + "\",\"" + PASS + "\"", 20, "OK");
      sendCommand("AT+CIPMUX=1",5,"OK");  


    }
    void loop() {

      String output;

      isObstacle = digitalRead(isObstaclePin);
      if (isObstacle == LOW)
      { 
        output = "obstacle";
        Serial.println("OBSTACLE!!, OBSTACLE!!");
        digitalWrite(LED, HIGH);
      }
      else
      { 
        output = "clear";
        Serial.println("clear");
        digitalWrite(LED, LOW);
      }



      Data = "GET project/ajax/arduino.php?value=2";
      sendCommand("AT+CIPSTART=0,\"TCP\",\""+ HOST +"\","+ PORT,5,"OK");
      sendCommand("AT+CIPSEND=0," +String(Data.length()+4),4,">");
      Serial.println(Data);delay(100);countTrueCommand++;
      sendCommand("AT+CIPCLOSE=0",5,"OK");



    }


    void sendCommand(String command, int maxTime, char readReplay[]) {
      Serial.print(countTrueCommand);
      Serial.print(". at command => ");
      Serial.print(command);
      Serial.print(" ");
      while (countTimeCommand < (maxTime * 1))
      {
        esp8266.println(command);//at+cipsend
        if (esp8266.find(readReplay)) //ok
        {
          found = true;
          break;
        }

        countTimeCommand++;
      }

      if (found == true)
      {
        Serial.println("Yes");
        countTrueCommand++;
        countTimeCommand = 0;
      }

      if (found == false)
      {
        Serial.println("Fail");
        countTrueCommand = 0;
        countTimeCommand = 0;
      }

      found = false;
    }

Arduino.html

<!DOCTYPE html>
<html>
<head>
    <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
    <title></title>
    <script>
        $(document).ready(function(){
            function fetchdata(){
                $.ajax({
                url:"arduino.php",
                success:function(response){
                    $("#value").text(response);
                }

                });
            }
            setInterval(fetchdata,100);

        });
    </script>
</head>
<body>
    <h1 id = "value"></h1>

</body>
</html>

arduino.php

<?php
/*$conn=mysqli_connect("localhost","root","","arduino");
if(!$conn){
    die("connectionfailed".mysqli_error());
}*/

$val = $_GET['value'];

echo $val;

//$sql = "INSERT INTO `arduino` (value) VALUES ('".$_GET['value']."')";

//mysqli_query($conn,$sql);


?>

1 Ответ

0 голосов
/ 20 октября 2018

У вас есть проблема в вашем коде.Ваш код печатает только значение, которое он получает от Arduino.Вам нужно будет сохранить данные, которые вы получите от Arduino, чтобы вы возвращали их при необходимости.То, что вы должны сделать, это что-то вроде

if(isset($_GET["value"]))
{
//save the data somewhere
}
else{
//fetch saved data and echo it
}
...