阅读 418

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

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

物件:

ESP8266EX 模块


USB-TTL 


软件:

串口工具


网络调试助手


云服务器


 


第一步:连线

USB-TTL 与wifi模块连线




USB-TTL ESP 8266模块

3.3V VCC

GND GND

RX UTXD

TX URXD

3.3V CH_PD

 


第二步:设置wifi模块

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


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


     返回:OK




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 的地址创建






 


6、连接服务器

发送:AT+CIPSTART="TCP","192.168.1.2",1234


返回:CONNECT


           OK 


7、发送消息


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


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




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


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


 


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

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


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


#include <sys/types.h>

#include <sys/socket.h>

#include <stdio.h>

#include <netinet/in.h>

#include <arpa/inet.h>

#include <unistd.h>

#include <string.h>

#include <stdlib.h>

#include <fcntl.h>

#include <sys/shm.h>

 

#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肥钦实验室”  获取更多内容。


 

————————————————

版权声明:本文为CSDN博主「qin1137248135」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qin1137248135/article/details/104553187


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐