电子说
在前面的章节中,你一直在使用树莓派 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条评论
快来发表一下你的评论吧 !