Sida 1 av 1

Skriva värde till websida från Arduino

Postat: 6 januari 2019, 20:38:48
av EonX
God dag!

Jag har laborerat med WiFi modul och fått det att fungera. Arduinon kopplar upp sig mot WiFi och skickar ut min html kod när jag anropar den IP adressen.

Nu till mitt problem.

Jag har en avståndsmätare av enklaste modell som i exempelkoden skriver till serielmonitor. Det jag nu skulle vilja göra är att värdet från avståndsmätaren skall skickas till webbsidan.
I nuläget skickas bara exakt den text jag för in i html koden, har gjort några mediokra försök att hänvisa in värdet men den skriver bara "distance" på websidan.

Bifogar min kod här så kanske ni kan hjälpa mig. Jag har använt mig av koden som finns på kjell&co.

Längst ner finns avståndsmätarens kodsnutt.

Kod: Markera allt

#include "WiFiEsp.h"
#include <SoftwareSerial.h>


// Create WiFi module object on GPIO pin 6 (RX) and 7 (TX)
SoftwareSerial Serial1(6, 7);

// Declare and initialise global arrays for WiFi settings
char ssid[] = "HD-EXT";
char pass[] = "********";

// Declare and initialise variable for radio status 
int status = WL_IDLE_STATUS;

// Create a web server on port 80
WiFiEspServer server(80);

 int inputPin=2; //ECHO pin 
 int outputPin=4; //TRIG pin 

void setup() {
// Initialize serial for debugging
  Serial.begin(115200);
  
  // Initialize serial for ESP module
  Serial1.begin(9600);
  
  // Initialize ESP module
  WiFi.init(&Serial1);

  // Check for the presence of the shield
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    
    // Don't continue
    while (true);
  }
  
  // Attempt to connect to WiFi network
  while (status != WL_CONNECTED) {
    Serial.print("Attempting to connect to SSID: ");
    Serial.println(ssid);
    
    // Connect to WPA/WPA2 network
    status = WiFi.begin(ssid, pass);
  }

  Serial.println("You're connected to the network");
  printWifiStatus();

  // Start the web server
  server.begin();
}
 void printWifiStatus() {
  
  // Print the SSID of the network
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  // Print the IP address
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);

}

void loop() {

// Listen for incoming clients
  WiFiEspClient client = server.available();

  if (client) {
    Serial.println("New client");
    
    // An HTTP request ends with a blank line
    boolean currentLineIsBlank = true;
    
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);

        // If you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          Serial.println("Sending response");

          // Send a standard HTTP response header
          client.print(
            "HTTP/1.1 200 OK\r\n"
            "Content-Type: text/html\r\n"
            "Connection: close\r\n"
            "\r\n");
          client.print("<!DOCTYPE HTML>\r\n");
          client.print("<html>\r\n");
          client.print("<head>\r\n");
          client.print("<title>My Arduino</title>\r\n");
          client.print("</head>\r\n");
          client.print("<body>\r\n");
          client.print("<h1>distance</h1>\r\n");
          client.print("<p>We're online!</p>\r\n");
          client.print("</body>\r\n");
          client.print("</html>\r\n");
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    
    // Give the web browser time to receive the data
    delay(10);

    // Close the connection:
    client.stop();
    Serial.println("Client disconnected");
  }
   { 
   digitalWrite(outputPin, HIGH); //Trigger ultrasonic detection 
   delayMicroseconds(10); 
   digitalWrite(outputPin, LOW); 
   int distance = pulseIn(inputPin, HIGH); //Read ultrasonic reflection
   distance= distance/58; //Calculate distance 
   Serial.println(distance); //Print distance 
   delay(2000); 
 } 
}
Det är alltså där det nu står ”distance” i HTML koden jag vill ha in värdet

Re: Skriva värde till websida från Arduino

Postat: 6 januari 2019, 20:56:25
av SeniorLemuren
Skall det inte stå:

Kod: Markera allt

int distance =pulseIn(echoPin, HIGH); //Read ultrasonic reflection
i stället för:

Kod: Markera allt

int distance = pulseIn(inputPin, HIGH); //Read ultrasonic reflection

Re: Skriva värde till websida från Arduino

Postat: 6 januari 2019, 21:00:58
av EonX
Jag har kört ”bara” den koden och då skriver den ut allt som den ska. Men jag håller med dig, det ser mer rätt ut. Jag provar att ändra det. Tackar :)

Re: Skriva värde till websida från Arduino

Postat: 6 januari 2019, 22:34:13
av disklose
Jo, men felet är ju att du bara skriver ut texten "distance" i din html. Du ska göra en funktion av det sista där den hämtar värdet till en variabel som du sen skriver ut i html.

Re: Skriva värde till websida från Arduino

Postat: 6 januari 2019, 22:39:50
av EonX
I see, men i slutet är ju distance en int som skrivs ut i serial printer, och då visas ju rätt värde.

Behöver jag göra nått mer med själva värdet (alltså int distance) innan jag kan stoppa in det i HTML koden? Och i så fall hur bör jag göra det?

Re: Skriva värde till websida från Arduino

Postat: 6 januari 2019, 23:01:49
av disklose
Kanske så här

Kod: Markera allt

#include "WiFiEsp.h"
#include <SoftwareSerial.h>


// Create WiFi module object on GPIO pin 6 (RX) and 7 (TX)
SoftwareSerial Serial1(6, 7);

// Declare and initialise global arrays for WiFi settings
char ssid[] = "HD-EXT";
char pass[] = "********";

// Declare and initialise variable for radio status 
int status = WL_IDLE_STATUS;

// Create a web server on port 80
WiFiEspServer server(80);

 int inputPin=2; //ECHO pin 
 int outputPin=4; //TRIG pin 

void setup() {
// Initialize serial for debugging
  Serial.begin(115200);
  
  // Initialize serial for ESP module
  Serial1.begin(9600);
  
  // Initialize ESP module
  WiFi.init(&Serial1);

  // Check for the presence of the shield
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    
    // Don't continue
    while (true);
  }
  
  // Attempt to connect to WiFi network
  while (status != WL_CONNECTED) {
    Serial.print("Attempting to connect to SSID: ");
    Serial.println(ssid);
    
    // Connect to WPA/WPA2 network
    status = WiFi.begin(ssid, pass);
  }

  Serial.println("You're connected to the network");
  printWifiStatus();

  // Start the web server
  server.begin();
}
 void printWifiStatus() {
  
  // Print the SSID of the network
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  // Print the IP address
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);

}

void loop() {

// Listen for incoming clients
  WiFiEspClient client = server.available();

  if (client) {
    Serial.println("New client");
    
    // An HTTP request ends with a blank line
    boolean currentLineIsBlank = true;
    
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);

        // If you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          Serial.println("Sending response");

          // Send a standard HTTP response header
          client.print(
            "HTTP/1.1 200 OK\r\n"
            "Content-Type: text/html\r\n"
            "Connection: close\r\n"
            "\r\n");
          client.print("<!DOCTYPE HTML>\r\n");
          client.print("<html>\r\n");
          client.print("<head>\r\n");
          client.print("<title>My Arduino</title>\r\n");
          client.print("</head>\r\n");
          client.print("<body>\r\n");
          client.print("<h1>distance");
          client.print(getDistance());
          client.print("</h1>\r\n");
          client.print("<p>We're online!</p>\r\n");
          client.print("</body>\r\n");
          client.print("</html>\r\n");
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    
    // Give the web browser time to receive the data
    delay(10);

    // Close the connection:
    client.stop();
    Serial.println("Client disconnected");
  }
}

int getDistance(void)
{
   digitalWrite(outputPin, HIGH); //Trigger ultrasonic detection 
   delayMicroseconds(10); 
   digitalWrite(outputPin, LOW); 
   int distance = pulseIn(inputPin, HIGH); //Read ultrasonic reflection
   distance= distance/58; //Calculate distance 
   Serial.println(distance); //Print distance 
   return distance;   
}

Re: Skriva värde till websida från Arduino

Postat: 7 januari 2019, 20:38:36
av EonX
Fungerar alldeles utmärkt. Tack så mycket för hjälpen :)

Re: Skriva värde till websida från Arduino

Postat: 7 januari 2019, 21:15:31
av GeekJoan
Eftersom du hade distance i mellan " " ihop med annan text så ser den inte distance som en variabel utan som text.

Re: Skriva värde till websida från Arduino

Postat: 8 januari 2019, 10:48:34
av EonX
Hur fungerar själva mätningen med denna kod?

Görs en mätning när jag uppdaterar webbsidan eller mäter avståndsmätaren hela tiden?