Daten vom Webserver empfangen : 192.168.2.105

Für allgemeine Fragen zur Programmierung mit PureBasic.
funkheld
Beiträge: 651
Registriert: 31.12.2009 11:58

Daten vom Webserver empfangen : 192.168.2.105

Beitrag von funkheld »

Hallo, guten Tag.
Ich möchte von einem Arduino (Webserver) Daten empfangen über : 192.168.2.105 mit Purebasic.

Wenn ich mein Google Chrome starte und 192.168.2.105 eingebe , kommen die Daten vom Arduino an:
analog input 1 is 309
analog input 2 is 281
analog input 3 is 275
analog input 4 is 288
analog input 5 is 271

Wer kann mir das einmal Zeigen. Ich bekomme das nicht hin.


Das Programm vom Arduino, welches die Daten sendet , da sind drin Port und IP :

Code: Alles auswählen

#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);

// 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: 5");  // refresh the page automatically every 5 sec
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          // 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(" is ");
            client.print(sensorReading);
            client.println("<br />");
          }
          client.println("</html>");
          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();
  }
}
Mit diesem Purebasisprogramm kann ich verbinden , aber es werden keine Daten ausgegeben -Connected- wird angezeigt nach dem starten.

Code: Alles auswählen

Global Quit.l, Port.l, conID.l, status.l, cEvent.l, Result.l
Global text_e.s,

*DataBuffer = AllocateMemory(128)

If OpenWindow(0, 10, 10, 410, 500, "Client ", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
  
  ButtonGadget(1,5, 10,100, 20, "Ende")
  ButtonGadget(2,120, 10, 100, 20, "Connect")
  ButtonGadget(3,235, 10, 140, 20, "Disconnect")
  EditorGadget(4, 10, 60, 300, 400)
  ButtonGadget(5,320,60, 80, 25, "Cls Edit")
  
  Quit = 0
  Port = 80
  status = 0
  
  InitNetwork()
  
  Repeat
    
    EventID.l = WaitWindowEvent(10)  
    
    Select EventID
      Case #PB_Event_CloseWindow
        Quit = 1
        
      Case #PB_Event_Gadget 
        Select EventGadget()    
          Case 1            
            Quit = 1
          Case 2
            
            If Not status
              conID = OpenNetworkConnection("192.168.2.105", Port)
              If conID
                status = 1
                SetGadgetText(4, GetGadgetText(4) + #CR$ + "- Connected -" + #CR$)
              EndIf
            EndIf
          Case 3
            ;Disconnect
            If status <> 0
              CloseNetworkConnection(conID)
              status = 0
              SetGadgetText(4, GetGadgetText(4) + #CR$ + "- Connection closed -" + #CR$)
            EndIf
            
          Case 5
            text_e=""
            SetGadgetText(4, text_e)          
        EndSelect
    EndSelect
    
    If status
      
      cEvent = NetworkClientEvent(conID)
      
      Select cEvent      
        Case #PB_NetworkEvent_Data
          
          Repeat
            Result = ReceiveNetworkData(ConID, *DataBuffer, 128) 
            SetGadgetText(4, GetGadgetText(4) + PeekS(*DataBuffer, Result,#PB_Ascii))
          Until Result < 128         
      EndSelect
      
    EndIf
    
  Until Quit = 1 Or EventID = #PB_Event_CloseWindow
EndIf
FreeMemory(*DataBuffer)
End
Danke.
Gruss
Zuletzt geändert von funkheld am 27.11.2015 13:09, insgesamt 1-mal geändert.
Benutzeravatar
xXRobo_CubeXx
Beiträge: 120
Registriert: 12.06.2015 16:08
Computerausstattung: Version 5.41 LTS
Wohnort: Wohnort
Kontaktdaten:

Re: Daten vom Webserver empfangen : 192.168.2.105

Beitrag von xXRobo_CubeXx »

Die Lösung ist ganz einfach. Schreibe ganz oben Enableexplicit :)
danach musst du die Vars deklarieren und schon wuppt das
weil die Vars von Arduino richtig von erkannt werden! :allright:
Habs selbst getestet, funzt danach :allright:

Danke.
Gruss
Version 5.41 LTS :)
funkheld
Beiträge: 651
Registriert: 31.12.2009 11:58

Re: Daten vom Webserver empfangen : 192.168.2.105

Beitrag von funkheld »

Danke für die Info :

EnableExplicit
Global Quit.l, Port.l, conID.l, status.l, cEvent.l, Result.l
Global text_e.s, EventID.l, DataBuffer.l

Aber es kommt nichts an in Purebasic , im Google Chrome kommen die Daten an.

Danke.
Gruss
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8820
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Daten vom Webserver empfangen : 192.168.2.105

Beitrag von NicTheQuick »

Also bei mir funktioniert's. Vermutlich liegt's einfach daran, dass Purebasic wartet bis genügend Bytes da sind, bevor es irgendwas ausgibt. Vielleicht mal den 1024-Byte-Puffer verkleinern.
Ich hab's mit "netcat -l 8080" als Server ausprobiert und es funktioniert.
funkheld
Beiträge: 651
Registriert: 31.12.2009 11:58

Re: Daten vom Webserver empfangen : 192.168.2.105

Beitrag von funkheld »

Vielleicht ist das der falsche Ansatz vom Purebasicprogramm.

Ich habe den ArduinoWebserver mit einem Netzwerkkabel an dem LAN1-Port am Router verbunden.
Dann rufe ich Google Chrome auf und gebe dort ein 192.168.2.105 und schon erscheinen die Daten in Google Chrome vom ArduinoWebserver.

Vielleicht wird irgendwie die Datenannahme vom Purebasicprogramm anders gemacht,oder irgend etwas blockiert die Datenannahme ?

Danke.
Gruss
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8820
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Daten vom Webserver empfangen : 192.168.2.105

Beitrag von NicTheQuick »

Hast du dir deinen Arduino-Code überhaupt mal angeschaut? Der wartet auf einen HTTP-Request. Das musst du in Purebasic auch machen. Natürlich macht Chrome das.
Benutzeravatar
Imhotheb
Beiträge: 192
Registriert: 10.10.2014 13:14
Computerausstattung: Intel 8086, 640 KB RAM, Hercules Video Adapter, 2 x 5 1/4" 360kb Floppy, MS-DOS 3
Wohnort: Wolfenbüttel

Re: Daten vom Webserver empfangen : 192.168.2.105

Beitrag von Imhotheb »

wenn du pb 5.4x verwendest, versuche mal receivehttpmemory()
weil einfach einfach einfach ist ... mach' ich es anders
funkheld
Beiträge: 651
Registriert: 31.12.2009 11:58

Re: Daten vom Webserver empfangen : 192.168.2.105

Beitrag von funkheld »

Hallo, vielen Dank für dein Tipp.
Damit werden die Daten jetzt abgeholt, toll.

Wie kann man es jetzt Programmtechnisch machen, das die Daten zb alle 10 Sekunden abgefragt werden?

Danke.
Gruss

Code: Alles auswählen

InitNetwork()

  *Buffer = ReceiveHTTPMemory("http://192.168.2.105")
  If *Buffer
    Size = MemorySize(*Buffer)
    Debug "Content: " + PeekS(*Buffer, Size, #PB_UTF8)
    FreeMemory(*Buffer)
  Else
    Debug "Failed"
  EndIf
NeoChris
Beiträge: 205
Registriert: 21.11.2013 21:17
Wohnort: Schweiz
Kontaktdaten:

Re: Daten vom Webserver empfangen : 192.168.2.105

Beitrag von NeoChris »

Code: Alles auswählen

repeat
*Buffer = ReceiveHTTPMemory("http://192.168.2.105")
  If *Buffer
    Size = MemorySize(*Buffer)
    Debug "Content: " + PeekS(*Buffer, Size, #PB_UTF8)
    FreeMemory(*Buffer)
  Else
    Debug "Failed"
  EndIf
delay(10000)
forever
funkheld
Beiträge: 651
Registriert: 31.12.2009 11:58

Re: Daten vom Webserver empfangen : 192.168.2.105

Beitrag von funkheld »

Hallo, vielen Dank.

Die Daten werden jetzt sauber Timerabhängig empfangen.


Gruss
Antworten