ESP8266 和 ESP32 对比及选型参考

长期以来ESP8266是一款广受欢迎的Wi-Fi模块,在很多项目中和产品中已经得到广泛使用了。Espressif的ESP32被称为ESP8266的新改进版本。那我们应该升级ESP32吗?

ESP8266概述

Espressif的ESP8266EX芯片广泛被用于ESP8266 wifi模块,它是一款具有完整的TCP/IP堆栈和单片机功能的芯片,内置一个泰思立达(Tensilica)L106 32-bit RISC处理器(80MHz),最大时钟速度为160mhz,同时内置了iBus、dBus和AHB接口。可以使用高达16MB的外部SPI闪存。ESP8266EX支持14个无线信道和2.4GHz的接收器和发射器。在Wi-Fi(72.2mbps)方面,ESP8266EX实现了TCP/IP和完整的802.11 b/g/n WLAN MAC协议(2个虚拟Wi-Fi接口)。

ESP8266EX芯片在Mode -sleep、Light-sleep、Deep-sleep三种电源管理模式(第四种是active模式)中,无线和Wi-Fi将被禁用。芯片接口包括17个GPIO引脚,4个软件实现的PWM输出引脚,以及SDIO, SPI, HSPI, I2C, I2S, UART接口,ESP8266EX芯片还支持红外遥控接口和嵌入式模数转换器。

ESP32概述

ESP32芯片(包括:ESP32- d0wd、ESP32- d0wdq6、ESP32- d2wd、ESP32- s0wd)集成了Wi-Fi和双模式蓝牙。根据型号差异,ESP32包含一个或两个低功耗Xtensa®32位LX6微处理器(s),最大时钟速度240 MHz(通常是160 MHz)和Xtensa RAM / ROM,本地内存和JTAG接口。

与ESP8266EX不同,ESP32具有不同大小的嵌入式闪存,支持多个外部QSPI闪存和SRAM芯片(最多16MB)。ESP32的无线功能和ESP8266一样,但是增加了一个平衡和收发两用开关。与ESP8266EX芯片相比,另一个改进是ESP32嵌入了一个RTC时钟,实现了TCP/IP和完整的802.11 b/g/n Wi-Fi MAC协议(4个虚拟Wi-Fi接口),数据速率可达150mbps,支持旧蓝牙协议和低功耗蓝牙协议,但是在五种电源管理模式中将会禁用这些功能。

ESP32芯片具有34个GPIO引脚,且大部分GPIO都可以配置内部上拉或下拉电阻,可以与SDIO、UART等实现多路复用。ESP32还具有两个8位DAC通道和一个12位SAR ADC,支持来自18个通道的测量量。ESP32芯片除了SDIO、SPI、HSPI、I2C、I2S和UART接口外,还有霍尔传感器、10个电容感应GPIOs和一个以太网MAC接口。

应该升级吗?

总的来说,ESP32比ESP8266更加强大。总的来说,ESP32在以下几个方面具有优势:

  1. 功耗方面:ESP32的工作电流是5µA相比ESP8266的20µA功耗更低。
  2. 时钟速度方面:ESP32的时钟速度也比ESP8266快了两倍。
  3. 接口扩展方面:ESP32蓝牙和GPIO的引脚更多了,很以满足更多的连接。

升级后唯一缺点是软件支持。成本方面,尽管两者都属于低成本产品,但ESP32的成本是ESP8266的两倍。因此,如果你的项目依赖于已完全成熟且不再更新的软件,那么ESP32可能会不支持。如果你的现有设备工作正常,且你没有添加新功能的计划,那么升级是不值得的。反之,如果你的项目需要超低功耗或者需要更多GPIO,甚至是更强大的处理器和连接能力,那么升级到ESP32是值得的。

ESP32 不同版本性能测试

ESP32目前有两种版本的硬件,普通版和带4M psRAM版本,同时也有两个对应版本的固件。因为官方声明说psRAM的版本会对性能有一定影响,因此就做了一个测试,计算圆周率,看看两个版本的固件对性能会有多大影响。

测试条件

  • 使用相同版本号的最新esp32固件(esp32-20180708-v1.9.4-244-g106e5945.bin和esp32spiram-20180708-v1.9.4-244-g106e5945.bin)
  • 使用相同的ESP32硬件(带有4M psRAM)
  • 运行频率是240MHz
  • 使用相同方法计算圆周率

测试程序

使用下面程序分别计算100、1000、2000、5000、10000、100000位圆周率。这是在以前程序基础上修改了一下,将tick_us()改为了tick_ms(),因为计算10000位时超出了tick_us()最大范围。

import time

def pi(places=10):
  # 3 + 3*(1/24) + 3*(1/24)*(9/80) + 3*(1/24)*(9/80)*(25/168)
  # The numerators 1, 9, 25, ... are given by (2x + 1) ^ 2
  # The denominators 24, 80, 168 are given by (16x^2 -24x + 8)
  extra = 8
  one = 10 ** (places+extra)
  t, c, n, na, d, da = 3*one, 3*one, 1, 0, 0, 24

  while t > 1:
    n, na, d, da = n+na, na+8, d+da, da+32
    t = t * n // d
    c += t
  return c // (10 ** extra)

def pi_t(n=10):
    t1=time.ticks_ms()
    t=pi(n)
    t2=time.ticks_ms()
    print('elapsed: ', time.ticks_diff(t2,t1)/1000, 's')
    return t

测试结果

位数 ESP32计算时间(s) ESP32 psRAM计算时间(s)
100 0.008 0.021
1000 0.276 0.636
2000 1.188 2.358
5000 7.682 13.94
10000 27.691 60.468
100000 —– 11659.97

从上面测试结果可以看出,带有psRAM的固件计算速度明显慢了不少,平均下来慢了一倍左右。看起来psRAM虽然好,但是对性能的影响的确非常大。

micropython.org.cn/bbs/forum.php?mod=viewthread&tid=1526
basemu.com/should-you-upgrade-from-esp8266-to-esp32.html



坐沙发

发表评论

你的邮件地址不会公开


*