logging_qspi.py
Los 2 MB de flash QSPI expuestos como sistema de archivos forman un registrador autónomo: este script journaliza una medida analógica en CSV cada 10 s con marcas relativas. El archivo se recupera luego conectando la placa por USB.
Hardware
Una Adafruit Feather nRF52840 Express (nRF52840, BLE 5) con NeoPixel, LED rojo, 2 MB de flash QSPI para CircuitPython y conector LiPo. Solo la Feather; un sensor 0-3,3 V en A0 (o nada: el canal flotante da valores de prueba). Un PC para leer journal.csv después.
Cableado
Sensor en A0/3V3/GND según su ficha. La flash QSPI es interna de la placa: nada que cablear, y las escrituras sobreviven al corte de corriente.
Funcionamiento
open("/journal.csv", "a") añade una línea por ciclo; CircuitPython escribe en la partición CIRCUITPY de la flash QSPI. time.monotonic da segundos relativos desde el arranque, suficiente para una curva.
Ejecución
CircuitPython (build feather_nrf52840_express) vía bootloader UF2 (doble reset); editar code.py en la unidad CIRCUITPY.
Variantes
Fechar en absoluto con un módulo DS3231 (I2C), comprimir a binario para ahorrar sitio, o volcar el journal a un teléfono por BLE antes de rotar.
logging_qspi.py
# Journal CSV sur la flash QSPI de 2 Mo (le système de fichiers).
# Les fichiers survivent à la coupure d'alimentation.
import time
import board
import analogio
import rtc
entree = analogio.AnalogIn(board.A0)
CHEMIN = "/journal.csv"
# Horloge interne : figée à minuit au boot, d'où le temps relatif.
t0 = time.monotonic()
with open(CHEMIN, "a") as f:
f.write("t_s,brut,volts\n") if False else None # en-tête optionnel
while True:
brut = entree.value
with open(CHEMIN, "a") as f:
f.write("%d,%d,%.3f\n" % (
time.monotonic() - t0, brut, brut * 3.3 / 65535))
time.sleep(10) # une ligne toutes les 10 s