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:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Ethernet-WebServer: Button-Belegung
07.06.2015, 16:04
Beitrag #33
RE: Ethernet-WebServer: Button-Belegung
Danke Thorsten für Deine Zeit.
Ich werde dieses Änderungen vornehmen und ggf. melde ich mich.
Mindestens schicke ich dir ein Feedback mit dem Code wenn es funktioniert hat.

Gruß und Dank
Ulli
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.06.2015, 17:34
Beitrag #34
Thumbs Down RE: Ethernet-WebServer: Button-Belegung
Hi Thorsten,
vielen Dank noch einmal für Deine Unterstützung und Deine Zeit.
Auf dieses Problem "Speichermangel" wäre ich ohne Deine Hilfe nicht gekommen.
Alles funktioniert nun bestens, wie geplant. Ich habe die Debugging-Meldungen wie von Dir vorgeschlagen gekürzt.

Smile

Gruß
Ulli
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.06.2015, 17:36
Beitrag #35
RE: Ethernet-WebServer: Button-Belegung
Cool, viel Spaß damit!

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.06.2015, 18:46 (Dieser Beitrag wurde zuletzt bearbeitet: 08.06.2015 18:47 von 4711engel.)
Beitrag #36
RE: Ethernet-WebServer: Button-Belegung
Hi,
nachdem der Webserver und die Kmera-Funktion auf dem UNO gut läuft, ich aber mit dem Speicher seeehr knapp bin, wollte ich nun auf den MEGA umziehen. Ich weiß, dass man da andere Pin-Belegungen hat und habe gegoogled.
Ethernet Mega
13 12 11 52 50 51

Cam VC0706:
5V und GND (klar)
TX an A15 vom Mega (= PIN 69)
RX an Ethernet PIN 3

Im sketch habe ich ..... SoftwareSerial (69, 3); geändrt.


Hier der Code:

Code:
/*--------------------------------------------------------------
          Arduino Ethernet Camera
Take a picture using the adafruit_vc0706 , save it on SD-Card
and print it over ethernet on a internet browser
                  Ulrich Engel
  CoAuthor:       W.A. Smith, http://startingelectronics.org
--------------------------------------------------------------*/

#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>
#include <Adafruit_VC0706.h>
#include <SoftwareSerial.h>  

// size of buffer used to capture HTTP requests
#define REQ_BUF_SZ   20
#define chipSelect 4

// MAC address from Ethernet shield sticker under board
byte mac[] = {0x90, 0xA2, 0xDA, 0x0F, 0x1E, 0x28};
IPAddress ip(192, 168, 178, 45); // IP address, may need to change depending on network
byte gateway[] = { 192, 168, 178, 1 };
byte subnet[] = { 255, 255, 255, 0 };
EthernetServer server(80);  // create a server at port 80
File webFile;
char HTTP_req[REQ_BUF_SZ] = {0}; // buffered HTTP request stored as null terminated string
char req_index = 0;              // index into HTTP_req buffer


SoftwareSerial cameraconnection = SoftwareSerial(69, 3);
Adafruit_VC0706 cam = Adafruit_VC0706(&cameraconnection);

//*************************** void setup ********************************

void setup()
{
    // disable Ethernet chip
    pinMode(10, OUTPUT);
    digitalWrite(10, HIGH);
    
// Open serial communications:
  Serial.begin(9600);

// start the Ethernet connection and the server:
  Ethernet.begin(mac, ip, gateway, subnet);
  server.begin();

  Serial.println(Ethernet.localIP());  

    
    // initialize SD card
    Serial.println(F("Ini SD"));
    if (!SD.begin(4)) {
        Serial.println(F("SD failed!"));
        return;    // init failed
    }

    // check for index.htm file
    if (!SD.exists("index.htm")) {
        Serial.println(F("ERROR - Can't find index.htm file!"));
        return;  // can't find index file
    }
    Serial.println(F("index.htm found"));
    
}

// **************  void loop  ***********************

void loop()
{
  EthernetClient client = server.available();  // try to get client

    if (client) {  // got client?
        boolean currentLineIsBlank = true;
        while (client.connected()) {
            if (client.available()) {   // client data available to read
                char c = client.read(); // read 1 byte (character) from client
                // buffer first part of HTTP request in HTTP_req array (string)
                // leave last element in array as 0 to null terminate string (REQ_BUF_SZ - 1)

               if (req_index < (REQ_BUF_SZ - 1)) {
                    HTTP_req[req_index] = c;          // save HTTP request character
                    req_index++;
                }

                // print HTTP request character to serial monitor
                Serial.print(c);
                // last line of client request is blank and ends with \n
                // respond to client only after last line received
                if (c == '\n' && currentLineIsBlank) {
                    // open requested web page file
                    if (StrContains(HTTP_req, "GET / ")
                                 || StrContains(HTTP_req, "GET /index.htm")) {
    Serial.println(freeRam());  // Speicherbedarf ermitteln
                        client.println("HTTP/1.1 200 OK");
                        client.println("Content-Type: text/html");
                        client.println("Connnection: close");
                        client.println();
                        webFile = SD.open("index.htm");        // open web page file
                    }

                    if (StrContains(HTTP_req, "GET /IMAGE.JPG")) {
                        webFile = SD.open("IMAGE.JPG");
                        if (webFile) {
                            client.println("HTTP/1.1 200 OK");
                            client.println();
                        }
                    }
                
          
               if (StrContains(HTTP_req, "GET /TakingPicture")) {
                              client.println("HTTP/1.1 200 OK");
                              client.println("Content-Type: text/html");
                             client.println("Connnection: close");
                             client.println();  
                        
                          Serial.println(F("Button -pressed!"));                        
                        
                            
                          Serial.println(F("VC0706 test"));
                        
                        
                              // Try to locate the camera
                             if (cam.begin()) {
                                 Serial.println(F("Camera Found:"));
                              } else {
                                 Serial.println(F("No camera found?"));
                                 return;
                               }

                               // Existing image remove
                                SD.remove("IMAGE.JPG");

                               // Set the picture size - you can choose one of 640x480, 320x240 or 160x120
                                  //cam.setImageSize(VC0706_640x480);        // biggest
                                  cam.setImageSize(VC0706_320x240);        // medium
                                  //cam.setImageSize(VC0706_160x120);          // small

                               // You can read the size back from the camera (optional, but maybe useful?)
                                  uint8_t imgsize = cam.getImageSize();
                                  if (imgsize == VC0706_640x480) Serial.println("640x480");
                                  if (imgsize == VC0706_320x240) Serial.println("320x240");
                                  if (imgsize == VC0706_160x120) Serial.println("160x120");

                                  Serial.println(F("Snap in 3 secs..."));
                                    delay(3000);

                                   if (! cam.takePicture())
                                       Serial.println(F("Failed to snap!"));
                                    else
                                       Serial.println(F("Picture taken!"));
  
                                    // Create an image with the name IMAGE.JPG
                                       char filename[10];
                                       strcpy(filename, "IMAGE.JPG");
                                    // Open the file for writing
                                       File imgFile = SD.open(filename, FILE_WRITE);

                                    // Get the size of the image (frame) taken  
                                       uint16_t jpglen = cam.frameLength();
                                    //   Serial.print("Storing ");
                                    //   Serial.print(jpglen, DEC);
                                    //   Serial.print(" byte image.");

                                       int32_t time = millis();
  
                                       pinMode(4, OUTPUT);
                                       // Read all the data up to # bytes!
                                       byte wCount = 0; // For counting # of writes
                                     while (jpglen > 0) {
                                       // read 32 bytes at a time;
                                       uint8_t *buffer;
                                       uint8_t bytesToRead = min(32, jpglen); // change 32 to 64 for a speedup but may not work with all setups!
                                       buffer = cam.readPicture(bytesToRead);
                                       imgFile.write(buffer, bytesToRead);
                                       jpglen -= bytesToRead;
                                      }
                                       imgFile.close();
                                    //   time = millis() - time;
                                      Serial.println("done!");
                                    //   Serial.print(time); Serial.println(" ms elapsed");
                        
                                      webFile = SD.open("index.htm");       // open web page file
                                
                                   }
          
                    if (webFile) {
                        while(webFile.available()) {
                            client.write(webFile.read()); // send web page to client
                        }
                        webFile.close();
                    }
                    
                    // reset buffer index and all buffer elements to 0
                    req_index = 0;
                    StrClear(HTTP_req, REQ_BUF_SZ);
                    break;
                }
                // every line of text received from the client ends with \r\n
                if (c == '\n') {
                    // last character on line of received text
                    // starting new line with next character read
                    currentLineIsBlank = true;
                }
                else if (c != '\r') {
                    // a text character was received from client
                    currentLineIsBlank = false;
                }
            } // end if (client.available())
        } // end while (client.connected())
        delay(1);      // give the web browser time to receive the data
        client.stop(); // close the connection
    } // end if (client)
}

/**********************StrClear *********************/

// sets every element of str to 0 (clears array)
void StrClear(char *str, char length)
{
    for (int i = 0; i < length; i++) {
        str[i] = 0;
    }
}
/**********************StrContains *********************/
// searches for the string sfind in the string str
// returns 1 if string found
// returns 0 if string not found
char StrContains(char *str, char *sfind)
{
    char found = 0;
    char index = 0;
    char len;

    len = strlen(str);
    
    if (strlen(sfind) > len) {
        return 0;
    }
    while (index < len) {
        if (str[index] == sfind[found]) {
            found++;
            if (strlen(sfind) == found) {
                return 1;
            }
        }
        else {
            found = 0;
        }
        index++;
    }

    return 0;
}



// ********************* Speicherbedarf ermittel  ***************************
int freeRam ()
{
  extern int __heap_start, *__brkval;
  int v;
  return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
};


Und die Ausgabe auf Serial Monitor:

Code:
192.168.178.45
Ini SD
index.htm found
GET / HTTP/1.1
Host: 4711engel.ddns.net
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:38.0) Gecko/20100101 Firefox/38.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Cache-Control: max-age=0

6054
GET /IMAGE.JPG HTTP/1.1
Host: 4711engel.ddns.net
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:38.0) Gecko/20100101 Firefox/38.0
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://4711engel.ddns.net/
Connection: keep-alive
Cache-Control: max-age=0

GET /TakingPicture?Take+Picture= HTTP/1.1
Host: 4711engel.ddns.net
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:38.0) Gecko/20100101 Firefox/38.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://4711engel.ddns.net/
Connection: keep-alive

Button -pressed!
VC0706 test

Camera Found:


Snap in 3 secs...

Picture taken!




done!
GET /IMAGE.JPG HTTP/1.1
Host: 4711engel.ddns.net
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:38.0) Gecko/20100101 Firefox/38.0
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://4711engel.ddns.net/TakingPicture?Take+Picture=
Connection: keep-alive

Sieht eigentlich wie gehabt gut aus.

ABER: Das Bild auf der SD-Card wird nicht richtig abgespeichert. Am PC erhalte ich die Fehlermeldung, dass die Datei defekt ist.

Hat jemand vielleicht eine Idee warum? Die Dateigröße ist vergleichbar mit den Bildern sonst. Vielleicht wird beim Speichern nur die Datei nicht richtig geschlossen???
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.06.2015, 18:57
Beitrag #37
RE: Ethernet-WebServer: Button-Belegung
Hi,
bist Du Dir sicher, dass der Chip-Select auf dem Mega auch Pin 10 ist? Ist das nicht Pin 53? (Ich habe selbst keinen Mega...)
Falls es das nicht ist, dann würde ich an Deiner Stelle mal einen kleinen Test-Sketch schreiben, der einfach mal ein bisschen Text in eine Datei auf der SD-Karte schreibt. Vielleicht kann man daran was erkennen.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
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 UNO und Ethernet Shield 2 POE und Fritzbox 3272 tr3 2 149 19.11.2016 10:46
Letzter Beitrag: tr3
  ESP8266 ESP12-E Webserver-Frage Claus_M 8 236 14.11.2016 22:02
Letzter Beitrag: Claus_M
  Webserver + Bild als Hintergrund ?! Marc2014 8 244 11.10.2016 21:39
Letzter Beitrag: Bitklopfer
  Ethernet Modul Enc28j60 Pin13 LED Schalten BennIY 16 491 27.09.2016 20:30
Letzter Beitrag: BennIY
  ESP8266 Webserver Programmieren HDT 11 752 23.08.2016 13:28
Letzter Beitrag: HDT
  Hilfe gesucht. Webserver Statsiche und Dynamische HTMl Seite b3ta 11 447 22.08.2016 08:07
Letzter Beitrag: b3ta
  ESP8266 Webserver Marc2014 0 345 30.07.2016 20:15
Letzter Beitrag: Marc2014
Question Webserver, Client, Loop Marc2014 6 362 29.07.2016 21:04
Letzter Beitrag: Marc2014
Sad Die Grafik Kontakt/Pin Belegung ATtiny 85 malsehen 3 258 15.07.2016 19:31
Letzter Beitrag: hotsystems
  Frage zu One Button in Kombination mit Fast LED Wolfgang_2801 3 238 26.06.2016 22:11
Letzter Beitrag: hotsystems

Gehe zu:


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