'''
12.80 - Escribir/añadir datos a un archivo CSV.
El ESP32 contiene un sistema de archivos de memoria flash al que se puede
acceder a través de micropython.
En este ejemplo se muestra cómo almacenar datos del sensor 'dymmy' en un
archivo CSV.
Puede recuperar los datos descargando el archivo a su computadora, o
mediante el uso de un programa separado (proporciono esto en la próxima
lección).
Componentes
-----------
- ESP32
- Nada más.
Documentación:
* Función"open" de Micropython:
http://docs.micropython.org/en/latest/library/builtins.html?highlight=open#open
* Fucnión "open" de Python:
https://docs.python.org/3/library/functions.html#open
* Particiones Flash:
http://docs.micropython.org/en/latest/library/esp32.html#flash-partitions
* Tamño de la memoria flash del ESP
://mpython.readthedocs.io/en/master/library/micropython/esp.html#esp.flash_size
* Función 'uos.stat':
http://docs.micropython.org/en/latest/library/uos.html#uos.stat
* Función 'os.stat' de CPython:
https://docs.python.org/3/library/os.html#os.stat
Precauciones:
Actualmente no se ha encontrado una función que devuelva la cantidad de
espacio flash disponible para
su script para el uC ESP32 (punto a favor para quien la encuentre). Por lo
tanto, debe considerar rastrear el espacio que ocupa su archivo de datos
mediante programación.
Una forma de hacerlo es usar la función 'uos.stat()', que devuelve información
sobre un archivo determinado. Se da un ejemplo de cómo utilizar esta función
a continuación.
Curso:
'''
import random
from esp32 import Partition
import esp
import uos
filename = "csv_data_file.txt"
# Obtener algunas estadísticas:
# Esto le dará la cantidad total de Flash disponible en el uC
print("Espacio de flash disponible: ", esp.flash_size())
partition = Partition(Partition.RUNNING)
# Impresión de la información sobre la partición flash en ejecución en la que
# puede almacenar sus archivos.
print(partition.info())
file_stats = uos.stat(filename)
# El ítem en el índice 6 de l tuppla contiene el total de bytes en el archivo.
print("Tamaño del archivo antes de escribir: ", file_stats[6])
# Este ciclo agregará 10 líneas que contienen datos ficticios delimitados por
# comas
for x in range(10):
random_temp = random.randint(0, 50)
random_humi = random.randint(20, 90)
random_pres = random.randint(900, 1100) # en hPa
# Añadir al final de un archivo existente
file = open (filename, "a")
# Cree la cadena que contiene los datos CSV ficticios
# new_entry = str(random_temp) + "," + str(random_humi) + ","
# + str(random_pres) + "\n"
new_entry = "{},{},{}\n".format(random_temp,random_humi,random_pres)
file.write(new_entry)
file.close()
file_stats = uos.stat(filename)
# El elemento en el índice 6 de la tuppla contiene el total de bytes en el
# archivo.
print("Tamaño del archivo después de escribir: ", file_stats[6])