ESP8266 常见问题
本页面收集esp8266常见问题
概述
本文档主要介绍开发者在ESP8266开发中常见的一些问题。 这些问题主要包括以下几大类:
-
基本概念相关
-
ESP8266 相关
-
AiCloud 相关
-
固件编译调试相关
-
文档资料相关
以下是各分类的具体问题和解答。
基本概念相关
-
ESP8266是什么?
ESP8266 是高性能无线 SOC,在较小尺寸封装中集成了业界领先的 Tensilica L106 超低功耗 32 位微型 MCU,带有 16 位精简模式,主频支持 80 MHz 和 160 MHz,支持 RTOS,集成 Wi-Fi MAC/ BB/RF/PA/LNA,板载天线。支持标准的 IEEE802.11 b/g/n 协议,完整的 TCP/IP 协议栈。
-
ESP01, ESP02是什么?
ESP01~ESP14是由深圳安信可科技研发生产的ESP8266系列模组,在ESP8266芯片的基础上,完善了外围器件布局和优化天线。
-
AiCloud是什么?
AiCloud 是安信可提供给广大客户的免费服务器,数据全裸,UDP 传输,简单稳定,且含有诸多例程和 PC 端上位机调试工具。
-
乐鑫与安信可的关系
乐鑫是ESP8266的芯片厂商,安信可是依据ESP8266生产模组,并提供一系列开发方案的厂家。
-
ESP8266必须要借助服务器才能开发吗?
这个根据您的需求来定,若您只需要局域网就可以满足产品需求,那么无需服务器,同样可以使用ESP8266进行开发。
-
如何购买ESP8266模组和测试板?
安信可官方淘宝店铺:http://shop.ai-thinker.com/
-
我该选择哪个型号的ESP8266模组?
模组硬件之间的差异主要是封装区别,以及flash大小的区分,您可以查看ESP8266选型列表,若有疑问,可联系我们的销售人员。
-
我该选择AT开发还是SDK开发?
SDK方法:
优势:让系统成本最少 体积最小
劣势:新手需要一个礼拜到半个月的时间去熟悉代码的研读
AT方法:
优势:只需要知道几条AT指令即可用外部单片机实现网络通讯!开发速度快。
劣势:增加了外置CPU成本
您可以自已依此评估自己适合哪种方案
-
我该选择FreeRTOS还是NONOS?
因为FreeRTOS是后面才开放的,所以一般常用的是NONOS
若是您之前有开发过FreeRTOS,那么您可以直接使用FreeRTOS方案的SDK,且该方法有利于您之后使用ESP32系列
-
开发中,遇到问题如何寻求帮助?
若您是企业用户,我们会专门委派一名工程师负责贵司的对接;
若您是个人用户,您可以在论坛发帖,或发邮件到support@aithinker.com,我们也会有专门的工程师去处理。
ESP8266 相关
* 为什么透传会丢包?
因为没有设置硬件流控。如果需要避免丢包,请设置硬件流控。透传功能使用的是TCP协议,每包数据是1460(取决于协议栈),只要网络良好,buffer空间没有被消耗完,就可以不停地传输数据。对于透传。串口接收的数据间隔超过20ms,就会认为 接受结束,将已经接受的数据传输至网络。如果网络不好,就可能会丢失一些数据,因此,为了避免这种情况,可以将串口设置为流控模式。
* ESP8266可以同时使用AP+STA吗?
ESP8266 可以同时使用AP+STA模式(但不能做WiFi放大器)。
* ESP8266可以进行低功耗吗?
ESP8266可以进行低功耗。AT指令进行低功耗说明:
设置睡眠模式,sleep只在单STA模式下生效,默认工作在modem-sleep模式。 AT+SLEEP=0 0为禁止休眠模式 1为light-sleep模式 功耗0.9mA 2为modem-sleep模式 功耗15mA
* 将建立的TCP Server 连接通过AT 指令保存到flash?
* 如何让ESP8266上电后快速连接AP?
外设
*SDIO 是否支持 SD 卡?
ESP8266 是 SDIO Slave ,不支持 SD 卡。
*ESP8266 有几个 UART?
ESP8266 有两个 UART,其中 UARTO 有 TX、RX,可做数据传输;UART1 由于 RX 脚被 SPI-Flash 占用,只能使用 TX,可以做串口调试信息打印。
*GPIO 可以直接连 5V 吗?
不可以。GPIO 只能承受 3.6V。需要通过降压电路,否则会造成 GPIO 损坏。
硬件
*ESP8266 电压电流需求?
ESP8266 的数字部分的电压范围是 1.8V ~ 3.3V,模拟部分的工作电压是 3.0V ~ 3.6V,最低 2.7V。
模拟电源峰值 350 mA,数字电源峰值 200 mA。
注意:
选择的 SPI Flash 工作电压也需要与 GPIO 的电压匹配。CHIP_EN 还是工作在 3.0 - 3.6V,使用1.8V GPIO 控制时需要注意电平转换。
*设计 ESP8266 的供电时,需要注意哪些问题?
请注意如下几点:1.
如果是使用 LDO 变压,请确保输入电压和输出电压要足够大。2.
电源轨去耦电容器必须接近 ESP8266 摆放,等效电阻要足够低。3.
ESP8266 不能直连 5V 电压。4.
如果是通过 DC-DC 给 ESP8266 供电,必要时要加上 LC 滤波电路。
*ESP8266 上电时电流很大,是什么原因?
ESP8266 的 RF 和数字电路具有极高的集成度。上电后,RF 自校准会需要大电流。模拟部分电路最大的极限电路可能达到 500 mA;数字电路部分最大电流 达到 200 mA。一般的操作,平均电流在 100 mA 左右。因此,ESP8266 需要供电能达到 500 mA,能够保证不会有瞬间压降。
*可以使用锂电池或者 2 节 AA 纽扣电池直接给 ESP8266 供电吗?
2 节 AA 纽扣电池可以给 ESP8266 供电。锂电池放电时压降比较大,不适合直接给 ESP8266 供电。ESP8266 的 RF 电路会受温度及电压浮动影响。不推荐不加任何校准的电源直接给 ESP8266 供电。推荐
使用 DC-DC 或者 LDO 给 ESP8266 供电。
*ESP8266 的 RAM 的使用结构是怎么的?
ESP8266 的 RAM 总共 160 KB。
IRAM
空间为 64 KB: 前 32 KB 用作 IRAM,用来存放没有加 ICACHE_FLASH_ATTR 的代码,即 .text 段,会通过 ROM code 或二级 boot 从 SPI Flash 中的 BIN 中加载到 IRAM。 后 32 KB 被映射作为 iCache,放在 SPI Flash 中的,加了 ICACHE_FLASH_ATTR 的代码会被从 SPI Flash 自动动态加载到 iCache。
DRAM
空间为 96 KB: 对于 Non-OS_SDK,前 80 KB 用来存放 .data/.bss/.rodata/heap,heap 区的大小取决于 .data/.bss/.rodata 的大小;还有 16 KB 给 ROM code 使用。 对于 RTOS_SDK,96 KB 用来存放 .data/.bss/.rodata/heap,heap 区的大小取决于 .data/.bss/.rodata 的大小。
WiFi相关
*路由配置是正确的,但是发生找不到路由,连接失败,为什么?
如果 SSID 和密码配置是正确的,可能的原因有 2 个。
1.
推荐使用英文字符,不要使用中文。
2.
需要注意 bssid_set 的设置,如果不需要指定路由的 MAC 地址,那么需配置 stationConf.bssid_set = 0。
* ESP8266 SoftAP + Station 模式下网络断开或丢包的情况?
虽然 ESP8266 支持 SoftAP + Station 共存模式,但是 ESP8266 实际只有一个硬件信道。因此在 SoftAP + Station 模式时,ESP8266 SoftAP 会动态调整信道值与 ESP8266 Station 一致。这个限制会导致 ESP8266 SoftAP + Station 模式时一些行为上的不便,用户请注意。例如:
情况一
如果 ESP8266 Station 连接到一个路由 (假设路由信道号为 6); 通过接口 wifi_softap_set_config 设置 ESP8266 SoftAP; 若设置值合法有效,该 API 将返回 true ,但信道号仍然会自动调节成与 ESP8266 Station 接口一致,在这个例子里也就是信道号为 6。
情况二
调用接口 wifi_softap_set_config 设置 ESP8266 SoftAP (例如信道号为 5); 其他 Station 连接到 ESP8266 SoftAP; 将 ESP8266 Station 连接到路由( 假设路由信道号为 6) ; ESP8266 SoftAP 将自动调整信道号与 ESP8266 Station 一致(信道 6); 由于信道改变,之前连接到 ESP8266 SoftAP 的 Station 的 Wi-Fi 连接断开。
情况三
其他 Station 与 ESP8266 SoftAP 建立连接; 如果 ESP8266 Station 一直尝试扫描或连接某路由,可能导致 ESP8266 SoftAP 端的连接断开,或者 UDP 丢包,ping 丢包等情况。因为 ESP8266 Station 会遍历各个信道查找目标路由,意味着 ESP8266 其实在不停切换信道,ESP8266 SoftAP 的信道也因此在不停更改。这可能导致 ESP8266 SoftAP 端的原有连接断开,或者 UDP 丢包,ping 丢包等情况。
这种情况,用户可以通过设置定时器,超时后调用 wifi_station_disconnect 停止 ESP8266 Station 不断连接路由的尝试;或者在初始配置时,调用 wifi_station_set_reconnect_policy 和 wifi_station_set_auto_connect 禁止 ESP8266 Station 尝试重连路由。
*Wi-Fi 信道是什么?可以自行选择信道吗?
信道指的是 Wi-Fi 使用的指定频段中特定频率的波段。不同国家地区使用的信道数目是不同的。您可以参考ESP8266 Wi-Fi 信道选择指南。
应用
*为什么云端升级需要2个 “bin” 文件?“user1.bin” 和 “user2.bin” 有什么区别?
user1.bin 和 user2.bin 是 2 个不同的 BIN 文件。生成 user1.bin 和 user2.bin 时,必须使用相同的 Flash 和 boot 设置,以保证 OTA 升级成功。2个 BIN 文件是互补的,运行 user1.bin 的时候,升级是下载 user2.bin;运行 user2.bin 的时候,升级是下载 user1.bin。这样可以保证升级过程中,如果有掉线的情况发生,设备还是可以正常运行。
固件编译调试相关
* 导入工程注意事项
工程文件的导入的注意不要有空格和中文字符,例如:C:UsersAdministratorDesktopsdkesp_iot_sdk_v1.3.0
* esp8266模组LED灯为什么上电闪一下就灭了?
a,
因为esp8266模组的LED接在GPIO2,而此IO与UART1_TX共用,此时模组上电会输出一下打印信息,所以LED会闪直到打印信息输出完毕,LED就灭了。
b,
若想查看启动信息的内容,请选择串口调试助手74880的波特率,硬件上把rst拉低再拉高,可以查看启动信息。
c,
若想通过串口调试助手发送AT指令,请切换波特率到115200,即可。
* ESP8266启动信息说明?
* 模组发送AT指令无响应?
a,请选择74880的波特率,看下启动日志,把RST复位引脚拉低再拉高,可使用安信可串口调试助手
进行查看,aithinker_serial_tool_v1.2.3.7z
b,是否进入flash启动模式,GPIO15下拉,GPIO0,GPIO2上拉?
c,是否烧录了固件?烧录配置flash size大小是否跟WiFi模组的flash一致?
* 如何屏蔽上电打印?
U0TXD默认上电有系统打印,对此敏感应用可通过UART的内部引脚交换功能,在初始化的时候,调用system_uart_swap函数。将 U0TXD、U0RXD 分别于U0RTS(MTDO/GPIO15)、U0CTS (MTCK/GPIO13)交换来屏蔽该上电的系统打印。 交换后,硬件上的下载管脚还是使用U0TXD + U0RXD,通信时需要将MTDO对应接到MCU的RXD,MTCK对应加到MCU的TXD。
* 使用UART1打印日志,如何配置?
UART1只有TX功能,可以在UART0用于通讯时做打印log用。 参考代码如下:
void ICACHE_FLASH_ATTR uart_init_new(void) { // Wait for FIFOs to be emptied UART_WaitTxFifoEmpty(UART0); UART_WaitTxFifoEmpty(UART1); // Configure UART settings UART_ConfigTypeDef uart_config; uart_config.baud_rate = BIT_RATE_74880; uart_config.data_bits = UART_WordLength_8b; uart_config.parity = USART_Parity_None; uart_config.stop_bits = USART_StopBits_1 uart_config.flow_ctrl = USART_HardwareFlowControl_None; uart_config.UART_RxFlowThresh = 120; uart_config.UART_InverseMask = UART_None_Inverse; UART_ParamConfig(UART0, &uart_config); UART_IntrConfTypeDef uart_intr; uart_intr.UART_IntrEnMask = UART_RXFIFO_TOUT_INT_ENA | UART_FRM_ERR_INT_ENA | UART_RXFIFO_FULL_INT_ENA; uart_intr.UART_RX_FifoFullIntrThresh = 100; uart_intr.UART_RX_TimeOutIntrThresh = 2; uart_intr.UART_TX_FifoEmptyIntrThresh = 20; UART_IntrConfig(UART0, &uart_intr); // Set UART1 for printing UART_SetPrintPort(UART1); // Register interrupt handler UART_intr_handler_register(uart0_rx_intr_handler); ETS_UART_INTR_ENABLE(); }
* 上电为什么输出乱码?
上电输出乱码是正常的,因为外部晶振选择是26M,请选择74880的波特率,按下复位键或把RST引脚拉低再拉高
,可以看到启动信息。可使用安信可串口调试助手
进行查看,aithinker_serial_tool_v1.2.3.7z
* 为什么编译sdk的时候会发生irom0_0_seg
错误?