Forum: Compiler & IDEs ESP8266 - SD-Kartenleser und FTP-Server ohne Funktion mit Arduino


von I- A. (Gast)


Lesenswert?

Guten Tag,

ich habe ein kleines Problem mit meinem ESP8266 und den darauf
verbundenen SD-Kartenleser sowie einem FTP-Server.
Ich versuche auf einem ESP8266 mit der Arduino IDE einen FTP-Server zu
erstellen und die darauf liegenden Daten (.txt Datei) auszulesen. Der
FTP-Server funktioniert, sodass ich Daten auf dem Server Speichern kann 
(außer einigen timeouts einwandfrei), aber
leider kann er die Daten nicht abrufen die auf dem Server liegen.
Zu meinem Code:
1
#define FS_NO_GLOBALS
2
#include <ESP8266WiFi.h>
3
#include <ESP8266FtpServer.h>
4
5
const char* ssid = "xxx";
6
const char* password = "xxx";
7
8
FtpServer ftpSrv;
9
10
#include <SPI.h>
11
#include <SD.h>
12
13
File myFile;
14
15
void setup()
16
{
17
  Serial.begin(115200);
18
  WiFi.begin(ssid, password);
19
  Serial.println("");
20
21
  // Wait for connection
22
  while (WiFi.status() != WL_CONNECTED) 
23
  {
24
    delay(500);
25
    Serial.print(".");
26
  }
27
  Serial.println("");
28
  Serial.print("Connected to ");
29
  Serial.println(ssid);
30
  Serial.print("IP address: ");
31
  Serial.println(WiFi.localIP());
32
33
if (!SD.begin(4))
34
  {
35
    Serial.println("initialization failed!");
36
    return;
37
  }
38
  Serial.println("initialization done.");
39
  // open the file for reading:
40
  myFile = SD.open("/Meeting.txt");
41
  if (myFile)
42
  {
43
    // read from the file until there's nothing else in it:
44
    while (myFile.available())
45
    {
46
      Serial.write(myFile.read());
47
    }
48
    // close the file:
49
    myFile.close();
50
  }
51
  else
52
  {
53
    // if the file didn't open, print an error:
54
    Serial.println("error opening Meeting.txt");
55
  }
56
57
  /////FTP Setup, ensure SPIFFS is started before ftp;  /////////
58
  if (SPIFFS.begin())
59
  {
60
      Serial.println("SPIFFS opened!");
61
      ftpSrv.begin("xxx","xxx");    //username, password for ftp.  set ports in ESP8266FtpServer.h  (default 21, 50009 for PASV)
62
  }
63
}
64
65
void loop()
66
{
67
  byte inChar;
68
  inChar = Serial.read();
69
  if(inChar == 'e')
70
  {
71
    myFile = SD.open("/Meeting.txt");
72
  if (myFile)
73
  {
74
    // read from the file until there's nothing else in it:
75
    while (myFile.available())
76
    {
77
      Serial.write(myFile.read());
78
    }
79
    // close the file:
80
    myFile.close();
81
  }
82
  else
83
  {
84
    // if the file didn't open, print an error:
85
    Serial.println("error opening Meeting.txt");
86
  }
87
  }
88
  ftpSrv.handleFTP();
89
}

Bei den "xxx" Felder habe ich selbstverständlich meine eigenen Daten
eingefügt.
In der "loop" frage ich mit dem Buchstaben "e" die Daten ab, ob sie
verfügbar sind oder nicht.
Der SD-Kartenleser ist mit 6pins Verbunden(CS, SCK, MOSI, MISO, VCC und
GND) und der Spannungsregler auf der Platine wurde rausgelötet, sodass
er mit 3v3 Funktioniert. Dazu wird eine 4GB micro SDcard verwendet von
Verbatim.

Es wäre super, wenn einige User Hilfestellungen oder Lösungen parat
haben.

MfG
I-Azubi

Als ESP8266 verwende ich folgenden:
https://www.amazon.de/Waveshare-Universal-Driver-Board-ESP8266/dp/B07BJ4J1T9/ref=sr_1_fkmrnull_3?__mk_de_DE=%C3%85M%C3%85%C5%BD%C3%95%C3%91&keywords=Universal+e-Paper+Driver+Board+with+WiFi+SoC+ESP8266&qid=1552556697&s=computers&sr=1-3-fkmrnull

und als SD-Kartenleser:
https://www.amazon.de/gp/product/B077MCQS9P/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1

von Εrnst B. (ernst)


Lesenswert?

I- A. schrieb:
> inChar = Serial.read();

Blockiert deine Loop, wenn kein Zeichen eingegangen ist

=>

  ftpSrv.handleFTP();

Kriegt keine Rechenzeit.


Bau ein "if (Serial.available()) {" Aussenherum

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.