zoukankan      html  css  js  c++  java
  • esp8266 SDK开发之环境搭建

    最近在弄这个WiFi模块,发现网上SDK开发方面的资料很少,发现了一套视频教程,不过主讲人的讲课方式实在受不了。对基于SDK开发感兴趣的同学可以通过本帖在Ubuntu系统上通过Eclipes搭建开发环境。

    过程可以分为两步:
    1、下载、编译SDK
    2、配置Eclipes

    一、下载、编译SDK

    esp8266的sdk有两种,分别是ESP8266_RTOS_SDK和ESP8266_NONOS_SDK,这两者的区别在于RTOS_SDK有一个叫做RTOS的操作系统,采用了NONOS_SDK部分接口,不支持AT指令。
    详见:Q: What is the difference between RTOS and the non-OS SDK?

    这里我们使用NONOS_SDK,下载地址:esp-open-sdk

    里边集成了NONOS_SDK的编译器和烧录工具等,也可用此编译器编译ESP_RTOS_SDK中的项目。

    我们直接在命令行进行操作:

        #安装一些依赖工具
        $ sudo apt-get install make unrar-free autoconf automake libtool gcc g++ gperf 
            flex bison texinfo gawk ncurses-dev libexpat-dev python-dev python python-serial 
            sed git unzip bash help2man wget bzip2
        #如果ubuntu版本高于14.04可能还需要此工具
        $ sudo apt-get install libtool-bin
        #使用git克隆项目到本地,这里假设项目克隆到了/home/mmmmar/esp-open-sdk
        $ git clone --recursive https://github.com/pfalcon/esp-open-sdk.git
        #进入项目文件夹
        $ cd /home/mmmmar/esp-open-sdk
        #编译
        $ make STANDALONE=y
    

    注意:在SDK的编译过程中需要联网下载一些依赖库并编译,而且下载过程很容易失败,我在下载时挂代理才成功的。
    如果编译失败可以查看esp-open-sdk/crosstool-NG/build.log 查看崩溃信息,一般都是下载失败。

    编译成功后会在esp-open-sdk文件夹出现xtensa-lx106-elf  esptool  ESP8266_NONOS_SDK三个文件夹,分别是编译器,烧录工具,NONOS_SDK最新版。
    这时需要把编译器路径加入到系统路径中,执行:

        #此命令只作用于当前控制台
        export PATH=/home/mmmmar/esp-open-sdk/xtensa-lx106-elf/bin:$PATH
    

    这时就可以编译esp-open-sdk/ESP8266_NONOS_SDK/examples中的示例工程了。
    需要注意,要把ESP8266_NONOS_SDK文件夹复制到esp-open-sdk文件夹的外部,假如我们要编译examples文件夹中的at项目,我们需要把at文件夹复制到ESP8266_NONOS_SDK目录下,不然编译会失败。
    复制完之后路径如下:

        /home/mmmmar
        ├── ESP8266_NONOS_SDK
        │   ├── at
        │   ├── examples
        └── esp-open-sdk
    

     
    复制完之后就可以编译at(我们最初用的AT指令就是这个项目,不过我们只能添加新的AT命令)项目了。
    执行at文件夹下的gen_misc.sh,这里需要输入一些参数。
    对于那些参数我也不是特别清楚,我的esp-01(黑色)选择的是:
    boot version      = none
    spi size and map =   1024KB( 512KB+ 512KB)

    其余默认。黑色的版的esp-01有1MB的存储空间,而蓝色版只有512KB,不能使用最新版的AT固件。

    编译完成后有如下输出:

        !!!
        No boot needed.
        Generate eagle.flash.bin and eagle.irom0text.bin successully in folder bin.
        eagle.flash.bin-------->0x00000
        eagle.irom0text.bin---->0x10000
        !!!
    

    现在可以把ESP8266_NONOS_SDK/bin目录中生成的固件烧录到开发板中去了,可以使用esp-open-sdk/esptool/esptool.py
    不过我用的是windows上的一键烧录工具,大家百度一下就能搜到。

    在配置一栏里需要填写各个二进制文件的烧录地址,这里附上官方文档里说明:

    详见:2a-esp8266-sdk_getting_started_guide_en.pdf
    至此,整套编译工具烧录工具就可以使用了,接下来介绍如何配置Eclipes

    二、配置Eclipes
    其实直接用vim+YCM也行,不过集成开发环境还是用的舒服一点。这里用的Eclipes是eclipse-cpp-neon-2-linux-gtk

    1、File-New-Makefile Project From Existing Code
    2、输入项目名称,路径,语言类型为C,编译器选none

    3、添加头文件搜索路径,Project-Properties-C/C++ General-Preprocessor Include Paths,Macros etc

    添加图中两处include文件夹路径
    注意在添加esp-open-sdk/xtensa-lx106-elf/xtensa-lx106-elf/include时勾选[Treat as build-in]  [ Contains system headers]

    4、添加环境变量,Project-Properties-C/C++ Build-Environment,点击Add

    5、创建编译目标,Project-Build Targets-Create

    其中,Build command中填入的命令就等于我们执行gen_misc.sh并输入参数,详见示例工程中的!!!readme!!!.txt文件

    6、编译目标,Project-Build Targets-Build

    以上,完成了Eclipes所有的配置,附图一张

     

    附加:

       /****************************************
        ESP8266_NONOS_SDK/include/c_types.h
        #define TRUE true
        #define FALSE flase
        这两个宏定义在Eclipes的代码提示中会报错,可以修改一下
        ****************************************/
        #define TRUE   1
        #define FALSE  0
    

    ubuntu上烧录方法:

    使用esp-open-sdk/esptool/esptool.py,执行如下命令

    #这里的参数需要根据自己的需求改变,详见esp-open-sdk/esptool/README.md
    sudo ./esptool.py --port /dev/ttyUSB1 write_flash 0x00000 eagle.flash.bin 0x10000 eagle.irom0text.bin
    

    烧录时要确保接线牢固,不然可能传输过程中会出现数据丢失或更改导致固件验证失败

    参考:
    官网文档
    Free and open (as much as possible) integrated SDK for ESP8266/ESP8285 chips

    Latest ESP8266 SDK based on FreeRTOS

  • 相关阅读:
    LeetCode 83. Remove Duplicates from Sorted List (从有序链表中去除重复项)
    LeetCode 21. Merge Two Sorted Lists (合并两个有序链表)
    LeetCode 720. Longest Word in Dictionary (字典里最长的单词)
    LeetCode 690. Employee Importance (职员的重要值)
    LeetCode 645. Set Mismatch (集合不匹配)
    LeetCode 500. Keyboard Row (键盘行)
    LeetCode 463. Island Perimeter (岛的周长)
    115.Distinct Subsequences
    55.Jump Game
    124.Binary Tree Maximum Path Sum
  • 原文地址:https://www.cnblogs.com/mmmmar/p/6370549.html
Copyright © 2011-2022 走看看