INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 1 Bewertungen - 3 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Webserver abfragen mit einem Programm
27.11.2015, 19:53 (Dieser Beitrag wurde zuletzt bearbeitet: 27.11.2015 20:08 von arduinofan.)
Beitrag #1
Webserver abfragen mit einem Programm
Hallo, guten Tag.
Mi diesem Purebasicprogramm kann man Daten vom ArduinoWebserver abfragen.
Es kann ein Timer eingestellt werden.
Die Hilfe im Purebasic-Forum hat mir weitergeholfen.
Der Vorteil ist , ich kann selber ganz einfach die Purebasicseite gestalten und brauch
mich nicht mit der Webseitensprache auseinandersetzen.
Den übertragenen Text kann man gut zerlegen.

Purebasicprogramm ( Das Textfenster wird mit den neuen Werten immer wieder automatisch gelöscht):
Code:
Global buffer.l, text_e.s

Declare TimerCallBack(hWnd,Msg,wParam,lParam)

Enumeration
  #Window_0
  #Editor_0
  #cls_edit
EndEnumeration

*buffer=AllocateMemory(1024)

InitNetwork()

OpenWindow(#Window_0,1000,200,420,500,"http-Arduino", #PB_Window_SystemMenu)
SetTimer_(WindowID(#Window_0), 77, 1000, @TimerCallBack())

EditorGadget(#Editor_0, 10, 60, 300,400)

ButtonGadget(#cls_edit, 320,60, 80, 25, "Cls Edit")

Repeat
  
  Event = WaitWindowEvent(10)
  
  Select Event
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
      
      If EventGadget =  #cls_edit
        text_e=""
        SetGadgetText(#Editor_0, text_e)
      EndIf
      
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = #Window_0
        CloseWindow(#Window_0)
        Break
      EndIf
  EndSelect
  
ForEver
FreeMemory(*Buffer)

Procedure TimerCallBack(hWnd,Msg,wParam,lParam)    
  Select Msg            
    Case #WM_TIMER
      If wparam = 77
        text_e=""
        SetGadgetText(#Editor_0, text_e)
        *Buffer = ReceiveHTTPMemory("http://192.168.2.105")
        text_e + "Content: " + PeekS(*Buffer, 1024, #PB_UTF8)+Chr(10)
        SetGadgetText(#Editor_0, text_e)
      EndIf
  EndSelect  
EndProcedure

Dies ist das Demoprogramm vom Webserver.
Die Webseitensondernzeichen habe ich raus gemacht, die braucht man in Purebasic nicht zur Darstellung :
Code:
#include <SPI.h>
#include <Ethernet.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 2, 105);  // Die eigenen Werte reinsetzen

// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}

void loop() {
  // listen for incoming clients
  EthernetClient 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) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");  // the connection will be closed after completion of the response
          client.println("Refresh: 1");  // refresh the page automatically every 5 sec
          client.println();
          client.println("");
          client.println("");
          // output the value of each analog input pin
          for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
            int sensorReading = analogRead(analogChannel);
            client.print("analog input ");
            client.print(analogChannel);
            client.print(" ist  ");
            client.print(sensorReading);
            client.println("");
          }
          client.println("");
          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(1);
    // close the connection:
    client.stop();
    Serial.println("client disconnected");
    Ethernet.maintain();
  }
}

Gruss


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.11.2015, 09:38 (Dieser Beitrag wurde zuletzt bearbeitet: 28.11.2015 16:06 von arduinofan.)
Beitrag #2
RE: Webserver abfragen mit einem Programm
Hier wird eine Zahl addiert und 6x als Wert mit den Webserver ausgegeben.
Man kann auch andere Daten schnell übertragen, nicht nur für eine Pinabfrage .

Gruss

Code:
#include <SPI.h>
#include <Ethernet.h>

int zahl, sensorReading, analogChannel;

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 2, 105);

EthernetServer server(80);

void setup() {
  Serial.begin(9600);
  while (!Serial) {
  }

  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}

void zahladd() {
  zahl=zahl+1;
}

void loop() {
  EthernetClient client = server.available();
  if (client) {
    boolean currentLineIsBlank = true;
    
    client.print('\n');
    while (client.connected()) {
      if (client.available()) {  
        for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
          zahladd();
          client.println("");
          sensorReading = zahl;
          client.print("analog input  ");
          client.print(analogChannel);
          client.print("  ist  ");
          client.print(sensorReading);
          client.println("");
        }
        break;
        }    
      }
    }
    delay(1);
    client.stop();
    Ethernet.maintain();
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.11.2015, 15:54 (Dieser Beitrag wurde zuletzt bearbeitet: 28.11.2015 16:02 von arduinofan.)
Beitrag #3
RE: Webserver abfragen mit einem Programm
Hier ist eine Version für das FreeBasic.
Funktioniert wunderbar mit dem ArduinoWebserver .
Nur die IPAdresse unten bei "Print..." ersetzen durch die Eigene.

Code:
#Include "win/winsock2.bi"
#Include "windows.bi"
#Include "fbgfx.bi"
#include "vbcompat.bi"
Using FB

#DEFINE RECVBUFFLEN 16384
#Define newline CHR(13,10)

Sub InitWinsock Constructor
    '' init winsock
    DIM wsaData AS WSAData
    IF( WSAStartup( MAKEWORD( 1, 1 ), @wsaData ) <> 0 ) THEN
        PRINT "Error: WSAStartup failed"
        END 1
    END If
End SUB

SUB ExitWinsock Destructor
    WSACleanup
End SUB

FUNCTION httpget(server AS STRING, path AS STRING, hadd AS STRING = "") AS STRING
    DIM IP AS INTEGER
    DIM ia AS in_addr
    DIM s AS SOCKET
    DIM hostentry AS hostent PTR
    DIM sendbuffer AS STRING
    DIM recvbuffer AS ZSTRING * RECVBUFFLEN+1
    DIM bytes AS INTEGER
    DIM sa AS sockaddr_in
    DIM in AS STRING
    ia.S_addr = inet_addr( server )
    IF ( ia.S_addr = INADDR_NONE ) THEN
        hostentry = gethostbyname( server )
        IF ( hostentry = 0 ) THEN
            RETURN "IP couldn't be resolved!"
        END IF
        IP = *CAST( INTEGER PTR, *hostentry->h_addr_list )
    ELSE
        IP = ia.S_addr
    END IF
    s = opensocket( AF_INET, SOCK_STREAM, IPPROTO_TCP )
    IF( s = 0 ) THEN
        RETURN "Socket couldn't be opened."
    END IF
    sa.sin_port         = htons( 80 )
    sa.sin_family       = AF_INET
    sa.sin_addr.S_addr  = ip
    IF ( connect( s, CAST( PSOCKADDR, @sa ), LEN( sa )) = SOCKET_ERROR ) THEN
        closesocket( s )
        RETURN "Couldn't connect to host"
    END IF
    sendBuffer = "GET /" + path + " HTTP/1.0" + NEWLINE + _
    "Host: " + server + NEWLINE + _
    "Connection: close" + NEWLINE + _
    hadd + _
    NEWLINE
    IF( send( s, sendBuffer, LEN( sendBuffer ), 0 ) = SOCKET_ERROR ) THEN
        closesocket( s )
        RETURN "Couldn't send request"
    END IF
    DO
        bytes = recv( s, recvBuffer, RECVBUFFLEN, 0 )
        IF( bytes <= 0 ) THEN
            EXIT DO
        END IF
        recvbuffer[bytes] = 0
        in += recvbuffer
    LOOP
    shutdown( s, 2 )
    closesocket( s )
    RETURN in
END FUNCTION


FUNCTION httppost(server AS STRING, path AS STRING, toPost AS STRING, hadd AS STRING = "") AS STRING
    DIM IP AS INTEGER
    DIM ia AS in_addr
    DIM s AS SOCKET
    DIM hostentry AS hostent PTR
    DIM sendbuffer AS STRING
    DIM recvbuffer AS ZSTRING * RECVBUFFLEN+1
    DIM bytes AS INTEGER
    DIM sa AS sockaddr_in
    DIM in AS STRING

    ia.S_addr = inet_addr( server )
    IF ( ia.S_addr = INADDR_NONE ) THEN
        hostentry = gethostbyname( server )
        IF ( hostentry = 0 ) THEN
            RETURN "IP couldn't be resolved!"
        END IF
        IP = *CAST( INTEGER PTR, *hostentry->h_addr_list )
    ELSE
        IP = ia.S_addr
    END IF
    s = opensocket( AF_INET, SOCK_STREAM, IPPROTO_TCP )
    IF( s = 0 ) THEN
        RETURN "Socket couldn't be opened."
    END IF
    sa.sin_port         = htons( 80 )
    sa.sin_family       = AF_INET
    sa.sin_addr.S_addr  = ip
    IF ( connect( s, CAST( PSOCKADDR, @sa ), LEN( sa )) = SOCKET_ERROR ) THEN
        closesocket( s )
        RETURN "Couldn't connect to host"
    END IF
    sendBuffer = "POST /" + path + " HTTP/1.0" + NEWLINE + _
    "Host: " + server + NEWLINE + _
    "Content-Type: application/x-www-form-urlencoded" + NEWLINE + _
    "Content-Length: " + STR(LEN(toPost)) + NEWLINE + _
    "Connection: close" + NEWLINE + _
    hadd + _
    NEWLINE + _
    toPost + NEWLINE
    IF( send( s, sendBuffer, LEN( sendBuffer ), 0 ) = SOCKET_ERROR ) THEN
        closesocket( s )
        RETURN "Couldn't send request"
    END IF
    DO
        bytes = recv( s, recvBuffer, RECVBUFFLEN, 0 )
        IF( bytes <= 0 ) THEN
            EXIT DO
        END IF
        recvbuffer[bytes] = 0
        in += recvbuffer
    LOOP
    shutdown( s, 2 )
    closesocket( s )
    RETURN in
END Function

ScreenRes 400,500,32
ScreenControl SET_WINDOW_POS, 500, 40

Do
   If MULTIKEY(FB.SC_ESCAPE) Then
       End
   EndIf

   PRINT httpGet("192.168.2.105","index.html")
   Sleep 1000
   Cls
Loop

End

Gruss


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Arduino Zumo, Felerhaftes Programm ? Werner Lage 1 81 20.06.2017 13:57
Letzter Beitrag: Tommy56
  Bild in eine html Seite auf einem ESP8266 einfügen rockzm 1 258 06.04.2017 14:57
Letzter Beitrag: Tommy56
  Probleme mit einem Sketch für einen LED Cube 5x5x5 Frank1234 5 333 13.03.2017 12:12
Letzter Beitrag: Tommy56
Rainbow Programm mit Tastr unterbrechen Schwinge117 12 525 02.03.2017 21:17
Letzter Beitrag: Tommy56
  Smart Home Webserver Basic Authentication Problem Osotastic 21 855 20.02.2017 18:00
Letzter Beitrag: Tommy56
  Mehrere HX711 mit einem Arduino Uno be14b029 5 403 08.02.2017 18:09
Letzter Beitrag: Binatone
  8 Taster an einem Pin Kitt 9 660 04.02.2017 18:51
Letzter Beitrag: ardu_arne
  Programm Elegoo Smart Robot kit Thorsten_S 3 549 29.01.2017 17:40
Letzter Beitrag: Micha06
  Messdatenausgabe auf Webserver über NanoESP RivaDynamite 10 810 10.01.2017 15:49
Letzter Beitrag: renid55
  Serial Output Buffer abfragen BennIY 5 402 05.01.2017 18:51
Letzter Beitrag: Tommy56

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste