Servidor de archivos Micro-SD con D1 Mini

Este documento describe un uso Mini - D1 Se puede descargar el contenido de la tarjeta micro SDA.Cuando el Lector de tarjetas entre, Memoria miniatura Para uso.El hardware es sencillo.Los módulos de lectura de tarjetas y D1 - mini están conectados a través del bus SPI.Ver el circuito.

Circuito:

 

Imprimir el archivo STL adecuado para el exterior Delgado

 

Dibujo:

 

/*
 • Copyright propietario c) 2015, majenko Technologies
 Conserva todos los derechos.
 * 
 • redistribución y utilización en forma de fuente y binario, con o sin modificaciones,
 • Se permiten las siguientes condiciones:
 * 
 * * Esta declaración de derechos de autor debe conservarse para la nueva distribución del código fuente.
 * Lista de condiciones y descargo de responsabilidad
 * 
 * * La retransmisión en forma binaria requiere la reproducción de la mencionada declaración de derechos de autor.
 * Lista de condiciones en el documento y declaraciones de exoneración y / o
 * otros materiales adjuntos.
 * 
 * * ya sea el nombre o la tecnología de majenko.
 • Los contribuyentes pueden ser utilizados para apoyar o reproducir fuentes
 * Este programa informático no está previamente autorizado por escrito.
 * 
 * Este programa informático fue proporcionado "tal como fue" por el propietario y el contribuyente del derecho de autor; y
 • Toda garantía expresa o tácita, incluida, entre otras, las siguientes:
 * las garantías de la comerciabilidad y la aplicabilidad a usos específicos son:
 * negación.En cualquier caso, el titular o el contribuyente del derecho de autor no incurrirá en responsabilidad alguna.
 • Cualesquiera datos directos, indirectos, secundarios, especiales, ilustrativos o de seguimiento
 • La contratación pública de bienes o servicios de sustitución, entre otros;
 • Pérdida de uso, datos o beneficios; o interrupción de la actividad mercantil, sea cual fuere la causa
 • Toda doctrina de la responsabilidad, sea contractual, objetiva o extracontractual
 * Incluye los casos de negligencia u otras causas atribuibles a la utilización del presente documento.
 * programas informáticos, aun cuando se les haya informado de la posibilidad o del daño.
 */

• • Creamos un servidor Web como punto de acceso que proporciona contenido de micro sdka
 Zuzm descargando.
 SPI Introduction to SDA
 D5 = GPS 14 como reloj
 D6 = gpio12 como mi
 D7 = gpio13 como Mosi
 D8 = gpio15 como selección de chips
  
 SSID = servidor SD
 Contraseña = micro
   
*/

/ / biblioteca WiFi + cliente + servidor web
35; incluye <Esp8266wifi.Hora>
35; incluye <Wificlient Inc..Hora> 
35; incluye <Servidor web esp8266.Hora>
/ / PHI bus Storage
35; incluye <Proteína de separación.Hora>
Biblioteca del sistema de archivo de documentos SDA
35; incluye <Sdfat Corporation.Hora>

Constante Reino Selección de chips = SS;


Plantilla de página HTML
Constante Chamuscar Título HTML[] =
"Y?"Doctype HTML & gt
"; HTML & gt;"
"; la cabeza y la gt;"
"& lt; meta =" nombre = "ViewPort =" Content = "width = anchura del equipo, relación inicial = 1,0, relación máxima = 1,0, tasa de crecimiento del usuario = 0 & gt;"
"& lt; title & gt; sdka Reader & lt; title & gt;"
"& lt; modelo & gt;"
Texto principal {color de fondo:}: 35; d2f3eb; serie de caracteres: Arial, Helvetica, sans - serif; COLOR: ` 35; 000 000 000; tamaño de la letra: 12 PT;}
"& lt; / Style & gt;"
"/ cabeza & gt;"
"& lt; cuerpo & gt; & lt; div style =" MARGIN - LEFT: 30 px;; "gt;";
Constante Chamuscar Fin del HTML[] =
"Y & lt; / div & gt; & lt; / Body & gt;"
"/ html & gt;";

Global variable
/ / ejemplo de banco sdfat
 Sdfat Corporation Hora prevista de despegue;
 Variable global de objeto para guardar archivos y directorios
 Documento sdfile Documentación;
 Documento sdfile Archivo de directorio;
Punto de acceso
Constante Chamuscar *Página 2 = Servidor SD - 6; Nombre de la WLAN 
Constante Chamuscar *Contraseña = "Miniatura"; Contraseña de WLAN
Marcador de inicialización de la SDA
Bourg Dinette. = Falso;



Servidor web esp8266 Servidor(80); Activar servidor Web en puerto 80

La función determina el tipo de contenido según el final del documento
Cadena Obtener contenido(Cadena Nombre del archivo){   Si(Servidor.Hassage.("Descargando")) Regreso "Aplicación / flujo de bytes de ocho bits";   Hora prevista de despegue Si(Nombre del archivo.Final("Calor".)) Regreso "Texto / html";   Hora prevista de despegue Si(Nombre del archivo.Final("...html.")) Regreso "Texto / html";   Hora prevista de despegue Si(Nombre del archivo.Final("CSS".)) Regreso "Texto / CSS";   Hora prevista de despegue Si(Nombre del archivo.Final("Js")) Regreso "Aplicación / javascript";   Hora prevista de despegue Si(Nombre del archivo.Final(Papua Nueva Guinea)) Regreso "Imagen / PNG";   Hora prevista de despegue Si(Nombre del archivo.Final("Veneno".)) Regreso "Imagen / veneno";   Hora prevista de despegue Si(Nombre del archivo.Final("Gobierno del Japón")) Regreso "Imagen / JPEG";   Hora prevista de despegue Si(Nombre del archivo.Final("Ico")) Regreso "Imagen / X - icono";   Hora prevista de despegue Si(Nombre del archivo.Final("Xml")) Regreso "Texto / xml";   Hora prevista de despegue Si(Nombre del archivo.Final("... documento pdf")) Regreso "Aplicación / X - pdf";   Hora prevista de despegue Si(Nombre del archivo.Final("Cremallera")) Regreso "Aplicación / X - zip";   Hora prevista de despegue Si(Nombre del archivo.Final(Guangzhou.)) Regreso "Aplicación / X - gzip";   Regreso "Texto / texto puro";
}

/ / / función de envío de archivo
Parámetros de ruta y nombre de archivo
Bourg Enviar archivo(Cadena Ruta, Cadena Socio limitado) {   Chamuscar Compañia cPath[512];   UIT 32 Tamaño del archivo;   Cadena Tipo de contenido;   Chamuscar Nombre de empresa[256];   Documentación Mis archivos.;   Crear un nombre de archivo completo    / / / y guardar en el Grupo de caracteres   Ruta = Ruta+"/"+Socio limitado;   Ruta.Torre la Rey(Compañia cPath,512);   Convertir el nombre del archivo en letra pequeña   Establecer el tipo de archivo   Socio limitado.Escritura();   Tipo de contenido = Obtener contenido(Socio limitado);   Abre el archivo de la SDA.   Mis archivos. = Hora prevista de despegue.Abrir(Ruta, O lectura);   / / / transmisión fluida al servidor web   Servidor.Flujo de archivos(Mis archivos., Tipo de contenido);   Cerrar archivo   Documentación.Cerrar();   Regreso ¿En serio?;

}

Enviar directorio de archivos
Bourg Enviar directorio(Cadena Ruta) {   Chamuscar Compañia cPath[512];   Criterios uint16 N. = 0;   Chamuscar Nombre de empresa[256];   Cadena Lista de subcategorías;   Cadena Origen;   Cadena Nombre;      Ruta.Torre la Rey(Compañia cPath,512);   - Intentamos abrir el camino.   Si (Archivo de directorio.Abrir(Compañia cPath, O lectura)) {     Si la operación ha tenido éxito, fijamos la longitud del contenido como desconocida.     Servidor.Longitud del contenido(Contenido desconocido);     / / / y enviar el título     Servidor.Enviar(200,  "Texto / html",Título HTML);     Wificlient Inc. Cliente = Servidor.Cliente();     Si (Ruta != "/") {       / / si la ruta no apunta a un directorio raíz, añadir       - / / / y... "Fórmense en fila y vuelvan al avión.       Origen = Ruta;       - Necesitamos la lista de arriba.       Origen.Eliminar(Origen.Carga("/"));       / / / desde este formulario enviamos enlaces a nuestros clientes       Servidor.Enviar contenido(¿"& lt; A href =" http: / / 192.168.4.1 /?Índice = ");       Servidor.Enviar contenido(Origen);       Servidor.Enviar contenido((En miles de dólares EE.UU.);     }     / / / ahora, por fila de la entrada de índice     Aunque (Documentación.Abrir(&Archivo de directorio, O lectura)) {       - a la izquierda. - hemos trazado la ruta.       Servidor.Enviar contenido(¿"& lt; A href =" http: / / 192.168.4.1 /?Índice = ");       Servidor.Enviar contenido(Ruta);       Leer el nombre del archivo       Documentación.Obtener nombre(Nombre de empresa,255);         Nombre = Cadena(Nombre de empresa);       Si (Documentación.Isdir Corporation()) {         / / si la entrada es una subcategoría         / / / añadiremos esto a la ruta y lo conectaremos         Lista de subcategorías = "/"+Nombre;         Servidor.Enviar contenido(Lista de subcategorías);          Servidor.Enviar contenido("'>");            } Hora prevista de despegue {         ¿Es un archivo sencillo que hemos añadido al nombre del archivo?         Servidor.Enviar contenido("Y FN =");         Servidor.Enviar contenido(Nombre);         En el enlace, añadiremos "target =" a los archivos         Abrir en una ventana separada.         - Entonces cerramos la conexión.         Servidor.Enviar contenido("Target = & gt;");       }       Seguir el nombre como etiqueta al final del enlace       Servidor.Enviar contenido(Nombre);       / / / fin del enlace y previsualización de líneas       Servidor.Enviar contenido("; A & gt; & lt; BR & gt;");      Cerrar archivo      Documentación.Cerrar();    }    / / el directorio se cerrará cuando se hayan enviado todas las entradas    Archivo de directorio.Cerrar();    Notificación del contenido del cliente y terminación de la conexión    Servidor.Enviar contenido(Fin del HTML);    cliente.parar();    volver cierto;   } otra cosa {     volver falso;// error la ruta no se pudo abrir   }

}
// Esta función se llama cuando la solicitud al servidor web = "/"
nulo manejarRoot() {   // Rellene el nombre y la ruta del archivo con los valores predeterminados   Cadena camino = "/";   Cadena fn = "";   // Si la solicitud contiene argumentos apropiados   // Rellene la ruta y el nombre del archivo con los datos de la solicitud   si (servidor.hasArg("USTED")) camino = servidor.mal("USTED");   si (servidor.hasArg("FN")) fn = servidor.mal("FN");   De serie.imprimir("Camino");De serie.imprimir(camino);De serie.imprimir("Archivo:");De serie.println(fn);   Cadena nombre;   // Si la tarjeta SD aún no se ha inicializado, inicialícela   si (!sdinit) sdinit = sd.comenzar(chipSelect, SD_SCK_MHZ(50));   si (sdinit) {     // Si la inicialización fue exitosa, leemos los datos de la tarjeta     si (fn=="") {       // Si no se dio ningún nombre de archivo, intentamos enviar un directorio       si (!sendDirectory(camino)) {         // Si no se pudo enviar el directorio, configuramos sdinit en falso         // Ya que aparentemente no hay tarjeta en el lector. Enviamos una advertencia al cliente.         sdinit = falso;         servidor.enviar(200, "texto / html", "Sin tarjeta SD");       }     } otra cosa {       // De lo contrario, intentamos enviar el archivo especificado       si (!sendFile(camino,fn)) {         // Si no se pudo enviar el directorio, configuramos sdinit en falso         // Ya que aparentemente no hay tarjeta en el lector. Enviamos una advertencia al cliente.         sdinit = falso;         servidor.enviar(200, "texto / html", "Sin tarjeta SD");       }     }   } otra cosa {     // Inicialización fallida     servidor.enviar(200, "texto / html", "Sin tarjeta SD");   }
}

// Prepara el procesador
nulo configuración() {   De serie.comenzar(115200);   De serie.println();   De serie.imprimir("Configurando el punto de acceso ...");   // Configurar el punto de acceso   WiFi.softAP(ssid, contraseña);   IPAddress myIP = WiFi.softAPIP();   De serie.imprimir("Dirección IP AP:");   De serie.println(myIP);   // ip siempre es 192.168.4.1   // Definición de las funciones de respuesta   servidor.en("/", manejarRoot);   // iniciar servidor web   servidor.comenzar();   De serie.println("Servidor HTTP iniciado");
}

// lazo principal
nulo bucle() {   // Verificar solicitud   servidor.handleClient();
}

 

 

Espero que esta publicación haya sido útil y, como siempre, estoy contento con los comentarios y sugerencias. Hasta entonces, ¡que tengas un buen fin de semana!

Precipitador electrostático - 8266Projekte für anfänger

8 comentarios

fritzoskar

fritzoskar

Gibt es einen funktionierenden Sketsch?
Grüße

Henkel

Henkel

Welche SDFat Library braucht man? Mit der hier geht es nicht!
https://github.com/greiman/SdFat

Bibliothek 1. ESP8266 2.6.3
Hardwareziel Wemos D1 Mini
Arduino 1.8.12
Fehlermeldungen:

In file included from L:\arduino-1.8.12\portable\sketchbook\libraries\SdFat\src/FatLib/FatLib.h:27:0,

from L:\arduino-1.8.12\portable\sketchbook\libraries\SdFat\src/SdFat.h:33, from L:\arduino-1.8.12\portable\sketchbook\ESP8266WebserverSD\ESP8266WebserverSD\ESP8266WebserverSD.ino:51:

L:\arduino-1.8.12\portable\sketchbook\libraries\SdFat\src/FatLib/ArduinoFiles.h:122:7: error: redefinition of ‘class fs::File’

class File : public FatFile, public Stream { ^

In file included from L:\arduino-1.8.12\portable\packages\esp8266\hardware\esp8266\2.6.3\libraries\ESP8266WiFi\src/CertStoreBearSSL.h:26:0,

from L:\arduino-1.8.12\portable\packages\esp8266\hardware\esp8266\2.6.3\libraries\ESP8266WiFi\src/WiFiClientSecureBearSSL.h:30, from L:\arduino-1.8.12\portable\packages\esp8266\hardware\esp8266\2.6.3\libraries\ESP8266WiFi\src/WiFiClientSecure.h:41, from L:\arduino-1.8.12\portable\packages\esp8266\hardware\esp8266\2.6.3\libraries\ESP8266WiFi\src/WiFiServerSecure.h:20, from L:\arduino-1.8.12\portable\packages\esp8266\hardware\esp8266\2.6.3\libraries\ESP8266WiFi\src/ESP8266WiFi.h:41, from L:\arduino-1.8.12\portable\sketchbook\ESP8266WebserverSD\ESP8266WebserverSD\ESP8266WebserverSD.ino:45:

L:\arduino-1.8.12\portable\packages\esp8266\hardware\esp8266\2.6.3\cores\esp8266/FS.h:52:7: error: previous definition of ‘class fs::File’

class File : public Stream ^

In file included from L:\arduino-1.8.12\portable\sketchbook\libraries\SdFat\src/FatLib/FatLib.h:28:0,

from L:\arduino-1.8.12\portable\sketchbook\libraries\SdFat\src/SdFat.h:33, from L:\arduino-1.8.12\portable\sketchbook\ESP8266WebserverSD\ESP8266WebserverSD\ESP8266WebserverSD.ino:51:

L:\arduino-1.8.12\portable\sketchbook\libraries\SdFat\src/FatLib/FatFileSystem.h: In member function ‘fs::File FatFileSystem::open(const char*, oflag_t)’:

L:\arduino-1.8.12\portable\sketchbook\libraries\SdFat\src/FatLib/FatFileSystem.h:95:13: error: ‘class fs::File’ has no member named ‘open’

tmpFile.open(vwd(), path, oflag); ^

Mehrere Bibliotheken wurden für “SdFat.h” gefunden
Benutzt: L:\arduino-1.8.12\portable\sketchbook\libraries\SdFat
Nicht benutzt: L:\arduino-1.8.12\portable\packages\esp8266\hardware\esp8266\2.6.3\libraries\ESP8266SdFat
exit status 1
Fehler beim Kompilieren für das Board LOLIN D1 R2 & mini.

Moritz

Moritz

That means i can serve files of the sd card? That would be nice even if it is slow!

jean-marie

jean-marie

Guten Abend, ich mache alle Projekte für Ihre Website.
Sie sind großartig, aber ich habe ein Problem mit der SDFAT-Bibliothek. Ich habe den Fehler “‘SdFat’ benennt keinen Typ”.
Kannst du mir helfen?
Ich habe schon im Netz gesucht aber ….
++

jm

Gerald

Gerald

Sorry, ich hatte das Programm vergessen. Ist jetzt dabei.

michael

michael

Hallo Gerald,
hast Du dafür kein Programm?
Grüße michael

michael

michael

Hallo, wo ist das Programm dazu?

Frank Eisenwiener

Frank Eisenwiener

Danke erstmal für die anregenden Projekte!

Irgendwie fehlt mir persönlich bei diesem hier aber die Software (oder habe ich was überlesen?)…

Gruß
Frank

Deja un comentario

Todos los comentarios son moderados antes de ser publicados