我最近才刚开始玩ESP8266模块,该模块主要用于两个ESP8266之间的通信,以进行数据传输。主要将两个ESP8266分别设置为AP模式(服务器)和STA模式(客户端)。通过配置以启用通信,因为固件已在出厂前进行了配置,所以我们主要使用串行调试助手通过AT命令配置一些命令。 ESP8266的基本配置和串行通信的AP模式(服务器):步骤如下:1. AP模式设置(命令:AT + CWMODE = 2); //如果之前已设置,要重新配置此设置,则可以使用以下命令:& ldquo; AT + RESTORE& rdquo;恢复出厂设置。 2.配置ESP8266的AP参数(命令:AT + CWSAP =“ ssid”,“ pwd”,“ chl”,“ ecn”); 3,重启(命令:AT + RST); 4,建立多个连接,打开TCP Server(命令:AT + CIPMUX = 1); 5.建立一个TCP服务器(命令:AT + CIPSERVER = 1,5000); 6.查询本地IP地址(用于以后的客户端连接)(命令:AT + CIFSR);如图7所示,发送数据(在完成上述6个步骤之后,由于没有客户端访问,因此请不要先写此命令)(命令:AT + CIPSEND =“ link.ID”,“ length”))STA模式(客户端):步骤如下:1.设置STA模式(命令:AT + CWMODE = 1); 2.重新启动(命令:AT + RST); 3.连接到AP(命令:AT + CWJAP =“ ssid”,“ pwd”); 4,建立TCP连接(命令:AT + CIPSTART =“ type”,“ remote IP”,“ remote port”); (执行该命令后,可以在服务器上配置发送数据命令:AT + CIPSEND)5.设置传输模式(命令:AT + CIPMODE = 1); 6.发送数据(命令:AT + CIPSEND);以下是AP(服务器)通过串行端口向STA(客户端)发送信息的示例(您需要在发送消息之前发送消息)。一个命令:AT + CIPSEND =“ link.ID”,“ length”。 )(服务器在左边,客户端在右边)(图片被发送两次,所以有16 8))以下是通过串口的STA(客户端)AP(服务器)发送信息的示例(因为已将其设置为透明传输模式,所以只需要发送命令:AT + CIPSEND,以后再发送消息时就不需要输入命令。)(服务器在左侧,客户端在右侧) )(连续发送三遍“ AT + CIPSEND”和“ Hello”)esp8266-SDK串行端口发送和中断接收1,发送呼叫uart_init(115200,115200);初始化串行端口,波特率设置为115200。前一个是设置uart0的波特率,后一个是uart0的设置,波特率,然后可以使用uart0_tx_buffer(uint8 * buf,uint16 len)从uart0发送数据,也可以使用os_printf()函数发送数据,但是需要注意如果使用串行端口1,则要使用os_printf()修改os_printf,此接口从UART打印默认为0。 IOT_Demo中的Uart_init可以设置波特率,其中os_install_putc1((void *)uart1_write_char)将os_printf更改为从UART 1、2打印,并接收串行端口初始化函数uart_init。您可以看到以下函数system_os_task(uart_recvTask,uart_recvTaskPrio,Task uTask_recvc);该功能是创建一个任务,该任务用于处理串行端口0的接收数据uart_config(UART0);这是配置串行端口寄存器。其中有回调函数ETS_UART_INTR_ATTACH(uart0_rx_intr_handler,&(UartDev。(UartDev.rcv_buff))); E使用ETS_UART_INTR_ATTACH来设置串行端口回调函数uart0_rx_intr_handrx inter_handler_handlerx中有各种功能。输入UART_RXFIFO_TOUT_INT_ST,即停止传输时间限制,然后调用system_os_post向在初始化函数uart_init中创建的任务uart_recvTask发送消息,然后查看uart_recvTask(os_event_t * events)LOCAL void ICACHE_FLASH_ATTR ////// // uart_recvTask(os_event_t * events)s {os_event_t * events)= 0){#if UART_BUFF_EN Uart_rx_buff_enq(); #else uint8 fifo_len =(READ_PERI_REG(UART_STATUS(UART0))”》 UART_RXCNT_CNT_S)_amp; int = 0 UART_RXCNT_CNT_S)_amp; int = 8 fifo_len; idx ++){d_tmp = READ_PERI_REG(UART_FIFO(UART0))& amp; 0xFF; uart_tx_one_ char(UART0,d_tmp);} WRITE_PERI_REG(UART_INT_CLR(UART0),UART_RXFIFO_FULL_INT_CLR | UART_RXFIFO_TOUT_INT_CLR); uart_rx_intr_enable(UART0); #endif} else if(events-sig == 1){#if UART_BUFF_EN //已将uart缓冲区输出移至uart空中断empty // tx_start_uart_buffer(UART0); #else #endif}}