快捷搜索:  汽车  科技

esp8266开发全过程(Esp8266学习之搭建开发环境)

esp8266开发全过程(Esp8266学习之搭建开发环境)第二步:导入项目 **选择 File→Import** ,下面步骤:第一步:打开我们最新的NONOS的SDK下载地址:https://github.com/espressif/ESP8266_NONOS_SDK ,解压后请注意以下操作:1.3 、Esp8266特点。1.4 、搭建开发环境。二、开始我们基于 nonos 工程的第一个“Hello World”。

文章目录

一、认识其本质与搭建开发环境。

1.1 、 市面上无线模块有哪些。

1.2 、wifi模块Esp8266发展。

1.3 、Esp8266特点。

1.4 、搭建开发环境。

二、开始我们基于 nonos 工程的第一个“Hello World”。

第一步:打开我们最新的NONOS的SDK下载地址:https://github.com/espressif/ESP8266_NONOS_SDK ,解压后请注意以下操作:

第二步:导入项目 **选择 File→Import** ,下面步骤:

第三步:点开C/C 分支,并选中Existing Code as Makefile Project:

第四步:去除C 支持,选中 Cygwin GCC,点击Browser,选中我们解压后所在的目录。点击finish。

第五步:此刻,成功进入到我们的主界面。

第六步:开始编译工程前,我们装装逼,在其的 app ->user --> user_main.c 方法修改如下,让输出为 hello world。

第七步:开始编译前,按照官方的说法,我们看控制台时候,直接把 Problems 栏目关掉,解释说,这个Problems 栏目报的错误不准确,只有Console 栏目下的输出为准,所以建议大家把 Problems 栏目关闭。

第八步:我们编译之后,看看控制台下的信息打印,说明已经成功做好固件啦。:

三、基于 rtos 如何打开运行一个工程。

待我们的三件套下载了之后,首先第一步是解压,注意是用WinRAR软件以管理员身份解压,可以得到完整的文件夹,其他解压软件有可能会得到不完整的压缩包!

下面我们先设置下cywin和编译工具链的环境变量,注意替换为您的实际路径,如下:

E:\Espressif\IDE\AiThinkerIDE_V0.5\AiThinkerIDE_V0.5\cygwin\bin\

E:\Espressif\IDE\xtensa-lx106-elf\bin\

esp8266开发全过程(Esp8266学习之搭建开发环境)(1)

  • 下面是我们的编辑器的打开,注意 eclipes的打开必须事先自行搭建 java 环境,因为eclipse是用 java开发的 !等你可以成功打开界面如下,说明您已经完成了一大半了!

esp8266开发全过程(Esp8266学习之搭建开发环境)(2)

二、开始我们基于 nonos 工程的第一个“Hello World”。

第一步:打开我们最新的NONOS的SDK下载地址:https://github.com/espressif/ESP8266_NONOS_SDK ,解压后请注意以下操作:

①、driver_lib文件夹下面的Makefile文件删除!

②、整个third_party去掉,这是第三方的demo,我们很少用!

③、把example文件夹下面的任意一个工程,比如smart_config复制到主目录(逼问主目录就是下载压缩包压缩后的目录),可重命名为app,或者不修改!

④、以上做好了之后,可以导入IDE了!

我这里演示一个串口实验,打印 hellow world字符到我们通讯串口助手。下载后解压,注意解压后的路径千万别带中文字符,解压请直接复制到一个没有中文字符的路径的文件夹下面。否则会影响到后面的编译结果!

第二步:导入项目 选择 File→Import ,下面步骤:

esp8266开发全过程(Esp8266学习之搭建开发环境)(3)

第三步:点开C/C 分支,并选中Existing Code as Makefile Project:

esp8266开发全过程(Esp8266学习之搭建开发环境)(4)

第四步:去除C 支持,选中 Cygwin GCC,点击Browser,选中我们解压后所在的目录。点击finish。

esp8266开发全过程(Esp8266学习之搭建开发环境)(5)

第五步:此刻,成功进入到我们的主界面。

第六步:开始编译工程前,我们装装逼,在其的 app ->user --> user_main.c 方法修改如下,让输出为 hello world。

注意:从SDK1.4版本之后,已经移除了下面2个函数,我们只需要在user_init()里面敲写即可!

esp8266的非实时系统编程的打印函数尽量用os_printf(),切记切记!!!

void user_init(void) {

os_printf("hello world");

}

第七步:开始编译前,按照官方的说法,我们看控制台时候,直接把 Problems 栏目关掉,解释说,这个Problems 栏目报的错误不准确,只有Console 栏目下的输出为准,所以建议大家把 Problems 栏目关闭。

之后建议大家每次编译项目前先进行 clear project,再 build project ,这样就保证了正确的代码可以完全被编译,如果正确的代码没有clear project就直接build project ,可能会报错。

Build Project :编译项目 ; Clean Project:清理项目,可以清理下缓存。

esp8266开发全过程(Esp8266学习之搭建开发环境)(6)

esp8266开发全过程(Esp8266学习之搭建开发环境)(7)

第八步:我们编译之后,看看控制台下的信息打印,说明已经成功做好固件啦。:

esp8266开发全过程(Esp8266学习之搭建开发环境)(8)

第三处修改:需要在project_template的Makefile里添加指定的SDK的路径。千万忘记了结尾的”/”。否则编译还是会找不到路径,比如我的工程路径为:C:\Project8266\8266All\8266ProjectCSDN\16_ESP8266_RTOS_SDK_V1.5.0

export SDK_PATH = /cygdrive/C/Project8266/8266All/8266ProjectCSDN/16_ESP8266_RTOS_SDK_V1.5.0/

export BIN_PATH = /cygdrive/C/Project8266/8266All/8266ProjectCSDN/16_ESP8266_RTOS_SDK_V1.5.0/bin/

开始编译之后,便可看到console控制台输出如下,恭喜成功编译!

三、基于 rtos 如何打开运行一个工程。

  • 第一处修改:此rtos工程导入和安信可的导进就是一模一样的,但是需要修改的是指定的工程编译目录 拿我github上的一个rtos工程,其编译目录为project_template 所以需要修改如下:

esp8266开发全过程(Esp8266学习之搭建开发环境)(9)

第二处修改:修改编译指令,还记得我们的rtos编译时候需要选择一些选项吗?比如是user1.bin还是user2.bin。这里的话,我们需要手动的编辑此编译的指令:(下面的指令是生成可升级的user1.bin的32Mbit的8266模块,对应我们的8266-12f模块)

COMPILE=gcc BOOT=new APP=1 SPI_SPEED=40 SPI_MODE=QIO SPI_SIZE_MAP=6

esp8266开发全过程(Esp8266学习之搭建开发环境)(10)

开始编译之后,便可看到console控制台输出如下,恭喜成功编译!

bin crc: 1b65b8de

Support boot_v1.4 and

Generate user1.4096.new.6.bin successully in BIN_PATH

boot.bin------------>0x00000

user1.4096.new.6.bin—>0x01000

!!!

esp8266开发全过程(Esp8266学习之搭建开发环境)(11)

四、让我们烧固件走起。


  • 如果您的8266是没有最小系统的话(如下),那么需要自己搭建最小系统来烧固件进去。

esp8266开发全过程(Esp8266学习之搭建开发环境)(12)

看我们的最小系统搭建(强调:烧录时候,一定要让GPIO0处于低电平,即接GND):

esp8266开发全过程(Esp8266学习之搭建开发环境)(13)

让我们开始烧录:根据上面第八步的生成的bin文件,我们看见了其烧录信息:

eagle.flash.bin-------->0x00000

eagle.irom0text.bin---->0x10000

于是,我们就打开烧录软件,配置刚刚的路径,选择烧录地址(选择之后就是绿色的),各个参数如下:

esp8266开发全过程(Esp8266学习之搭建开发环境)(14)

  • 下载完毕之后,我们给设备重新上电,打开串口助手,设置波特率74880:

esp8266开发全过程(Esp8266学习之搭建开发环境)(15)

上面的图是不是看见很清晰的 hellow world 呀 。

我们最平常用的是安信可8266-12系列的,这个是32Mbit,也就是4M flash 所以他们的地址分别是 0x3FC000 和 0x3FE000 最后2个的烧录文件地址看编译之后结果而决定!也即是不一定是0x10000,有可能是0x2000 这个根据SDK的版本有关系。所以大家还是留心点!

的好多人问我这个SPI MODE应该怎么选择,这个其实是esp8266芯片和flash芯片的连接方式决定的,四根线就是QIO,而DIO就是六根线,至于后面还有QOUT和DOUT和flash芯片有关,平时最多的是DIO或者是QIO了!

最后一点,本系列的NONOS SDK 都是 1.4~2.2的,如果您的是最新的3.0或者以上的工程,可能汇报以下错误:

user_main.c:45:2: error: #error "The flash map is not supported"

#error "The flash map is not supported"

^

xt-xcc -Os -g -Wpointer-arith -Wundef -Werror -Wl -EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -ffunction-sections -fdata-sections -fno-builtin-printf -DICACHE_FLASH -DGLOBAL_DEBUG_ON -DSPI_FLASH_SIZE_MAP=0 -I include -I ./ -I ../include -I ../include/mqtt -I ../include/modules -I ../../include -I ../../include/eagle -I ../../driver_lib/include -o .output/eagle/debug/obj/user_main.o -c user_main.c

user_main.c:45:2: error: #error "The flash map is not supported"

#error "The flash map is not supported"

^

user_main.c:156:58: error: 'SYSTEM_PARTITION_OTA_SIZE' undeclared here (not in a function)

{ SYSTEM_PARTITION_OTA_1 0x1000 SYSTEM_PARTITION_OTA_SIZE}

^

user_main.c:157:39: error: 'SYSTEM_PARTITION_OTA_2_ADDR' undeclared here (not in a function)

{ SYSTEM_PARTITION_OTA_2 SYSTEM_PARTITION_OTA_2_ADDR SYSTEM_PARTITION_OTA_SIZE}

^

user_main.c:158:39: error: 'SYSTEM_PARTITION_RF_CAL_ADDR' undeclared here (not in a function)

{ SYSTEM_PARTITION_RF_CAL SYSTEM_PARTITION_RF_CAL_ADDR 0x1000}

^

user_main.c:159:40: error: 'SYSTEM_PARTITION_PHY_DATA_ADDR' undeclared here (not in a function)

{ SYSTEM_PARTITION_PHY_DATA SYSTEM_PARTITION_PHY_DATA_ADDR 0x1000}

^

user_main.c:160:46: error: 'SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR' undeclared here (not in a function)

{ SYSTEM_PARTITION_SYSTEM_PARAMETER SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR 0x3000}

^

莫急,这是因为未定义造成的,一般地,根据我们最常用的esp8266-12系列的32Mbit的模块,那么只需要在根目录的Makefile文件的第25行的代码修改如下,重新编译即可!!烧录地址不变!!

BOOT?=new

APP?=1

SPI_SPEED?=40

SPI_MODE?=QIO

SPI_SIZE_MAP?=6

五、上电不跑程序,异常分析。

ESP8266 上电时打印的 boot 模式信息代表什么?如何改变 boot 模式?

ESP8266 上电时会判断 boot strapping 管脚的状态,并决定 boot 模式。例如,ESP8266 上电时打印的 boot 模式信息如下:

ets Jan 8 2013 rst cause:1 boot mode:(3 2)

其中打印的 boot mode 的第一位数字(3)代表当前的 boot 模式。

Boot 模式由 strapping 管脚的 3 位值 [GPIO15,GPIO0,GPIO2] 共同决定。如下表所示:

esp8266开发全过程(Esp8266学习之搭建开发环境)(16)

烧写失败定位

确保 boot 模式在 UART boot.

将 ESP8266 拨到烧写模式,看烧写口的 log(默认 74880 查看). 正常烧写应该是 boot mode:(1 n) 其中n任意,第二个参数和 SDIO 相关,不用关心!

看 log 乱码/无打印定位,确保 boot 模式在 Flash boot!

将 ESP8266 拨到运行模式,看 log 口的输出. 正常log应该是 boot mode:(3 n),第二个参数和 SDIO 相关,不用关心!

1.确保波特率正确

2.确保无串口占用

猜您喜欢: