Arduino webserver pagina
16 berichten
• Pagina 1 van 2 • 1, 2
Arduino webserver pagina
Hallo,
Ik heb een Arduino DUE en een ENC28J60 (Ethernet module).
Ik ben al een paar dagen bezig, om een pagina op te stellen via een SD Card.
Telkens als ik de code "StrContains" toevoeg aan mijn sketch, geeft hij de volgende melding:
exit status 1
'StrContains' was not declared in this scope
Ik heb zelf niet kunnen ontdekken hoe ik dit kan oplossen.
De code die ik hier voor gebruik:
Ik hoop dat iemand mij hier bij kan helpen.
Alvast bedankt voor alle hulp.
Mvg,
Marco
Ik heb een Arduino DUE en een ENC28J60 (Ethernet module).
Ik ben al een paar dagen bezig, om een pagina op te stellen via een SD Card.
Telkens als ik de code "StrContains" toevoeg aan mijn sketch, geeft hij de volgende melding:
exit status 1
'StrContains' was not declared in this scope
Ik heb zelf niet kunnen ontdekken hoe ik dit kan oplossen.
De code die ik hier voor gebruik:
- Code: Alles selecteren
void loop() {
EthernetClient client = server.available();
if(client) {
Serial.println("new client");
boolean currentLineIsBlank = true;
while(client.connected()) {
if(client.available()) {
char c = client.read();
Serial.write(c);
delay(1);
if(c == '\n' && currentLineIsBlank) {
Serial.println("Print page...");
delay(1);
if(StrContains(HTTP_req, "GET /index.htm")) {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connnection: close");
client.println();
webFile = SD.open("index.htm");
} else if(StrContains(HTTP_req, "GET /sfm_logo.png")) {
webFile = SD.open("sfm_logo.png");
if(webFile) {
client.println("HTTP/1.1 200 OK");
client.println();
}
}
if(webFile) {
while(webFile.available()) {
client.write(webFile.read());
}
webFile.close();
}
break;
}
if(c == '\n') {
currentLineIsBlank = true;
} else if(c != '\r') {
currentLineIsBlank = false;
}
}
}
delay(1);
client.stop();
Serial.println("client disconnected");
}
}
Ik hoop dat iemand mij hier bij kan helpen.
Alvast bedankt voor alle hulp.
Mvg,
Marco
Beginner Arduino DUE.
Advertisement
- Gij Kieken
- Berichten: 631
- Geregistreerd: 15 Nov 2015, 11:54
Re: Arduino webserver pagina
Declaraties ontbreken & Set-up ontbreekt
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Arduino webserver pagina
En een keer de ctrl-t knop gebruiken kan ook een kwaad
Re: Arduino webserver pagina
Heb ctrl-t gebruikt.
Wist niet, dat dat automatisch opmaak is.
Hier de hele code:
cpp code
Wist niet, dat dat automatisch opmaak is.
Hier de hele code:
cpp code
#include <SPI.h>
#include <SD.h>
#include <TFT.h>
#include <UIPEthernet.h>
#include <UIPServer.h>
#include <UIPClient.h>
#define cs 52
#define dc 9
#define rst 8
#define sd_cs 4
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IPAddress ip(192, 168, 0, 7);
EthernetServer server(80);
TFT screen = TFT(cs, dc, rst);
PImage logo;
File webFile;
char HTTP_req = {0};
char req_index = 0;
void setup() {
Serial.begin(9600);
SPI.begin();
Ethernet.begin(mac, ip);
server.begin();
Serial.print("server run on IP ");
Serial.println(Ethernet.localIP());
screen.begin();
screen.background(255, 255, 255);
screen.stroke(0, 0, 0);
screen.setTextSize(2);
screen.text("Testing!", 10, 10);
Serial.print("Initializing SD card...");
if (!SD.begin(sd_cs)) {
Serial.println("failed!");
return;
}
Serial.println("OK!");
logo = screen.loadImage("logo.bmp");
if (!logo.isValid()) {
Serial.println("error while loading logo.bmp");
}
if (!SD.exists("page.php")) {
Serial.println("ERROR - Can't find page.php file!");
return;
}
Serial.println("SUCCESS - Found page.php file.");
}
void loop() {
EthernetClient client = server.available();
if (client) {
Serial.println("new client");
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
delay(1);
if (c == '\n' && currentLineIsBlank) {
Serial.println("Print page...");
delay(1);
if (StrContains(HTTP_req, "GET /index.htm")) {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connnection: close");
client.println();
webFile = SD.open("index.htm");
} else if (StrContains(HTTP_req, "GET /sfm_logo.png")) {
webFile = SD.open("sfm_logo.png");
if (webFile) {
client.println("HTTP/1.1 200 OK");
client.println();
}
}
if (webFile) {
while (webFile.available()) {
client.write(webFile.read());
}
webFile.close();
}
break;
}
if (c == '\n') {
currentLineIsBlank = true;
} else if (c != '\r') {
currentLineIsBlank = false;
}
}
}
delay(1);
client.stop();
Serial.println("client disconnected");
}
}
Beginner Arduino DUE.
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Arduino webserver pagina
Ik weet niet waar je deze sketch vandaan hebt, maar er moet ook een functie zijn StrContains in beschreven zijn.
En als je even had gegoogled had je bijvoorbeeld deze volledig ongedocumenteerde variant kunnen vinden:
cpp code
En als je even had gegoogled had je bijvoorbeeld deze volledig ongedocumenteerde variant kunnen vinden:
cpp code
// 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;
}
Re: Arduino webserver pagina
Ik heb hem via http://startingelectronics.org/tutorial ... ver-image/
Heb ook via Google gezocht naar StrContains.
Heb ook via Google gezocht naar StrContains.
Beginner Arduino DUE.
Re: Arduino webserver pagina
@nicoverduin, kan dit ook ?
@SpeedFM, dat voorbeeld is misschien een werkend voorbeeld, maar je kunt niet zomaar allerlei regels weglaten. Vergelijk nog eens goed die code met wat jij hebt. Ik vind het niet een heel goed voorbeeld. Mijn voorkeur is deze: https://playground.arduino.cc/Code/WebServerST
Je controleert op het bestaan van "logo.bmp" en "page.php", maar vervolgens gebruik je "index.htm" en "sfm_logo.png".
Je hebt commentaar weggelaten, terwijl dat commentaar het beste onderdeel van dat voorbeeld is.
Jouw 'HTTP_req' is maar één byte groot, en je vult het niet met binnengekomen data. Dat voorbeeld heeft een buffer die wel gevuld wordt.
Wanneer je al een Arduino Due hebt, dan lijkt het me verstandig om de Arduino Ethernet Shield 2 te kopen.
Ook bij een png bestand is het beter om een content type toe te voegen.
Een lokaal IP adres met "192.168.0.7" vind ik vreemd. Voor zover ik weet is de instelling voor routers default "192.168.1.....".
Volgens mij heb ik https://startingelectronics.org/ vaker bekeken. De webserver gaat stapje voor stapje van eenvoudig naar ingewikkeld. Dat is heel leerzijn. Het lijkt echter alsof de code door één persoon is geschreven, die de Arduino eigenaardigheden niet volledig kent. Mijn stokpaardjes zijn millis() en I2C, en beide worden verkeerd gebruikt op die website.
- Code: Alles selecteren
boolean StrContains(char *str, char *sfind)
{
return( strstr( str, sfind) != nullptr);
}
@SpeedFM, dat voorbeeld is misschien een werkend voorbeeld, maar je kunt niet zomaar allerlei regels weglaten. Vergelijk nog eens goed die code met wat jij hebt. Ik vind het niet een heel goed voorbeeld. Mijn voorkeur is deze: https://playground.arduino.cc/Code/WebServerST
Je controleert op het bestaan van "logo.bmp" en "page.php", maar vervolgens gebruik je "index.htm" en "sfm_logo.png".
Je hebt commentaar weggelaten, terwijl dat commentaar het beste onderdeel van dat voorbeeld is.
Jouw 'HTTP_req' is maar één byte groot, en je vult het niet met binnengekomen data. Dat voorbeeld heeft een buffer die wel gevuld wordt.
Wanneer je al een Arduino Due hebt, dan lijkt het me verstandig om de Arduino Ethernet Shield 2 te kopen.
Ook bij een png bestand is het beter om een content type toe te voegen.
Een lokaal IP adres met "192.168.0.7" vind ik vreemd. Voor zover ik weet is de instelling voor routers default "192.168.1.....".
Volgens mij heb ik https://startingelectronics.org/ vaker bekeken. De webserver gaat stapje voor stapje van eenvoudig naar ingewikkeld. Dat is heel leerzijn. Het lijkt echter alsof de code door één persoon is geschreven, die de Arduino eigenaardigheden niet volledig kent. Mijn stokpaardjes zijn millis() en I2C, en beide worden verkeerd gebruikt op die website.
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Arduino webserver pagina
@koepel: Werkt als een tierelier. ff op een STM32 bordje gedraaid. Maar dat maakt niet uit
cpp code
192.168.0.x kan ook hoor. bekende ranges 10.0.x.x, 192.168.0.x, 192.168.1.x, 192.168.178.x. Eigenlijk maakt het geen bal uit. Is is gewoon een subdomein. Als je er meerdere zou hebben kun je bijv. meerdere ranges gebruiken. Soms doet de router dat zelf als er al een range gedefinieerd is. Netgear schakelt bij mij naar 10.0.0.x als 192.168.1.x in gebruik is.
cpp code
#include "Arduino.h"
char tekstString[] = {"Dit is ff een testje met een zoekstring"};
char zoekArgumenten[5][50] = {
{"testje"},
{"met een zoeksting"},
{"ff een testjemet"},
{"ff een testje met"},
{"Dit is ff een testje met een zoekstring"}
};
void setup() {
Serial.begin(115200);
for (uint8_t i = 0; i < 5; i++) {
Serial.print("Argument : \"");
Serial.print(zoekArgumenten[i]);
Serial.print("\"");
if (!StrContains(tekstString, zoekArgumenten[i])) {
Serial.print(" niet");
}
Serial.print(" gevonden in string: \"");
Serial.print(tekstString);
Serial.println("\"");
}
}
// The loop function is called in an endless loop
void loop() {
}
/**
* StrContains
* @param str bron waarin gezocht wordt
* @param sfind Zoek argument
* @return true als aanwezig, false als niet
* Voorstel van Koepel
*/
bool StrContains(char *str, char *sfind)
{
return( strstr( str, sfind) != NULL); // bij STM32 nullptr vervangen voor NULL
}
192.168.0.x kan ook hoor. bekende ranges 10.0.x.x, 192.168.0.x, 192.168.1.x, 192.168.178.x. Eigenlijk maakt het geen bal uit. Is is gewoon een subdomein. Als je er meerdere zou hebben kun je bijv. meerdere ranges gebruiken. Soms doet de router dat zelf als er al een range gedefinieerd is. Netgear schakelt bij mij naar 10.0.0.x als 192.168.1.x in gebruik is.
Re: Arduino webserver pagina
Ik heb de code ingevoerd, nu krijg ik steeds een foutmelding.
exit status 1
Fout bij het compileren van board Arduino Due (Programming Port)
Enig idee wat dit kan zijn?
exit status 1
Fout bij het compileren van board Arduino Due (Programming Port)
Enig idee wat dit kan zijn?
Beginner Arduino DUE.
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Arduino webserver pagina
Heb je wel de uitgebreide compileer en download berichten aangevinkt bij instellngen?
En dit al eens gelezen? https://www.arduino.cc/en/Guide/ArduinoDue
En dit al eens gelezen? https://www.arduino.cc/en/Guide/ArduinoDue
16 berichten
• Pagina 1 van 2 • 1, 2
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 8 gasten