ESP8266 鼓捣记 - 从零制作一个温湿度计
一.前言
经过上一篇文章 《ESP8266 鼓捣记 - 入门(环境搭建) 》搭建好环境后,肯定不会满足于 Hello World ,想快速做一个实际有用的东西出来,我认为温湿度计就非常合适,简单易做,需要的材料也不多。
二.材料的准备
除了 ESP8266 开发板以外,还需要一个 DHT11 温湿度传感器模块,这个直接在某宝搜索即可,几块钱一个。

因为我是直接买的物联网开发套餐,包含了DHT11模块的,板子也是定制的学习板子,包含了很多针脚,只需要用杜邦线连接起来就行了,不需要锡焊,如果你是买的普通板子,可能要考虑买个电烙铁来焊接模块。
三.连接电路

这个图片是我买的套餐里,卖家提供的资料,把 DHT11的针脚连接到 ESP8266 板子上。完成后如下图:

四.编码
编码是基于点灯科技提供的 Blinker 物联网开发平台,它提供了丰富的示例代码,对于温湿度计来说,有现成的代码。
首选需要安装 DHT11 库

然后是编码
#define BLINKER_WIFI
#include <Blinker.h>
//blinker 提供的key
char auth[] = "";
//你的wifi名字
char ssid[] = "";
//你的wifi密码
char pswd[] = "";
//发送到 blinker 的湿度数据key
BlinkerNumber HUMI("humi");
//发送到 blinker 的温度数据key
BlinkerNumber TEMP("temp");
//引入 DHT 库
#include <DHT.h>
#define DHTPIN 2
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);
uint32_t read_time = 0;
float humi_read, temp_read;
void dataRead(const String & data)
{
BLINKER_LOG("Blinker readString: ", data);
Blinker.vibrate();
uint32_t BlinkerTime = millis();
Blinker.print("millis", BlinkerTime);
}
void heartbeat()
{
HUMI.print(humi_read);
TEMP.print(temp_read);
}
void dataStorage() {
//添加数据存储 以便于图标数据展示
Blinker.dataStorage("humi", humi_read);
//添加数据存储 以便于图标数据展示
Blinker.dataStorage("temp", temp_read);
}
void setup()
{
Serial.begin(115200);
BLINKER_DEBUG.stream(Serial);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
Blinker.begin(auth, ssid, pswd);
Blinker.attachData(dataRead);
Blinker.attachHeartbeat(heartbeat);
Blinker.attachDataStorage(dataStorage);
dht.begin();
}
void loop()
{
Blinker.run();
if (read_time == 0 || (millis() - read_time) >= 2000)
{
read_time = millis();
//读取湿度
float h = dht.readHumidity();
//读取温度
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
BLINKER_LOG("Failed to read from DHT sensor!");
return;
}
float hic = dht.computeHeatIndex(t, h, false);
humi_read = h;
temp_read = t;
BLINKER_LOG("Humidity: ", h, " %");
BLINKER_LOG("Temperature: ", t, " *C");
BLINKER_LOG("Heat index: ", hic, " *C");
}
}
代码我就不一一讲解了,加了部分注释,复制这段代码,设置 Blinker 的 key,然后wifi名字和密码,写入esp8266即可完成,非常简单。
五.设置UI
因为我们是基于 Blinker 平台的,所以可以直接使用 Blinker APP 来连接我们的开发板,该APP提供了非常强大的UI编辑功能。
这是我设计好的UI,标注了各个控件的类型。

数据控件的配置

几乎所有控件都是根据数据 key 来读取并展示数据的,数据的详细信息我们也可以在 debug 控件里看到。

我的界面配置导出
{¨config¨{¨headerColor¨¨transparent¨¨headerStyle¨¨dark¨¨background¨{¨img¨¨assets/img/headerbg.jpg¨¨isFull¨«}}¨dashboard¨|{¨type¨¨tex¨¨t0¨¨晓晨温湿度计¨¨t1¨¨文本2¨¨bg¨É¨ico¨´´¨cols¨Í¨rows¨Ê¨key¨¨tex-272¨´x´É´y´É¨speech¨|÷¨lstyle¨Ê¨clr¨¨#00A90C¨}{ßA¨num¨ßC¨湿度¨ßH¨fad fa-smile¨ßO¨#389BEE¨¨min¨É¨max¨¢1c¨uni¨´%´ßGÉßIÍßJËßK¨humi¨´x´É´y´ÊßM|÷ßNÊ}{ßA¨deb¨¨mode¨ÉßGÉßIÑßJÍßK¨debug¨´x´É´y´¤AßM|÷ßNÊ}{ßAßQßC¨温度¨ßH¨fad fa-thermometer-three-quarters¨ßOßTßUÉßVº0ßW´℃´ßGÉßIÍßJËßK¨temp¨´x´Í´y´ÊßM|÷ßNÊ}{ßA¨cha¨ßGɨsty¨¨line¨ßOßP¨sty1¨ßg¨clr1¨¨#EA0909¨¨sty2¨ßg¨clr2¨ßTßIÑßJÍßKßd´x´É´y´ÌßM|÷ßC¨温度曲线¨¨key1¨´´ßE´´ßNÊ}{ßAßeßGÉßfßgßOßTßhßgßißTßkßgßlßTßIÑßJÌßKßX´x´É´y´ÐßM|÷ßC¨湿度曲线¨}÷¨actions¨|¦¨cmd¨¦¨switch¨‡¨text¨‡¨on¨¨打开?name¨¨off¨¨关闭?name¨—÷¨triggers¨|{¨source¨ßr¨source_zh¨¨开关状态¨¨state¨|ßtßv÷¨state_zh¨|´打开´´关闭´÷}÷}
六.展示
完成后的样子

对于小米温度计2

七.结束
这个温度计做起来还是非常简单,很多东西都有现成的示例。基于现在的还可以使用3d打印机,打印一个漂亮的壳子,再加一个 LED 显示屏,就可以做成一个媲美现在淘宝上卖的某些温湿度计了。这个的话我暂时只能想想了,这一块是我从没接触过的领域,还需要时间去学习。生命不息,学习不止!
ESP8266 鼓捣记 - 从零制作一个温湿度计的更多相关文章
- ESP8266 鼓捣记 - 入门(环境搭建)
一.前言 以前没怎么接触过硬件开发,ESP8266 这个名字还是从朋友处得知,用它做了许多好玩的东西,便想着自己也来玩一玩.定了一个小目标,做一个温度计.本文介绍从0到 "Hello Wor ...
- 1个小时!从零制作一个! AI图片识别WEB应用!
0 前言 近些年来,所谓的人工智能也就是AI. 在媒体的炒作下,变得神乎其神,但实际上,类似于图片识别的AI,其原理只不过是数学的应用. 线性代数,概率论,微积分(著名的反向传播算法). 大家觉得这些 ...
- Unity3D游戏开发从零单排(四) - 制作一个iOS游戏
提要 此篇是一个国外教程的翻译,尽管有点老,可是适合新手入门. 自己去写代码.debug,布置场景,能够收获到非常多.游戏邦上已经有前面两部分的译文,这里翻译的是游戏的最后一个部分. 欢迎回来 在第一 ...
- 使用ESP8266制作一个微型气象站
本文主要介绍如何制作一个微型气象站. 这个想法和大部分代码来自Daniel Eichhorn在这个网址上的博客,可以去看看,这里面有一些很酷的东西! http://blog.squix.ch/2015 ...
- TensorFlow练习13: 制作一个简单的聊天机器人
现在很多卖货公司都使用聊天机器人充当客服人员,许多科技巨头也纷纷推出各自的聊天助手,如苹果Siri.Google Now.Amazon Alexa.微软小冰等等.前不久有一个视频比较了Google N ...
- 怎样制作一个横版格斗过关游戏 Cocos2d-x 2.0.4
本文实践自 Allen Tan 的文章<How To Make A Side-Scrolling Beat 'Em Up Game Like Scott Pilgrim with Coco ...
- 手把手教你从零写一个简单的 VUE
本系列是一个教程,下面贴下目录~1.手把手教你从零写一个简单的 VUE2.手把手教你从零写一个简单的 VUE--模板篇 今天给大家带来的是实现一个简单的类似 VUE 一样的前端框架,VUE 框架现在应 ...
- 使用CocosSharp制作一个游戏 - CocosSharp中文教程
注:本教程翻译自官方<Walkthrough - Building a game with CocosSharp>,官方教程有很多地方说的不够详细,或者代码不全,导致无法继续,本人在看了G ...
- CSharpGL(34)以从零编写一个KleinBottle渲染器为例学习如何使用CSharpGL
CSharpGL(34)以从零编写一个KleinBottle渲染器为例学习如何使用CSharpGL +BIT祝威+悄悄在此留下版了个权的信息说: 开始 本文用step by step的方式,讲述如何使 ...
随机推荐
- CentOS 7的安装与部署 02
2.2 操作系统安装过程 第01步:加载系统镜像 第02步:启动虚拟主机 第03步:系统安装选择界面修改网卡名称 启动虚拟机后,会出现选择菜单,首先用方向键选择 install centos7选项,然 ...
- 解决/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory报错 (转)
解决/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory报错 念淅 2020-01-03 15:02:25 3793 收 ...
- spring boot:用shardingjdbc实现多数据源的分库分表(shardingsphere 4.1.1/spring boot 2.3.1)
一,shardingjdbc的用途 1,官方站介绍: Apache ShardingSphere 是一套开源的分布式数据库中间件解决方案组成的生态圈, 它由 JDBC.Proxy 和 Sidecar( ...
- socket php
$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP); socket_bind($socket,'0.0.0.0',6666); while(tru ...
- 为啥 Response.Write 后,View就不渲染了?
一:背景 1. 讲故事 前几天群里有一位朋友聊到,为什么我在 Action 中执行一句 Response.Write 之后,后续的 View 就不呈现了,如果脑子中没有画面,那就上测试代码: publ ...
- 趣谈多线程(Python版)
温馨提示:本文篇幅较长,建议读者耐心阅读,本文中的代码经过笔者精心构思,可以复制过去运行一下,观察输出结果,所有代码在python3.5.0中测试通过. 文章目录 What is 多线程? Why w ...
- javaweb学习笔记整理补课
javaweb学习笔记整理补课 * JavaWeb: * 使用Java语言开发基于互联网的项目 * 软件架构: 1. C/S: Client/Server 客户端/服务器端 * 在用户本地有一个客户端 ...
- C语言单文件模板
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <stri ...
- Spring Boot 学习摘要--关于日志框架
date: 2020-01-05 16:20:00 updated: 2020-01-08 15:50:00 Spring Boot 学习摘要--关于日志框架 学习教程来自:B站 尚硅谷 1. 关于日 ...
- redis SETBIT命令原理
redis SETBIT命令原理 /* SETBIT key offset bitvalue */ bitset的使用位来替代传统的整形数字,标识某个数字对应的值是否存在 底层有一个byte[]来实现 ...