Arduino+ESP8266WIFI(2)——DHT11温湿度
一、前期准备
硬件:
Arduino单片机(我这里用的是nano,其他的也一样)
esp8266模块
DHT11温湿度传感器
软件:
1.在thingspeak网站注册账号:https://thingspeak.com/
2.添加设备:点击Channels–>My Channels–>New Channel
建立自己的设备
3.设置传感器属性,本实例中温湿度传感器工两个数据故选择两个领域,勾选Make Public便于分享链接,点击保存
4.在传感器管理界面点击 “API Keys”,查看Write API Key,之后会用到。
二、电路连接
ESP8266模块:
接线方式同上一节与TTL串口连接一样,只不过换成了Arduino单片机。(建议ESP8266可以单独3.3V供电,单片机电流太弱可能会影响模块正常工作)
DHT11:
pin1–>单片机+5V
pin2–>单片机数字口(我这里选择的是4引脚)
pin3–>悬空不用管
pin4–>接地
建议pin2口接一个5K欧电阻再接VCC做上拉电阻
我简单画了一下原理图,电路很简单
三、程序编写
#include
#include
#include
dht DHT;
const int pin = 4; // 将把 DHT11 的 data pin 連到 arduino Pin 4
#define SSID “**" //wifi名
#define PASS "" //wifi密码
#define IP “184.106.153.149” // 连接thingspeak.com服务器
String GET = "GET /update?key=
”; //输入前面记下的API
SoftwareSerial monitor(10, 11); // 定义软串口RX, TX
//初始化-----------------------------------------
void setup()
{
monitor.begin(9600);
Serial.begin(9600);
sendDebug(“AT”); //指令测试
delay(5000);
if(Serial.find(“OK”)) //接收指令正常则返回OK
{
monitor.println(“RECEIVED: OK”);
connectWiFi();
}
}
//主循环-----------------------------------------
void loop()
{
DHT.read11(pin); // 读取 DHT11 传感器
//Serial.print(DHT.humidity,1); //串口打印湿度
//Serial.print(",\t");
//Serial.println(DHT.temperature,1); //打印温度
float tempH = DHT.humidity;
float tempT = DHT.temperature;
char buffer[10];
String temph = dtostrf(tempH, 4, 1, buffer);
String tempt = dtostrf(tempT, 4, 1, buffer);
updateTemp(temph,tempt);
delay(60000);
}
void updateTemp(String temph,String tempt)
{
String cmd = “AT+CIPSTART=“TCP”,”";
cmd += IP;
cmd += “”,80";
sendDebug(cmd); //发送指令,链接服务器
delay(2000);
if(Serial.find(“Error”))
{
monitor.print(“RECEIVED: Error”);
return;
}
cmd = GET + “&field1=” + temph + “&field2=” + tempt +"\r\n"; //记录T和H的值
Serial.print(“AT+CIPSEND=”);
Serial.println(cmd.length());
if(Serial.find(">"))
{
monitor.print(">");
monitor.print(cmd);
Serial.print(cmd);
}
else
{
sendDebug(“AT+CIPCLOSE”);
}
if(Serial.find(“OK”))
{
monitor.println(“RECEIVED: OK”);
}
else
{
monitor.println(“RECEIVED: Error”);
}
}
void sendDebug(String cmd)
{
monitor.print("SEND: ");
monitor.println(cmd);
Serial.println(cmd);
}
boolean connectWiFi()
{
Serial.println(“AT+CIPMUX=0”);
Serial.println(“AT+CWMODE=1”);
delay(2000);
String cmd=“AT+CWJAP=”";
cmd+=SSID;
cmd+="","";
cmd+=PASS;
cmd+=""";
sendDebug(cmd);
delay(5000);
if(Serial.find(“OK”))
{
monitor.println(“RECEIVED: OK”);
return true;
}else
{
monitor.println(“RECEIVED: Error”);
return false;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
库文件下载:
软串口库文件
(CSDN积分下载,微云免费下载)
DHT11传感器库文件
(CSDN积分下载,微云免费下载)
四、结果
电路工作正常,数据测量正常
连接WIFI正常
数据传输正常,并实时更新
电路连续工作了好几天没出现一点问题,很强大!!
在监控网站上查看已接收到数据:https://thingspeak.com/channels/296658
电商开发找上海捌跃网络科技有限公司
电路:
上面那个绿色的板子是我焊接的将5V降为3.3V的电路,方便满足不同的电压需求。
五、问题排除
1.电路连接是否有问题,RX,TX是否接反
2.程序编写(直接用我的程序应该不会出问题),注意烧录时将RX,TX先拔掉,烧写成功后马上接上,观察arduino IDE监视窗口
3.AT指令测试时模块是否正常
4.连接WIFI 是否成功,密码是否正确(可以连接热点,观察是否有新设备接入)
5.模块供电问题:建议ESP5266模块单独供3.3V电
6.模块波特率问题,使用的是15200还是9600(我采用的是9600)
7.模块每次发送数据时,蓝色的小灯都会闪一下。今天早上看到好久没闪(或者一直闪),猜是数据上传估计中断了,查看监控网页确实数据更新到凌晨四点中断了,其实只是电路连线的问题,在面包板上插线,杜邦线永久了也可能松,有问题大家也可以检查一下接线是都松动