• 【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
    
    • 1
    • 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
    
    • 1
    • 2
    • 3
    • 4

    三、关于RTOS SDK下载

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

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

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

    然后编辑目录下的.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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

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

     git submodule update --init --recursive
    
    • 1

    四、 编译&烧录 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
    
    • 1
    • 2
    • 这是一个示例,后面的地址和flash大小有关,也就是flash size map配置,我测试发现下面的DoNotChgBin不能勾选,还是推荐使用旧版本工具,size_map可以手动选择
      在这里插入图片描述

    五、其他配置

    rtos支持配置面板:

    在这里插入图片描述

    mintty.exe -e make menuconfig
    
    • 1

    工程导入

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

    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
    
    • 1
    • 2
    • 上电时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);
    
    • 1
    • 用手机测试能否连接服务器,输入升级文件地址会弹出下载框,以确认服务器端口未被防火墙屏蔽
    http://192.168.8.216/bin/upgrade/user1.4096.new.6.bin
    
    • 1
    • 用TCP调试助手发送升级url,调试助手能收到升级文件以确认命令正确,注意后面跟两个回车
    GET /bin/upgrade/user2.4096.new.6.bin HTTP/1.1
    Host: 192.168.8.216:8080
    Connection: keep-alive
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 如果使用半颗心脏大佬的教程,可以尝试把8080端口换成80端口,或防火墙添加对应端口出站入站规则
    • 下面是tcp调试助手的正确返回示例
      在这里插入图片描述

    12. ttyUSB0操作没权限

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

    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 						//打印分区表
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    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
    
    • 1
    • 2
    • 3

    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    1. 删除旧版本ch340驱动,但需要记住原模块名叫什么,一会儿编译后放过来还需要命名一致,否则驱动不会自动加载
    #进入串口驱动目录,用管理员权限删除ch34开头那个驱动文件
    cd /lib/modules/$(uname -r)/kernel/drivers/usb/serial
    sudo rm ch341.ko
    
    • 1
    • 2
    • 3
    1. 到这个网站链接选择匹配的内核版本,然后把右边的代码全部拷贝出来替换掉第一步解压出来的ch34x.c,删除新建一个同名c文件也可以。然后编译,期间可能提示编译器不匹配,不影响使用
    #编译
    make
    #加载,但这样下次重启驱动后需要重新加载
    make load
    #或者这样加载,也是重启后失效
    sudo insmod ch34x.ko
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    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
    
    • 1
    • 2
    • 3
    • 4

    重启,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"
    
    • 1
    • 2

    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
    • 2
    • 3
    • 4
    • 5

    八、工具

    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
    
    • 1
    • 2
    • 3
    • 4

    2.wireshark抓包

    • 过滤规则格式 xxx && xxx
    ip.src==192.168.8.108 && http  			#指定IP源地址和协议
    
    • 1
  • 相关阅读:
    安卓搞机教程--修改设置里 添加选项 添加文字 修改图标 修改版本号等等 实例解析
    JVM第十三讲:调试排错 - JVM 调优参数
    在VMware Workstation Pro安装win7
    PMS150C应广单片机开发案例
    使用跨平台的visual studio code 进行python 开发
    【性能测试】Jmeter+InfluxDB+Grafana 搭建性能监控平台
    美团图灵机器学习平台性能起飞的秘密(一)
    概述机器学习算法(机器学习)
    C++学习day7
    Vue08 事件的基本使用
  • 原文地址:https://blog.csdn.net/a1058191679/article/details/127534690