ESP8266恒温控制器

本文,我们将使用ESP8266构建家用恒温器。 温控器将具有以下功能:

  • 它将从DHT22温度传感器读取温度
  • 它将温度与所需温度进行比较。 如果高于它,它将触发继电器关闭;如果低于它,它将触发继电器打开

在此之前,首先了解下ESP8266如何保持温度和提取温度。

SPIFFS介绍

SPI Flash文件系统(SPIFFS)是为小型嵌入式系统创建的文件系统。 SPIFFS具有许多优点,因为它允许您创建文件和模拟目录:

  • 专为微控制器上的低RAM使用而设计
  • 使用静态大小的RAM缓冲区
  • 类似于Posix的api:打开,关闭,读取,写入,查找,统计等
  • 它可以在任何NOR闪存上运行,而不仅限于SPI闪存。 多个SPIFFS配置可以在同一目标上运行,甚至可以在同一SPI闪存设备上运行
  • 实现静态磨损均衡
  • 内置文件系统一致性检查
  • 高度可配置,可适应多种闪存类型

我强烈建议您在设计中使用SPIFFS将数据存储在NOR闪存中,因为它非常容易读写数据,就像一个* nix文件系统。

文件系统的大小取决于闪存芯片的大小。 根据在IDE中选择的板,可以为SPIFFS选择不同的大小。 例如,如果您选择了NodeMcu v1.0作为Board类型,则SPIFFS有两个维度,如以下屏幕截图所示,为1M和3M之一:

即使文件系统与应用程序存储在同一闪存芯片上,刷新新Sketch也不会修改文件系统内容。 这使我们可以使用文件系统来存储Web服务器的数据,配置文件或内容。

现在,让我们看看哪些函数可用于操作文件。 首先,他们可以访问SPIFFS函数,并且FS.h文件需要包含在Sketch中:

#include "FS.h"

加入之后,我们可以访问三个对象:SPIFFS,File和Dir。

SPIFFS对象

  • begin:挂载文件系统。 需要先调用,然后返回true表示成功,否则返回false:
if(SPIFFS.begin())
{
 Serial.println(F("File systestem mounted.")); //use F function to
store the string in flash and not in RAM memory. This save a lot of
RAM memory
}
else
{
 Serial.println(F("Mounting file system failed."));
}
  • info:返回有关整个文件系统的信息,该信息存储在FSInfo结构中。 FSInfo结构具有以下成员:
struct FSInfo {
 size_t totalBytes;
 size_t usedBytes;
 size_t blockSize;
 size_t pageSize;
 size_t maxOpenFiles;
 size_t maxPathLength;
};

声明fs_info并使用info函数填充它,将使我们能够访问有关文件系统的信息:

FSInfo fs_info;
SPIFFS.info(fs_info);
Serial.print("Used bytes: ");
Serial.println(fs_info.usedBytes);
  • exists::如果文件系统中存在指定的路径(文件),则SPIFFS.exists(path)返回true或false:
if(SPIFFS.exist("/config.json"))
 Serial.println(F("File config.json exists."));

注意:该路径必须是绝对路径,并以斜杠开头。

  • format:格式化整个文件系统并返回true或false。 格式可以在begin函数之前或之后调用,根据文件系统的大小,它可能需要数十秒才能完成:
SPIFFS.format();
  • open:此函数返回一个File对象,并以文件的绝对路径和打开文件的模式为参数。 成功则返回true,否则返回false:
SPIFFS.open(path, mode);
File config_file = SPIFFS.open("/config.json", "w");
if (!config_file) {
 Serial.println(F("failed opening config.json file."));
}

在前面的代码中,用于打开文件的选定模式为w(写)。 可以使用与ANSI C函数fopen相同的模式:

r 打开文本文件进行读取。 流位于文件的开头。

r+ 打开读取和写入,流位于文件的开头。

w 将文件截断为零长度或创建一个文本文件进行写入,流位于文件的开头

w+ 打开读取和写入。 如果文件不存在,则创建该文件; 否则将被截断。 流位于文件的开头

a 打开以进行追加(在文件末尾写入)。 如果文件不存在,则创建该文件。 流位于文件的末尾。

a+ 打开以进行读取和追加(在文件末尾写入)。 如果文件不存在,则创建该文件。 读取的初始文件位置在文件的开头,但输出始终附加在文件的末尾。

  • remove:从文件系统中删除文件。 它以绝对路径作为参数,如果成功则返回true,否则返回false:

if(SPIFFS.remove(“/config.json”))
Serial.println(F(“File config.json was removed”));



*   rename:重命名文件。 采用两个参数,当前名称和新名称的绝对路径。 如果成功则返回true,否则返回false:

    ```
If( SPIFFS.rename("/old_file_name.json","/new_file_name.json")
 Serial.println(F("File renamed."));

目录对象

如果需要遍历目录中的所有文件,则可以使用Dir(目录)对象。 有三种方法可用于迭代next(),获取下一个文件文件Name()的名称以及打开目录openDir(mode):

注意:SPIFFS不支持目录。 实际上,它产生了平坦的结构。 创建路径为/data/log.txt的文件将在目录数据下创建一个名为/data/log.txt的文件,而不是log.txt。

Dir dir = SPIFFS.openDir("/data");
while (dir.next()) {
 Serial.print(dir.fileName());
 File f = dir.openFile("r");
 Serial.println(f.size());
}

从以上可以看出:

  • openDir中的mode可以具有与SPIFFS对象中的open函数相同的值
  • 如果数据目录中有文件,则dir.next()返回true,并且必须在fileName()和openFile(mode)函数之前调用

文件对象

温度传感器

代码

详情参阅 - 亚图跨际

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值