Win10-Ubuntu子系统构建ESP8266_RTOS_SDK开发环境

本文详细介绍了如何在64位Win10系统中启用Linux子系统,并安装Ubuntu。然后在Ubuntu环境下搭建ESP8266的开发环境,包括安装工具链、获取ESP8266_RTOS_SDK,设置环境变量,以及烧录和测试Hello World程序。此外,还解决了Win10子系统波特率设置问题,将串口波特率改为115200。
摘要由CSDN通过智能技术生成

陈拓 2021/01/16-2021/01/20

1. 概述

ESP8266的开发环境是在linux系统下构建的。树莓派的官方操作系统就是Linux系统,在《树莓派安装ESP8266_SDK开发环境》

https://blog.csdn.net/chentuo2000/article/details/105296166

一文中我们介绍了在树莓派上构建ESP8266开发环境的方法。

在本文中我们介绍在Win10中启用Linux子系统,安装Ubuntu,在Ubuntu上构建ESP8266开发环境。

Win10安装Ubuntu的方法见:《Win10启用Linux子系统安装Ubuntu》

https://blog.csdn.net/chentuo2000/article/details/112131624

我用的电脑操作系统是64位版的win10,下面是系统版本。

1.1 ESP8266技术文档

https://www.espressif.com/zh-hans/support/documents/technical-documents?keys=&field_type_tid%5B%5D=14

1.2 工具链和SDK

因为ESP8266功能太弱,不足以支持开发工作,所以需要在其他平台上安装开发系统进行开发。我们在Ubuntu下构建ESP8266开发环境,将ESP8266的C程序代码编译链接成ESP8266可执行的bin文件,再将编译好的文件烧写到ESP8266上运行,这个过程就是交叉编译,交叉编译所需的软件工具叫做工具链toolchain。

SDK提供了操作ESP8266的API函数,我们用C语言通过调用这些函数就可以开发出所需功能的程序,再用工具链编译成可执行代码。

多个SDK可以同时存在,ESP8266_NONOS_SDK和ESP8266_RTOS_SDK也可以都安装。

1.3 ESP8266 SDK分类

在官方文档《ESP8266 SDK入门指南》中有关于开ESP8266 SDK的分类。

2. 更新apt源

为例加快软件包的下载速度,我们要将软件源更换到国内。

见《Win10的Linux子系统Ubuntu换源》

https://zhuanlan.zhihu.com/p/342771976

https://blog.csdn.net/chentuo2000/article/details/112387914

3. Linux 平台工具链的标准设置

[https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/get-started/linux-setup.html]

3.1 安装准备

编译工具链需要以下软件包:

sudo apt-get install git wget flex bison gperf python3 python3-pip python3-setuptools cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0

4. 获取工具链

  • 网址

https://github.com/espressif/ESP8266_RTOS_SDK

右击Linux(64),复制链接地址:

https://dl.espressif.com/dl/xtensa-lx106-elf-gcc8_4_0-esp-2020r3-linux-amd64.tar.gz

  • 创建编译链目录

mkdir esp

cd esp

  • 下载

wget https://dl.espressif.com/dl/xtensa-lx106-elf-gcc8_4_0-esp-2020r3-linux-amd64.tar.gz

  • 解压

tar -xzvf xtensa-lx106-elf-gcc8_4_0-esp-2020r3-linux-amd64.tar.gz

路径:/home/ccdc/esp/xtensa-lx106-elf

  • 设置环境变量

回到家目录,就是我们登录的目录

cd ~

看看有没有文件.bashrc

编辑这个文件nano ~/.bashrc

将export PATH=/home/ccdc/esp/xtensa-lx106-elf/bin:$PATH

添加到最后一行。

保存,退出。

exit退出Ubuntu,再重新启动Ubuntu。

查看环境变量echo $PATH:

工具链的路径已经在里面了。

  1. 运行xtensa-lx106-elf-gcc -v来验证安装

5. 获取ESP8266_RTOS_SDK

cd esp

  • 克隆ESP8266_RTOS_SDK

git clone --recursive https://github.com/espressif/ESP8266_RTOS_SDK.git

可以备份一下:

tar -zcvf ESP8266_RTOS_SDK.tar.gz ESP8266_RTOS_SDK

  • 设置ESP8266_RTOS_SDK环境变量

和设置工具链环境变量一样在~/.bashrc中添加一行:

export IDF_PATH=~/esp/ESP8266_RTOS_SDK

nano ~/.bashrc

保存,退出。

exit退出Ubuntu,再重新启动Ubuntu。

验证:

echo $IDF_PATH

6. 连接ESP8266开发板到PC上

我用的是网上买的下面这种开发板,加上ESP8366-12F模块。

插上USB线后我PC将USB-SERIAL识别为COM4:

7. 测试

用esp8266_rtos_sdk/examples/get-started/hello_world项目进行测试。

参考GitHub - espressif/ESP8266_RTOS_SDK: Latest ESP8266 SDK based on FreeRTOS, esp-idf style.

  • 进入项目目录

cd ~/esp/ESP8266_RTOS_SDK/examples/get-started/hello_world

  • 启动项目配置工具

make menuconfig

进入Serial flasher config --->,修改串口和芯片Flash大小。

Windows中的串口COM4对应Linux中的设备/dev/ttyS4

保存,退出。make会继续执行:

因为要编译配置比较慢,耐心等待。如果编译没有继续进行,就手工执行make。以后如果配置没有变化就只执行make。

手工make之后显示:

生成了二进制文件hello-world.elf放在build目录下:

elfexecutable and link format)文件里面包含了符号表,汇编等。

bin文件是将elf文件中的代码段,数据段,还有一些自定义的段抽取出来形成一个内存映像,bin文件是直接的二进制文件,是我们要烧写到芯片上的。

可以用make flash烧写芯片,也可以用python脚本esptool.py烧写芯片:

python /home/ccdc/esp/ESP8266_RTOS_SDK/components/esptool_py/esptool/esptool.py --chip esp8266 --port /dev/ttyS4 --baud 115200 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 40m --flash_size 4MB 0x0 /home/ccdc/esp/ESP8266_RTOS_SDK/examples/get-started/hello_world/build/bootloader/bootloader.bin 0x10000 /home/ccdc/esp/ESP8266_RTOS_SDK/examples/get-started/hello_world/build/hello-world.bin 0x8000 /home/ccdc/esp/ESP8266_RTOS_SDK/examples/get-started/hello_world/build/partitions_singleapp.bin

下面我们用make flash烧写芯片。

  • 烧写flash

make flash

第一次比较慢,以后就快了。

  • 查看串口输出

要同时从一个串口烧写芯片和监视输出可以用命令make monitor

值错误:无法设置自定义波特率(74880):[Errno 25]设备的ioctl (input/output control)不正确。

Win10的Ubuntu子系统不能设置非标准波特率74880,我们用Win10的串口调试助手。

参考《Win10使用CH340 USB-SERIAL串口》

https://zhuanlan.zhihu.com/p/343013801

https://blog.csdn.net/chentuo2000/article/details/112323488

设置:

点击波特率设置图标,输入74880,打开串口:

对照源代码hello_world_main.c看看。

cat main/hello_world_main.c

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_spi_flash.h"

void app_main()
{
    printf("Hello world!\n"); // 打印Hello world!

    /* Print chip information 打印芯片信息*/
    esp_chip_info_t chip_info;
    esp_chip_info(&chip_info);
    printf("This is ESP8266 chip with %d CPU cores, WiFi, ",
            chip_info.cores);

    printf("silicon revision %d, ", chip_info.revision);

    printf("%dMB %s flash\n", spi_flash_get_chip_size() / (1024 * 1024),
            (chip_info.features & CHIP_FEATURE_EMB_FLASH) ? "embedded" : "external");

    for (int i = 10; i >= 0; i--) {
        printf("Restarting in %d seconds...\n", i);
        vTaskDelay(1000 / portTICK_PERIOD_MS);
    }
    printf("Restarting now.\n");
    fflush(stdout);
    esp_restart();
}

8. 修改波特率

74880ESP8266上电时的默认波特率,下面我们将波特率改为常用的115200

  • 修改main/hello_world_main.c

nano main/hello_world_main.c

添加红框中的代码。

完整代码如下:

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_spi_flash.h"
#include "driver/uart.h"

void app_main()
{
    uart_set_baudrate(UART_NUM_0,115200);// 设置波特率为115200

    printf("\nHello world!\n"); // 打印Hello world!

    /* Print chip information 打印芯片信息*/
    esp_chip_info_t chip_info;
    esp_chip_info(&chip_info);
    printf("This is ESP8266 chip with %d CPU cores, WiFi, ",
            chip_info.cores);

    printf("silicon revision %d, ", chip_info.revision);

    printf("%dMB %s flash\n", spi_flash_get_chip_size() / (1024 * 1024),
            (chip_info.features & CHIP_FEATURE_EMB_FLASH) ? "embedded" : "external");

    for (int i = 10; i >= 0; i--) {
        printf("Restarting in %d seconds...\n", i);
        vTaskDelay(1000 / portTICK_PERIOD_MS);
    }
    printf("Restarting now.\n");
    fflush(stdout);
    esp_restart();
}
  • 编译

make

  • 烧写

make flash

  • 测试

串口调试助手的波特率设置为115200。ESP8266的初始化信息还是使用74880波特率,这个改不了,所以是乱码。之后的数据就使用115200传输了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

晨之清风

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

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

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

打赏作者

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

抵扣说明:

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

余额充值