Skriva värde till websida från Arduino

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
EonX
Inlägg: 48
Blev medlem: 11 januari 2010, 23:36:56

Skriva värde till websida från Arduino

Inlägg 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
Senast redigerad av EonX 6 januari 2019, 21:08:05, redigerad totalt 1 gång.
SeniorLemuren
Inlägg: 7803
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

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

Inlägg 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
EonX
Inlägg: 48
Blev medlem: 11 januari 2010, 23:36:56

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

Inlägg 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 :)
disklose
Inlägg: 5
Blev medlem: 26 februari 2015, 10:47:34

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

Inlägg 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.
EonX
Inlägg: 48
Blev medlem: 11 januari 2010, 23:36:56

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

Inlägg 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?
disklose
Inlägg: 5
Blev medlem: 26 februari 2015, 10:47:34

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

Inlägg 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;   
}
EonX
Inlägg: 48
Blev medlem: 11 januari 2010, 23:36:56

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

Inlägg av EonX »

Fungerar alldeles utmärkt. Tack så mycket för hjälpen :)
Användarvisningsbild
GeekJoan
Admin
Inlägg: 10664
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

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

Inlägg av GeekJoan »

Eftersom du hade distance i mellan " " ihop med annan text så ser den inte distance som en variabel utan som text.
EonX
Inlägg: 48
Blev medlem: 11 januari 2010, 23:36:56

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

Inlägg 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?
Skriv svar