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\
- 下面是我们的编辑器的打开,注意 eclipes的打开必须事先自行搭建 java 环境,因为eclipse是用 java开发的 !等你可以成功打开界面如下,说明您已经完成了一大半了!
二、开始我们基于 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 ,下面步骤:
第三步:点开C/C 分支,并选中Existing Code as Makefile Project:
第四步:去除C 支持,选中 Cygwin GCC,点击Browser,选中我们解压后所在的目录。点击finish。
第五步:此刻,成功进入到我们的主界面。
第六步:开始编译工程前,我们装装逼,在其的 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:清理项目,可以清理下缓存。
第八步:我们编译之后,看看控制台下的信息打印,说明已经成功做好固件啦。:
第三处修改:需要在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 所以需要修改如下:
第二处修改:修改编译指令,还记得我们的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
开始编译之后,便可看到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
!!!
四、让我们烧固件走起。
- 如果您的8266是没有最小系统的话(如下),那么需要自己搭建最小系统来烧固件进去。
看我们的最小系统搭建(强调:烧录时候,一定要让GPIO0处于低电平,即接GND):
让我们开始烧录:根据上面第八步的生成的bin文件,我们看见了其烧录信息:
eagle.flash.bin-------->0x00000
eagle.irom0text.bin---->0x10000
于是,我们就打开烧录软件,配置刚刚的路径,选择烧录地址(选择之后就是绿色的),各个参数如下:
- 下载完毕之后,我们给设备重新上电,打开串口助手,设置波特率74880:
上面的图是不是看见很清晰的 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] 共同决定。如下表所示:
烧写失败定位
确保 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.确保无串口占用