查看: 6217|回复: 2

[分享] LPC1768 通过ESP8266配置 TCP CLIENT

[复制链接]
  • TA的每日心情

    2025-5-29 09:38
  • 签到天数: 632 天

    连续签到: 1 天

    [LV.9]以坛为家II

    94

    主题

    1639

    帖子

    2

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    4470

    热心会员

    最后登录
    2025-6-10
    发表于 2021-3-12 16:33:39 | 显示全部楼层 |阅读模式
    昨天用LPC1768 通过ESP8266配置 TCP CLIENT。当然首先谢谢管管赞助的ESP-01模块!
    ESP8266面试已经好几年了,各种主流MCU的配置使用,已经满网络飞了。
    主要开发方式有3种:
    1、和MCU配合,直接使用AT指令!
    2、使用乐鑫官方的ESP8266 SDK,及配套的IDE(如安信可的基于eclipse开发的 AiThinker_IDE)来使用!
    3、最简单的基于ardunio平台来开发。

    这里主要的配置流程,我们可以参考正点原子的模块,写的挺好:
    W1.png
    我们整个思路,就按上面的流程来写。
    首先配置好2路uart,一路输出一些执行的信息,一路与ESP8266通讯。
    ESP8266模块的引脚:
    W2.png
    这里面,我们用了5个引脚,VCC GND TXD RXD CH_PD ,
    其中TXD接MCU的RXD,RXD接MXU的TXD,CH_PD接高电平3.3V,
    其中CH_PD为ESP8266使能引脚。
    其中esp8266串口的接收函数:
    1. uint16_t data_length=0;                                                                /// 数据长度
    2. uint16_t data_lengthu6=0;                                                                /// 数据长度
    3. uint8_t rx_buffer[DATA_BUF_SIZE];                /// 接收缓冲区
    4. uint8_t tx_buffer[DATA_BUF_SIZE];                /// 发送缓冲区

    5. uint8_t rx_bufferu6[DATA_BUF_SIZE];                /// 接收缓冲区1024
    6. uint8_t tx_bufferu6[DATA_BUF_SIZE];                /// 发送缓冲区
    7. uint16_t flag=0;
    8. uint16_t rxd_flag=0;
    9. void UART2_IRQHandler(void)
    10. {
    11.     char res;

    12.     flag  = LPC_UART2->IIR;                          //读取(清除)中断中断状态
    13.     flag &= 0x0F;                  
    14.     if((flag == 0X04)&&(LPC_UART2->LSR & 0X01))    //如果是接收中断,并且有数据 没有数据就会自动清理该寄存器
    15.                 {  
    16.      res=UART2_GetChar();                       //读取数据
    17.                 if(data_length<DATA_BUF_SIZE)
    18.                 {
    19.                          rx_buffer[data_length]=res;                                    // 记录接收到的值
    20.               data_length++;                                                                                    // 接收数据增加1
    21.                          rxd_flag=1;
    22.                        
    23.                 }
    24.   
    25.                
    26.   }
    27.         rx_buffer[data_length+1]='\0';
    28. }
    复制代码
    ESP8266发送命令,并将正确回传指令与当前回传的应答数据进行比较包含,如果包含,则指令正确,否则失败.
    1. /***************************************************************************************************
    2. * 函数名:ESP8266_Cmd
    3. * 函数功能  :对ESP8266模块发送AT指令
    4. * 输入  :cmd,待发送的指令
    5. *         p 期待的响应
    6. *         waittime,等待响应的时间
    7. * 返回  : 0,指令发送成功
    8. *         1,指令发送失败

    9. ***************************************************************************************************/

    10. int ESP8266_Cmd ( char *cmd, char * p, uint32_t waittime )
    11. {   
    12.    
    13.         char *a;
    14.         uint16_t timeout=0;

    15.         WIFI_Usart("%s\r\n",cmd);  
    16.         delay_ms1(waittime ); //延时时间要长,不然会出现忙碌的状态

    17.         while(1)
    18.         {   
    19.                 while(rxd_flag!=1) //一直没有收到对方的响应
    20.                 {
    21.                         timeout++;
    22.                         delay_ms1(1);
    23.                         if(timeout>2000)
    24.                         {                
    25.                                 return 1;   //一直没有收到对方的响应
    26.                         }       
    27.                 }
    28.                 if(1==rxd_flag)//接收字符标志符置1
    29.                 {
    30.                         delay_ms1(4000);       
    31.                         UART0_SendString(rx_buffer);
    32.                         a=strstr((char*)rx_buffer,p);
    33.                         rxd_flag=0;
    34.                         data_length=0;
    35.                         if(a!=0)
    36.                         {
    37.                                 return 0;  //正常收到对方的响应
    38.                         }       
    39.                         else
    40.                         {
    41.                                 return 1;
    42.                         }

    43.                 }               
    44.         }
    45.         return 1;  //收到对方的异常响应
    46.        
    47. }
    复制代码
    其他均是按照配置流程来即可,目前该例程连接路由器的帐号密码,及远程服务器主机IP地址,端口均是固定的。后面会做成微信智能配网模式。
    其中"AT+CIPSTART"—建⽴立 TCP 连接,UDP 传输或 SSL 连接的指令,需注意下:
    大部分网上的例程,都推荐写期待应答的字为"OK",但是这样会有一定的概率失败,不知道是SDK的版本不一样造成的。
    SW3.png
    建议用"CONNECT"作为应答,这样最多就是浪费一次连接的指令,但是能确保连接上。
    下面我们打开串口,看ESP8266输出的配置信息:
    SW4.png
    SW5.png
    这里我们没有配置透传模式,所以每次发送,均要发送ID,及字的长度。最终会使用透传的模式来运行。
    TCP服务器端响应(收到客户端发来的“123456”):
    SW8.png
    服务器发送给客户端,客户端接收:
    E2.png

    这里再上张板子照片:
    E3.png

    好了,就到这里了,谢谢观看。
    代码: LPC1768_DEMO.rar (517.93 KB, 下载次数: 2)
    哎...今天够累的,签到来了~
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2025-6-10 23:03
  • 签到天数: 1502 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    97

    主题

    4688

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    10080
    最后登录
    2025-7-2
    发表于 2021-3-12 16:53:26 | 显示全部楼层
    真棒
    奉上我的掌声  
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-5-21 09:12
  • 签到天数: 14 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    2

    主题

    33

    帖子

    0

    注册会员

    Rank: 2

    积分
    84
    最后登录
    2023-3-14
    发表于 2021-4-10 20:12:20 | 显示全部楼层
    在这个帖子找到了远程通信功能,不愧是大佬。
    今天天气不错!签到!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-23 04:20 , Processed in 0.084180 second(s), 21 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表