zoukankan      html  css  js  c++  java
  • 使用ESP8266 打造一款物联网产品---新版ESP8266-RTOS-SDK(V3.1以上)串口使用指南

      问题背景:

      使用乐鑫的ESP8266做一个物联网的项目,要使用串口0通信,串口1作为打印log。本来是一个非常简单的事情。没想到居然里面有个大坑。本着前任踩坑,后任抱娃的原则。

    这里就做个记录,给后面的同仁做一个前车之鉴吧。

       

      调研分析:

      其实,这个关于串口打印及通信的,网上的资料很多,乐鑫官方文档的资料也很多。我尝试用他们的方法去用的时候,怎么都不行。后来才发现,是我用的是新版本。

    它的新版本有些库函数都做了优化了。已经不存以前的那些串口接口了,这样就导致了他们的那些配置软件串口的方法根本行不通了。

      新的SDK,底层函数变了,导致配置全都和以前不一样的,下面是新的串口配置流程:

       使用串口1打印:

    如果SDK版本是 v3.1 的话,可以直接在 make menuconfig 面板里面直接配置:

        

    Component config --->
    ESP8266-specific --->
    UART for console output (Custom) --->
    UART peripheral to use for console output (0-1) (UART1) --->

      在 v3.0 版本配置项可能有些出入,但是大致类似。或者使用下面代码:
        

    PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_U1TXD_BK);
    uart_param_config(UART_NUM_1, &uart_config);
    uart_driver_install(UART_NUM_1, 0, BUF_SIZE + 1, BUF_SIZE + 1, NULL)

           串口0的通信配置:

      

    uart_config_t uart_config = {
    .baud_rate = 9600, //波特率
    .data_bits = UART_DATA_8_BITS,
    .parity = UART_PARITY_DISABLE,
    .stop_bits = UART_STOP_BITS_1,
    .flow_ctrl = UART_HW_FLOWCTRL_DISABLE};
    
    uart_param_config(UART_NUM_0, &uart_config);
    uart_driver_install(UART_NUM_0, BUF_SIZE * 2, 0, 0, NULL);
    
    // 为收到的数组数字开辟一个内存
    uint8_t *data = (uint8_t *)malloc(BUF_SIZE);
    
    while (1)
    {
    // 读取串口数组
    int len = uart_read_bytes(UART_NUM_0, data, BUF_SIZE, 20 / portTICK_RATE_MS);
    
    //打印下数组
    
    printf("uart_read_bytes data[%d]= %s 
     ", data);
    
    // 主动发送数组到串口
    uart_write_bytes(UART_NUM_0, (const char *)data, len);
    }

      这个完成以后,你就可以做一个测试了。本人测试是可以的。有啥问题欢迎沟通讨论。 

      总结反思:

      技术的问题,特别是不熟悉的平台,花时间去打磨是必须的。  

     

  • 相关阅读:
    电路学习实战分析之mos-2
    我这博客咋分类的?
    学习shell之后,实战分析
    二叉树,二叉排序树,红黑树 学习
    哈希表 学习
    《转》C语言可变参函数的实现
    Linux工具记录
    苏州之旅有感
    git 命令动画学
    软件工程相关博客
  • 原文地址:https://www.cnblogs.com/dylancao/p/11810025.html
Copyright © 2011-2022 走看看