通过ESP8266和DHT11通过http协议上传实时温湿度数据到乐联网云平台
程序员文章站
2022-06-09 09:28:02
...
首先 乐联网网址
我是采用的是正点原子精英板,正点原子的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
如果
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(){
//
printf("1.AT\r\n");
while(atk_8266_send_cmd("AT","OK",20)){
}
delay_ms(500);
//
printf("2. CWAUTOCONN\r\n");
while(atk_8266_send_cmd("AT+CWAUTOCONN=0","OK",20)){
}
delay_ms(500);
//
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);
//
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)
{
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);
}
源码链接
上一篇: Stm32F102通过寄存器的方式更改IO 方向(输入输出)
下一篇: STM32时钟配置