在前面的章節中,你一直在使用樹莓派 Pico 連接到樹莓派或其他電腦。不過,與所有微控制器一樣,沒有理由讓你的 Pico 必須以這種方式綁定。它是一個功能齊全的獨立系統,具有處理能力、內存和它自己工作所需的一切。
在本章中,你將學習如何使用文件系統來創建、寫入和讀取文件,允許你將 Pico 放在任何你喜歡的地方,并讓它記錄數據以供以后訪問——將其轉換為所謂的數據記錄器。
文件系統
文件系統是樹莓派 Pico 存儲所有程序的地方。它的功能相當于樹莓派的 microSD 卡,或筆記本電腦的硬盤。它是一種非易失性存儲,這意味著即使你拔掉 Pico 的 micro USB 線,你保存在那里的任何東西也不會丟失。
連接上樹莓派 Pico 到你的樹莓派上,啟動 Thonny。單擊「打開」圖標,然后在彈出的窗口中單擊 MicroPython 設備。你將看到到目前為止所編寫 的所有程序的列表,這些程序存儲在你的 Pico 文件系統中。現在暫不選擇,所以單擊「取消」。
單擊 Shell 區域的底部,開始在交互模式下使用 Pico。鍵入代碼:
file = open("test.txt", "w")
這將打開一個名為 test.txt 的文件進行寫入,指令的 “w” 參數代表寫入。鍵入回車之后,Shell 區域沒有任何內容,因為盡管你已經打開了文件,但還沒有對它做任何操作。鍵入代碼:
file.write("Hello, File!")
鍵入回車之后,你會看到數字 12 出現。這是 MicroPython 向你確認它已經打開的文件寫入了 12 個字節。消息中字符的數量,包括字母、逗號、 空格和感嘆號,共有 12 個字符(每個字符占一個字節)。
當你寫入文件后,你需要手動關閉文件,這才能確保數據寫到文件系統。如果你不關閉文件,數據可能還沒有被正真寫入文件。鍵入代碼:
file.close()
你的文件現在安全地存儲在 Pico 的文件系統中。單擊 Thonny 工具欄上的「打開」圖標,單擊 MicroPython 設備,滾動文件列表,直到找到 test.txt。點擊它,然后點擊確定打開它。你會看到文件的內容。
要通過 MicroPython 讀取文件的話,回到 Shell 區域的底部,并鍵入代碼:
file = open("test.txt")
注意,這次沒有 “w” 參數,這是因為只是讀取文件,而不是寫入。你可以用 “r” 參數替代 “w” 參數,但是 MicroPython 默認以讀模式打開文件,所以可以省去這里的參數。鍵入代碼:
file.read()
你將看到寫入文件的內容輸出到了 Shell 區域。祝賀你!你可以在你的樹莓派 Pico 上讀寫文件了!
在你讀完之后,同樣記得關閉文件。在讀取文件后關閉文件并不像在寫入文件時關閉文件那么重要,但無論如何這都是一個好習慣:
file.close()
記錄溫度
現在你知道了如何打開、寫入和讀取文件,你已經具備了在 Pico 上構建數據記錄器所需的一切。
在 Thonny 上點擊 New 圖標創建一個新的程序,并鍵入代碼:
import machine import utime sensor_temp = machine.ADC(machine.ADC.CORE_TEMP) conversion_factor = 3.3 / (65535) reading = sensor_temp.read_u16() * conversion_factor temperature = 27 - (reading - 0.706)/0.001721
你可能見過這段代碼,它與之前「使用樹莓派 Pico 內置的溫度傳感器(https://pico.nxez.com/2023/09/10/how-to-use-the-temperature-sensor-built-into-the-raspberry-pi-pico.html)」的代碼相同。
來自傳感器的讀數是要記錄到文件系統的數據,所以你不希望像以前那樣簡單地將它們打印出來。打開一個要寫的文件,在底部添加以下一行。
file = open("temps.txt", "w")
如果文件系統中不存在該文件,則創建該文件;如果它這樣做了,它就會覆蓋它——清空它的內容,以便你寫入新數據。
現在,你需要向文件寫入從溫度傳感器讀到的數值:
file.write(str(temperature))
和前面一樣,為了確保數據被寫入,你需要關閉文件:
file.close()
單擊 Run 圖標并將程序保存到 MicroPython 設備 datallogger.py 中。這個程序只需要幾秒鐘就可以運行完成。當 >>> 示符重新出現在 Shell 區域,點擊進入它,并輸入以下內容來打開和讀取你的新文件:
file = open("temps.txt") file.read() file.close()
你將看到程序讀取的溫度顯示在 Shell 區域。恭喜!你的數據記錄器可以正常工作了!
為了使數據記錄器更強大,修改它,讓它支持處理大量的讀數。單擊 Run,并再次讀取文件:
file = open("temps.txt") file.read() file.close()
請注意,文件中仍然只有一個讀取。當程序再次打開文件進行寫入時,它會自動刪除先前的內容——這意味著每次程序運行時,它都會刪除文件并存儲一次讀取。
要解決這個問題,你需要修改程序。如果你像以前那樣關閉文件,你將無法再次寫入它,除非重新打開它并刪除它的內容。如果不關閉文件,數據將永遠不會寫入文件系統。解決方式是使用 file.flush() 刷新文件,而不是關閉它。
當你寫入一個文件,但數據實際上并沒有寫入文件系統時,它被存儲在所謂的緩沖區中——一個臨時存儲區域。當你關閉文件時,緩沖區將以稱為刷新的進程寫入文件。使用 file.flush() 等價于 file.close(),它會將緩沖區的內容刷新到文件中——但與 file.close() 不同的是,文件保持打開狀態,以便以后寫入更多數據。
完整的程序如下:
import machine import utime sensor_temp = machine.ADC(machine.ADC.CORE_TEMP) conversion_factor = 3.3 / (65535) file = open("temps.txt", "w") while True: reading = sensor_temp.read_u16() * conversion_factor temperature = 27 - (reading - 0.706)/0.001721 file.write(str(temperature)) file.flush() utime.sleep(10)
點擊 Run 圖標并數到 60,然后點擊停止圖標。現在在腳本區域打開并讀取你的文件:
file = open("temps.txt") file.read() file.close()
好消息是你的程序已經工作了,并且你在一個文件中記錄了多個讀數——大約 6 個,根據你的計數速度有幾個誤差。壞消息是,它們都混在一起在一條線上——這使得閱讀起來很困難。
要解決這個問題,你需要在數據寫入文件時對其進行格式化。回到程序中的 file.write() 行,并修改它,使其看起來像:
file.write(str(temperature) + " ")
加號(+)告訴 MicroPython 你想要追加后面的內容,將兩個字符串連接在一起。” ” 是一個被稱為控制字符的特殊字符串——它的作用相當于按下回車鍵,這意味著數據日志中的每一行都應該是單獨的一行。
單擊 Run 圖標,再次數到 60,然后單擊停止。打開并讀取你的文件:
file = open("temps.txt") file.read() file.close()
你已經取得了進展,但它仍然不正確: 控制字符的行為不像一個按鍵輸入,但打印為兩個空格字符。這是因為 file.read() 引入了文件的原始內容,而沒有嘗試為屏幕格式化它。
要解決格式問題,你需要用 print() 函數包裝讀取的文件:
file = open("temps.txt") print(file.read()) file.close()
這一次,你將看到每一份閱讀材料都被打印出來,格式整齊,易于閱讀。
你已經構建了一個數據記錄器,它可以進行多次讀取并將它們存儲在你的 Pico 的文件系統中!
文件存儲
樹莓派 Pico 的文件系統的大小是 1.375MiB,這意味著它可以容納 1,441,792 字節的數據。保存在 Pico 上的每個文件,包括數據記錄器的存儲文件,都會占用空間。填滿存儲需要多長時間取決于你有多少其他文件以及你的數據記錄器節省一次讀取的頻率:每 10 秒讀取 9 個字節,你將在大約 18.5 天內填滿 1.375MiB;如果你每分鐘讀取一次數據,你的數據記錄器可以運行 111 天左右;如果你每小時只讀一次,你的數據記錄器可以運行 18 年以上!
無論是否連接到樹莓派或其他電腦,樹莓派 Pico 文件系統都能正常工作。如果你有一個 micro USB 充電器或 USB 充電寶,你可以把數據記錄器放在任何地方,并讓它自己運行。但你需要一種方法,讓你的程序運行,而不必點擊 Thonny 的 Run 圖標。
在不連接計算機的情況下使用,你可以將程序保存在一個特殊的文件名 main.py 下。當 MicroPython 在它的文件系統中發現一個名為 main.py 的文件時,它會在每次上電或重置時自動運行這個文件。
現在,斷開樹莓派 Pico 和你的樹莓派,把它帶到另一個房間,連接到充電器或電池組上。把它放在那里十分鐘,然后回來把插頭拔掉。
放回你的樹莓派,插上電源,再讀一遍你的文件。你會看到來自另一個房間的讀數,證明你的 Pico 可以沒有樹莓派的幫助也能運行得很好。
恭喜你!你的數據記錄器現在是完全功能和完全便攜,準備好了你可以隨時隨地記錄你需要的數據!
-
文件系統
+關注
關注
0文章
284瀏覽量
19911 -
Pico
+關注
關注
0文章
172瀏覽量
17086 -
數據記錄器
+關注
關注
0文章
53瀏覽量
12694 -
樹莓派
+關注
關注
116文章
1707瀏覽量
105633
原文標題:樹莓派 Pico 文件系統應用:數據記錄器
文章出處:【微信號:趣無盡,微信公眾號:趣無盡】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論