• ESP8266 系统环境搭建


    1. 前言

    因为ESP8266/ESP32这个开发环境没少折腾,是真没见过这么难搞又不清晰的环境。

    简单开发可以使用Arduino IDE ,这个平台还是挺好的。开发使用Arduino的函数库,很高效。
    不过我还是不习惯,比如示例中binker demo的LED_BUILTIN,都不能跳转到定义,不喜欢。现在来正经搭建一个8266的环境。其实挺简单的,只是一直没找对地方。

    在其他博主那发现官方文档: ESP8266_RTOS_SDK Programming Guide ,我是个对知识的检索有强迫症的人,不知道从哪找到的这个链接就浑身不舒服,最后找到在官网文档下 esp8266分类下的入门指南链接。

    搭建开发环境的具体步骤是:工具链、获取SDK、配置(如果想用IDE的话还应有IDE的配置)。

    开发过程的四个步骤是:

    • 配置项目并编写代码
    • 编译项目并链接,以构建应用程序
    • 烧录到ESP8266
    • 调试和监控

    2. 开发环境的搭建

    2.1 工具链获取

    Windows 一体化工具链和 MSYS2 zip 文件:

    https://dl.espressif.com/dl/esp32_win32_msys2_environment_and_toolchain-20181001.zip

    本来打算用git bash 自带的mingw呢,结果make阶段提醒要使用 mingw32下的msys。结果治好乖乖用官网提供的一体化工具了。

    之后的命令都是在 MINGW32.exe 下执行的。

    2.2 SDK克隆

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

    一定要加上 recursive 循环下载子模块,我没有加,结果后面会在make的时候才下载其他库,还下载不下来。

    我加上这个参数后,发现下载的是特别慢,挂了工具都慢,等了好久终于下载完成。另一个选择是用gitee下载SDK(不用recursive下载子模块),再用一个工具下载子模块,参考:用乐鑫国内镜像构建ESP8266_RTOS_SDK开发环境

    实在想不通乐鑫看重海外市场,把国内生态怎么做得不咋好。

    2.3 配置

    注:工具链使用环境变量 IDF_PATH 访问SDK目录,在 ~/.bash_profile 末尾添加

    export IDF_PATH="G:/IOT/ESP8266/ESP8266_RTOS_SDK"
    

    使用source命令使之生效

    source ~/.bash_profile
    

    下载其他工具

    ESP8266编译和烧录基于Python实现,需要安装python的库。

    $ python -m pip install -r $IDF_PATH/requirements.txt
    
    

    到这里,环境配置就完成了。不不不

    ESP8266专有工具链设置

    一体化环境是为了ESP32设置的,ESP8266还需要下载特定的工具链,这个官网文档或者RTOS说明中也有链接:

    v8.4.0

    https://dl.espressif.com/dl/xtensa-lx106-elf-gcc8_4_0-esp-2020r3-win32.zip

    如果您还在使用旧版本 SDK(< 3.0),请使用工具链 v4.8.5,如下:

    https://dl.espressif.com/dl/xtensa-lx106-elf-win32-1.22.0-88-gde0bdc1-4.8.5.tar.gz

    下载第一个之后,解压。然后.bash_profile中添加环境变量:

    export PATH="$PATH:/G/IOT/ESP8266/xtensa-lx106-elf/bin"
    

    如果这里没配置ESP8266专有工具链,make配置后会出现提醒:

    GENCONFIG
    make:xtensa-lx106-elf-gcc:命令未找到

    3. 开发过程

    项目配置

    将sdk中的examples/git-startd/hello_world复制出去,用mingw32执行到该目录下,运行

    make menuconfig
    

    会看到下面界面:做一些配置(串口,波特率等)

    烧录

    只设置了端口号和flash(本来是4M,烧录时候报错,设置为2M成功了)之后,再使用编译和烧录命令

    make flash
    

    报错:

    子模组 'components/json/cJSON'(https://github.com/DaveGamble/cJSON.git)未对路径 'components/json/cJSON' 注册
    正克隆到 '/g/IOT/ESP8266/ESP8266_RTOS_SDK/components/json/cJSON'...
    fatal: unable to access 'https://github.com/DaveGamble/cJSON.git/': OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443
    fatal: 无法克隆 'https://github.com/DaveGamble/cJSON.git' 到子模组路径 '/g/IOT/ESP8266/ESP8266_RTOS_SDK/components/json/cJSON'
    克隆 'components/json/cJSON' 失败。按计划重试
    正克隆到 '/g/IOT/ESP8266/ESP8266_RTOS_SDK/components/json/cJSON'...
    
    

    这是因为从github下载一些模块没有成功,网上有两种解决方案。一是手动下载并放到对应目录,二是调大http.postBuffer的值。我用了第一种,解决编译时又报另外一个错,遂用第二种。发现还是不行,去查为什么会却库,发现克隆SDK 时没有加 recursive参数循环下载子模块。

    烧录成功后。

    可以用make monitor监视串口:

    hello_world,就打印出了CPU核数,外部Flash大小2M。

    用make monitor 看数据是正常的,用其他串口工具看到的是乱码,原来这里默认的波特率不是115200,是74800。修改波特率方法:

    到这里环境就搭建完成了。明天再去公司搭一套,整理&记录一下问题。

    4. 使用VSCODE做开发环境

    终端和编译

    vscode右键工作区→在集成终端打开替换为mingw32。需要更改用户设置,或者当前工作区的设置(在.vscode/settings.json)

        "terminal.integrated.shell.windows":"D:\\Software\\esp32_win32_msys2_environment_and_toolchain-20181001\\msys32\\msys2_shell.cmd",
        "terminal.integrated.shellArgs.windows": ["-defterm", "-mingw32", "-no-start", "-here"]
    

    make menuconfig时乱码:

    文件\msys32\etc\profile.d\esp32_toolchain.sh 新增语言配置:(zh_Cn)也行的

    export LANG="en_Us"
    

    之后就可以在终端下流畅地使用make了。

    库设置

    现在vscode下看代码,是没有关联库的,所以函数和头文件都跳不了

    头文件分为两类,如图所示,一类是系统库stdio.h等,一类就是 RTOS中的库。

    首先增加配置文件,

    在 incluPath中添加这两类库:我的配置如下,第一个是默认的,第二个是RTOS库,后面几个是系统gcc使用的库(两个星号表示目录递归查找)

    "includePath": [
        "${workspaceFolder}/**"
        
        "E:/labs/esp8266/ESP8266_RTOS_SDK/components/**",
    
        "E:/labs/esp8266/xtensa-lx106-elf/xtensa-lx106-elf/include/c++/8.4.0/**",
        "E:/labs/esp8266/xtensa-lx106-elf/xtensa-lx106-elf/sys-include" ,
        "E:/labs/esp8266/xtensa-lx106-elf/xtensa-lx106-elf/include", 
        "E:/labs/esp8266/xtensa-lx106-elf/lib/gcc/xtensa-lx106-elf/8.4.0/include"
    ],
    

    想要查看gcc包含的文件,通过命令gcc -v -E -x c++ - ,因为make时发现gcc使用的是Toolchain path: /E/labs/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-gcc,所以应该使用/E/labs/esp8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-gcc -v -E -x c++ - 查看引入库位置,所需的是下面红框所示库目录

    这样就可以跳转了。

    总结

    环境搭建折腾了好久。得总结一下,给迷茫的其他人一些指引。

    需要的软件和库:msys2工具链(也可以自己安装,但还是建议用官方提供的)、8266特有工具链、RTOS的库(克隆很麻烦,其实需要的几个组件可以一一下载并放到指定目录即可)。配置就是把8266和RTOS库的路径配置到环境变量中(.bash_profile)。接着烧录运行即可。现在看起来不算麻烦,但过程中真折磨人。

    参考

  • 相关阅读:
    JMeter的JavaRequest探究
    记一次生产压测遇到的"坑"
    JMeter之If Controller深究二
    JMeter之SteppingShape
    那些年拿过的shell之adminer
    Spring Boot Actuator H2 RCE复现
    使用sqlmap结合dnslog快速注入
    一次稍显曲折的爆破经历
    无回显、不出网命令执行测试方式
    实战绕过某waf后缀检测内容检测
  • 原文地址:https://www.cnblogs.com/warcraft/p/16364238.html
Copyright © 2020-2023  润新知