飞道的博客

【置顶持续更新】不用再翻了,您要找的关于乐鑫 ESP8266/32的所有疑问杂症,和常见FAQ问题,都整理在这里了;

357人阅读  评论(0)

文章目录

前言

作为一个 esp8266 开发老司机的我,做过很多 esp8266的项目,比较商业化的有接入 阿里智能生活平台、天猫精灵linkkitapp、苏宁智能平台以及京东微联智能平台,以及做过一些 小项目esp8266 驱动红外线、七彩灯以及一些数码管,个人觉得,对esp8266 开发颇有一番见解。

在学习这款芯片期间,我在CSDN 点击访问 发表了许多文章,一开始是抱着做笔记的态度写的!没想到可以帮助到这么多人入门学习这个物美价廉的芯片!现在访问量也快50w了,感到欣慰!因此,我特意创建了QQ交流群 点击加群434878850,目的在于有气氛地讨论这个芯片以及物联网嵌入式开发的技术,希望大家多多支持我!不加群也没事,有什么技术问题在我的博客下面留言,我第一时间看到就回复您!

这个文档系列是个开发乐鑫esp8266的常见问题汇总,收集本人开发常见的问题以及群里群友最最最常见的问题!我对此的要求是要比乐鑫的官网的文档更详尽!更符合国人的水准!

本文档系列建议大家在PC端查阅,有目录点击跳转,效率更佳!

再次感谢大家的支持,让我们共勉开源技术!

某不知名博主:半颗心脏

一 各种云生态对接教程

一、群内福利汇总:

1.1 Mqtt服务器免费连接。

    感谢群友@山东-wing 提供的Mqtt服务器(支持设备端连接,也支持微信小程序连接):具体连接信息在群公告有!

1.2 微信小程序连接Mqtt服务器的示范代码。

    持续更新: https://github.com/xuhongv/WeChatEsp8266Lib

二 、ESP8266 常见问题汇总

2.1 环境搭建以及烧录相关问题。

2.1.1 乐鑫官网环境搭建文档在哪?和网上的安信可一体化环境有何差别?

    客官,乐鑫的全部文档我是找到了传送门:https://www.espressif.com/zh-hans/support/download/documents ,但是具体的哪一个文档我就忘了!在优酷视频有一个是 2016年乐鑫官网上传的视频很小!总的来说就是建议 linux环境下开发,但是作为一个老司机,我一直用 window10开发,一直很顺畅没遇到任何环境问题!

    esp8266的是cmake编译,在windows需要 cywin 环境,但是我们如果单独去官网装cywin环境的话,那么你不止一两个小时就可以搞掂了!因为安信可的一体化环境就是用的这个 cywin+eclipse来跨平台的工具,所以一直很受大家欢迎!所以,安信可一体化环境是针对windows平台的,但是据我所知,都是很久没有更新了!

    因此,我推荐大家用最新版的eclipse+安信可提供的cywin+乐鑫提供的工具编译链 构造我们的环境,这个是最好的跨平台的环境了!

eclipes for c/c++ 2019版本:https://pan.baidu.com/s/1Eqg0nu_fHSIVTwiFvLLijA 提取码:fqt7
cywin win7/10:链接:https://pan.baidu.com/s/189N2t2OCBMuhTV2Mz4URHw 提取码:wmpn

2.1.2 rtos sdk 和 nonos sdk开发有何差别?

    Non-OS SDK:主要使⽤用定时器 和回调函数的⽅方式实现各个功能事件的嵌套,达到特定条件下触发特定功能函数的⽬目的。Non-OS SDK 使⽤用 espconn 接⼝口实现⽹网络操作,⽤用户需要按照 espconn 接⼝口的使⽤用规则进⾏行行软件开发。

RTOS SDK

  1. RTOS 版本 SDK 使⽤用 freeRTOS 系统,引⼊ OS 多任务处理理的机制,⽤用户可以使⽤用 freeRTOS 的标准接⼝实现资源管理理、循环操作、任务内延时、任务间信息传递和同步等⾯面向任务流程的设计⽅方式。具体接口使⽤用⽅方法参考 freeRTOS 官⽅网站的使⽤说明;
  2. RTOS 版本 SDK 的⽹网络操作接口是标准 lwIP API,同时提供了了 BSD Socket API 接⼝口的封装实现,⽤用户可以直接按照 socket API 的使⽤用⽅方式来开发软件应⽤用,也可以直接编译运⾏行行其他平台的标准 Socket 应⽤用,有效降低平台切换的学习成本。
  3. RTOS 版本兼容 Non-OS SDK 中的 Wi-Fi 接⼝、SmartConfig 接口、Sniffer 相关接口、系统接⼝、定时器 接⼝、FOTA 接⼝和外围驱动接口,不支持 AT 实现。
2.1.3 如何下载固件?下载固件的地址如何定义和选择?

    esp8266运行的构成你得明白,它是: 乐鑫esp8266ex芯片 + 一个flash高速芯片 + 晶振 !所以esp8266ex芯片是从flash高速芯片获取代码并且运行的,所以我们就有了烧录时候的每个固件地址的选择!

    而esp8266ex芯片加载其主程序运行有2种方式,第一种是从固定的地址开始读(我们称为非 OTA 方式),第二种就是从二选一的一个地址读取,我们称之为 ota 方式!

    针对2.0版本所有自己编译出来的工程,都是有四个文件要烧录的,其中2个是必须烧录的(防止初始化失败),这2个文件分别是 esp_init_data_default.bin 和 blank.bin;

    针对3.0版本,后面我会补充,他的下载方式是完全不一样的!

2.1.4 编辑器提示找不到头文件或者某些变量咋办?

    提出这个问题,说明你是新手,对编译过程不懂。 编辑器只是辅导代码开发,提高代码开发速度,提示错误与否与编译没直接关系。只要可以编译通过即可! eclipse看console为主,而 vscode看终端输出即可!

2.1.5 烧录固件应该在硬件设计注意什么?

    首先供电电压在3.3v,500ma左右,不能太低,否则启动不起来!

    其次,注意 gpio15 gpio0 和gpio2的电平,烧录模式应该是gpio15拉低 gpio0拉低 和gpio2拉高,但是有些厂商的模块里面的gpio2是拉高的,所以我们在买模块设计电路的时候,也不用自己拉高。但是为了保险起见,我建议电路设计烧录时候上gpio15拉低 gpio0拉低 和gpio2拉高!而正常启动应该是:gpio15拉低 gpio0拉高 和gpio2拉高!

2.1.6 在ubuntu上编译好了8266-rtos-3.1 的程序 ,怎么用flash下载器烧写进8266里面。

    我都知道 8266-rtos-3.1 的时候,是通过 make flash 来下载程序的,但是它究竟在进行啥操作呢?我们直接先敲 make ,看看控制台出现什么内容?

    很神奇的是,我们从下面可以看到有一堆的 py指令,我们可以从里面看到一些 bin 文件烧录配置,于是乎,我们如果想修改端口,直接 copy这指令修改端口再执行这个指令;或者用flash下载器烧写进8266里面!

    或者你这样 make flash ESPPORT=COMxx 这样就指定了端口了;

2.1.7 windows平台使用 MINGW32 克隆 后,提示 克隆成功,但是文件夹下面没任何文件?

    这个可能是你的 windows 平台的环境变量导致的,点击 电脑----属性,查看环境变量,是否存在 这个 home 变量,如果有,请打开其对应路径,然后发现是不是刚刚克隆的玩意就在这里面?
找到了罪魁祸首,把这个变量删除了,重启电脑,重新克隆吧!

2.2 运行的机制相关问题。

2.2.1 请教,如何写 软件 看门狗,设备死机的处理问题。

    不管在新版或在旧版SDK中,设备死机无响应都会触发看门狗,无响应就连代码都不会跑怎么可能可以复位,但是里面有个看门狗复位事件可以设置,这个在 rtos3.0 可以设置,在 menuconfig中设置;

2.2.1 请教,rtos3.0 如何获取芯片的全部信息。
    //获取IDF版本
    printf("     SDK version:%s\n", esp_get_idf_version());
    //获取芯片可用内存
    printf("     esp_get_free_heap_size : %d  \n", esp_get_free_heap_size());
    //获取从未使用过的最小内存
    printf("     esp_get_minimum_free_heap_size : %d  \n", esp_get_minimum_free_heap_size());
    //获取芯片的内存分布,返回值具体见结构体 flash_size_map
    printf("     system_get_flash_size_map(): %d \n", system_get_flash_size_map());
    //获取mac地址(station模式)
    uint8_t mac[6];
    esp_read_mac(mac, ESP_MAC_WIFI_STA);
    printf("esp_read_mac(): %02x:%02x:%02x:%02x:%02x:%02x \n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);

2.3 wifi连接以及配网使用问题相关问题。

2.3.1 smartConfig配网和airkiss配网有啥不一样?如何实现二者同时配网?

    这个问题的根源是在于不懂配网的流程是怎么样的才会这样提问,其2者都是空中配网,其实原理是嗅探技术sniff实现的,esp8266来空中抓802.2 SNAP 数据包,然后根据双方的协议剖析数据包得到要连接的路由器账号和密码:具体的技术实现:https://blog.csdn.net/lb5761311/article/details/77945848 。

    说到这里,如何解决一个程序的配网模式既然支持官网的 smartConfig 又支持 airkiss 呢?只要在 配网开始时候,传进参数为 :SC_TYPE_ESPTOUCH_AIRKISS ;

    在 2.0 的sdk是调用 smartconfig_set_type() 方法 ,而 在 3.0 Rtos 的方法是 esp_smartconfig_set_type() 。

2.4 基本外设情况使用相关问题。

2.4.1 rots3.0版本的串口打印为什么在友善串口软件等串口调试工具会有部分乱码?

    其然,这个 乱码只是在我们的友善串口软件等串口调试工具解析不到而已,它原本是颜色代码的字符,如果你是用乐鑫自带的串口软件,或者我群里提供的 带颜色输出的软件,就没乱码了!

2.4.2 esp8266的串口有多少组?

    esp8266一共有2组串口,串口0组是我们最常见的使用的,我们下载固件就是用这组。而串口1组的rxd被flash通讯占用,意味着只能用 txd脚(对应gpio2)功能,所以一般的,我们用串口0通讯

2.4.3 esp8266的2.0版本(包括nonos和rtos)的按键驱动有么?

    好的客官,传送门在此: 传送门,还包含红外感应等驱动;

2.4.4 esp8266的3.0 esp-idf 版本的按键驱动有么?PWM平滑调光有吗?

    请访问:https://blog.csdn.net/xh870189248/article/details/96424650

2.4.5 esp8266的3.0 esp-idf 版本的如何实现 串口1打印日志,串口0 uart 通讯?

而且还要在代码加进:

uart_config_t uart_config = {
    .baud_rate = 9600, //串口0的通讯波特率
    .data_bits = UART_DATA_8_BITS,
    .parity = UART_PARITY_DISABLE,
    .stop_bits = UART_STOP_BITS_1,
    .flow_ctrl = UART_HW_FLOWCTRL_DISABLE};
uart_param_config(UART_NUM_0, &uart_config);
uart_driver_install(UART_NUM_0, BUF_SIZE * 2, 0, 0, NULL, 0);
ESP_LOGI(TAG, "TaskUart create");

uint8_t *data = (uint8_t *)malloc(BUF_SIZE);
int i = 0;
while (1)
{
    // Read data from the UART
    int len = uart_read_bytes(UART_NUM_0, data, BUF_SIZE, 20 / portTICK_RATE_MS);
    if (len == 0)
        continue;
}

串口0 发送:

 uart_write_bytes(UART_NUM_0, data, length); // 主动发送数组到串口

2.5 与服务器连接问题。

2.5.1 NONOS的MQTT例子为什么修改宏定义不起效?

这个问题我在2017年时候开始也是琢磨了好久,之后我反复看说明,其中有一个宏定义是什么加载配置。每次修改这个配置文件,都要必须改一下才起效。具体修改哪个宏定义,自己去我的博客看,文章最下面有这个说明!!
这个宏定义加一或者减一,那么此次修改才生效!切记!!!

2.5.2 微信小程序连接阿里云物联网平台收不到服务器的信息?

请确保连接服务器有没有正常!微信小程序订阅的主题是否合法已经在阿里云物联网后台设置?可以从阿里云物联网后台查看该设备消息管理查看是否下发成功!

tips:阿里云物联网平台连接的Mqtt的主题必须是要在阿里云物联网后台设置才可以拥有订阅和发布。

2.5.3 微信小程序连接MQTT不成功,提示域名不正确?虚拟机可以?真机不行?

我在 github 提供的链接url是:wxs://www.xuhong.com/mqtt 这样的格式,注意,务必是 wxs开头?为什么?阿里云文档不是说了说 wss 吗?其实这个 wxs 调用的是 微信小程序的 websocket 的api,然后 微信小程序的 websocket 调用 wss 接口,每一层都不能断开,即使说不能直接调用 wss ,没办法,谁叫我们在人家 微信客户端二次开发呢?

为什么加 /mqtt 这个表示走的是 mqtt 协议;不加也不能链接成功!
为什么在虚拟机或者调试模式下用 8084或者其他端口都可以,反而真机就不行,因为虚拟机和真机的环境不一样,走的底层不一样;真机一定要443端口,就是这个格式:wxs://www.xuhong.com/mqtt ,不要带端口号,已经默认是443了;

2.5.3 如何搭建自己搭建Mqtt服务器,实现微信小程序mqtt连接并且控制esp8266,有教程吗?

这个我早已经研究透了,请来我的b站直播历史:https://www.bilibili.com/video/av39598869

2.5.4 后台切换,微信小程序MQTT连接服务器经常断线,咋办?

参考我之前写的 博客,动起来做一个微信小程序Mqtt协议控制智能硬件的框架,为心里全栈工程师梦想浇水 https://blog.csdn.net/xh870189248/article/details/88718302


转载:https://blog.csdn.net/xh870189248/article/details/106546737
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场