La reciente versión de Windows 11, Tiny11, ha reducido el sistema operativo estrella de Microsoft a lo esencial y lo ha hecho utilizable en hardware antiguo y de baja especificación. Tiny11 ya está disponible para su descarga en https://archive.org/details/tiny-11_202302. La ISO puede descargarse directamente o a través del protocolo BitTorrent. Sea cual sea la opción elegida, la ISO descargada tendrá un tamaño aproximado de 3 GB.
Por tanto Tiny11 es un sistema operativo que hace honor a su nombre al reducir una instalación estándar de Windows 11 de más de 20 GB en disco a aproximadamente 8 GB y «funciona de maravilla» en un sistema con sólo 2 GB de RAM. Además, la ISO de instalación, ya disponible, ocupa sólo 3 GB. Sin embargo, hay algunas cosas que se debe tener en cuenta antes de configurar un sistema Tiny11. Pero las cosas no acaban aquí pues una nueva versión del desarrollador NTDev ofrece a los usuarios de Arm de 64 bits, como la Raspberry Pi 4, la oportunidad de probar Windows 11 en sus placas.
El desarrollador NTDev explica que Tiny11 puede reducirse aún más aplicando compresión de disco. El «mínimo» de aplicaciones incluye la carga estándar de herramientas de accesibilidad intactas, y se mantienen los elementos básicos de Windows como Calc, Bloc de notas, Paint, etcétera. Además, la Microsoft Store sigue ahí, para que pueda instalar varias aplicaciones y herramientas de Windows que echemos de menos.
Sin embargo, faltan algunas cosas medianamente importantes. Esta instalación del sistema operativo «no es reparable», señala NTDev. «NET, los controladores y las actualizaciones de las definiciones de seguridad pueden instalarse desde Windows Update», por lo que no se trata de una instalación de la que pueda olvidarte. Además, la eliminación del almacén de componentes de Windows (WinSxS), responsable en gran medida de la compacidad de Tiny11, significa que no es posible instalar nuevas funciones o idiomas. Si instala y disfrutamos de Tiny11, suponemos que tendremos que estar atentos a las actualizaciones ISO a medida que lleguen las revisiones de las principales características de Windows 11
La versión original afirmaba que podía ejecutar Windows 11 en hardware con sólo 2 GB de RAM y utilizar sólo 8 GB de espacio en disco (frente a una instalación típica de 20 GB) ¿Qué tal funcionaría una Raspberry Pi 4 a 1,5 GHz y con sólo 2 GB de RAM con Tiny11? Pues desde la pagina de Tomshardware.com lo han probado y desde luego no tiene mala pinta los resultados obtenidos.
El archivo viene como una imagen ISO de 4GB. A diferencia de las típicas imágenes ISO, tenemos que hacer algo más que copiar el archivo a una unidad USB utilizando Rufus o Raspberry Pi Imager. En su lugar tenemos que utilizar Windows en Raspberry (WoR) herramienta para instalar la imagen en una tarjeta micro SD / USB 3 unidad flash. El proceso de instalación no es el más rápido, así que lo ideal es configurar su Raspberry Pi para arrancar desde USB y utilizar una unidad flash USB 3 o SSD caddy. Como Microsft nos tiene acostumbrados, la instalación es casi una instalación típica de Windows, siendo la única parte que falta iniciar sesión en su cuenta de Microsoft ya que en su lugar el instalador nos dirige a configurar una cuenta de usuario local (pero en ningún momento se piden datos de activación).
Con la instalación y configuración realizadas, el rendimiento de Windows 11 en una Raspberry Pi 4 es pobre a través de micro SD, confirmando una vez más que una solución basada en USB 3 es el camino a seguir. Dicho esto, el menú principal responde bien y se pueden utilizar las aplicaciones y la bandeja del sistema sin muchos problemas.Navegar por la web a través de Edge no es la mejor experiencia, pero funciona lentamente (por ejemplo la web de Tom’s Hardware tardó mucho en renderizarse porque las imágenes aparecían aquí y allá).
¿Qué pasa con Wi-Fi y Bluetooth? Las malas noticias primero, Tiny11 no detecta el Wi-Fi de la Raspberry Pi 4 pero una conexión Ethernet funciona muy bien. Asimismo Bluetooth también esta operativo a medias ( en las pruebas encontró y se conectó con éxito a un smartphone pero sin embargo, el éxito duró poco, ya que no pudimos enviar ningún archivo entre los dispositivos conectados por Bluetooth).
Tiny11 viene con Microsoft Store y Microsoft Edge preinstalados, lo que significa que podemos instalar aplicaciones y navegar por Internet utilizando herramientas familiares. Es muy probable que el software disponible en Microsoft Store funcione, pero la experiencia puede variar. Lo que no funcionará son los ejecutables hechos para x86 y x86_64, que arrojarán un error, asía que a menos que se pueda encontrar aplicaciones compatibles, sólo queda lo que ofrece la tienda.
El sistema es funcional a la velocidad máxima disponible de 1,5 GHz utilizando en las pruebas 1,2 GB de los 2 GB disponibles (con todas probabilidad con más RAM y un overclock beneficiarían ). Por ejemplo desde la pagina de Tom han probado un pequeño overclock de 1,8 GHz, una velocidad que ahora se considera el valor predeterminado para Pi 4 y Pi 400 por Raspberry Pi. La velocidad extra mejoró en gran medida la experiencia y con un poco más de memoria RAM y almacenamiento USB 3 podría ser una máquina viable, si usted maneja sus expectativas en consecuencia. El overclock se consiguió entrando en la BIOS en el arranque, pero como todos los casos de overclok, se aconseja que elija una de las mejores carcasas para refrigeración activa o pasiva antes de aumentar demasiado el overclock.
Estamos sin duda en los inicios de Tiny11 para Arm 64 (de hecho, en ese tiempo hemos visto dos versiones, una de las cuales solucionaba un problema de instalación fallida) , así que seguramente habrá errores, pero a medida que este proyecto madure podría llegar a ser tan bueno como Windows 10 para Raspberry Pi, que demostró ser muy prometedor. Por ahora, tratémoslo más como una curiosidad que como un programa de uso diario con la seguridad que muy seguro desde la propia Microsoft sacarán una versión final también para Raspberry.
Tiny11 también incluye algunos cambios de bajo nivel popularizados por herramientas como Rufus. Por ejemplo, por defecto, Tiny11 utiliza una cuenta local, aunque se mantiene la opción de configurar una cuenta en línea. Sin embargo, tenga en cuenta que características como los Widgets en Windows 11 siguen necesitando una cuenta Microsoft para funcionar.
Otro cambio que puede atraer a los aficionados a los cacharros, sobre todo a los de gama baja y hardware antiguo, es la eliminación de varias restricciones de hardware. En las pruebas realizadas, NTDev afirmó que Tiny11 podía «funcionar de maravilla» en un sistema con sólo 2 GB de RAM. Además, quienes no puedan actualizar sus instalaciones de Windows 10 debido a la generación del procesador o a problemas con el TPM podrán utilizar la ISO de Tiny11 para incorporarse al nuevo sistema operativo de Microsoft.
Al desglosar la cifra de instalación de 8 GB, NTDev revela que los archivos del sistema operativo ocupan 6,34 GB de espacio, mientras que las aplicaciones que han sobrevivido al recorte ocupan 1,59 GB.
Es obvio que las SD se han convertido en algo indispensable en nuestra vida digital , estando presentes en infinidad de dispositivos electrónicos como smartphones, cámaras digitales, cámaras de seguridad, reproductores multimedia, ordenadores, microcontroladores, y un larguísimo etcétera.
Por otro lado, de vez en cuando nos encontramos con proyectos basados en ESP32 ( y todas sus variantes) que necesitan una forma de almacenar una gran cantidad de datos de forma escalable y eficiente (es decir, necesitamos construir lo que viene a llamarse un registrador de datos o en ingle «datalogger»), siendo lo ideal por tanto usar con nuestro microntrolador precisamente estas tarjetas SD o micro SD, dada su gran capacidad para empaquetar GigaBytes de datos en un espacio más pequeño que una moneda.
SPI es un acrónimo que significa «Serial Peripheral Interface». Es un protocolo de comunicación serie que se utiliza para transferir datos entre dispositivos electrónicos, como microcontroladores, sensores, dispositivos de almacenamiento, etc. SPI permite a varios dispositivos compartir un canal de comunicación y cada dispositivo puede actuar como esclavo o maestro. El protocolo SPI es conocido por ser rápido y flexible, y por tener una arquitectura sencilla que permite una fácil integración en una amplia gama de aplicaciones electrónicas. Además, el protocolo SPI es compatible con una amplia gama de velocidades de transmisión de datos, lo que lo hace adecuado para una variedad de aplicaciones con diferentes requisitos de velocidad y capacidad de procesamiento.
El ESP32 es un microcontrolador que incluye una interfaz de comunicación SPI, lo que significa que puede utilizar el protocolo SPI para comunicarse con otros dispositivos electrónicos. Aquí hay algunos de los usos más comunes de la interfaz SPI en el ESP32:
Comunicación con sensores: El ESP32 puede utilizar la interfaz SPI para comunicarse con sensores, como acelerómetros, giroscopios, sensores de temperatura, etc.
Comunicación con dispositivos de almacenamiento: El ESP32 puede utilizar la interfaz SPI para comunicarse con dispositivos de almacenamiento, como tarjetas SD o dispositivos Flash, para leer y escribir datos.
Comunicación con pantallas táctiles: El ESP32 puede utilizar la interfaz SPI para comunicarse con pantallas táctiles y controlar la visualización y la entrada de datos.
Comunicación con dispositivos de radiofrecuencia: El ESP32 puede utilizar la interfaz SPI para comunicarse con dispositivos de radiofrecuencia, como módulos Bluetooth o Wi-Fi, para transferir datos a larga distancia.
En resumen, la interfaz SPI en el ESP32 se puede utilizar para una amplia gama de aplicaciones, lo que lo hace una herramienta valiosa para desarrollar proyectos electrónicos y de Internet de las cosas.
En este post vamos a ver que en realidad leer o escribir datos en una SD ( o micro-sd) en el entorno de la familia Arduino es en realidad muy sencillo gracias a las librería SD y también al protocolo SPI para la comunicación con el lector de SD.
Descripción general del hardware.
Para este proyecto se ha probado el lector de sd de AZDelivery el cual nos proporciona una expansión fácil y económica del espacio de almacenamiento mediante la ranura SD. La comunicación es muy fácil con el microcontrolador a través del protocolo SPI (como vamos a ver ) y soporta tarjetas Micro SD (2G), tarjetas Micro SDHC (32G) (tarjeta de alta velocidad). Además el módulo lee todos los datos contenidos en la tarjeta SD y se puede conectar fácilmente a varios tipos de microcontroladores ( además si lo compramos a este fabricante incluye un E-Book que proporciona información útil sobre cómo comenzar su proyecto, ayuda con una configuración rápida y ahorra tiempo en el proceso de configuración proporcionándonos una serie de ejemplos de aplicación, guías de instalación completas y bibliotecas, etc.).
El módulo de la tarjeta micro SD contiene dos componentes principales que, sin duda, hacen que sea fácil agregar el registro de datos a su próximo proyecto Arduino:
El voltaje de funcionamiento de cualquier tarjeta micro SD estándar es de 3,3 V. Por lo tanto, no podemos conectarlo directamente a circuitos que usan lógica de 5V. De hecho, cualquier voltaje que supere los 3,6 V dañará permanentemente la tarjeta micro SD. Es por eso; el módulo tiene un regulador de caída ultrabaja incorporado que convertirá los voltajes de 3,3 V a 6 V a ~3,3 V.
También hay un chip 74LVC125A en el módulo que convierte la lógica de la interfaz de 3,3 V-5 V a 3,3 V. Esto se llama cambio de nivel lógico. Eso significa que puede usar esta placa para interactuar con microcontroladores de 3,3 V y 5 V como Arduino.
En realidad, hay dos formas de interactuar con tarjetas micro SD: modo SPI y modo SDIO. El modo SDIO es mucho más rápido y se usa en teléfonos móviles, cámaras digitales, etc, pero desgraciadamente este modo es más complejo y requiere la firma de documentos de confidencialidad( por esa razón, es probable que los aficionados como nosotros nunca encuentren el código de interfaz del modo SDIO). En su lugar, cada módulo de tarjeta SD se basa en el modo SPI de «menor velocidad y menos sobrecarga» que es fácil de usar para cualquier microcontrolador (como Arduino).
Asignación de pines del módulo de la tarjeta Micro SD
El módulo de la tarjeta micro SD que vamos a usar es bastante simple de conectar. Tiene seis pines:
VCC :El pin que suministra energía para el módulo y debe conectarse al pin de 5V en el Arduino.
GND (TIERRA): debe estar conectado a tierra de Arduino.
MISO (Master In Slave Out): es la salida SPI del módulo de tarjeta Micro SD.
MOSI (Salida maestra Entrada esclava): es la entrada SPI al módulo de tarjeta Micro SD.
SCK (reloj serie): pin acepta pulsos de reloj que sincronizan la transmisión de datos generada por Arduino.
CS (Selección de esclavo): es utilizado por Arduino (Master) para habilitar y deshabilitar dispositivos específicos en el bus SPI.
Preparación de la tarjeta micro SD
Antes de insertar la tarjeta micro SD en el módulo y conectarla al Arduino, debe formatear correctamente la tarjeta. Para la biblioteca Arduino que discutiremos, y casi todas las demás bibliotecas SD, la tarjeta debe estar formateada FAT16 o FAT32.
Si tiene una tarjeta SD nueva, es probable que ya esté formateada previamente con un sistema de archivos FAT. Sin embargo, es posible que tenga problemas con el formato de fábrica de la tarjeta o, si es una tarjeta antigua, debe reformatearse. De cualquier manera, siempre es una buena idea formatear la tarjeta antes de usarla, ¡incluso si es nueva!
Es recomendable utilizar la utilidad oficial de formateo de tarjetas SD : escrita por la asociación SD , ¡resuelve muchos problemas que surgen con un mal formateo! Descargue el formateador y ejecútelo en su ordenador, simplemente seleccione la unidad correcta y haga clic en FORMATEAR.
Cableado: conexión del módulo de tarjeta Micro SD a Arduino
Ahora que su tarjeta está lista para usar, ¡podemos conectar la placa de conexión micro SD!
Para empezar, inserte el módulo de la tarjeta micro SD en una placa de pruebas. Conecte el pin VCC en el módulo a 5V en el pin Arduino y GND a tierra. Ahora nos quedamos con los pines que se usan para la comunicación SPI. Como las tarjetas micro SD requieren una gran cantidad de transferencia de datos, brindarán el mejor rendimiento cuando se conecten a los pines SPI del hardware en un microcontrolador. Los pines SPI del hardware son mucho más rápidos que «bit-banging» del código de la interfaz usando otro conjunto de pines.
Tenga en cuenta que cada placa Arduino tiene diferentes pines SPI que deben conectarse en consecuencia. Para placas ESP32 (En el ejemplo DOIT ESP32 DEVKIT1) esos pines son digitales 18 (SCK), 19 (MISO) y 23 (MOSI). También necesitará un cuarto pin para la línea ‘chip/slave select’ (SS). Por lo general, este es el pin 5, pero en realidad puede usar cualquier pin que desee (siempre que lo inicialize en el código).
Si tiene una placa Mega, ¡los pines son diferentes! Querrá usar digital 50 (MISO), 51 (MOSI), 52 (SCK) y 53 (SS). Consulte la siguiente tabla para una comprensión rápida.
MicroSD card module
ESP32
VCC
+5v
CS
GPIO 5
MOSI
GPIO 23
CLK
GPIO 18
MISO
GPIO 19
GND
GND
En caso de que esté utilizando una placa Arduino diferente a la mencionada anteriormente, es recomendable consultar la documentación oficial de Arduino antes de continuar.
Para cablear el módulo de la tarjeta microSD a la placa ESP32, puede seguir el siguiente diagrama esquemático (para los pines SPI por defecto de ESP32):
Realmente dadas las poquísimas conexiones necesarias, el montaje se puede hacer directamente con un cable de cinta de 6 hilos como podemos ver en la imagen .
Código Arduino: prueba del módulo de la tarjeta SD con CardInfo
Existen dos librerías diferentes para el ESP32 (incluidas en el núcleo de Arduino para el ESP32): la librería SD y la librería SDD_MMC.h.
Si utiliza la biblioteca SD, está utilizando el controlador SPI. Si usa la librería SDD_MMC estás usando el controlador SD/SDIO/MMC del ESP32.
Hay varios ejemplos en Arduino IDE que muestran cómo manejar archivos en la tarjeta microSD usando el ESP32. En el IDE de Arduino, vaya a Archivo > Ejemplos > SD(esp32) > SD_Test, o copie el siguiente código:
Este ejemplo muestra cómo realizar casi cualquier tarea que pueda necesitar con la tarjeta microSD:
Listar un directorio;
Crear un directorio;
Eliminar un directorio;
Leer el contenido de un archivo;
Escribir contenido en un archivo
Añadir contenido a un archivo;
Renombrar un fichero;
Eliminar un archivo;
Inicializar tarjeta microSD;
Obtener tipo de tarjeta microSD;
Obtener el tamaño de la tarjeta microSD;
Alternativamente, puede utilizar los ejemplos SD_MMC – son similares a los ejemplos SD, pero utilizan el controlador SDMMC. Para el controlador SDMMC, necesita un módulo de tarjeta microSD compatible. El módulo que utilizamos en este post no es compatible con SDMMC.
Todos los ejemplos que vamos a a ver por tanto proporciona varias funciones para manejar archivos en la tarjeta microSD.
Listar un directorio
La función listDir() lista los directorios de la tarjeta SD. Esta función acepta como argumentos el sistema de archivos (SD), el nombre del directorio principal y los niveles para entrar en el directorio.
He aquí un ejemplo de cómo llamar a esta función .
listDir(SD, "/", 0);
Obsérvese que es muy importante la barra invertida antes del directorio pues eso indica que el directorio esta en el directorio raiz .
Crear un directorio La función createDir() crea un nuevo directorio. Pasa como argumento el sistema de ficheros SD y la ruta del nombre del directorio.
Por ejemplo, el siguiente comando crea un nuevo directorio en la raíz llamado mydir
createDir(SD, "/mydir");
Obsérvese que es muy importante la barra invertida antes del directorio pues eso indica que el directorio esta en el directorio raiz (y se llama mydir).
Eliminar un directorio Para eliminar un directorio de la tarjeta microSD, utilice la función removeDir() y pase como argumento el sistema de archivos de la SD y la ruta del nombre del directorio.
Obsérvese que es muy importante la barra invertida antes del directorio pues eso indica que el directorio esta en el directorio raiz (y se llama mydir).
Leer el contenido de un archivo La función readFile() lee el contenido de un archivo e imprime el contenido en el Monitor Serial. Como en las funciones anteriores, pase como argumento el sistema de ficheros SD y la ruta del fichero.
void readFile(fs::FS &fs, const char * path){
Serial.printf("Reading file: %s\n", path);
File file = fs.open(path);
if(!file){
Serial.println("Failed to open file for reading");
return;
}
Serial.print("Read from file: ");
while(file.available()){
Serial.write(file.read());
}
file.close();
}
Por ejemplo, la siguiente línea lee el contenido del archivo hello.txt.
readFile(SD, "/hello.txt")
Obsérvese que es muy importante la barra invertidas antes del fichero pues eso indica que el fichero esta en el directorio raiz (y se llama hello.txt).
Escribir contenido en un archivo Para escribir contenido en un fichero, puede utilizar la función writeFile(). Pase como argumento el sistema de ficheros SD, la ruta del fichero y el mensaje.
La siguiente línea escribe Hola en el archivo hola.txt.
writeFile(SD, "/hello.txt", "Hello ");
Obsérvese que es muy importante la barra invertidas antes del fichero pues eso indica que el fichero esta en el directorio raiz (y se llama hello.txt).
Añadir contenido a un archivo Del mismo modo, puede añadir contenido a un archivo (sin sobrescribir el contenido anterior) utilizando la función appendFile().
La siguiente línea añade el mensaje ¡Mundo!\n en el archivo hola.txt. El \n significa que la próxima vez que escriba algo en el archivo, se escribirá en una nueva línea.
appendFile(SD, "/hello.txt", "World!\n");
Cambiar el nombre de un archivo Puede renombrar un fichero utilizando la función renameFile(). Pasa como argumentos el sistema de ficheros SD, el nombre original del fichero y el nuevo nombre.
La siguiente línea cambia el nombre del archivo hello.txt a foo.txt.
renameFile(SD, "/hello.txt", "/foo.txt");
Borrar un fichero Utilice la función deleteFile() para borrar un fichero. Pase como argumento el sistema de ficheros SD y la ruta del fichero que desea borrar.
Si no pasa ningún argumento a la función begin(), intentará inicializar la comunicación SPI con la tarjeta microSD en el pin por defecto de selección de chip (CS). Si desea utilizar otro pin CS, puede pasarlo como argumento a la función begin(). Por ejemplo, si quiere usar GPIO 17 como pin CS, debería usar las siguientes líneas de código:
Suba el sketch anterior a tu placa ESP32. Después de eso, abra el Monitor Serie y pulse el botón RST de la placa ESP32. Si la inicialización tiene éxito, obtendrá mensajes similares a los siguientes en el Monitor Serie.
Funciones utilizadas con el objeto Archivo
Además, hay algunas funciones que puede usar con objetos de archivo :
Puede usar seek()en un archivo. Esto moverá el cursor de lectura/escritura a una nueva ubicación. Por ejemplo seek(0) , lo llevará al principio del archivo, ¡lo cual puede ser muy útil!
Así mismo puedes llamar al position()que te indicará en qué parte del expediente te encuentras.
Si desea saber el tamaño de un archivo, llame size() para obtener la cantidad de bytes en el archivo.
Los directorios/carpetas son archivos especiales, puede determinar si un archivo es un directorio llamando isDirectory()
Una vez que tenga un directorio, puede comenzar a revisar todos los archivos en el directorio llamando openNextFile()
Puede terminar necesitando saber el nombre de un archivo, por ejemplo, si llamó openNextFile()a un directorio. En este caso, llame al name()que devolverá un puntero a la matriz de caracteres con formato 8.3 que puede hacer directamente Serial.print() si lo desea.
Por cierto , aunque pueda parecer extraño, es más económico comprar varios módulos que un único ( por unos 2€ en Amazon )
Debe estar conectado para enviar un comentario.