Arduino实现温湿度传感器以及数据上传到云(乐维互联)
0 准备材料
0.1 ESP-01S
引脚及定义
官方定义:
序号 | pin | 功能 |
---|---|---|
1 | GND | 地线 |
2 | IO0/GPIO0 | 工作模式选择:①悬空:Flash Boot,工作模式 ②下拉:UART DownLoad 下载模式 |
3 | IO2/GPIO2 | 通用IO |
4 | RX/RXD | 数据接收端 |
5 | TX/TXD | 谁发送端 |
6 | 3V3/VCC | 3.3V,模块供电 |
7 | RST | 1)外部复位管交,低电平复位 2)可以悬空或者接外部MCU |
8 | EN/CH_PD | 芯片使能,高电平使能,低电平失能 |
产品实际图:
0.2 DHT11(温湿度传感器)
比较简单,只有三个引脚从S端到-端依次为:
序号 | pin | 功能 |
---|---|---|
1 | s | 数据端 |
2 | 空 | 3.3V电源端 |
3 | - | 地线 |
0.3 USB转ESP8386 WiFi模块
该模块实现对WiFi模块的转接功能,使用时仅需按照如图所示安装:
多说一嘴,由于USB供电本身问题,在实现对ESP的系统写入的时候(重置,或者重新刷包),仍然需要单独供电(可以用Arduino单独供电)。
1 云平台准备工作(乐维互联)
乐维平台地址
首先注册一个个人账户,然后进入管理菜单:
在我的设备中添加设备,这里要特别注意第一行的标识号,这是等下我们进行通讯的一个凭证
在我的账户中生成一个userkey,我已经生成完毕:
在我的物联->传感器与控制器中,有一些数据分类,由于刚刚创建我使用了模版,所以这里有如下的几个分类,如果需要别的可以创建新的分类。
进入乐维互联的API测试平台,在这里测试我们刚刚的操作是否有误。
在这里填入刚刚生成的API
在标中的地方换上刚刚添加设备时生成的设备号(不可以是设备名)
接下来就是POST的具体内容了,这里的H1,T1分别为,传感器和控制器那一栏中,的设备标识
request那一栏中的内容就是我们要通过ESP模块发送的内容模版,返回内容则为数据是否成功。如果False会显示错误内容。
乐为互联这一步就结束了,如果有更多问题可以查看官方API文档
2 ESP-01S模块写入
2.1 写入前注意事项
- ESP-01S是有记忆功能的,即,就算断电重启,之前的指令也会生效。
- 如果遇到下图这种情况,出现错误回复400,说明进入了透传模式
AT+CIPSEND
已经接收数据发送了,这时只需要测试一下发送POST消息,如果返回正确请继续。(这种情况不需要刷入新的数据)
使用USB转接器转接模块后,按照以下操作:
AT+RST //复位
AT+CIPMODE=1 //STA模式
AT+CIPMUX=0 //单连接模式
AT+CWMODE=1 //透传模式
AT+CWJAP="esp","88888888" //连接WiFi 这里是WiFi和密码
AT+CIPSTART="TCP","api.lewei50.com",80 //与乐联网建立TCP连接
AT+CIPSEND //进入透传开始发送数据
AT+SAVETRANSLINK=1,"api.lewei50.com",80,"TCP" //开机自动连接到乐维平台,请进行下面测试之后再使用该命令防止出错
现在使用如下格式测试ESP的功能:
POST /api/V1/gateway/Updatesensors/02 HTTP/1.1 //记得02换成自己的设备号
Host: open.lewei50.com
userkey:edbec438aa //API换成自己的
Content-Length: 52
Connection: close
[{"Name":"T1","Value":29},{"Name":"H1","Value":89}] //传感器换成自己的
如果返回
,就说明测试成功,继续下一步。
组装
ESP
ESP只需要使用四个引脚,高,低数据位,电源,地线。
ESP引脚 | Arduino引脚 |
---|---|
GND | GND |
3V3 | 3.3V |
RX | 2 |
TX | 3 |
DHT
上文已经说到,DHT11只有三个引脚,所以全部用上。正负极一定不要接反,接反就坏了
DHT引脚 | Arduino引脚 |
---|---|
S | 6 |
- | GND |
空 | 5V |
总体接线图
代码
这里附上可能会用到的库
leweiclient
esp8266
#include <LeweiClient.h>
#include <SPI.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3);
#include "DHT.h"
#define DHTPIN 6
#define DHTTYPE DHT11
#define SSID "esp"
#define PASSWORD "88888888"
#define APIKEY "edbec438aa"
#define server "api.lewei50.com"
#include "uartWIFI.h"
#define POST_INTERVAL (30*1000)
WIFI wifi;
int i = 0;
DHT dht(DHTPIN, DHTTYPE);
void setup() {
// put your setup code here, to run once:
// Serial.begin(9600);
// _cell.begin(9600);
// _cell.print("+++");
dht.begin();
Serial.begin(9600);
DebugSerial.begin(9600);
delay(3000);
// wifi.begin();
// bool b = wifi.confMode(3);
// if (!b) Serial.println("mode error");
// wifi.begin();
// delay(2000);
//
// bool g = wifi.confJAP(SSID, PASSWORD);
// if (!g)Serial.println("Init error");
// else Serial.println("Init ok");
//
// bool h = wifi.confMux(0);
// if (!h) DebugSerial.println("single error");
// else DebugSerial.println("single ok");
// String ipstring = wifi.showIP();
// Serial.println(ipstring);
// if (wifi.newMux(TCP, server, 80)) Serial.println("connecting...");
// bool f= wifi.CIPMODE(1);
// if(!f)DebugSerial.println("touchuan error");
// else DebugSerial.println("touchuan ok");
//
// bool d= wifi.CIPSEND();
// if (!d)DebugSerial.println("touchuan start error");
// else DebugSerial.println("touchuan start ok");
//
// delay(2000);
}
void loop() {
// put your main code here, to run repeatedly:
// String str;
// bool bflag = false;
// int count = 1;
// delay(5000);
Serial.println("Start post...");
Serial.println("AT+CIPSEND");
delay(2000);
float t = dht.readTemperature();
float h = dht.readHumidity();
static int cnt = 52;
String cmd("POST /api/V1/gateway/Updatesensors/02 HTTP/1.1\r\n"
"Host: open.lewei50.com \r\n"
"userkey: edbec438aa\r\n"
"Content-Length: 52 \r\n"
"Connection: close\r\n"
"\r\n"
"[{\"Name\":\"T1\",\"Value\":" + String((int)t) + "},"
"{\"Name\":\"H1\",\"Value\":" + String((int)h) + "}]\r\n");
DebugSerial.println(cmd);
Serial.println(cmd);
// wifi.send(cmd + data);
// _cell.print(cmd);
// _cell.print(data);
// _cell.println();
Serial.println("post ok");
delay(POST_INTERVAL);
}
4 额外的知识
在配置ESP模块的时候遇到了上文讲述的错误,有尝试刷机,当刷机的时候接线入下。
注意3.3V要用Arduino供电
下载以下软件
https://pan.baidu.com/s/146Dl-XKCe61z312Dv1OWKg
提取码:1ls2