Arduino+ESP8266WIFI(2)——DHT11温湿度

2018-10-29  本文已影响17人  a0f39b0b2030

一、前期准备

硬件:

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.模块每次发送数据时,蓝色的小灯都会闪一下。今天早上看到好久没闪(或者一直闪),猜是数据上传估计中断了,查看监控网页确实数据更新到凌晨四点中断了,其实只是电路连线的问题,在面包板上插线,杜邦线永久了也可能松,有问题大家也可以检查一下接线是都松动

上一篇 下一篇

猜你喜欢

热点阅读