Esp8266学习之旅① 搭建开发环境,开始一个“hellow world”串口打印。

版权声明:本文为博主半颗心脏一心一血敲出来的原创作品,未经博主允许不得转载,多谢支持。 https://blog.csdn.net/xh870189248/article/details/77985541

  • 本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。

1、 Esp8266之 搭建开发环境,开始一个“hellow world”串口打印。
2、 Esp8266之 利用GPIO开始使用按钮点亮你的“第一盏灯”。
3、 Esp8266之 利用 "软件定时器 " 定时0.5秒闪烁点亮一盏LED。
4 、Esp8266之 了解PWM,更为深入地用PWM控制一盏LED的亮度变化。
5 、Esp8266之 原生乐鑫SDK高级使用之封装Post与Get请求云端,拿到“天气预报信息”。
6 、Esp8266之 了解 SmartConfig与Airkiss一键配网,给8266配网上云端。无需把wifi名字密码写在固件里。
7 、Esp8266之 了解 softAP热点配网模式原理,仿“机智云”定义自己的热点配网模式协议。
8、 Esp8266之 你要找的8266作为UDP、TCP客户端或服务端的角色通讯,都在这了。
9、 Esp8266进阶之路第1篇: [小实战上篇]Windows系统搭建8266的本地Mqtt服务器,局域网点亮一盏LED灯。
10、 Esp8266进阶之路第2篇: [小实战下篇]Windows系统搭建8266的本地Mqtt服务器,局域网点亮一盏LED灯。
11、 Esp8266进阶之路第3篇: 8266接入阿里智能,点亮一盏LED灯,期待天猫精灵语音控制的不约而至!
12、 Esp8266进阶之路第4篇: 图文并茂学习阿里云主机搭建8266MQTT服务器,实现移动网络远程控制一盏LED。
13、 Esp8266进阶之路第5篇: 动手做个8266毕设小案例,smartConfig + MQTT协议轻松实现远程控制一盏LED。
14、 Esp8266进阶之路第6篇: esp8266的 FreeRtos系统学习的正确姿势 ------ 环境搭建、烧录。
15、 Esp8266进阶之路第7篇: esp8266的 物联网又一股清流,8266接入阿里云平台非阿里智能的SDS服务,点亮一盏LED灯。
16、 Esp8266进阶之路第8篇: esp8266的 基于Nonos移植红外线H1838,实现红外遥控器配网,远程控制一盏灯。
17、 Esp8266进阶之路第9篇: esp8266自研的快速上电开关五次 (开-关为一次) ,无需按键触发则8266进去一键配网模式。
18、 Esp8266进阶之路第10篇: esp8266 基于NONOS 实现 OTA 远程升级,实现无线“ 热修复 ”升级固件程序。
19、 Esp8266进阶之路第11篇esp8266驱动 ds18b20、dht11 温湿度传感器,采集温湿度传感器到服务器。
20、 Esp8266进阶之路第12篇深入学习esp8266的esp now模式,仿机智云做一个小网关,实现无需网络下轻松彼此连接通讯交互数据。
21、 Esp8266进阶之路第13篇浅谈 esp8266 如何在本地局域网网络情况下实现最大效率地和前端实现数据交互。
22、 Esp8266进阶之路第14篇esp8266的工程如何添加第三方静态库文件以及如何自定义文件夹,聊聊那些makeFile的事。。
23、 Esp8266进阶之路第15篇再来一波 esp8266 基于 freeRtos系统连接自己私有的服务器实现OTA远程升级,接触下 lwip的基本知识。。
24、 Esp8266进阶之路第16篇渗透学习回顾下esp8266的外置spi芯片25q系列,熟悉8266代码块在其的分布,得心应手放置图片或其他资料。
25、 Esp8266进阶之路第17篇深聊下esp8266的串口 Uart 通讯中断编程,为您准备好了 NONOS 版本 和 RTOS 系统的串口驱动文件。
26、 Esp8266进阶之路第18篇RTOS分析 MQTT 实现过程,实现移植 MQTT协议在 esp8266 rtos实时系统,可断线重连。
27、 Esp8266进阶之路第19篇跟紧脚步,用VisualStudio Code开发 esp8266 rtos SDK v3.0版本,全新的 idf 框架,节省内存模块化开发。
28、 Esp8266进阶之路第20篇教你轻松自如使用cJson在乐鑫 esp8266 如何解析一段json数据以及如何生成一段json数据。
29、 Esp8266进阶之路第21篇百万条消息免费之乐鑫esp8266使用TCP直连模式MQTT协议接入阿里云物联网平台,支持私家服务器对接支持阿里云规则引擎。
30、 Esp8266进阶之路第22篇乐鑫esp8266 SDK编程使用 IIC总线驱动 0.96寸的OLED显示屏,显示天气预报信息。
31、 Esp8266进阶之路第23篇当esp8266遇到 Html,该怎么内置网页控制设备,理清内置网页的实现过程,实现无需路由器手机也可以控制esp8266。
32、 Esp8266进阶之路第24篇细聊HmacMD5的加密方法带来的安全性,并实践在esp8266上,最大保障传输的过程的信息的安全性。
33、 Esp8266进阶之路第25篇如何优雅地像乐鑫原厂封装esp8266底层寄存器的逻辑思维,做成自己的静态库库文件,让第三方人使用?
34、 Esp8266进阶之路第26篇乐鑫esp8266 NONOS SDK 3.0编程使用 SPI 驱动基于Max7219芯片的八位数码管,显示日期信息。
35、 Esp8266进阶之路第27篇乐鑫esp8266芯片借助机智云平台做一个商业化的七彩RGB灯泡可调整体方案项目,炫彩夺目高大尚。
36、 Esp8266学习rtos3.0笔记第1篇认识esp8266 Rtos 3.0 sdk 工程结构,esp8266如何向esp-idf工程靠近的,如何自定义头文件编译?
37、 Esp8266学习rtos3.0笔记第2篇你要找的基本外设功能都在这里了,包括Gpio、Pwm 和 Uart 接口使用。
38、 Esp8266学习rtos3.0笔记第3篇 一篇文章带你搞掂存储技术 NVS 的认识和使用,如何利用NVS保存整型、字符串、数组以及结构体。
39、 Esp8266学习rtos3.0笔记第4篇 带你捋一捋市面上的微信公众号配网智能设备 esp8266 并绑定设备的过程,移植并成功实现在 esp8266 rtos3.1 sdk。
40、 Esp8266学习rtos3.0笔记第5篇 基于乐鑫idf框架,研究出超稳定、掉线重连、解决内存泄露问题的Mqtt框架!支持esp8266和esp32!
41、 Esp8266学习rtos3.0笔记第6篇 esp8266-12模块基于rtos3.1版本ota功能远程空中升级固件,官网基础之上增加dns域名解析!


  • 很多人怎么联系我一起学习进步,下面打个小小公告和干货无偿分享:

玩转esp8266带你飞、加群付费QQ群,提高门槛,不喜的朋友勿喷勿加:434878850
esp8266源代码免费学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp8266
esp32源代码免费学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp32

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


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


大家可知道目前的无线通信模块有哪几种? 主要有Wifi无线通讯BlueTooth蓝牙ZigBee,目前大多都是前二者,ZigBee现在用的很少了。据我所推断的,未来是属于物联网世界、智能家居领域,而蓝牙和zigbe局限于范围,蓝牙4.0仅仅最大支持100米,zigbee就不说了。


1.2 、wifi模块Esp8266发展。


2015年物联网处于爆发的一年,乐鑫的ESP8266WIFI 芯片成为强烈的催化剂。成功的将2014年前的40以上的WIFI成本压缩到现在的10元左右。内置WIFI前端和高性能的32位MCU,基本引爆物联网市场,几乎牵扯到电子的行业,都可以用上,比如WIFI开关 灯具 WIFI定位 电饭锅 空气净化器 等消费类小家电与大家电,都面临这一场技术革新,与新的用户体验!比如你仅仅增加10元的成本就可以把自己的产品被手机控制了。


1.3 、Esp8266特点。


  • 要知道,在物联网世界里面的牛人,没有谁不认识 8266 。既然如此出色,那肯定有他存在的必然理由:

    • 低功耗、高集成度的 Wi-Fi 芯片。

    • 最小系统仅需 7 个元器件

    • 超宽工作温度范围:-40°C 至 +125°C

    • ESP8285 : ESP8266 内封 8 Mbit Flash。

    • ESP8266EX 有三种运行模式:激活模式、睡眠模式和深度睡眠模式,能够延长电池寿命。


1.4 、搭建开发环境。


  • 环境搭建大家应该都几乎是选择 windows 的,作为一个老司机,和大家一样,我也是选择为 win10 的笔记本电脑游戏本,cpu i8 ,16g内存!
  • 下面我就以 windows 平台为大家搭建一个可以手动同步最新编译工具链、以及可编译 非操作系统nonos工程和 操作系统Rtos工程的代码,下面是搭建环境的三件套:
    • esp8266最新的编译工具链下载传送门(仔细看下面的截图): https://github.com/espressif/ESP8266_RTOS_SDK
    • 2019年的eclipse c++编辑器下载,请关注我的微信公众号后回复 8266环境搭建 或者群文件获取即可!
    • 感谢安信可提供的 window cywin 环境,下载可在我的微信公众号后回复 8266环境搭建 或者群文件获取即可!

在这里插入图片描述


  • 待我们的三件套下载了之后,首先第一步是解压,注意是用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:清理项目,可以清理下缓存。


关闭problem栏


先clear再build


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

这里写图片描述


  • 第三处修改:需要在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 呀 。

  • 由于 nonos 3.0 以上步骤不可行,则具体操作请访问我的B站视频教学:https://www.bilibili.com/video/av40065898

  • 后记:所有自己编译出来的工程,都是有四个文件要烧录的,其中2个是必须烧录的(防止初始化失败),这2个文件分别是 esp_init_data_default.bin blank.bin,烧录地址根据您的8266型号区别;

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

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

  • 最后一点,本系列博客的NONOS SDK 都是 1.4~2.2的,在今年2018年七月左右,更新到了3.0版本,一些初始化代码都已经变了,大家入门的话,还是从我的GitHub下载吧。这样较快地入门学习esp8266;如果您的是最新的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] 共同决定。如下表所示:
Strapping 管脚的 3 位值 [GPIO15,GPIO0,GPIO2] Boot 模式
7 [1,1,1] SDIO HighSpeed V2 IO
6 [1,1,0] SDIO LowSpeed V1 IO
5 [1,0,1] SDIO HighSpeed V1 IO
4 [1,0,0] SDIO LowSpeed V2 IO
3 [0,1,1] Flash Boot
2 [0,1,0] Jump Boot
1 [0,0,1] UART Boot
0 [0,0,0] Remapping

烧写失败定位
确保 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.确保无串口占用

另外,不要把我的博客作为学习标准,我的只是笔记,难有疏忽之处,如果有,请指出来,也欢迎留言哈!

展开阅读全文

没有更多推荐了,返回首页