本文,我们将使用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)函数之前调用

文件对象

温度传感器

代码

详情参阅 - 亚图跨际

ESP8266恒温控制器相关推荐

  1. 安装esp8266库_基于ESP8266,DIY低成本智能远程开关灯小装置

    废话不多说,直接开始 首先需要必备的环境arduino ide,Blinker app(应用商店均可下载)以及必备的一些库(aduino ide1.8.7及以上版本,esp8266拓展,blinker ...

  2. esp freertos_如何开始使用FreeRTOS和ESP8266

    esp freertos by Denis Nuțiu 丹尼斯·努尤(Denis Nuțiu) 如何开始使用FreeRTOS和ESP8266 (How to get started with Free ...

  3. 一、ESP8266入门(基于LUA开发)

    序 一入坑便停不下来...  还挺有意思的哈,233,,,,  资料杂,自己一个一个去找确实浪费了不少时间,而且大多还都是英文的,需要硬着头皮看.  这次实践入门,更是对英语的重要确信无疑.Githu ...

  4. 乐鑫esp8266模块MicroPython开发板MQTT物联网人工智能最小系统

    简 介: ※对于购买自网络的基于ESP8266的实验模块进行了初步的测试,它其中的一些示例进行了练习.特别是对于基于ESP8266的特殊的一些外设的测试. 关键词: ESP8266,MicroPyth ...

  5. 基于USR-WiFi模块的 ESP32,ESP8266 Thonny调试器

    简 介: 本文给出了基于WiFi模块 USR-WiFi232 设置无线调试ESP32,ESP8266 MicroPython开发的环境. 关键词: ESP32,ESP8266,Thonny,Micro ...

  6. 利用ESP8266测量模块来设计远距离反射式光电检测 : ITR8307

    简 介: 为了能够使得下一届的智能车竞赛中的节能信标组摆脱磁铁的干扰,可以进行对抗比赛.在现有的节能信标灯的基础上,增加光电反射检测单元.该电路采用了反射式光电检测管,利用单片机的定时ADC转换,可以 ...

  7. ESP32,ESP8266之间WiFi互联实验

    ▌ESP32,ESP8266模块互联 ESP32,ESP8266 模块具有很丰富的功能,便于设计一些现场需要联网的场合.基于此在AI视觉组基于ESP32的裁判系统第一版本设计要求 就使用了ESP32进 ...

  8. ESP8266 D1-UNO-R3开发板的初步测试

    简 介: 测试购买到的基于ESP8266的开发板,但是始终没有能够成功下载程序.问题尚待后期进行测试. 关键词: ESP8266,Arduino #mermaid-svg-6x74Q9rymsvfSg ...

  9. 安装 Arduino IDE 中STM32 软件包,ESP8266软件包

    简 介: 搜集了更多的基于Arduino生态环境的安装和使用方法. 关键词: Arduino,STM32,ESP8266 §01 安装STM32在Arduino IDE软件包 1.参考文献1 参照推文 ...

  10. ESP8266访问网站-urequest get方法

    §01 利用ESP8266访问网站 在制作基于ESP8266的联网的智能门控系统,ESP8266负载将局部的基于人脸识别的门控系统的信息与管理网站之间进行信息的交互.利用了 http 中的 get 方 ...

最新文章

  1. TCP服务端程序开发
  2. Git reset , revert, checkout的区别和联系
  3. 华为eNSP和SecureCRT连接乱码问题
  4. 6种常见的无线组网架构
  5. 物联网为电信运营商带来众多商业机会
  6. java app log4j 配置_Java-未加载log4j2配置
  7. Unity协程(Coroutine)原理深入剖析
  8. sql select distinct常见错误_这8种常见的SQL错误用法,80%的程序员还在犯
  9. HDU 5980 2016ICPC大连 J: Find Small A
  10. python条件语句练习题_[python](1)---条件语句练习题
  11. C中error的使用
  12. JQuery的Ajax标准写法
  13. java中常用的算法--URL
  14. 啦啦外卖php版本,微信外卖源码,微信啦啦外卖plus跑腿版 v5.0.7开源版
  15. 【Datawhale IntelVINO学习笔记】OpenVINO音频和人体姿态识别
  16. 阿里云的对象存储服务,oss 简介
  17. 《加了pencil的ipad使用体验,想入手的看过来》
  18. arcgis导出的图片无效_img影像在arcgis中生成JPG图片空白求解
  19. Ribbon原理及使用详解
  20. Ribbon饥饿加载

热门文章

  1. 啦啦外卖修改飞鹅打印机的打印模板
  2. Zookeeper的Paxos分布式一致性算法-类比
  3. PHP实现手机号码归属地查询
  4. 无盘Linux详解:硬盘启动Knoppix的前前后后
  5. 人脸识别技术细节总结
  6. 谈谈mysql的悲观和乐观锁 - 周伯通的麦田 - 博客园
  7. 【Web】CGI简介
  8. 1月到12月 周一到周日 十二种颜色 用英语怎么说
  9. CSS3硬件加速 - GPU加速
  10. 界面音效以及3D音效通过参数控制声音加载声音资源包