37款傳感器與模塊的提法,在網絡上廣泛流傳,其實Arduino能夠兼容的傳感器模塊肯定是不止37種的。鑑於本人手頭積累了一些傳感器和執行器模塊,依照實踐出真知(一定要動手做)的理念,以學習和交流爲目的,這裏準備逐一動手試試多做實驗,不管成功與否,都會記錄下來——小小的進步或是搞不掂的問題,希望能夠拋磚引玉。
【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)
實驗五十二:SPI接口Micro SD卡模塊 TF卡讀寫卡器 (帶電平轉換芯片)
Arduino實驗接線示意圖
【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)
實驗五十二:SPI接口Micro SD卡模塊TF卡讀寫卡器 (帶電平轉換芯片)
程序:讀取SD卡記事本123456上的內容,並通過串口發送
接線:
MicroSD uno
CS-------------10
MOSI(DI)------11
MISO(DO)------12
CLK------------13
/* 【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程) 實驗五十二:SPI接口Micro SD卡模塊TF卡讀寫卡器 (帶電平轉換芯片) 程序:讀取SD卡記事本123456上的內容,並通過串口發送 接線: MicroSD uno CS-------------10 MOSI(DI)------11 MISO(DO)------12 CLK------------13 */ #include <SPI.h> #include <SD.h> File myFile;//定義變量myFile void setup() { // 打開串口通信並等待端口打開 Serial.begin(9600); while (!Serial) { ;// 等待串口連接, 僅使用本地 USB 端口 } Serial.print("Initializing SD card..."); // 查看卡是否存在並且可以初始化 if (!SD.begin(10)) { Serial.println("initialization failed!"); // 如卡不存在,則不要再做任何事情,初始化失敗 return; } Serial.println("initialization done."); // 打開文件,請注意,一次只能打開一個文件 // 所以你必須在打開另一個之前關閉這個 myFile = SD.open("123456.TXT"); // 如果文件可用,讀取SD卡記事本123456上的內容 if (myFile) { Serial.println("123456.txt:"); Serial.println("↓↓↓↓"); while (myFile.available()) { Serial.write(myFile.read()); } myFile.close(); } else { // 如果文件沒有打開,彈出一個錯誤 Serial.println("error opening 123456.txt"); } } void loop() { }
實驗串口返回情況,讀取了記事本上的文字內容
Arduino實驗場景圖
【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)
實驗五十二:SPI接口Micro SD卡模塊TF卡讀寫卡器 (帶電平轉換芯片)
程序:打印出一個SD卡上的目錄
接線:
MicroSD uno
CS-------------10
MOSI(DI)------11
MISO(DO)------12
CLK------------13
/* 【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程) 實驗五十二:SPI接口Micro SD卡模塊TF卡讀寫卡器 (帶電平轉換芯片) 程序:打印出一個SD卡上的目錄 接線: MicroSD uno CS-------------10 MOSI(DI)------11 MISO(DO)------12 CLK------------13 */ #include <SPI.h> #include <SD.h> File root; void setup() { // 打開串口通信,等待端口打開 Serial.begin(9600); while (!Serial) { ; //等待串口連接, 僅使用本地 USB 端口 } Serial.print("Initializing SD card..."); if (!SD.begin(10)) { Serial.println("initialization failed!"); while (1); } Serial.println("initialization done."); root = SD.open("/"); printDirectory(root, 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】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)
實驗五十二:SPI接口Micro SD卡模塊TF卡讀寫卡器 (帶電平轉換芯片)
程序:從 SD 卡文件讀取和寫入數據
接線:
MicroSD uno
CS-------------10
MOSI(DI)------11
MISO(DO)------12
CLK------------13
/* 【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程) 實驗五十二:SPI接口Micro SD卡模塊TF卡讀寫卡器 (帶電平轉換芯片) 程序:從 SD 卡文件讀取和寫入數據 接線: MicroSD uno CS-------------10 MOSI(DI)------11 MISO(DO)------12 CLK------------13 */ #include <SPI.h> #include <SD.h> File myFile; void setup() { // 打開串口通信,等待端口打開 Serial.begin(9600); while (!Serial) { ; //等待串口連接, 僅使用本地 USB 端口 } Serial.print("Initializing SD card..."); if (!SD.begin(10)) { Serial.println("initialization failed!"); while (1); } Serial.println("initialization done."); // 打開文件,請注意,一次只能打開一個文件 // 所以你必須在打開另一個之前關閉這個 myFile = SD.open("123456.txt", FILE_WRITE); //如果文件打開正常,請寫入 if (myFile) { Serial.print("Writing to test.txt..."); myFile.println("testing 1, 2, 3."); // close the file: myFile.close(); Serial.println("done."); } else { // 如果文件沒有打開,打印一個錯誤 Serial.println("error opening 123456.txt"); } // 重新打開文件進行閱讀 myFile = SD.open("123456.txt"); if (myFile) { Serial.println("123456.txt:"); // 從文件中讀取,直到其中沒有其他內容: while (myFile.available()) { Serial.write(myFile.read()); } // 關閉文件 myFile.close(); } else { // 如果文件沒有打開,打印一個錯誤: Serial.println("error opening 123456.txt"); } } void loop() { // 設置後沒有任何反應 }
實驗串口返回情況,讀取記事本123456上的內容,並寫入“testing 1, 2, 3.”
【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)
實驗五十二:SPI接口Micro SD卡模塊TF卡讀寫卡器 (帶電平轉換芯片)
程序:SD卡測試,獲取有關 SD 卡的相關信息
接線:
MicroSD uno
CS-------------10
MOSI(DI)------11
MISO(DO)------12
CLK------------13
/* 【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程) 實驗五十二:SPI接口Micro SD卡模塊TF卡讀寫卡器 (帶電平轉換芯片) 程序:SD卡測試,獲取有關 SD 卡的相關信息 接線: MicroSD uno CS-------------10 MOSI(DI)------11 MISO(DO)------12 CLK------------13 */ // 導入 SD 庫 #include <SPI.h> #include <SD.h> // 使用 SD 實用程序庫函數設置變量 Sd2Card card; SdVolume volume; SdFile root; // 更改它以匹配您的 SD 屏蔽或模塊 // Arduino Ethernet shield: pin 4 // Adafruit SD shields and modules: pin 10 // Sparkfun SD shield: pin 8 // MKRZero SD: SDCARD_SS_PIN const int chipSelect = 10; void setup() { // 打開串口通信,等待端口打開 Serial.begin(9600); while (!Serial) { ; //等待串口連接,僅使用本地 USB 端口 } Serial.print("\nInitializing SD card..."); // 我們將使用實用程序庫中的初始化代碼 // 因爲我們只是在測試卡是否正常工作! if (!card.init(SPI_HALF_SPEED, chipSelect)) { Serial.println("initialization failed. Things to check:"); Serial.println("* is a card inserted?"); Serial.println("* is your wiring correct?"); Serial.println("* did you change the chipSelect pin to match your shield or module?"); while (1); } else { Serial.println("Wiring is correct and a card is present."); } // 打印卡類型 Serial.println(); Serial.print("Card type: "); switch (card.type()) { case SD_CARD_TYPE_SD1: Serial.println("SD1"); break; case SD_CARD_TYPE_SD2: Serial.println("SD2"); break; case SD_CARD_TYPE_SDHC: Serial.println("SDHC"); break; default: Serial.println("Unknown"); } // 現在我們將嘗試打開“卷”/“分區”——它應該是 FAT16 或 FAT32 if (!volume.init(card)) { Serial.println("Could not find FAT16/FAT32 partition.\nMake sure you've formatted the card"); while (1); } Serial.print("Clusters: "); Serial.println(volume.clusterCount()); Serial.print("Blocks x Cluster: "); Serial.println(volume.blocksPerCluster()); Serial.print("Total Blocks: "); Serial.println(volume.blocksPerCluster() * volume.clusterCount()); Serial.println(); // 打印第一個 FAT 類型卷的類型和大小 uint32_t volumesize; Serial.print("Volume type is: FAT"); Serial.println(volume.fatType(), DEC); volumesize = volume.blocksPerCluster(); // 集羣是塊的集合 volumesize *= volume.clusterCount(); // 會有很多集羣 volumesize /= 2; // SD 卡塊始終爲 512 字節(2 個塊爲 1KB) Serial.print("Volume size (Kb): "); Serial.println(volumesize); Serial.print("Volume size (Mb): "); volumesize /= 1024; Serial.println(volumesize); Serial.print("Volume size (Gb): "); Serial.println((float)volumesize / 1024.0); Serial.println("\nFiles found on the card (name, date and size in bytes): "); root.openRoot(volume); // 列出卡中所有文件的日期和大小 root.ls(LS_R | LS_DATE | LS_SIZE); } void loop(void) { }
實驗串口返回情況
【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)
實驗五十二:SPI接口Micro SD卡模塊TF卡讀寫卡器 (帶電平轉換芯片)
程序:創建和銷燬 SD 卡文件
接線:
MicroSD uno
CS-------------10
MOSI(DI)------11
MISO(DO)------12
CLK------------13
/* 【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程) 實驗五十二:SPI接口Micro SD卡模塊TF卡讀寫卡器 (帶電平轉換芯片) 程序:創建和銷燬 SD 卡文件 接線: MicroSD uno CS-------------10 MOSI(DI)------11 MISO(DO)------12 CLK------------13 */ #include <SPI.h> #include <SD.h> File myFile; void setup() { // 打開串口通信,等待端口打開 Serial.begin(9600); while (!Serial) { ; // 等待串口連接,僅使用本地 USB 端口 } Serial.print("Initializing SD card..."); if (!SD.begin(10)) { Serial.println("initialization failed!"); while (1); } Serial.println("initialization done."); 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() { // 設置完成後沒有任何反應 }
實驗串口返回情況
Arduino實驗場景圖