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
Question Mehrere HX711 an einem Arduino Nano Lambacher 59 1.428 17.10.2017 09:34
Letzter Beitrag: Tommy56
  Arduino Zumo, Felerhaftes Programm (2) Werner Lage 2 403 18.09.2017 06:51
Letzter Beitrag: Werner Lage
  Ein- u. Ausgänge abfragen magifix 2 1.068 23.08.2017 07:25
Letzter Beitrag: hotsystems
  Servo mit einem Taster und 433mhz steuern Thor Wallhall 63 2.882 29.07.2017 11:02
Letzter Beitrag: Thor Wallhall
  Arduino Zumo, Felerhaftes Programm ? Werner Lage 1 274 20.06.2017 13:57
Letzter Beitrag: Tommy56
  Probleme mit einem Sketch für einen LED Cube 5x5x5 Frank1234 5 489 13.03.2017 12:12
Letzter Beitrag: Tommy56
Rainbow Programm mit Tastr unterbrechen Schwinge117 12 820 02.03.2017 21:17
Letzter Beitrag: Tommy56
  Smart Home Webserver Basic Authentication Problem Osotastic 21 1.261 20.02.2017 18:00
Letzter Beitrag: Tommy56
  Mehrere HX711 mit einem Arduino Uno be14b029 5 724 08.02.2017 18:09
Letzter Beitrag: Binatone
  8 Taster an einem Pin Kitt 9 868 04.02.2017 18:51
Letzter Beitrag: ardu_arne

Gehe zu:


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