[WIFI模块]

ESP8266 wifi模块开发汇总

[复制链接]
21668|5
手机看帖
扫描二维码
随时随地手机跟帖
18529092183|  楼主 | 2018-11-10 10:27 | 显示全部楼层 |阅读模式
  ESP8266 wifi模块开发汇总
  • 基本概念相关
  • 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芯片的基础上,完善了外围器件布局和优化天线。
  • 我该选择AT开发还是SDK开发?
    SDK方法:
    优势:让系统成本最少 体积最小
    劣势:新手需要一个礼拜到半个月的时间去熟悉代码的研读
    AT方法:
    优势:只需要知道几条AT指令即可用外部单片机实现网络通讯!开发速度快。
    劣势:增加了外置CPU成本
  您可以自已依此评估自己适合哪种方案
  • 我该选择FreeRTOS还是NONOS?
  因为FreeRTOS是后面才开放的,所以一般常用的是NONOS
  若是您之前有开发过FreeRTOS,那么您可以直接使用FreeRTOS方案的SDK,且该方法有利于您之后使用ESP32系列
ESP8266 相关
* 为什么透传会丢包?
因为没有设置硬件流控。如果需要避免丢包,请设置硬件流控。透传功能使用的是TCP协议,每包数据是1460(取决于协议栈),只要网络良好,buffer空间没有被消耗完,就可以不停地传输数据。对于透传。串口接收的数据间隔超过20ms,就会认为 接受结束,将已经接受的数据传输至网络。如果网络不好,就可能会丢失一些数据,因此,为了避免这种情况,可以将串口设置为流控模式。
* ESP8266可以同时使用AP+STA吗?
ESP8266没有中继和放大功能,即不可以同时使用AP+STA。
* 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:\Users\Administrator\Desktop\sdk\esp_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错误?

相关帖子

cdklh1968| | 2019-6-14 12:09 | 显示全部楼层
好**

使用特权

评论回复
JLennon| | 2019-6-28 16:51 | 显示全部楼层
谢谢分享自己的经验

使用特权

评论回复
TT1000| | 2021-5-5 09:00 | 显示全部楼层
谢谢楼主分享的好资料

使用特权

评论回复
653949915| | 2021-9-19 16:24 | 显示全部楼层

谢谢楼主分享的好资料66666666666666666666

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

63

主题

95

帖子

1

粉丝