ESP8266模块,连接云服务器实现数据传输

物件:

ESP8266EX 模块

USB-TTL 

软件:

串口工具

网络调试助手

云服务器

 

第一步:连线

USB-TTL 与wifi模块连线

ESP8266模块,连接云服务器实现数据传输_第1张图片

USB-TTL  ESP 8266模块
3.3V VCC
GND GND
RX UTXD
TX URXD
3.3V CH_PD

 

第二步:设置wifi模块

设置端口号,设置波特率(如之前没修改过,默认为115200),打开串口后

1、发送 :AT (注意后面有回车)

     返回:OK

ESP8266模块,连接云服务器实现数据传输_第2张图片

2、设置wifi模式

发送: AT+CWMODE=3    (1-Station模式,2-AP模式,3-AP兼Station模式。重启后生效)

 

3、发送: AT+RST

4、配置AP参数 ssid 和password  (注意wifi密码不要错误)
发送 :AT+CWJAP="SSID","PASSWORD"

返回:OK
 

连接完成后,可以通过  AT+CIFSR  指令查询IP

5、连接网络助手创建的 TCP 服务器

首选查看本地IP地址  win+r ,打开cmd ,输入ipconfig  即可查看

根据本地的ipv4 的地址创建

ESP8266模块,连接云服务器实现数据传输_第3张图片

ESP8266模块,连接云服务器实现数据传输_第4张图片

 

6、连接服务器
发送:AT+CIPSTART="TCP","192.168.1.2",1234

返回:CONNECT

           OK 

7、发送消息

发送: AT+CIPSEND=4  (4代表的是发送多少个字符)

 > WIFI   (看到 >  输入发送的内容即可)

ESP8266模块,连接云服务器实现数据传输_第5张图片

可以在网络调试助手上看到已经接收到对应的数据了

至此,已经可以连接本地服务器传输数据了。

 

那么怎样连接云服务器实现数据传输呢?

在此,我创建的是socket 服务器,注意在云服务器管理端开通对应的端口号

在linux系统上 创建tcp_server.cpp 文件 ,在本程序中,应用的是 8888端口号

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
 
#define PORT  8888
#define QUEUE_SIZE   10
#define BUFFER_SIZE 1024
 
//传进来的sockfd,就是互相建立好连接之后的socket文件描述符
//通过这个sockfd,可以完成 [服务端]<--->[客户端] 互相收发数据
void strPrintf(int sockfd)
{
    char buffer[BUFFER_SIZE];
    pid_t pid = getpid();
    while(1)
    {
        memset(buffer,0,sizeof(buffer));
        int len = recv(sockfd, buffer, sizeof(buffer),0);
        if(strcmp(buffer,"exit\n")==0)
        {
            printf("child process: %d exited.\n",pid);
            break;
        }
        printf("pid:%d receive:%s\n",pid,buffer);
        fputs(buffer, stdout);
        send(sockfd, buffer, len, 0);  //将接收到数据发送回去
		
    }
    close(sockfd);
}
 
int main(int argc, char **argv)
{
    //定义IPV4的TCP连接的套接字描述符
    int server_sockfd = socket(AF_INET,SOCK_STREAM, 0);
 
    //定义sockaddr_in
    struct sockaddr_in server_sockaddr;
    server_sockaddr.sin_family = AF_INET;
    server_sockaddr.sin_addr.s_addr = htonl(INADDR_ANY);
    server_sockaddr.sin_port = htons(PORT);
 
    //bind成功返回0,出错返回-1
    if(bind(server_sockfd,(struct sockaddr *)&server_sockaddr,sizeof(server_sockaddr))==-1)
    {
        perror("bind");
        exit(1);//1为异常退出
    }
    printf("bind success.\n");
 
    //listen成功返回0,出错返回-1,允许同时帧听的连接数为QUEUE_SIZE
    if(listen(server_sockfd,QUEUE_SIZE) == -1)
    {
        perror("listen");
        exit(1);
    }
    printf("listen success. The Port is %d \n",PORT);
 
    for(;;)
    {
        struct sockaddr_in client_addr;
        socklen_t length = sizeof(client_addr);
        //进程阻塞在accept上,成功返回非负描述字,出错返回-1
        int conn = accept(server_sockfd, (struct sockaddr*)&client_addr,&length);
        if(conn<0)
        {
            perror("connect");
            exit(1);
        }
        printf("new client accepted.\n");
 
        pid_t childid;
        if(childid=fork()==0)//子进程
        {
            printf("child process: %d created.\n", getpid());
            close(server_sockfd);//在子进程中关闭监听
            strPrintf(conn);//处理监听的连接
            exit(0);
        }
    }
 
    printf("closed.\n");
    close(server_sockfd);
    return 0;
}
 

编译 g++ tcp_server.cpp  -o tcp_server

编译无误,可生成 tcp_server 可执行文件 。执行  ./tcp_server  

 

然后在串口助手

发送:AT+CIPSTART="TCP","xxx.xxx.xxx.xxx",8888   其中xxx.xxx.xxx.xxx 为云服务器地址

当串口助手现实CONNECT  OK,可以看到云服务器上现实

接着就可以发送数据了

发送 AT+CIPSEND=13

 

 

至此,wifi模块就可以实现和云服务器连接了。

如有疑问,可以通过添加微信号 LinLinux6_13 进行交流学习

或者关注公众号 “404肥钦实验室”  获取更多内容。

 

 

你可能感兴趣的:(单片机,socket,wifi,云服务器)