ESP8266_RTOS_SDK
这个仓库的代码,还是要下载v8.4版本编译器添加系统环境变量,并把该环境变量移动到ide添加的环境变量的上方(优先级要高于ide默认添加那四个系统环境变量),否则ESP8266_RTOS_SDK
这个仓库的代码会提示编译器版本过低(RTOS SDK为idf风格,v3.0+和之前版本区别较大)。ESP8266_RTOS_SDK
,而是AiThinkerProjectForESP
,这个是大神徐宏(半颗心脏)更新的一个仓库,该仓库使用的是v5.2版本编译器,新版本编译器会报错。。不需要进行按键操作
(开始按好久,汗-_-||)先点start下载
,先按boot
,再按reset
,再松reset
,再松boot
。。alt+shift+a
: 打开纵向编辑,再次点击关闭make COMPILE=gcc BOOT=none APP=0 SPI_SPEED=40 SPI_MODE=DIO SPI_SIZE_MAP=6
IDF_PATH
编译环境变量(IDE里面),NONOS 不需要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
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
右键项目->Make Targets->Build…->Add…,如下设置,注意串口号
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
mintty.exe -e make menuconfig
关闭串口工具的DTR功能
这个图是安信可的模块手册:
见sdk api参考手册,可以去乐鑫官网,还可以参考: 官方博客
ets Jan 8 2013,rst cause:2, boot mode:(7,0)
waiting for host
IO16有自己单独的头文件和源文件
需要在app下的Makefile里面添加airkiss库,-l 表示库参数
os_printf("url: %s\r\n",(char*)update->url);
http://192.168.8.216/bin/upgrade/user1.4096.new.6.bin
GET /bin/upgrade/user2.4096.new.6.bin HTTP/1.1
Host: 192.168.8.216:8080
Connection: keep-alive
半颗心脏
大佬的教程,可以尝试把8080端口换成80端口,或防火墙添加对应端口出站入站规则sudo chmod -R 777 /dev/ttyUSB0 //开放临时权限,usb重新连接后失效
sudo adduser you dialout //添加到dialout组,需要重启,注销登录无效。
id -Gn //查看当前用户在的用户组
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 //打印分区表
Ubuntu下可以使用bear
,windows下可以使用compiledb
,cmake
可以添加编译命令
bear -- make all
compiledb make all
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1
这个真是挺无语的,我发现国内厂商普遍对开源环境不感兴趣,ch340官方linux驱动好像被厂家忘了,现在放出来的驱动还是上古内核版本:
于是,驱动居然要用户自己编译安装。。还好网上有大神的帖子:链接,测试了下,可以使用,步骤也不算太麻烦:
makefile
文件:# 查看内核版本
uname -r
# 查看系统自带驱动
ls /lib/modules/$(uname -r)/kernel/drivers/usb/serial
# 查看串口设备信息
sudo dmesg | grep tty
# 如果brltty占用了串口就把他卸载掉,不会影响使用
sudo apt remove brltty
#进入串口驱动目录,用管理员权限删除ch34开头那个驱动文件
cd /lib/modules/$(uname -r)/kernel/drivers/usb/serial
sudo rm ch341.ko
#编译
make
#加载,但这样下次重启驱动后需要重新加载
make load
#或者这样加载,也是重启后失效
sudo insmod ch34x.ko
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好多了,不需要折腾就能用)
有自动下载电路的板子碰到了这个问题(nodemcu),什么原因造成的暂时不清楚,但通常发生在Ubuntu环境下。可以用以下方式尝试解决。
进行到connecting...时松开boot
httpd_start(&server, &config);
之前指定config.max_uri_handlers = 10;
则指定URI最大个数为10个乐鑫csdn官方博客有个例程,但有点问题,需要根据报错调整下代码位置
#include "lwip/apps/sntp.h"
#include "time.h"
已经提供http server组件,参考乐鑫官方RTOS仓库和IDF仓库里面的示例
对于html、css、js文件的嵌入,可以参考乐鑫api文档二进制文件的嵌入方法
当成普通的tcp服务,监听对应端口,进行对应的数据收发解析和响应,需要对http协议十分了解,否则笔者并不建议使用。对nonos sdk开发,主要api:
包含头文件
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例程
}
npm install -g wscat #安装
wscat.cmd -l 8888 #本地建立服务并监听8888
wscat.cmd -c ws://192.168.8.216:8888 #连接到192.168.8.216,端口8888
ip.src==192.168.8.108 && http #指定IP源地址和协议