ESP8266/8266串口透传 RTOS_SDK开发

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/shinhwalin/article/details/79806742

开发环境:win10+官方提供VirtualBox和OVA镜像

编辑工具:source insight3.5

芯片:ESP8285,内置1M FLASH 没有外接FLASH

通过串口做透传,流程是在user_main()函数初始化为STA+AP模式,新建任务,在任务中实现透传,

透传流程,通过串口一个字节一个字节的读出数据,通过一个缓存接受数据并通过socket用TCP传递给路由。

void  vTask_station( void * pvParameters )
{
    //sockt config
    LOCAL int32 sock_fd;
    struct sockaddr_in server_addr;
    int nNetTimeout = 1000;
    int fromlen;
    int ret;
    uint8 fifo_len;
    char TC_data[256] = {0};
    uint8 fifo_i = 0;
    uint8 data_i = 0;
    //ap confi

    while(wifi_station_get_connect_status() != STATION_GOT_IP)
    {
        vTaskDelay(2);
    }
    sock_fd = socket(AF_INET,  SOCK_STREAM, 0);
    if(sock_fd  < 0)
    {
        printf("ESP8266 TCP task socket > failed to create sock!\n");
        vTaskDelay(1000/portTICK_RATE_MS);
        while(1);
    }

    struct sockaddr_in servaddr;
    memset(&servaddr, 0, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(5188);
    servaddr.sin_addr.s_addr =inet_addr("172.26.36.1");
    servaddr.sin_len = sizeof(server_addr);

    do{
        ret = connect(sock_fd, (struct sockaddr *)&servaddr, sizeof(servaddr));
        printf("connect ret = %d\n",ret);
    }while(ret < 0);
    while(1)
    {
        //读取串口管道长度
         fifo_len = (READ_PERI_REG(UART_STATUS(UART0)) >> UART_RXFIFO_CNT_S)&UART_RXFIFO_CNT;
        
        //如果管道中有数据将数据缓存到缓存器中
        if(fifo_len > 0)
        {
            for(fifo_i = 0; fifo_i < fifo_len; fifo_i++)
            {
                TC_data[data_i] = READ_PERI_REG(UART_FIFO(UART0)) & 0xFF;
                data_i++;
            }
            continue;
        }
        //读取完成后将数据write到服务器
        if(fifo_len == 0 && data_i >0)
        {
            write(sock_fd, TC_data, strlen(TC_data));
            memset(TC_data,0,sizeof(TC_data));
            data_i = 0;
        }
        
    }
}
第一次用的是串口终端传输,中断传输的话最多接受127个字节。任务情况下可以任意多个字节。可能有更好的API实现方式,希望大家多多指教。


展开阅读全文

没有更多推荐了,返回首页