分享

用ARDUINO开发板自制温湿度计(含WEMOS D1开发板环境安装)

 金刚光 2020-01-15

ARDUINO从入门到创客带师第四弹 自制温湿度计(翻车)

咱想起以前实验室的墙上挂着的介绍说过法拉第之所谓伟大的原因是他不止把成功的经历写在科学日记里,也把翻车失败的经历写进去,因此咱对于咱翻车的经历也毫不避讳

其实关于这个我们自己有自己的方法:失传技术研究所小讲堂 篇七十三:在自家建立小型气象站 在自家建立小型气象站(后续) 小米米家电子墨水屏温湿度计PRO测评 这些方案的精度都比我们这次要做的成本要低,我们这次的唯一的优势是自己手搓的成本很低

通过本篇教程,我们开始迈向自制自动气象站的第一步

上期:ARDUINO从入门到创客带师第三弹:用单片机开发板自制MIDI音乐盒(预算15)

本期依然是利用ARDUINO单片机开发板自己做系列,这次咱要用到的有:

ARDUINO 开发板,如果仅仅是想要读取传感器模块的信息可以是14包邮的基于AVR 8位单片机的UNO,这里我们还提供进阶的可以WIFI联网的方案需要用到D1 MINI或者ARDUINO D1模块,前者10块钱包邮吧后者贵点16-18 NODEMCU也是可以的,因为我们的模块供电可以是3.3-5V范围中的任意电压,此外NODEMCU也有5V输出

DHT11温湿度传感器模块

单模块的成本很便宜的

如果运气好,你可以买到5元包邮或者满9.9包邮的

当然精度很一般,湿度精度5%,温度精度±2℃ 算上开发板和杜邦线这套玩意成本也有20了,这么一想小米的温湿度计带蓝牙5.0模块和挺大一块电子墨水屏才卖70是不是很便宜?这个教程带给各位的,可能只有成就感了

在本期教程中,我们将利用全世界最好的搜索引擎,实际地解决自己需要解决的问题(并没有解决)

首先我们打开TB,搜索DHT11

然后我们很容易就能找到相关结果

默认搜索结果的第一个就可以,点进去

这家虽然东西又贵据说质量还比华强北其他店铺卖的同款更便宜的质量还差,但是这并不耽误我们只看不买

点进去之后往下翻,我们会看到这家店的商品信息中提供的资料

这就是我们想要的

下载之后解压DHT11的资料

其中一个是原理图、说明书、测试程序之类的资料,这个其实对于了解模块有帮助但是并不是这次项目需要的文件。

毕竟知道这个传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接之类的并不能改善这个模块感人的精度……

这里给的测试程序居然还是51单片机的,天啊,这年头谁还用这玩意,STM32都直接用ARDUINO环境了,单片机真的需要从51学起吗?你是个成熟的图吧垃圾佬了,该学会怎么利用现成的开源项目和调用库了。

这有个WIFI资料才是我们更感兴趣的东西

看WORD文档的意思是这个用了还可以直接联网,不错啊

有项目文件

看得出来项目文件里面代码注释提到了11号引脚,那应该就是我们这次的温度传感器模块需要连接的引脚了

接好线之后我们慢慢盘代码里面可能出BUG的地方

首先这个代码提到了一个叫DHT.h的东西,简单通过搜索找出来放到库里

关于ESP8266WiFi.h 报错的问题可以先通过加载库顶一下

其实这个代码的注释说了,不建议用基于AVR单片机的

如果这时候你用的是14包邮的UNO或者D1 D1MINI的话你还需要CH340 CH341的驱动,用上次我们在阿卡林那做CPU温度显示项目时候的驱动就行

装好驱动检测开发板信息试试

如果有返回就说明驱动安装成功了

然后在 文件 —— 首选项 附加开发版网址管理 添加 开发板网址如图

然后开发板的选项里面就有UNO WIFI了

我们常说的D1其实全名是WeMos D1,有ARDUINO兼容版和MINI版 D1 UNO版其实有个地方需要注意就是它没有完整的模拟输入,相比基于AVR单片机的UNO之类的不太一样。

这个位置是空脚

这是UNO到D1的映射,有些地方可以直接通过修改代码实现

然后还需要下载一个压缩包

解压到C:\Users\Administrator\AppData\Local\Arduino15\staging\packages

其中Administrator是用户名,如果你没有管理员权限那这个地方填的就是你实际用户名

或者在开发板管理器搜索8266就能找到要的支持文件了

个人觉得相比挂PANDOWNLOAD好像还是ARDUINO更快

上边还下着呢这边完事了

哪边快用哪个

就像之前看的那个本子说的,哪边钱多去哪边,人嘛,就是这么回事。

这下开发板可多了

再编译试试

emmmmm

上面那行代码的意思是让你输WIFI SSID和密码

至于下面嘛,哪里不对删哪里就行了

不能从常量型的char*转换成变量型的char*

那就把const char换成char

Arduino语法详解

为开发板 WeMos D1 R1 编译时出错可还行,吓得我上这个资料的官网看了一眼,结果发现人家用的是这种方案:

?????

那就算了

咱现在手上有现成的8266开发板,不可能为了现成的资料的问题改掉现在的方案去拿面包板组什么简易8266电路,虽然我有这上面说的所有东西,但是拉倒吧,现在的开发都是用现成的开发板,没人用自己搭这种电路了,说实在的这种东西也就看实验室的大佬以前玩51单片机的时候用过,咱自己搞ARDUINO还真没见过这种情况还需要自己弄USB转串口模块接线的。

/* DHT Pro Shield - Simple

*

* Example testing sketch for various DHT humidity/temperature sensors

* Written by ladyada, public domain

*

* Depends on Adafruit DHT Arduino library

adafruit/DHT-sensor-library

*/

#include "DHT.h"

#define DHTPIN D4 // what pin we're connected to

// Uncomment whatever type you're using!

#define DHTTYPE DHT11 // DHT 11

//#define DHTTYPE DHT22 // DHT 22 (AM2302)

//#define DHTTYPE DHT21 // DHT 21 (AM2301)

// Connect pin 1 (on the left) of the sensor to +5V

// NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1

// to 3.3V instead of 5V!

// Connect pin 2 of the sensor to whatever your DHTPIN is

// Connect pin 4 (on the right) of the sensor to GROUND

// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor

// Initialize DHT sensor.

// Note that older versions of this library took an optional third parameter to

// tweak the timings for faster processors. This parameter is no longer needed

// as the current DHT reading algorithm adjusts itself to work on faster procs.

DHT dht(DHTPIN, DHTTYPE);

void setup() {

Serial.begin(9600);

Serial.println("DHTxx test!");

dht.begin();

}

void loop() {

// Wait a few seconds between measurements.

delay(2000);

// Reading temperature or humidity takes about 250 milliseconds!

// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)

float h = dht.readHumidity();

// Read temperature as Celsius (the default)

float t = dht.readTemperature();

// Read temperature as Fahrenheit (isFahrenheit = true)

float f = dht.readTemperature(true);

// Check if any reads failed and exit early (to try again).

if (isnan(h) || isnan(t) || isnan(f)) {

Serial.println("Failed to read from DHT sensor!");

return;

}

// Compute heat index in Fahrenheit (the default)

float hif = dht.computeHeatIndex(f, h);

// Compute heat index in Celsius (isFahreheit = false)

float hic = dht.computeHeatIndex(t, h, false);

Serial.print("Humidity: ");

Serial.print(h);

Serial.print(" %\t");

Serial.print("Temperature: ");

Serial.print(t);

Serial.print(" *C ");

Serial.print(f);

Serial.print(" *F\t");

Serial.print("Heat index: ");

Serial.print(hic);

Serial.print(" *C ");

Serial.print(hif);

Serial.println(" *F");

}

这串代码就比较简单了,利用D1开发板读取DHT温湿度模块的数据,然后通过串口直接输出,这样还是和上期的超声波模块一样,用串口监视器就可以读数了。没有WIFI,没有物联网,但是简单可靠。

这里我发现自己的模块好像是炸了,快递已经停运就是想买也发不了货所以直接上下一章了。

PS:DHT22好贵啊……15块钱一个模块赶上开发板了,精度嘛确实高了些,湿度2%,温度±0.5℃,但是这个价格这个精度还真就不如加钱上小米那套东西了。

我还是觉得WIFI比蓝牙好,毕竟这年头如果不是必要,谁没事手机开蓝牙呢?小米的温湿度计用蓝牙是因为它需要省电,毕竟连屏幕都用电子墨水屏了,两节CR2032+蓝牙5.0都可以苟半年,WIFI现在说实在的比蓝牙好用多了,可惜低功耗IOT方面一直没有蓝牙那种便宜的解决方案,所以小米那套才会用蓝牙而不是WIFI吧,相比之下小米的台灯就是ESP8266模块的经典应用方案,是非常常见的利用成本不到10元的模块搞物联网的方案。

ESP8266的性能不错,好歹也是32位MCU,还带WIFI,相对来说真的比蓝牙好用多了,也许下期我们可以真的利用这个模块的WIFI功能搞搞物联网?

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多