Arduino-SD库材料建造:Dapenson
SD库
SD库简介
快乐飞艇开奖网:Arduino向SD卡读写数据
快乐飞艇开奖网:Arduino读取SD卡根目次内容
快乐飞艇开奖网:Arduino在SD卡上建立和删除文件
SD库函数
SD库简介
SD库实现了Arduino对SD卡的读取和写入。它基于William Greiman的停止开辟。SD库在规范SD卡和SDHC卡上撑持FAT16
和FAT32
文件体系情势。
利用SD库中函数里参数能够包罗以正斜杠/
分开的途径,比方" directory / filename.txt"
。因为任务目次一直是SD卡的根目次,是以不管文件名是不是包罗斜杠,其称号都指向统一文件(比方," / file.txt"
同等于" file.txt"
)。从1.0版起头,SD库撑持翻开多个文件。
开辟板与SD卡之间的通信利用SPI
,注重:
必须毗连SS
引脚来挑选SD卡。在UNO上,SS默许是为引脚D10
,在MEGA2560上SS默许为引脚53
,
或着您也能够在SD.begin()
函数中指定一个SS引脚并与之毗连。请注重,在您自界说了SS引脚今后,请设置该引脚为输入情势,不然SD库没法一般任务(倡议初学者按照太极创客供给的电路连线图停止毗连)
1 硬件须要
SD卡读写模块(SPI)

经常利用的SD卡读写模块按照SD卡和TF卡可分为以上两种,
一种是上图左侧的模块( MicroSD Card Adapter), 它是 Micro sd卡读写模块,经由过程文件体系及SPI接口驱动
法式单片机体系便可实现 Microsd卡内的文件停止读写。 Arduino用户可间接利用 Arduino IDE自带的SD卡法式库便可实现卡的初始化和读写
模块特色:
1. 撑持 Micro sd卡、 Micro soho卡(高速卡)
2. 板载电平转换电路,即接口电平可为5V或3.3V
3. 供电电源为45V~5.5V,板载3.3V稳压电路
4. 通信接口为规范SPI接口
5. 4个M2螺丝定位孔,便于装置
节制接口:共6个引脚(GND、VCC、MOSI、MISO、SCK、CS)
GND为地,VCC为供电电源,MOSI、MISO、SCK为SPI总线
CS为片选旌旗灯号脚;
详细参数:

别的一种是上图右侧的模块( SD Card Module), 它是 SD卡读写模块,一样的也是经由过程文件体系及SPI接口驱动
法式单片机体系便可实现SD卡内的文件停止读写。 是以摆布两个版本的模块固然尺寸和撑持的卡巨细差别, 可是功效和机能是一样的 , 您能够按照本身的须要停止选购, 在某宝搜刮 “SD卡模块” 便可找到这两种Sd卡模块.
2 电路毗连
读写模块多接纳SPI停止电路毗连的,为了便利大师参考,下表列出了差别Arduino板上的SPI的连线:

您能够按照本身的开辟板范例停止连线
上面以UNO和MEGA 2560为例,将SD卡读写模块毗连在开辟板对应的SPI引脚上
1 2 3 4 5 6 |
(SD) - (UNO) - (2560) MOSI - 11 - 51 MISO - 12 - 50 SCK - 13 - 52 CS - 10 - 53 |

UNO经由过程SPI利用SD卡读取模块

MEGA2560经由过程SPI利用SD卡读取模块
Arduino向SD卡读写数据
为了演示,咱们这里利用开辟板默许的SS引脚,电路表示图见上.太极创客(ysc2014.com)
若是您须要利用自界说CS引脚,则须要在setup()中,利用SD.begin()
将指定引脚界说为CS
引脚,
界说今后必然要设置该引脚为输入情势,不然没法一般任务,详细参考SD.begin()
函数页面.
在本示例,将在setup()中利用函数SD.open()
建立一个名为" test.txt"
的新文件。此中参数FILE_WRITE
意为将从开头起头启用对文件的读写。若是卡上已有文件" test.txt"
,则翻开该文件。
将翻开的文件的实例化工具定名为" myFile"
。
翻开后,用myFile.println()
函数将字符串写入SD卡。内容写入后,封闭文件。
为了考证是不是写入胜利,咱们再次利用翻开文件,利用SD.open()
。翻开今后,利用SD.read()
读守信息而后经由过程串行监督器打印外面的数据。读取文件的一切内容后,请利用SD.close()
封闭文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
/********************************************************************** 法式称号/Program name : 利用SD库读写文件 团队/Team : 太极创客团队 / Taichi-Maker (ysc2014.com) 作者/Author : Dapenson 日期/Date(YYYYMMDD) : 2020/06/18 法式目标/Purpose : 演示若何利用UNO和SD卡读写模块停止文件的读写 ----------------------------------------------------------------------- 订正汗青/Revision History 日期/Date 作者/Author 参考号/Ref 订正申明/Revision Description ----------------------------------------------------------------------- 别的申明: ***********************************************************************/ #include <SPI.h> #include <SD.h> // 建立File实例化工具 File myFile; void setup() { // 初始化硬件串口并设置波特率为9600 Serial.begin(9600); while (!Serial) { ; //期待串口翻开 } Serial.print("Initializing SD card..."); //注重,必须将CS引脚设置为输入情势,不然SD库功效将不起感化。 //此处将10引脚作为CS并设置为输入OUTPUT情势 // pinMode(cs, OUTPUT); if (!SD.begin()) { Serial.println("initialization failed!"); return; } Serial.println("initialization done."); //翻开文件。 请注重,一次只能翻开一个文件 //您必须先封闭该文件再翻开另外一个文件。 myFile = SD.open("test.txt", FILE_WRITE); // 若是文件翻开,则停止写入 if (myFile) { Serial.print("Writing to test.txt..."); myFile.println("testing 1, 2, 3."); // 封闭文件翻开状况 myFile.close(); Serial.println("done."); } else { //若是文件不翻开,则向串口输入文件翻开毛病 Serial.println("error opening test.txt"); } // 从头读取该文件<span style="color: #ffffff;">太极创客(ysc2014.com)</span> myFile = SD.open("test.txt"); if (myFile) { Serial.println("test.txt:"); //从文件里读取数据并打印到串口,直到读取实现 while (myFile.available()) { Serial.write(myFile.read()); } // 封闭文件翻开状况 myFile.close(); } else { //若是文件不翻开,则向串口输入文件翻开毛病 Serial.println("error opening test.txt"); } } void loop() { } |
结果演示

经由过程串口反应的信息太极创客(ysc2014.com)

Arduino读取SD卡根目次内容
本示例申明若何列出SD卡目次中的有用的文件(文件名不可含中笔墨符)。
利用自界说的printDirectory
函数扫描SD卡根目次,并经由过程串口监督器反应的情势打印根目次下存在的每一个文件和文件夹。对零丁文件,还将打印文件的巨细。太极创客(ysc2014.com)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
/********************************************************************** 法式称号/Program name : 利用SD库读取根目次内容 团队/Team : 太极创客团队 / Taichi-Maker (ysc2014.com) 作者/Author : Dapenson 日期/Date(YYYYMMDD) : 2020/06/18 法式目标/Purpose : 演示若何利用UNO和SD卡读取SD卡根目次的内容 ----------------------------------------------------------------------- 订正汗青/Revision History 日期/Date 作者/Author 参考号/Ref 订正申明/Revision Description ----------------------------------------------------------------------- 别的申明: 本法式来历于以下链接,由Dapenson停止清算和正文, 目标是为了让初学者更好的懂得和进修相干内容 http://www.arduino.cc/en/Reference/SD ***********************************************************************/ #include <SPI.h> #include <SD.h> // 建立File实例化工具 File myFile; void setup() { // 初始化硬件串口并设置波特率为9600 Serial.begin(9600); while (!Serial) { ; //期待串口翻开 } Serial.print("Initializing SD card..."); if (!SD.begin()) { Serial.println("initialization failed!"); return; } Serial.println("initialization done."); //翻开文件。 请注重,一次只能翻开一个文件 //您必须先封闭该文件再翻开另外一个文件。 myFile = SD.open("/"); printDirectory(myFile, 0); Serial.println("done!"); } void loop() { } void printDirectory(File dir, int numTabs) { while (true) { File entry = dir.openNextFile(); if (!entry) { // 若是不文件则跳出轮回 break; } for (uint8_t i = 0; i < numTabs; i++) { Serial.print('\t'); } Serial.print(entry.name()); if (entry.isDirectory()) { Serial.println("/"); printDirectory(entry, numTabs + 1); } else { // 文件会巨细,文件夹则不打印巨细 Serial.print("\t\t"); Serial.println(entry.size(), DEC); } entry.close(); } } |
结果演示
为了更好地读取根目次下的内容,咱们事先在根目次下建立多个范例的文件以展现本法式的功效

串口打印演示

能够看到Arduino串口监督器打印出了SD卡内一切的文件及其文件巨细,若是是文件夹则打印文件夹中的内容.
Arduino在SD卡上建立和删除文件
本示例申明若何在SD卡上新建和删除文件
在本示例,将在setup()中利用函数SD.open()
建立一个名为" test.txt"
的新文件。利用FILE_WRITE
情势启用对文件的读写。注重,读写实现后请经由过程myFile.close()
函数封闭文件。
读写实现今后,请利用SD.exists()
查抄文件是不是存在。
最初,利用SD.remove()
从SD卡中删除文件。太极创客(ysc2014.com)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
/********************************************************************** 法式称号/Program name : 利用SD库新建和删除文件 团队/Team : 太极创客团队 / Taichi-Maker (ysc2014.com) 作者/Author : Dapenson 日期/Date(YYYYMMDD) : 2020/06/18 法式目标/Purpose : 演示若何利用Arduino开辟板在SD卡中新建文件和删除文件 ----------------------------------------------------------------------- 订正汗青/Revision History 日期/Date 作者/Author 参考号/Ref 订正申明/Revision Description ----------------------------------------------------------------------- 别的申明: 本法式来历于以下链接,由Dapenson停止清算和正文, 目标是为了让初学者更好的懂得和进修相干内容 http://www.arduino.cc/en/Reference/SD ***********************************************************************/ #include <SPI.h> #include <SD.h> // 建立File实例化工具 File myFile; void setup() { // 初始化硬件串口并设置波特率为9600 Serial.begin(9600); while (!Serial) { ; //期待串口翻开 } Serial.print("Initializing SD card..."); // 检测是不是初始化实现 if (!SD.begin()) { Serial.println("initialization failed!"); return; } Serial.println("initialization done."); // 查抄是不是存在"example.txt"文件 if (SD.exists("example.txt")) { Serial.println("example.txt exists."); } else { Serial.println("example.txt doesn't exist."); } // 翻开一个新文件,而后立行将其封闭(建立文件) Serial.println("Creating example.txt..."); myFile = SD.open("example.txt", FILE_WRITE); myFile.close(); // 查抄该文件是不是新建胜利 if (SD.exists("example.txt")) { Serial.println("example.txt exists."); } else { Serial.println("example.txt doesn't exist."); } //删除该文件 Serial.println("Removing example.txt..."); SD.remove("example.txt"); if (SD.exists("example.txt")) { Serial.println("example.txt exists."); } else { Serial.println("example.txt doesn't exist."); } } void loop() { } |
结果演示太极创客(ysc2014.com)

SD库函数

SD类的函数供给用户用于拜候SD卡并处置此中文件和目次的功效。太极创客(ysc2014.com)
begin()
exists()
mkdir()
open()
remove()
rmdir()
FILE类函数
File类的函数允许读取和写入SD卡上的单个文件。
注重:SD库中FILE类属于Stream类的子类。是以用法与Serial、WiFiClient等是分歧的,
概况可查抄快乐飞艇开奖网:太极创客Stream教程
name()
快乐飞艇开奖网:available()
close()
flush()太极创客(ysc2014.com)
peek()
快乐飞艇开奖网:position()
print()
快乐飞艇开奖网:println()
seek()
size()
read()
write()
快乐飞艇开奖网:isDirectory()
快乐飞艇开奖网:openNextFile()
快乐飞艇开奖网:rewindDirectory()