<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="lt">
	<id>https://wiki.eofnet.lt/w//index.php?action=history&amp;feed=atom&amp;title=Sd_card_module</id>
	<title>Sd card module - Versijų istorija</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.eofnet.lt/w//index.php?action=history&amp;feed=atom&amp;title=Sd_card_module"/>
	<link rel="alternate" type="text/html" href="https://wiki.eofnet.lt/w//index.php?title=Sd_card_module&amp;action=history"/>
	<updated>2026-04-15T16:40:24Z</updated>
	<subtitle>Šio puslapio versijų istorija projekte</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://wiki.eofnet.lt/w//index.php?title=Sd_card_module&amp;diff=9505&amp;oldid=prev</id>
		<title>\dev\null: Naujas puslapis: 400px  SD Kortelės modulis skirtas dirbti su įvairiais mikrovaldikliais. Jį galima pigiai nusipirkti [https://www.aliexpre...</title>
		<link rel="alternate" type="text/html" href="https://wiki.eofnet.lt/w//index.php?title=Sd_card_module&amp;diff=9505&amp;oldid=prev"/>
		<updated>2022-12-11T23:27:45Z</updated>

		<summary type="html">&lt;p&gt;Naujas puslapis: &lt;a href=&quot;/wiki/Vaizdas:Sd_kortel%C4%97s_modulis.png&quot; title=&quot;Vaizdas:Sd kortelės modulis.png&quot;&gt;400px&lt;/a&gt;  &lt;a href=&quot;/wiki/SD_Kortel%C4%97&quot; title=&quot;SD Kortelė&quot;&gt;SD Kortelės&lt;/a&gt; modulis skirtas dirbti su įvairiais mikrovaldikliais. Jį galima pigiai nusipirkti [https://www.aliexpre...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Naujas puslapis&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Vaizdas:Sd kortelės modulis.png|400px]]&lt;br /&gt;
&lt;br /&gt;
[[SD Kortelė|SD Kortelės]] modulis skirtas dirbti su įvairiais mikrovaldikliais. Jį galima pigiai nusipirkti [https://www.aliexpress.com/item/4001019712071.html čia].&lt;br /&gt;
&lt;br /&gt;
= Pajungimas prie ESP32 =&lt;br /&gt;
&lt;br /&gt;
Naudosim SPI2 interface, paliekam pirmajį laisvą, gal reikės pajungti daugiau įrengimų, pajungimo schema būtų tokia:&lt;br /&gt;
* ESP32 PIN 16 -&amp;gt; SD Card CS&lt;br /&gt;
* ESP32 PIN 14 -&amp;gt; SD Card SCK&lt;br /&gt;
* ESP32 PIN 13 -&amp;gt; SD Card MOSI&lt;br /&gt;
* ESP32 PIN 5  -&amp;gt; SD Card MISO&lt;br /&gt;
  &lt;br /&gt;
Kodo pavyzdys būtų toks:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SD.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define SD_CS_PIN        16&lt;br /&gt;
// These pins will be use for SPI2&lt;br /&gt;
#define SD_SCK_PIN       14&lt;br /&gt;
#define SD_MOSI_PIN      13&lt;br /&gt;
#define SD_MISO_PIN      5&lt;br /&gt;
&lt;br /&gt;
SPIClass SPI2(HSPI);&lt;br /&gt;
&lt;br /&gt;
void listDir(fs::FS &amp;amp;fs, const char * dirname, uint8_t levels) &lt;br /&gt;
{&lt;br /&gt;
  Serial.printf(&amp;quot;Listing directory: %s\n&amp;quot;, dirname);&lt;br /&gt;
&lt;br /&gt;
  File root = fs.open(dirname);&lt;br /&gt;
  &lt;br /&gt;
  if (!root) &lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;Failed to open directory&amp;quot;);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  if (!root.isDirectory()) &lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;Not a directory&amp;quot;);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  File file = root.openNextFile();&lt;br /&gt;
  &lt;br /&gt;
  while (file) &lt;br /&gt;
  {&lt;br /&gt;
    if (file.isDirectory()) &lt;br /&gt;
    {&lt;br /&gt;
      Serial.print(&amp;quot;  DIR : &amp;quot;);&lt;br /&gt;
      Serial.println(file.name());&lt;br /&gt;
      &lt;br /&gt;
      if (levels) &lt;br /&gt;
      {&lt;br /&gt;
        listDir(fs, file.path(), levels - 1);&lt;br /&gt;
      }&lt;br /&gt;
    } &lt;br /&gt;
    else &lt;br /&gt;
    {&lt;br /&gt;
      Serial.print(&amp;quot;  FILE: &amp;quot;);&lt;br /&gt;
      Serial.print(file.name());&lt;br /&gt;
      Serial.print(&amp;quot;  SIZE: &amp;quot;);&lt;br /&gt;
      Serial.println(file.size());&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    file = root.openNextFile();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void createDir(fs::FS &amp;amp;fs, const char * path) &lt;br /&gt;
{&lt;br /&gt;
  Serial.printf(&amp;quot;Creating Dir: %s\n&amp;quot;, path);&lt;br /&gt;
  &lt;br /&gt;
  if (fs.mkdir(path)) &lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;Dir created&amp;quot;);&lt;br /&gt;
  } &lt;br /&gt;
  else &lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;mkdir failed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void removeDir(fs::FS &amp;amp;fs, const char * path) &lt;br /&gt;
{&lt;br /&gt;
  Serial.printf(&amp;quot;Removing Dir: %s\n&amp;quot;, path);&lt;br /&gt;
  &lt;br /&gt;
  if (fs.rmdir(path)) &lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;Dir removed&amp;quot;);&lt;br /&gt;
  } &lt;br /&gt;
  else &lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;rmdir failed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void readFile(fs::FS &amp;amp;fs, const char * path) &lt;br /&gt;
{&lt;br /&gt;
  Serial.printf(&amp;quot;Reading file: %s\n&amp;quot;, path);&lt;br /&gt;
&lt;br /&gt;
  File file = fs.open(path);&lt;br /&gt;
  &lt;br /&gt;
  if (!file) &lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;Failed to open file for reading&amp;quot;);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;Read from file: &amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  while (file.available()) &lt;br /&gt;
  {&lt;br /&gt;
    Serial.write(file.read());&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  file.close();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void writeFile(fs::FS &amp;amp;fs, const char * path, const char * message) &lt;br /&gt;
{&lt;br /&gt;
  Serial.printf(&amp;quot;Writing file: %s\n&amp;quot;, path);&lt;br /&gt;
&lt;br /&gt;
  File file = fs.open(path, FILE_WRITE);&lt;br /&gt;
  &lt;br /&gt;
  if (!file) &lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;Failed to open file for writing&amp;quot;);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  if (file.print(message)) &lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;File written&amp;quot;);&lt;br /&gt;
  } &lt;br /&gt;
  else &lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;Write failed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  file.close();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void appendFile(fs::FS &amp;amp;fs, const char * path, const char * message) &lt;br /&gt;
{&lt;br /&gt;
  Serial.printf(&amp;quot;Appending to file: %s\n&amp;quot;, path);&lt;br /&gt;
&lt;br /&gt;
  File file = fs.open(path, FILE_APPEND);&lt;br /&gt;
  &lt;br /&gt;
  if (!file) &lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;Failed to open file for appending&amp;quot;);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  if (file.print(message)) &lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;Message appended&amp;quot;);&lt;br /&gt;
  } &lt;br /&gt;
  else &lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;Append failed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  file.close();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void renameFile(fs::FS &amp;amp;fs, const char * path1, const char * path2) &lt;br /&gt;
{&lt;br /&gt;
  Serial.printf(&amp;quot;Renaming file %s to %s\n&amp;quot;, path1, path2);&lt;br /&gt;
  &lt;br /&gt;
  if (fs.rename(path1, path2)) &lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;File renamed&amp;quot;);&lt;br /&gt;
  } &lt;br /&gt;
  else &lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;Rename failed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void deleteFile(fs::FS &amp;amp;fs, const char * path) &lt;br /&gt;
{&lt;br /&gt;
  Serial.printf(&amp;quot;Deleting file: %s\n&amp;quot;, path);&lt;br /&gt;
  &lt;br /&gt;
  if (fs.remove(path)) &lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;File deleted&amp;quot;);&lt;br /&gt;
  } &lt;br /&gt;
  else &lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;Delete failed&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void testFileIO(fs::FS &amp;amp;fs, const char * path) &lt;br /&gt;
{&lt;br /&gt;
  File file = fs.open(path);&lt;br /&gt;
  static uint8_t buf[512];&lt;br /&gt;
  size_t len = 0;&lt;br /&gt;
  uint32_t start = millis();&lt;br /&gt;
  uint32_t end = start;&lt;br /&gt;
  &lt;br /&gt;
  if (file) &lt;br /&gt;
  {&lt;br /&gt;
    len = file.size();&lt;br /&gt;
    size_t flen = len;&lt;br /&gt;
    start = millis();&lt;br /&gt;
    &lt;br /&gt;
    while (len) &lt;br /&gt;
    {&lt;br /&gt;
      size_t toRead = len;&lt;br /&gt;
      &lt;br /&gt;
      if (toRead &amp;gt; 512) &lt;br /&gt;
      {&lt;br /&gt;
        toRead = 512;&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      file.read(buf, toRead);&lt;br /&gt;
      len -= toRead;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    end = millis() - start;&lt;br /&gt;
    Serial.printf(&amp;quot;%u bytes read for %u ms\n&amp;quot;, flen, end);&lt;br /&gt;
    file.close();&lt;br /&gt;
  } &lt;br /&gt;
  else &lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;Failed to open file for reading&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  file = fs.open(path, FILE_WRITE);&lt;br /&gt;
  &lt;br /&gt;
  if (!file) &lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;Failed to open file for writing&amp;quot;);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  size_t i;&lt;br /&gt;
  start = millis();&lt;br /&gt;
  &lt;br /&gt;
  for (i = 0; i &amp;lt; 2048; i++) &lt;br /&gt;
  {&lt;br /&gt;
    file.write(buf, 512);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  end = millis() - start;&lt;br /&gt;
  &lt;br /&gt;
  Serial.printf(&amp;quot;%u bytes written for %u ms\n&amp;quot;, 2048 * 512, end);&lt;br /&gt;
  file.close();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
SPIClass SPISD(HSPI);&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  while (!Serial &amp;amp;&amp;amp; millis() &amp;lt; 5000);&lt;br /&gt;
&lt;br /&gt;
  //Serial.print(F(&amp;quot;\nStart ESP32_SD_SPI2_FileTest on &amp;quot;)); Serial.println(ARDUINO_BOARD);&lt;br /&gt;
&lt;br /&gt;
  Serial.println(F(&amp;quot;Current SPI pinout:&amp;quot;));&lt;br /&gt;
  Serial.print(F(&amp;quot;SD_MOSI_PIN:&amp;quot;)); Serial.println(SD_MOSI_PIN);&lt;br /&gt;
  Serial.print(F(&amp;quot;SD_MISO_PIN:&amp;quot;)); Serial.println(SD_MISO_PIN);&lt;br /&gt;
  Serial.print(F(&amp;quot;SD_CLK_PIN:&amp;quot;));  Serial.println(SD_SCK_PIN);&lt;br /&gt;
  Serial.print(F(&amp;quot;SD_CS_PIN:&amp;quot;));   Serial.println(SD_CS_PIN);&lt;br /&gt;
&lt;br /&gt;
  Serial.println(&amp;quot;Serial communication started.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  SPISD.begin(SD_SCK_PIN, SD_MISO_PIN, SD_MOSI_PIN);&lt;br /&gt;
&lt;br /&gt;
  if (!SD.begin(SD_CS_PIN, SPISD))&lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;Card Mount Failed&amp;quot;);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  uint8_t cardType = SD.cardType();&lt;br /&gt;
&lt;br /&gt;
  if (cardType == CARD_NONE)&lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;No SD card attached&amp;quot;);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;SD Card Type: &amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  if (cardType == CARD_MMC)&lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;MMC&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  else if (cardType == CARD_SD)&lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;SDSC&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  else if (cardType == CARD_SDHC)&lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;SDHC&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;UNKNOWN&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  uint64_t cardSize = SD.cardSize() / (1024 * 1024);&lt;br /&gt;
  Serial.printf(&amp;quot;SD Card Size: %lluMB\n&amp;quot;, cardSize);&lt;br /&gt;
&lt;br /&gt;
  listDir(SD, &amp;quot;/&amp;quot;, 0);&lt;br /&gt;
  createDir(SD, &amp;quot;/mydir&amp;quot;);&lt;br /&gt;
  listDir(SD, &amp;quot;/&amp;quot;, 0);&lt;br /&gt;
  removeDir(SD, &amp;quot;/mydir&amp;quot;);&lt;br /&gt;
  listDir(SD, &amp;quot;/&amp;quot;, 2);&lt;br /&gt;
  writeFile(SD, &amp;quot;/hello.txt&amp;quot;, &amp;quot;Hello &amp;quot;);&lt;br /&gt;
  appendFile(SD, &amp;quot;/hello.txt&amp;quot;, &amp;quot;World!\n&amp;quot;);&lt;br /&gt;
  readFile(SD, &amp;quot;/hello.txt&amp;quot;);&lt;br /&gt;
  deleteFile(SD, &amp;quot;/foo.txt&amp;quot;);&lt;br /&gt;
  renameFile(SD, &amp;quot;/hello.txt&amp;quot;, &amp;quot;/foo.txt&amp;quot;);&lt;br /&gt;
  readFile(SD, &amp;quot;/foo.txt&amp;quot;);&lt;br /&gt;
  testFileIO(SD, &amp;quot;/test.txt&amp;quot;);&lt;br /&gt;
  Serial.printf(&amp;quot;Total space: %lluMB\n&amp;quot;, SD.totalBytes() / (1024 * 1024));&lt;br /&gt;
  Serial.printf(&amp;quot;Used space: %lluMB\n&amp;quot;, SD.usedBytes() / (1024 * 1024));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
  // put your main code here, to run repeatedly:&lt;br /&gt;
  delay(1000);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pavyzdys paprastas, nuskaitoma SD korta, jos direktorijos, parašoma informacija, pratestuojama ar išeina sukurti failus ir t.t.&lt;br /&gt;
&lt;br /&gt;
[[Category:ESP32]]&lt;br /&gt;
[[Category:ESP8266]]&lt;br /&gt;
[[Category:Hardware]]&lt;br /&gt;
[[Category:IoT]]&lt;/div&gt;</summary>
		<author><name>\dev\null</name></author>
	</entry>
</feed>