ESP32芯片简直是玩转Arduino的性价比之王,为了摸清其特性,本文分别基于MicroPython与Arduino对ESP32进行计算性能测试。本文采用的硬件是NodeMCU-32S。

本文测试MicroPython不同版本固件的计算性能,并与Arduino类似的程序进行不严格的计算性能对比。

ESP32的MicroPython固件在官网:MicroPython - Python for microcontrollers​micropython.org

相关的ESP32的MicroPython固件有许多种:

1)esp32-idf3-20191220-v1.12.bin

2)esp32-idf4-20191220-v1.12.bin

3)esp32spiram-idf3-20191220-v1.12.bin

4)esp32spiram-idf4-20191220-v1.12.bin

官网说:前两种是不支持SPIRAM的,后两种支持SPIRAM。V3.x版本支持BLE, LAN and PPP,V4.x支持BLE, 不支持LAN and PPP。

为测试性能,任意生成128个随机数据,计算FFT。那么为什么只计算这么少的数据呢?没办法,MicroPython自身太耗内存了,把可用内存干光了,再大点就内存分配错误了!

作为对比,Arduino分别测试了128维、1024维、2048维的结果。

相关测试的计算时间对比如下:

其中MicroPython的FFT算法随意找的,代码如下,性能比较差。 Arduino使用的是arduinoFFT库。所以以上测试对于MicroPython稍有些不公平,但也能有一定的参考意义。

### FFT

def fft(x):

N = len(x)

if N <= 1: return x

even = fft(x[0::2])

odd = fft(x[1::2])

T= [exp(-2j*pi*k/N)*odd[k] for k in range(N//2)]

return [even[k] + T[k] for k in range(N//2)] + [even[k] - T[k] for k in range(N//2)]

### END FFT

测试结果表明:

(1)当前Arduino的计算性能是远超过MicroPython的,无论是内存的消耗还是计算速度上,Arduino都是碾压MicroPython。

(2)在计算FFT这一问题上,MicroPython的支持SPIRAM的固件比不支持SPIRAM的固件性能要更好,为什么会这样呢?我这个NodeMCU应该是不含有外置SPIRAM才对啊?不理解

下面继续对比测试,参考这里:MicroPython 性能测试数据​micropython.nxez.comhttps://github.com/shaoziyang/micropython_benchmarks/tree/master/1.9.4-479​github.com

我测试了PI,程序为:

import time

import machine

import gc

def pi(places=100):

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_test(n = 5000):

t1 = time.ticks_ms()

pi(n)

t2 = time.ticks_ms()

r = time.ticks_diff(t2, t1)/1000

print(' Pi', n, 'digit calculation: ', r, 's')

return '%.2f'%r

gc.collect()

try:

d1 = pi_test(1000)

d2 = pi_test(1000)

d3 = pi_test(1000)

r_pi_1000 = min(d1, d2, d3)

print('1000 digit Pi calculation result: ', r_pi_1000, 's')

#mem()

except:

r_pi_1000 = None

print(' calculation error')

print('\nCalcaulate Pi 5000 digit')

gc.collect()

try:

d1 = pi_test(5000)

d2 = pi_test(5000)

d3 = pi_test(5000)

r_pi_5000 = min(d1, d2, d3)

print('5000 digit Pi calculation result: ', r_pi_5000, 's')

except:

r_pi_5000 = None

print(' calculation error')

print('\nCalcaulate Pi 100,000 digit')

gc.collect()

try:

d1 = pi_test(100000)

d2 = pi_test(100000)

d3 = pi_test(100000)

r_pi_100000 = min(d1, d2, d3)

print('100000 digit Pi calculation result: ', r_pi_100000, 's')

except:

r_pi_100000 = None

print(' calculation error')

if r_pi_1000:

print(' 1000 digit Pi calculation result: ', r_pi_1000, 's')

if r_pi_5000:

print(' 5000 digit Pi calculation result: ', r_pi_5000, 's')

if r_pi_100000:

print(' 100000 digit Pi calculation result: ', r_pi_100000, 's')

分别计算了1000位、5000位和10000位,计算结果如下:

为了对比,列出参考网站的计算结果:

其中本文的测试中10000位的计算失败了,就不列出了。

我的计算结果中两个版本的计算差异没有参考网站的那么大,但是基本结论还是一致的:支持SPIRAM的固件比不支持SPIRAM的固件性能要更差一些了,只是差距没那么大了。

看来当前的固件应该是更新了(参考网站采用的是ESP32 Lobo),而且NodeMCU-32S采用的ESP32芯片(ESP-WROOM-32 )与参考网站(采用的是ESP32 WROVER)的肯定不一样了。

总结

由本文的测试可见,MicroPython的支持SPIRAM的固件比不支持SPIRAM的固件性能在某些测试中(如FFT)性能更强,但在某些程序(如算PI的程序)中,则要弱一些。二者的计算性能有可能会有一些偏差,你得针对具体问题具体选择。与本文的参考测试结果相比,当前支持SPIRAM的固件也没有过去版本中那么差了,甚至更强悍了。

当然,如果你对性能有特殊要求,换Arduino吧!MicroPython跟Arduino比,性能上绝对是小弟!

micropython arduino选哪个好_玩转GPIO之ESP32基于MicroPython与Arduino的计算性能测试相关推荐

  1. esp32找不到com端口_玩转GPIO之ESP32点灯大法(MicroPython版)

    在这篇文章,介绍了ESP32搭建Python开发环境的基本流程. myastrotong:玩转GPIO之ESP32搭建Python开发环境​zhuanlan.zhihu.com 搭建基本开发环境以后, ...

  2. wringPi 初始化GPIO 为上拉_玩转GPIO之PWM点亮呼吸灯(非树莓派)

    在这篇文章,我介绍了基于逸宸电子开发的总线适配器来点亮LED灯的基本方法! myastrotong:玩转GPIO之点灯(非树莓派)​zhuanlan.zhihu.com 这款总线适配器的介绍见这里: ...

  3. arduino使用oled代码_【教程】在ESP32上使用E32433T LoRa模块

    [点击上方「蓝字」关注我们,一起成为技术颜控!] 正文共:2020字11图 预计阅读时间:6分钟 (为方便阅读,已标注重点) ESP32简介 ESP-WROOM-32(ESP32)是乐鑫最新发布的新一 ...

  4. micropython教程nucleo-f767zi开发板_教你做CMSIS-DAP仿真器(基于Nucleo-F767ZI)

    为什么选这个板子,因为我就这个高性能.哈哈. 新建Keil工程把我所列的组件都选上. 首先我们用的FULL SPEED模式. 修改USB_Config_0.c配置,这里名字记得改,他识别名字和VID ...

  5. grafana计算不同时间的差值_大数据时代!如何基于Spark Streaming构建实时计算平台...

    随着互联网技术的迅速发展,用户对于数据处理的时效性.准确性与稳定性要求越来越高,如何构建一个稳定易用并提供齐备的监控与预警功能的实时计算平台也成了很多公司一个很大的挑战. 自2015年携程实时计算平台 ...

  6. arduino蓝牙通讯代码_「Arduino」OLED屏使用教程,显示内容听谁的?我不管,听我的...

    玩转Arduino小伙伴肯定都接触过OLED屏吧,不管是在Arduino还是树莓派中都起到浓墨重彩的一笔,会写编程的同学也可以变换更多的花样. 材料清单: Arduino驱动板 x 1 OLED模块 ...

  7. 云顶之弈天选战神劫阵容攻略,天选战神劫如何玩?

    云顶S4.5的新版本里角色劫由夜影羁绊改成了战神羁绊,所以在新版本里拿到天选战神劫的几率会比较大,那么云顶之弈手游天选战神劫怎么玩?今天小编为大家推荐天选战神劫的玩法攻略,希望对你有帮助. 推荐阵容: ...

  8. 视频会议软件和设备怎么选?显示终端_拾音

    疫情,越来越多的公司想通过线上视频会议处理公司的业务问题:但要实现视频会议的高效沟通协作,不仅要解决视频通讯的软件问题,也要解决显示画面和会议拾音等问题.horion视频会议提供从会议显示到音频,再到 ...

  9. Java 天选之子_ 巅峰体验 The Peak Experience

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Java 天选之子_ 巅峰体验 The Peak Experience 站在云端处的巅峰 Stand in the cccccloud ...

最新文章

  1. Android源代码获得方法
  2. (三)RocketMQ集群部署实践
  3. 山东理工OJ【2121】数据结构实验之链表六:有序链表的建立(插排法)
  4. js基本函数和基本方法
  5. 前端 常用css总结
  6. rdlc tablix_SQL Server中的报表–通过分组功能(由Tablix控件提供)处理数据
  7. 从零开始--系统深入学习IOS(使用Swift---带链接)
  8. 【Linux】mkdir命令
  9. jQuery对象与dom对象相互转换
  10. 抖音快闪PPT制作教程
  11. iShot——Mac上功能最全的截图、录屏创造工具
  12. doapk java环境_android手机QQ尾巴修改成QQ for Pad
  13. VS2013 VS2015应用程序无法正常启动0xc000007b。
  14. Delphi ArcEngine 创建梯度专题 Proportional
  15. xss.haozi.me通关记录
  16. 台式计算机关闭屏幕快捷键,多种电脑屏幕关闭方法推荐
  17. java ping域名
  18. Latex编写时会遇到在作者名字上字母上加一声,二声,三声、四声或两点等标志
  19. 会声会影2022测试新版本号V25.0.0.373
  20. [2019HDU多校第四场][HDU 6617][D. Enveloping Convex]

热门文章

  1. 图数据库Titan安装与部署
  2. HTML里面设置文本倒影,文字倒影怎么做
  3. vue 定时循环 setInterval
  4. python txt文件读写(追加、覆盖)
  5. 视频中的运动特征--Learning Motion Patterns in Videos
  6. 【Dual-Path-RNN-Pytorch源码分析】AudioReader
  7. 物流信息管理系统MySQL设计,物流管理系统的SQL数据库设计(含代码)
  8. matlab里1stopt,请帮忙运行下1stopt 程序?(MATLAB没有解出结果)
  9. Centos7 Docker Compose部署mysql5.7
  10. Nginx配置跨域请求 Access-Control-Allow-Origin *