【ESP8266开发备忘】

一、一些资料

eclipse AithinkerIDE平台

  • windows下可以使用安信可提供的集成开发环境,win最新版idf为v1.5(202212),环境变量编译器会自动添加了。
  • 支持各种sdk,不同之处在可能需要根据使用的sdk切换下编译器版本,因为后期主推idf风格的rtos版sdk
  • 官方最新IDF1.5使用说明(2022/10/26)
  • ide默认的工具链是v5.2,如果使用ESP8266_RTOS_SDK这个仓库的代码,还是要下载v8.4版本编译器添加系统环境变量,并把该环境变量移动到ide添加的环境变量的上方(优先级要高于ide默认添加那四个系统环境变量),否则ESP8266_RTOS_SDK这个仓库的代码会提示编译器版本过低(RTOS SDK为idf风格,v3.0+和之前版本区别较大)。
    上面的官方说明链接中使用的仓库并不是官方自己的ESP8266_RTOS_SDK,而是AiThinkerProjectForESP,这个是大神徐宏(半颗心脏)更新的一个仓库,该仓库使用的是v5.2版本编译器,新版本编译器会报错。。

RTOS v3.0+ SDK平台

  • 查看乐鑫在线esp8266 RTOSv3.0+文档,看指导配置即可

常见的两款开发板说明

  • AiThinkerIDE会自动替换python为python2
  • nodemcu(8266), 烧录程序不需要进行按键操作(开始按好久,汗-_-||)
  • 技新开发板(8266), 烧录程序要先点start下载先按boot再按reset再松reset再松boot。。

AiThinkerIDE的常用操作快捷键

  • alt+shift+a: 打开纵向编辑,再次点击关闭

二、ESP8266 sdk3.0 idf v1.5 nos rtos AiThinkerIDE使用对比

  • 都需要配置工程编译路径
  • NONOS 必须把例程拷贝到SDK根目录,RTOS 版本不需要,拷贝也没问题
  • NONOS 需要配置编译命令参数,RTOS 可选
make COMPILE=gcc BOOT=none APP=0 SPI_SPEED=40 SPI_MODE=DIO SPI_SIZE_MAP=6
  • NONOS 需要手动删除根目录下的driver_lib和 third_party这2个文件夹
  • RTOS 需要配置IDF_PATH编译环境变量(IDE里面),NONOS 不需要
  • NONOS 对编译器版本似乎没有严格要求, v5.2和v8.4编译都通过
  • SDK仓库地址:
https://gitee.com/xuhongv/AiThinkerProjectForESP   //RTOS SDK
https://gitee.com/EspressifSystems/ESP8266_RTOS_SDK
https://github.com/espressif/ESP8266_RTOS_SDK
https://github.com/espressif/ESP8266_NONOS_SDK

三、关于RTOS SDK下载

  • RTOS SDK直接使用git clone拉取后,编译时会自动拉取其他子模块,最好还是先下好后再使用,--recursive参数递归拉取,如:
git clone --recursive https://gitee.com/xuhongv/AiThinkerProjectForESP.git

我有时上电梯也不行,这时候就各显神通吧。。徐宏大佬已经做过gitee同步了,博文链接,很多高质量教程, 下面讲使用:

git clone https://gitee.com/xuhongv/ESP8266_RTOS_SDK.git

然后编辑目录下的.gitmodules文件,按下面格式修改

[submodule "components/json/cJSON"]
	path = components/json/cJSON
	url = https://gitee.com/xuhongv/cJSON.git

[submodule "components/mbedtls/mbedtls"]
	path = components/mbedtls/mbedtls
	url = https://gitee.com/xuhongv/mbedtls.git

[submodule "components/lwip/lwip"]
	path = components/lwip/lwip
	url = https://gitee.com/xuhongv/esp-lwip.git

[submodule "components/mqtt/esp-mqtt"]
	path = components/mqtt/esp-mqtt
	url = https://gitee.com/xuhongv/esp-mqtt.git

[submodule "components/coap/libcoap"]
	path = components/coap/libcoap
	url = https://gitee.com/xuhongv/libcoap.git

再进入仓库目录执行更新子模块即可

 git submodule update --init --recursive

四、 编译&烧录 win平台AiThinkerIDE

1. RTOS, 使用AiThinkerIDE

右键项目->Make Targets->Build…->Add…,如下设置,注意串口号
在这里插入图片描述

2. NONOS, 使用官方串口工具:

  • FOTA编译命令
make COMPILE=gcc BOOT=new APP=1 SPI_SPEED=40 SPI_MODE=DOUT
make COMPILE=gcc BOOT=new APP=2 SPI_SPEED=40 SPI_MODE=DOUT
  • 这是一个示例,后面的地址和flash大小有关,也就是flash size map配置,我测试发现下面的DoNotChgBin不能勾选,还是推荐使用旧版本工具,size_map可以手动选择
    在这里插入图片描述

五、其他配置

rtos支持配置面板:

在这里插入图片描述

mintty.exe -e make menuconfig

工程导入

  • 工程导入配置,通用:
    在这里插入图片描述
    在这里插入图片描述

RTOS工程属性配置

  • RTOS SDK导入后右键工程属性配置:
    在这里插入图片描述

NONOS 编译命令配置

  • NONOS SDK编译命令配置(Non FOTA),注意SPI_SIZE_MAP和flash容量有关
    在这里插入图片描述

六、Q&A

1. 复位后打印ets Jan 8 2013,rst cause:2, boot mode:(1,6)

关闭串口工具的DTR功能

2. 启动模式&启动信息说明

这个图是安信可的模块手册:
在这里插入图片描述

见sdk api参考手册,可以去乐鑫官网,还可以参考: 官方博客
在这里插入图片描述

  • IO15需要被有效拉低,下拉电阻不能太大,比如50K的电阻会启动异常:
ets Jan  8 2013,rst cause:2, boot mode:(7,0)
waiting for host
  • 上电时IO0为低即可进入下载模式,上电后拉低IO0需要复位并保持IO0低电平进入下载模式

3. IO16怎么使用

IO16有自己单独的头文件和源文件

4. NONOS airkiss配网编译提示无 airkiss_lan_pack()定义【nonos】

需要在app下的Makefile里面添加airkiss库,-l 表示库参数
在这里插入图片描述

5.各个大小的flash对应的bin烧录地址【nonos】

  • Non-FOTA
    在这里插入图片描述
  • FOTA
    在这里插入图片描述

6. 生成FOTA用的boot.bin和user.bin【nonos】

  • 右键项目->Make Targets->build…->add,注意命令参数和自己的板子匹配
    在这里插入图片描述
    在这里插入图片描述

7. FOTA固件,boot引导后启动失败【nonos】

  • 检查flash size map配置和下载烧录地址填写是否正确

8. 不能使用高波特率下载【nonos】

  • SPI 模式尝试使用DOUT(和flash工作模式相关)

9.系统flash size map定义【nonos】

在这里插入图片描述

10. 4MB flash不能配置到SPI_FLASH_SIZE_MAP 6 (1024+1024)【nonos】

  • 使用老版本可选择FLASH SIZE版本的下载工具,选择32Mbit-C1选项,新版本我只能配置到4,有点奇怪,不懂怎么配置6,有知道的小伙伴可以留言,,
    在这里插入图片描述

11. NONOS SDK FOTA system_upgrade_start()升级不成功【nonos】

  • 检查服务器IP,端口是否正确,升级文件路径是否正确,可以通过打印请求url查看
os_printf("url: %s\r\n",(char*)update->url);
  • 用手机测试能否连接服务器,输入升级文件地址会弹出下载框,以确认服务器端口未被防火墙屏蔽
http://192.168.8.216/bin/upgrade/user1.4096.new.6.bin
  • 用TCP调试助手发送升级url,调试助手能收到升级文件以确认命令正确,注意后面跟两个回车
GET /bin/upgrade/user2.4096.new.6.bin HTTP/1.1
Host: 192.168.8.216:8080
Connection: keep-alive


  • 如果使用半颗心脏大佬的教程,可以尝试把8080端口换成80端口,或防火墙添加对应端口出站入站规则
  • 下面是tcp调试助手的正确返回示例
    在这里插入图片描述

12. ttyUSB0操作没权限

sudo chmod -R 777 /dev/ttyUSB0   //开放临时权限,usb重新连接后失效
sudo adduser you dialout  		//添加到dialout组,需要重启,注销登录无效。
id -Gn							//查看当前用户在的用户组

13. RTOS v3.0+ idf-style的编译烧录【RTOS v3.0+】

make menuconfig 	//配置面板,非常重要,有各种常用配置,如串口号、波特率、flash大小、分区表、组件配置等
make all			//不加all也可以,只编译不烧录,会打印一些编译选项,并简单提示当前git仓库状态
make app 			//只编译app
make flash 			//编译后烧录,需要配置好串口
make app-flash 		//编译后只烧录app
make clean 			//清理编译
make monitor 		//串口监视,ctrl+]退出
make flash monitor 	//也可以连起来执行
make flash ESPPORT=/dev/ttyUSB1 			//可以参数指定串口
make flash ESPBAUD=9600 					//可以参数指定烧写波特率
make monitor MONITORBAUD=9600 				//可以参数指定监视波特率
make -j4 all 								//在所有需要编译的命令中都可以加入-jx来使用并行编译提高速度
make erase_flash 							//flash整片擦除,烧录时不会全部擦除
make erase_flash flash 						//整片擦除后烧录
make partition_table 						//打印分区表

14. RTOS v3.0+ idf-style 怎么生成compile_commands.json【RTOS v3.0+】

Ubuntu下可以使用bear,windows下可以使用compiledbcmake可以添加编译命令

bear -- make all
compiledb make all
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1

15. ubuntu不识别ch340

这个真是挺无语的,我发现国内厂商普遍对开源环境不感兴趣,ch340官方linux驱动好像被厂家忘了,现在放出来的驱动还是上古内核版本:
在这里插入图片描述
于是,驱动居然要用户自己编译安装。。还好网上有大神的帖子:链接,测试了下,可以使用,步骤也不算太麻烦:

  1. 下载官方linux驱动:链接,解压后里面有三个文件,其实就只用里面的makefile文件:
    在这里插入图片描述
  2. 可以用一些命令查看下当前状态
# 查看内核版本
uname -r
# 查看系统自带驱动
ls /lib/modules/$(uname -r)/kernel/drivers/usb/serial
# 查看串口设备信息
sudo dmesg | grep tty
# 如果brltty占用了串口就把他卸载掉,不会影响使用
sudo apt remove brltty
  1. 删除旧版本ch340驱动,但需要记住原模块名叫什么,一会儿编译后放过来还需要命名一致,否则驱动不会自动加载
#进入串口驱动目录,用管理员权限删除ch34开头那个驱动文件
cd /lib/modules/$(uname -r)/kernel/drivers/usb/serial
sudo rm ch341.ko
  1. 到这个网站链接选择匹配的内核版本,然后把右边的代码全部拷贝出来替换掉第一步解压出来的ch34x.c,删除新建一个同名c文件也可以。然后编译,期间可能提示编译器不匹配,不影响使用
#编译
make
#加载,但这样下次重启驱动后需要重新加载
make load
#或者这样加载,也是重启后失效
sudo insmod ch34x.ko
  1. 用管理员权限把编译出来的ch34x.ko文件拷贝回原驱动目录,然后修改模块名到之前的旧驱动名称,我这里是ch341.ko
#驱动文件拷贝回驱动目录
sudo cp ch34x.ko /lib/modules/$(uname -r)/kernel/drivers/usb/serial
cd /lib/modules/$(uname -r)/kernel/drivers/usb/serial
sudo mv ch34x.ko ch341.ko

重启,ch340也可以自动加载了。(这么看起来cp2102好多了,不需要折腾就能用)
在这里插入图片描述

16. A fatal error occurred: Timed out waiting for packet content【IDF】

有自动下载电路的板子碰到了这个问题(nodemcu),什么原因造成的暂时不清楚,但通常发生在Ubuntu环境下。可以用以下方式尝试解决。

  1. 板子断电
  2. 按住boot上电
  3. 下载程序,在进行到connecting...时松开boot
  4. 等待下载完成,一次完成后会恢复正常,不再需要这样操作了
    在这里插入图片描述

17. HTTP Server错误

  • httpd_uri: httpd_register_uri_handler: no slots left for registering handler
    在初始化httpd_start(&server, &config);之前指定config.max_uri_handlers = 10;则指定URI最大个数为10个

七、应用方法

1.sntp【RTOS v3.0+】

乐鑫csdn官方博客有个例程,但有点问题,需要根据报错调整下代码位置

  • sntp不能重复初始化,需要单独拿出去,只执行一遍
  • 时区配置在初始化之后,也不用重复配置
  • 连接wifi后调用esp_wait_sntp_sync()即可打印时间
  • 需要确保sntp服务器有效,多服务器配置看官方说明
  • 主要头文件需要依赖,当然也需要包含日志esp_log.h等基本文件
#include "lwip/apps/sntp.h"
#include "time.h"

2.http server

2.1【RTOS v3.0+】

已经提供http server组件,参考乐鑫官方RTOS仓库和IDF仓库里面的示例
对于html、css、js文件的嵌入,可以参考乐鑫api文档二进制文件的嵌入方法

2.2【nonos】

当成普通的tcp服务,监听对应端口,进行对应的数据收发解析和响应,需要对http协议十分了解,否则笔者并不建议使用。对nonos sdk开发,主要api:

  • espconn_regist_connectcb() //连接回调注册
  • espconn_accept() //端口监听
  • espconn_regist_recvcb() //接收数据回调注册,回调中处理和响应http请求
  • espconn_regist_disconcb() //链接断开回调注册

3. mqtt 【RTOS v3.0+】

包含头文件 mqtt_client.h
发布和订阅直接使用阻塞式api即可,接收主题数据处理需要注册对应时间使用

esp_mqtt_client_register_event(client_mqtt, ESP_EVENT_ANY_ID, mqtt_event_handler, NULL);    
void mqtt_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data) 
{
	//处理可以参考esp32 idf内的mqtt例程
}

八、工具

1. websocket测试

  • 依赖nodejs
npm install -g wscat  			#安装

wscat.cmd -l 8888 						#本地建立服务并监听8888
wscat.cmd -c ws://192.168.8.216:8888  	#连接到192.168.8.216,端口8888

2.wireshark抓包

  • 过滤规则格式 xxx && xxx
ip.src==192.168.8.108 && http  			#指定IP源地址和协议
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值