首先 乐联网网址
我是采用的是正点原子精英板,正点原子的wifi模块,和dht11温湿度模块
接下讲一下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);
}
源码链接