通过ESP8266和DHT11通过http协议上传实时温湿度数据到乐联网云平台

首先 乐联网网址
我是采用的是正点原子精英板,正点原子的wifi模块,和dht11温湿度模块
在这里插入图片描述

填加设备
在这里插入图片描述
设备设置
在这里插入图片描述
添加传感器
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
结果图
在这里插入图片描述
手机上观看的截图
在这里插入图片描述
在这里插入图片描述
大概是每过20秒上传一次数据

接下讲一下WiFi模块ESP8266的使用我也是最近才玩会如果有不对的地方请给我指正
我使用的是正点原子的WIFI模块,但是其实都是相通的不一样无所谓

如果对wifi模块一点都不了解的建议看一下海创电子的讲的基础我觉得非常不错
B站海创电子的视频链接

STA模式就相当于一个没有热点功能的手机
AP模式就相当于一个路由器
在这里插入图片描述
在这里插入图片描述

一开始可以使用串口调试助手手动发送数据
在这里插入图片描述

注意除了+++结束透传的命令不要发送新行其它的命令全部都必须加上发送新行
至于我后面的代码没加\r\n是因为正点原子的函数封装好了它自动加了的,如果不是的话注意每条AT指令都必须加\r\n

初始化wifi的连接都传输数据的一般步骤,但是我自己连接时发现wifi每次回自动连接所以我自己稍微修改了一下这个步骤

1.检测wifi是否是正常         AT
2.关闭wifi自动连接			AT+CWAUTOCONN=0
关闭wifi自动连接 如果不写这个那么后面的wifi连接上的回应就不是OK了而是GOT IP
3.配置WIFI模式   		AT+CIPMODE=1       1为sta模式
3.完成配置重启   		AT+RST
4连接路由器       		AT+CWJAP="IOT205","IOT205iot205."
5.开启单路连接模式		AT+CIPMUX=0
注意:如果要使用透传模式,必须先进入单连接模式
6.开启透传模式		 AT+CIPMODE=1
7.建立TCP连接		AT+CIPSTART="TCP","api.lewei50.com",80
8.进入透传模式                AT+CIPSEND
….进入透传模式后AT指令就没有用了,就可以直接发送报文了
这里使用透传模式有一个好处 就是一般不会轻易断开连接,如果不使用透传模式,TCP连接容易断开,下次发数据还要重新建立连接
还需要注意两次报文的发送最好要大于10秒所以在我的代码中我的代码是延时了10秒的。
结束透传的模式必须         发送+++不加发送新行

HTTP报文的格式

POST /api/V1/gateway/Updatesensors/01 HTTP/1.1
userkey: cc04640c49e847009c0bb227d64ad834 
Host: open.lewei50.com
Content-Length: 28
Connection: close

[{"Name":"temp","Value":26}]

POST /api/V1/gateway/Updatesensors/01 HTTP/1.1
userkey: cc04640c49e847009c0bb227d64ad834 
Host: open.lewei50.com
Content-Length: 27
Connection: close

[{"Name":"wet","Value":50}]

有些地方是有空格的注意别搞错了
28是后面整个字符串[{“Name”:“temp”,“Value”:26}]的长度包括符号
userkey是自己生成的直接复制过来
HTTP/1.1前面那个01是你设备的标识一定要注意

wifi模块的初始化

void esp8266Init(){

	//监测wifi模块是否能回复指令
 printf("1.AT\r\n");
	while(atk_8266_send_cmd("AT","OK",20)){
	   
		
	}	
   delay_ms(500);	
	//关闭wifi自动连接 如果不写这个那么后面的wifi连接上的回应就不是OK了而是GOT IP
	printf("2. CWAUTOCONN\r\n");
		while(atk_8266_send_cmd("AT+CWAUTOCONN=0","OK",20)){
	   
		
	}
		delay_ms(500);
	//配置wifi模式 AT+CWMODE=1是sta模式
  printf("3. CWMODE\r\n");
	while(atk_8266_send_cmd("AT+CWMODE=1","OK",20)){
	   
		
	}
    delay_ms(500);	
	printf("4. CWJAP\r\n");
	//连接网络
	while(atk_8266_send_cmd(ESP8266_WIFI_INFO,"OK",1000)){
	   
		
	}
	 delay_ms(1000);
	//开启单连接模式因为透传必须开启单连接模式
	printf("5. CIPMUX\r\n");
	while(atk_8266_send_cmd("AT+CIPMUX=0","OK",20)){
	   
		
	}
	delay_ms(500);
	//开启透传模式
	printf("6. CIPMODE\r\n");
	
	while(atk_8266_send_cmd("AT+CIPMODE=1","OK",20)){
	   
		
	}
	delay_ms(500);
	//建立tcp连接
	printf("7. CIPSTART\r\n");
	
	while(atk_8266_send_cmd(ESP8266_LLW_INFO,"OK",50)){
	      
		
	}
	
	delay_ms(500);
	//进入透传模式
	printf("7. CIPSEND\r\n");
	while(atk_8266_send_cmd("AT+CIPSEND","OK",20)){
	      
		
	}
	delay_ms(500);
	printf("ESP8266Init ok");


}

发送报文的的函数

	void LLW_send(u8 value1,u8 value2)
{
	//这里的temp和wet是自己在乐联网上设置的名称
	//下面是http协议的格式,注意有些地方的空格不能省略
    char p[100]="";
	  char p1[100]="";
    sprintf((char*)p,"[{\"Name\":\"temp\",\"Value\":%d}]\r\n",value1);
    u3_printf("POST /api/V1/gateway/Updatesensors/01 HTTP/1.1\r\n");
    u3_printf("userkey: cc04640c49e847009c0bb227d64ad834\r\n");
    u3_printf("Host: open.lewei50.com\r\n");
    u3_printf("Content-Length: %d\r\n",strlen(p)-2); 
    u3_printf("Connection: close\r\n");
    u3_printf("\r\n");
	  atk_8266_send_data(p,"true",20);
	  delay_ms(20);
    sprintf((char*)p1,"[{\"Name\":\"wet\",\"Value\":%d}]\r\n",value2);
     u3_printf("POST /api/V1/gateway/Updatesensors/01 HTTP/1.1\r\n");
    u3_printf("userkey: cc04640c49e847009c0bb227d64ad834\r\n");
    u3_printf("Host: open.lewei50.com\r\n");
    u3_printf("Content-Length: %d\r\n",strlen(p)-2); 
    u3_printf("Connection: close\r\n");
    u3_printf("\r\n");
	 atk_8266_send_data(p1,"true",20);
} 

源码链接

  • 4
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
以下是连接DHT11温湿度传感器,通过ESP8266模块上传数据到OneNet云平台的Arduino代码。需要注意的是,需要安装并引入DHT库和ESP8266WiFi库。 ``` #include <ESP8266WiFi.h> #include <DHT.h> #define DHTPIN 2 //DHT11传感器连接的引脚为2 #define DHTTYPE DHT11 //DHT11型号 #define ONENET_API_KEY "your_api_key" //OneNet云平台API Key #define ONENET_DEVICE_ID "your_device_id" //OneNet云平台设备ID DHT dht(DHTPIN, DHTTYPE); const char* ssid = "your_wifi_ssid"; //WiFi名称 const char* password = "your_wifi_password"; //WiFi密码 const char* server = "api.heclouds.com"; //OneNet云平台服务器地址 void setup() { Serial.begin(115200); delay(10); dht.begin(); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); } void loop() { delay(2000); float h = dht.readHumidity(); float t = dht.readTemperature(); if (isnan(h) || isnan(t)) { Serial.println("Failed to read from DHT sensor!"); return; } WiFiClient client; if (!client.connect(server, 80)) { Serial.println("connection failed"); return; } String data = "{\"humidity\":" + String(h) + ",\"temperature\":" + String(t) + "}"; String postStr = "POST /devices/" + String(ONENET_DEVICE_ID) + "/datapoints?type=3 HTTP/1.1\r\n"; postStr += "api-key:" + String(ONENET_API_KEY) + "\r\n"; postStr += "Host:api.heclouds.com\r\n"; postStr += "Content-Length:"; postStr += data.length(); postStr += "\r\nConnection: close\r\n\r\n"; postStr += data; client.print(postStr); delay(1000); while (client.available()) { String line = client.readStringUntil('\r'); Serial.print(line); } Serial.println(); } ``` 需要将代码中的 "your_api_key" 和 "your_device_id" 替换为对应的 OneNet 云平台的 API Key 和设备 ID。同时也需要将 "your_wifi_ssid" 和 "your_wifi_password" 替换为自己的 WiFi 名称和密码。 上传数据使用的是HTTP POST请求,其中数据格式为JSON格式,包含了温度和湿度两个属性。通过WiFiClient连接到 OneNet 云平台服务器,将数据发送到对应的设备上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值