From 9b92851d3ec596ce38837d50f817312010c112c8 Mon Sep 17 00:00:00 2001 From: Liz Date: Mon, 1 Jul 2024 09:52:49 -0400 Subject: [PATCH] adding sd card demos Adding sd card demos for the RP2040 Adalogger --- .../.feather_rp2040_adalogger.test.only | 0 .../Arduino_RP2040_Adalogger_microSD.ino | 87 +++++++++++++++++++ .../CircuitPython_SD_Card_Read/code.py | 54 ++++++++++++ .../CircuitPython_SD_Card_Write/code.py | 36 ++++++++ 4 files changed, 177 insertions(+) create mode 100644 Feather_RP2040_Adalogger/Arduino_RP2040_Adalogger_microSD/.feather_rp2040_adalogger.test.only create mode 100644 Feather_RP2040_Adalogger/Arduino_RP2040_Adalogger_microSD/Arduino_RP2040_Adalogger_microSD.ino create mode 100644 Feather_RP2040_Adalogger/CircuitPython_SD_Card_Read/code.py create mode 100644 Feather_RP2040_Adalogger/CircuitPython_SD_Card_Write/code.py diff --git a/Feather_RP2040_Adalogger/Arduino_RP2040_Adalogger_microSD/.feather_rp2040_adalogger.test.only b/Feather_RP2040_Adalogger/Arduino_RP2040_Adalogger_microSD/.feather_rp2040_adalogger.test.only new file mode 100644 index 000000000..e69de29bb diff --git a/Feather_RP2040_Adalogger/Arduino_RP2040_Adalogger_microSD/Arduino_RP2040_Adalogger_microSD.ino b/Feather_RP2040_Adalogger/Arduino_RP2040_Adalogger_microSD/Arduino_RP2040_Adalogger_microSD.ino new file mode 100644 index 000000000..f90338bcf --- /dev/null +++ b/Feather_RP2040_Adalogger/Arduino_RP2040_Adalogger_microSD/Arduino_RP2040_Adalogger_microSD.ino @@ -0,0 +1,87 @@ +// SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries +// +// SPDX-License-Identifier: MIT +/* + SD card read/write + + This example shows how to read and write data to and from an SD card file + The circuit: + * SD card attached to SPI bus as follows: + ** MOSI - pin 11 + ** MISO - pin 12 + ** CLK - pin 13 + + created Nov 2010 + by David A. Mellis + modified 9 Apr 2012 + by Tom Igoe + modified 14 Feb 2023 + by Liz Clark + modified 25 Aug 2023 + by Kattni Rembor + + This example code is in the public domain. + + */ + +#include +#include "SdFat.h" + +#define SD_CS_PIN 23 + +SdFat SD; +File32 myFile; +SdSpiConfig config(SD_CS_PIN, DEDICATED_SPI, SD_SCK_MHZ(16), &SPI1); + +void setup() { + // Open serial communications and wait for port to open: + Serial.begin(115200); + while (!Serial) { yield(); delay(10); } // wait till serial port is opened + delay(100); // RP2040 delay is not a bad idea + + Serial.print("Initializing SD card..."); + + // Retry mechanism for SD card initialization + while (!SD.begin(config)) { + Serial.println("initialization failed! Retrying..."); + delay(1000); // Wait for a second before retrying + } + Serial.println("initialization done."); + + // open the file. note that only one file can be open at a time, + // so you have to close this one before opening another. + myFile = SD.open("test.txt", FILE_WRITE); + + // if the file opened okay, write to it: + if (myFile) { + Serial.print("Writing to test.txt..."); + myFile.println("testing 1, 2, 3."); + myFile.println("hello world!"); + // close the file: + myFile.close(); + Serial.println("done."); + } else { + // if the file didn't open, print an error: + Serial.println("error opening test.txt"); + } + + // re-open the file for reading: + myFile = SD.open("test.txt"); + if (myFile) { + Serial.println("test.txt:"); + + // read from the file until there's nothing else in it: + while (myFile.available()) { + Serial.write(myFile.read()); + } + // close the file: + myFile.close(); + } else { + // if the file didn't open, print an error: + Serial.println("error opening test.txt"); + } +} + +void loop() { + // nothing happens after setup +} diff --git a/Feather_RP2040_Adalogger/CircuitPython_SD_Card_Read/code.py b/Feather_RP2040_Adalogger/CircuitPython_SD_Card_Read/code.py new file mode 100644 index 000000000..55eb9d944 --- /dev/null +++ b/Feather_RP2040_Adalogger/CircuitPython_SD_Card_Read/code.py @@ -0,0 +1,54 @@ +# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries +# SPDX-License-Identifier: MIT + +""" +CircuitPython Essentials SD Card Read Demo +Feather RP2040 Adalogger +""" + +import os +import busio +import digitalio +import board +import storage +import adafruit_sdcard + +# Connect to the card and mount the filesystem. +cs = digitalio.DigitalInOut(board.SD_CS) +sd_spi = busio.SPI(board.SD_CLK, board.SD_MOSI, board.SD_MISO) +sdcard = adafruit_sdcard.SDCard(sd_spi, cs) +vfs = storage.VfsFat(sdcard) +storage.mount(vfs, "/sd") + +# Use the filesystem as normal! Our files are under /sd + +# This helper function will print the contents of the SD +def print_directory(path, tabs=0): + for file in os.listdir(path): + stats = os.stat(path + "/" + file) + filesize = stats[6] + isdir = stats[0] & 0x4000 + + if filesize < 1000: + sizestr = str(filesize) + " bytes" + elif filesize < 1000000: + sizestr = "%0.1f KB" % (filesize / 1000) + else: + sizestr = "%0.1f MB" % (filesize / 1000000) + + prettyprintname = "" + for _ in range(tabs): + prettyprintname += " " + prettyprintname += file + if isdir: + prettyprintname += "/" + print("{0:<40} Size: {1:>10}".format(prettyprintname, sizestr)) + + # recursively print directory contents + if isdir: + print_directory(path + "/" + file, tabs + 1) + + +print("Files on filesystem:") +print("====================") +print_directory("/sd") diff --git a/Feather_RP2040_Adalogger/CircuitPython_SD_Card_Write/code.py b/Feather_RP2040_Adalogger/CircuitPython_SD_Card_Write/code.py new file mode 100644 index 000000000..4dd6fc8a6 --- /dev/null +++ b/Feather_RP2040_Adalogger/CircuitPython_SD_Card_Write/code.py @@ -0,0 +1,36 @@ +# SPDX-FileCopyrightText: 2017 Limor Fried for Adafruit Industries +# +# SPDX-License-Identifier: MIT + +""" +CircuitPython Essentials SD Card Write Demo +Feather RP2040 Adalogger +""" + +import time +import busio +import board +import digitalio +import microcontroller +import storage +import adafruit_sdcard + +# Connect to the card and mount the filesystem. +cs = digitalio.DigitalInOut(board.SD_CS) +sd_spi = busio.SPI(board.SD_CLK, board.SD_MOSI, board.SD_MISO) +sdcard = adafruit_sdcard.SDCard(sd_spi, cs) +vfs = storage.VfsFat(sdcard) +storage.mount(vfs, "/sd") + +# Use the filesystem as normal! Our files are under /sd + +print("Logging temperature to filesystem") +# append to the file! +while True: + # open file for append + with open("/sd/temperature.txt", "a") as f: + t = microcontroller.cpu.temperature + print("Temperature = %0.1f" % t) + f.write("%0.1f\n" % t) + # file is saved + time.sleep(1)