ESP8266配置UDP数据传输

ESP8266配置UDP数据传输

  在万物互联的时代,各家互联网公司都大力推广物联网平台,WIFI作为连接平台的其中一种枢纽,ESP8266就是其中的一个典型代表。ESP8266模块内置TCP/IP协议栈,采用串口AT指令集操作方式,操作简单。
  ESP8266工作模式有AP、STA、AP+STA共存模式;通信方式支持TCP和UDP两种方式。

  ESP8266模式:STA+UDP

  STA+UDP模式配置指令集

	"AT\r\n",//测试指令
    "AT+RST\r\n",
    "ATE0\r\n",
    "AT+CWMODE=1\r\n",//STA模式
    "AT+CWJAP=\"360WIFI_123\",\"12345678\"\r\n",//连接WIFI
    "AT+CIFSR\r\n",//查询IP
    "AT+CIPSTART=\"UDP\",\"172.20.7.2\",10500,8080,0\r\n",//建立UDP
    "AT+CIPMODE=1\r\n",//设置透传模式
    "AT+CIPSEND\r\n",//发送数据

  STA+UDP模式配置函数设计

/*******************************************************************************************************************
**形参: wifi_name --WIFI名
**      password  --密码
**      remote_ip  --远端IP地址(255.255.255.255为广播地址)
**      remote_prot  --远端端口号
**      localhost    ---本地端口号
**返回值:0 --成功,
**       其它值 --失败
**示例:ESP8266_UDP_STA_Mode("360WIFI_123","12345678","172.20.7.2",10500,8080);
*********************************************************************************************************************/
u8 ESP8266_UDP_STA_Mode(u8 *wifi_name,u8 *password,u8 *remote_ip,u16 remote_prot,u16 localprot)
{
   char buff[100];
   u8 i=0;
    for(i=0;i<5;i++)
    {
        USARTx_SendStr(USART3,(u8 *)"+++"); //退出透传模式
        Delay_Ms(1000);
        printf("1.测试指令.......\r\n");
        if(ESP8266_SendCmd((u8 *)"AT\r\n",(u8 *)"OK")==0)break;
    }
    if(i==5)return 1;
    printf("2.重启模块.......\r\n");
    USARTx_SendStr(USART3,(u8 *)"AT+RST\r\n");
    Delay_Ms(1000);
    Delay_Ms(1000); 
    printf("3.关回显.......\r\n");
    if(ESP8266_SendCmd((u8 *)"ATE0\r\n",(u8 *)"OK"))return 2; 
    printf("4.设置为STA模式.......\r\n");
    if(ESP8266_SendCmd((u8 *)"AT+CWMODE=1\r\n",(u8 *)"OK"))return 3;   
    printf("6.连接WIFI.......\r\n");
    snprintf(buff,sizeof(buff),"AT+CWJAP=\"%s\",\"%s\"\r\n",wifi_name,password);
    if(ESP8266_SendCmd((u8 *)buff,(u8 *)"OK"))return 5;   
    printf("7.查询IP.......\r\n");
    if(ESP8266_SendCmd((u8 *)"AT+CIFSR\r\n",(u8 *)"OK"))return 6; 
    ESP8266_GetData((char *)usart3_rx_buff,esp8266_info.ipaddr,"STAIP");
    printf("8.建立UDP连接.....\r\n");
    snprintf(buff,sizeof(buff),"AT+CIPSTART=\"UDP\",\"%s\",%d,%d,0\r\n",remote_ip,remote_prot,localprot);
    if(ESP8266_SendCmd((u8 *)buff,(u8 *)"OK"))return 7; 
    printf("9.设置透传.......\r\n");
    if(ESP8266_SendCmd((u8 *)"AT+CIPMODE=1\r\n",(u8 *)"OK"))return 8; 
    printf("10.发送数据.......\r\n");
    if(ESP8266_SendCmd((u8 *)"AT+CIPSEND\r\n",(u8 *)">"))return 9; 
    esp8266_info.port=localprot;
    return 0;
}

  发送AT指令函数设计

/*******************************发送指令函数*************************
**
**参数说明:u8 *cmd -- 要发送的指令
**         u8 *data  --要检查的的字符串
**返回值:0 --发送成功
**        1 --发送失败
**示例:ESP8266_SendCmd("AT\r\n","OK");
***********************************************************************/
u8 ESP8266_SendCmd(u8 *cmd,u8 *data)
{
    int i=0,j=0;
    for(i=0;i<ESP8266_COUNT;i++)
    {
        usart3_rx_flag=0;//清除接收标志
        usart3_rx_cnt=0;//清除数组下标
        USARTx_SendStr(USART3,cmd);//发送命令
        //开启接数据
        for(j=0;j<5000;j++)
        {
            if(usart3_rx_flag)
            {
                usart3_rx_buff[usart3_rx_cnt]='\0';//字符结束符
              //  printf("rx:%s", usart3_rx_buff);
                if(strstr((char *)usart3_rx_buff,(char *)data))
                {
                  usart3_rx_flag=0;//清除接收标志
                  usart3_rx_cnt=0;//清除数组下标 
                  return 0;
                }
                else 
                {
                    memset(usart3_rx_buff,0,sizeof(usart3_rx_buff));//清空缓冲区
                    usart3_rx_flag=0;//清除接收标志
                    usart3_rx_cnt=0;//清除数组下标 
                }  
            }
            Delay_Ms(1);
        } 
    }
    return 1;//发送指令失败
}

  主函数

int main()
{
    u8 key;
    u8 ret;
    LED_Init();//LED初始化
    USARTx_Init(USART1,115200,72);
    TIMx_Init(TIM2,72,20000);//定时器辅助串口1接收,计数一个周期时间为20ms
    USARTx_Init(USART3,115200,36);
    TIMx_Init(TIM4,72,20000);//定时器辅助串口3接收,计数一个周期时间为20ms
    KEY_Init();//按键初始化
    Beep_Init();//蜂鸣器初始化 
    printf("WIFI模式配置中。。。。\r\n");
    while(1)
    {
        ret=ESP8266_UDP_STA_Mode((u8 *)"wbyq_wifi",(u8 *)"12345678",(u8 *)"172.20.7.1",10500,8266);
        if(ret==0)break;
        printf("ret:%d\r\n",ret);
    }
    printf("IP:%s\r\n",esp8266_info.ipaddr);
    printf("port:%d\r\n",esp8266_info.port);
    while(1)//轮询
    {
        key=KEY_GetVal();
        if(key==2)
        {
            BEEP=1;
            Delay_Ms(50);
            BEEP=0;
             USARTx_SendStr(USART3,(u8 *)"UDP+STA模式数据传输测试\r\n"); 
        }
     
        if(usart3_rx_flag)
        {
            usart3_rx_buff[usart3_rx_cnt]='\0';//字符串结束符
            usart3_rx_cnt=0;
            usart3_rx_flag=0;
            printf("rx3:%s\r\n",usart3_rx_buff);
        }
    }
}

  运行效果
在这里插入图片描述
  工程示例:https://download.csdn.net/download/weixin_44453694/18773915

  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MikroTik RouterOS是一种路由操作系统,并通过该软件将标准的PC电脑变成专业路由器,在软件RouterOS 软路由图的开发和应用上不断的更新和发展,软件经历了多次更新和改进,使其功能在不断增强和完善。特别在无线、认证、策略路由、带宽控制和防火墙过滤等功能上有着非常突出的功能,其极高的性价比,受到许多网络人士的青睐。 桥接功能   RouterOS能将多张网卡组建为一个桥模式,使路由器变成一个透明的桥设备,同样也实行三层交换的作用,MAC层的以太网桥、EoIP 、Prism、Atheros和RadioLAN 等都是支持的。所有802.11b和802.11a 客户端的无线网卡(如station模式的无线)受802.11 的限制无法支持桥模式,但可以通过EoIP协议的桥接方式实现。   为防止环路出现在网络中,可以使用生成树协议(STP) ,这个协议同样使冗余线路成为可能。   包括特征如下:   l 生成树协议(STP)   l 多桥接接口功能   l 该协议能选择转发或者丢弃   l 能实时监控MAC地址   l 桥防火墙   l 多线路支持   RouterOS基于策略的路由为网络管理者提供了比传统路由协议对报文的转发和存储更强的控制能力,路由器用从路由协议派生出来的路由表,根据目的地址进行报文的转发。   在负载均衡下也可以根据带宽的比例调整两条线路的流量。RouterOS提供了多种方式的路由功能,使其路由功能更强大,更灵活。RouterOS的路由功能主要为:   l 基于源地址的路由   l 基于目标地址的路由   l 基于端口的路由   l 基于定义用户类的路由   l 基于负载均衡的路由   l 基于端口的负载均衡   l 隧道协议   RouterOS支持多种隧道协议如PPP、PPPoE、PPTP、EoIP、IPIP以及IPsec,这些隧道协议可以为远程资源访问和企业间的连接提供很好的解决方案,如:   l 通过PPTP或IPIP实现通网络资源互用   l EoIP或PPTP的远程局域网解决方案   l 支持PPPoE服务器   l Hotspot热点认证服务   热点服务认证系统是一种web的认证方式,在此种认证方式中,用户可以通过自设IP地址或DHCP获得一个地址,打开浏览器,无论输入一个什么地址,都会被强制到一个认证界面,要求用户进行认证,认证通过后,就可以访问其他站点了。主要特征:   l 用户通过时间与流量认证计费   l Cookie (存储用户的账号和密码) 带宽控制功能   l 定额控制(连接超时时间, 下载/上传传输限制)   l 实时用户状态信息显示   l 自定义认证HTML页(可以由你自己设计认证页)   l DHCP服务器分配IP地址   l 简单的RAIUS客户端配置   l RouterOS 能与PPTP隧道、IPsec以及其它的一些功能配合使用。   l 可以通过Access Point与以太网接入用户。   l 定时广播指定的URL链接   l 脚本控制   RouterOS提供了可以编写的脚本功能,脚本的加入使RouterOS在处理很多网络方案、自动检查故障和动态生成策略等,都可以通过脚本很好的解决。使得在处理很多网络问题上更加的灵活和智能化。   具体功能:   TCP/IP协议组:   l Firewall和NAT–包状态过滤;P2P协议过滤;源和目标NAT;对源MAC、IP地址、端口、IP协议、协议(ICMP、TCP、MSS等)、接口、对内部的数据包和连接作标记、ToS 字节、内容过滤、顺序优先与数据频繁和时间控制、包长度控制...   l 路由 – 静态路由;多线路平衡路由;基于策略的路由(在防火墙中分类); RIP v1 / v2, OSPF v2, BGP v4   l 数据流控制 – 能对每个IP、协议、子网、端口、防火墙标记做流量控制;支持PCQ, RED, SFQ, FIFO对列; Peer-to-Peer协议限制   l HotSpot – HotSpot认证网关支持RADIUS验证和记录;用户可用即插即用访问网络;流量控制功能;具备防火墙功能;实时信息状态显示;自定义HTML登录页;支持iPass;支持SSL安全验证;支持广告功能。   l 点对点隧道协议 – 支持PPTP, PPPoE和L2TP访问控制和客户端; 支持PAP, CHAP, MSCHAPv1和MSCHAPv2 验证协议; 支持RADIUS验证和记录;MPPE加密;PPPoE压缩;数据流控制;具备防火墙功能;支持PPPoE按需拨号。   l 简单隧道 – IPIP隧道、EoIP隧道 (Ethernet over IP)   l IPsec – 支持IP安全加密AH和ESP协议;  

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT_阿水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值