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
  LED Zustand abfragen Nafetz 35 833 02.12.2016 10:09
Letzter Beitrag: hotsystems
  Fehler in meinem Programm Franz54 7 146 01.12.2016 23:58
Letzter Beitrag: hotsystems
  ESP8266 ESP12-E Webserver-Frage Claus_M 8 240 14.11.2016 22:02
Letzter Beitrag: Claus_M
  Webserver + Bild als Hintergrund ?! Marc2014 8 246 11.10.2016 21:39
Letzter Beitrag: Bitklopfer
  A4988 Driver mit einem Nema 17 Hangloose 3 140 04.09.2016 21:49
Letzter Beitrag: Hangloose
  Byte Shiften und Bit abfragen.... comfan 4 203 02.09.2016 20:30
Letzter Beitrag: comfan
  ESP8266 Webserver Programmieren HDT 11 755 23.08.2016 13:28
Letzter Beitrag: HDT
  Hilfe gesucht. Webserver Statsiche und Dynamische HTMl Seite b3ta 11 449 22.08.2016 08:07
Letzter Beitrag: b3ta
  ESP8266 Webserver Marc2014 0 347 30.07.2016 20:15
Letzter Beitrag: Marc2014
Question Webserver, Client, Loop Marc2014 6 364 29.07.2016 21:04
Letzter Beitrag: Marc2014

Gehe zu:


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