<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>ESP32 :: 标签 :: yafeng 的博客</title>
    <link>https://yafengabc.github.io/tags/esp32/index.html</link>
    <description></description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Sat, 19 Sep 2026 16:30:07 +0800</lastBuildDate>
    <atom:link href="https://yafengabc.github.io/tags/esp32/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Arduino UNO  ESP8266 ESP32 MicroBit IO操作速度对比记录</title>
      <link>https://yafengabc.github.io/cnblogs/p11197001/index.html</link>
      <pubDate>Tue, 16 Jul 2019 19:32:00 +0800</pubDate>
      <guid>https://yafengabc.github.io/cnblogs/p11197001/index.html</guid>
      <description>ESP8266 Arduino C编程&#xA;void setup(){ pinMode(13, OUTPUT); } void loop(){ digitalWrite(13,HIGH); digitalWrite(13,LOW); digitalWrite(13,HIGH); digitalWrite(13,LOW); } 可以看到，相邻的两次digitalWrite之间是958ns(纳秒)，而两次loop之间是6.6us(微秒)，速度还是很快的，而Arduino UNO得到了如下结果：&#xA;可以看到无论是loop内的，还是loop之间的间隔，都是接近的，都在3.25-3.7之间，速度比ESP8266慢几倍的水平（考虑到时序都是在loop内完成）&#xA;下边是同样的代码ESP32得到的结果&#xA;相比ESP8266，还是有很大进步的（综合估计得有10倍）&#xA;下边是Micropython的：&#xA;import machine pin13 = machine.Pin(13, machine.Pin.OUT) while True: pin13.value(1) pin13.value(0) pin13.value(1) pin13.value(0) 先上ESP32的：&#xA;嗯，Arduino水平。&#xA;再看ESP8266：</description>
    </item>
    <item>
      <title>MicroPython入坑记（三）板子上的Python到底有多快？</title>
      <link>https://yafengabc.github.io/cnblogs/p8681713/index.html</link>
      <pubDate>Sat, 31 Mar 2018 12:26:00 +0800</pubDate>
      <guid>https://yafengabc.github.io/cnblogs/p8681713/index.html</guid>
      <description>前几篇都是直接在命令上操作，然而执行py文件才是王道，其实类似nodemcu的lua固件，MicroPython也提供了一个简单的文件系统用来存代码。并自动在开机时执行：&#xA;boot.py&#xA;main,py&#xA;两个文件&#xA;windows用户的话，推荐一个软件：uPyLoader界面如下&#xA;可以看到，左边是本地的文件，右边是ESP8266的文件，两边可以互相传输，也可以删除上边的文件，其他功能自行探索，这个软件自带了一个编辑器，不过很弱。&#xA;还是推荐用vim或者vscode来写代码，然后用这个软件把代码传进去。&#xA;测试代码么，先来个循环：&#xA;import time import micropython def loop1(): t1=t2=0 for i in range(5): t1=time.ticks_us() for i in range(100): pass t2=time.ticks_us() print(t2-t1) time.sleep(2) loop1() 默认工作在80MHZ下，结果是：&#xA;=== with open(&#34;test_loop.py&#34;) as f: === exec(f.read(), globals()) === 4715 4695 4742 4698 4697 &gt;&gt;&gt; 脚本确实不快，100次循环足足用了4.5ms，即使把速度调成160MHZ，也就2.5ms左右也就一次循环25us左右，而ESP32下速度就很赞了：&#xA;paste mode; Ctrl-C to cancel, Ctrl-D to finish === with open(&#34;test_loop.py&#34;) as f: === exec(f.read(), globals()) === 346 262 274 267 278 &gt;&gt;&gt; 10多倍的提速2us-3us循环一次，甚至可以写dht11那样的时序驱动了。esp8266就没办法了吗？当然有!&#xA;MicroPython官方文档上专门有篇代码提速的文章，其中提到了可以用装饰器micropython.native micropython.viper来给代码打鸡血（编译成机器码）&#xA;import time import micropython @micropython.native def loop1(): t1=t2=0 for i in range(5): t1=time.ticks_us() for i in range(100): pass t2=time.ticks_us() print(t2-t1) time.sleep(2) loop1() 加了个@micropython.native装饰器，速度立马鸡血：</description>
    </item>
    <item>
      <title>MicroPython入坑记（二）刷固件（ESP8266 ESP32）</title>
      <link>https://yafengabc.github.io/cnblogs/p8681380/index.html</link>
      <pubDate>Sat, 31 Mar 2018 11:13:00 +0800</pubDate>
      <guid>https://yafengabc.github.io/cnblogs/p8681380/index.html</guid>
      <description>先来个刷写过程：&#xA;其实各种刷ESP8266/ESP32的软件都可以搞（比如刷NodeMCU的软件），不过我这还是出问题了：刷完后无限输出乱码。然后参照Micropython官方的教程，用esptool先清除所有的FLASH，然后重新刷入，正常运行：&#xA;pip install esptool 安装esptool（当然，电脑上要先装好python） esptool.py --port /dev/ttyUSB0 erase_flash 擦除所有的flash，如果是windows系统，则改为具体的COM口，比如我的电脑是COM4： esptool.py --port COM4 erase_flash刷入固件这个命令比较长，可以不熟悉命令行的可以用其他GUI软件代替： esptool.py --port COM4 --baud 460800 write_flash --flash_size=detect 0 esp8266.bin（这个改为具体固件文件名） 刷完后，用putty连接板子会出现以下界面（如果没有显示就先按一下RST键）： 现在就可以执行Python代码了，支持命令补全哦列出所有的模块：继续探索：在ESP8266上，跟板子相关的代码主要在esp machine两个模块上： import esp&#xA;import machine&#xA;dir(esp)&#xA;[’__class__’, ‘__name__’, ‘SLEEP_LIGHT’, ‘SLEEP_MODEM’, ‘SLEEP_NONE’, ‘apa102_write’, ‘check_fw’, ‘deepsleep’, ‘dht_readinto’, ’esf_free_bufs’, ‘flash_erase’, ‘flash_id’, ‘flash_read’, ‘flash_size’, ‘flash_user_start’, ‘flash_write’, ‘free’, ‘freemem’, ‘info’, ‘malloc’, ‘meminfo’, ’neopixel_write’, ‘osdebug’, ‘set_native_code_location’, ‘sleep_type’]&#xA;dir(machine)&#xA;[’__class__’, ‘__name__’, ‘ADC’, ‘DEEPSLEEP’, ‘DEEPSLEEP_RESET’, ‘HARD_RESET’, ‘I2C’, ‘PWM’, ‘PWRON_RESET’, ‘Pin’, ‘RTC’, ‘SOFT_RESET’, ‘SPI’, ‘Signal’, ‘Timer’, ‘UART’, ‘WDT’, ‘WDT_RESET’, ‘deepsleep’, ‘disable_irq’, ’enable_irq’, ‘freq’, ‘idle’, ‘mem16’, ‘mem32’, ‘mem8’, ‘reset’, ‘reset_cause’, ‘sleep’, ’time_pulse_us’, ‘unique_id’]</description>
    </item>
    <item>
      <title>MicroPython入坑记（一）（ESP8266 ESP32）</title>
      <link>https://yafengabc.github.io/cnblogs/p8680938/index.html</link>
      <pubDate>Sat, 31 Mar 2018 08:55:00 +0800</pubDate>
      <guid>https://yafengabc.github.io/cnblogs/p8680938/index.html</guid>
      <description>手上有块基于ESP8266的NodeMCU板子，没错，就是那个10块钱的带WIFI的芯片，当时感觉又便宜又又有wifi，并且可以用脚本lua写代码，果断买买买，然后玩了一下WIFI跟树莓派通讯（树莓派开Http Server，然后用lua通过socket模拟http指令定期获取树莓派的指令）。控制了个继电器加灯泡玩了玩，手头上的dht11也能直接读出来（nodemcu内置驱动了），然后就没有然后了，感觉lua不是我的菜，用惯了python，写lua还是十分别扭的.嗯对lua的吐槽开始：&#xA;1.没有高层次的封装，缺少轮子，虽然有cjson，socket等可用，然而没有httpclient之类更高层次的封装，搞个rest 请求还得自己写http头，虽然也不麻烦，然而用惯了urllib的python用户自然不是很爽。lua本身是作为C的嵌语言设计的，所以基本库太有限，虽然网上配合lua的C库众多，然而想搞进nodemcu的固件里，我这半吊子水平还是有难度的，一句话就是nodemcu提供的功能，可以很好的搞，没提供的功能干瞪眼。&#xA;2.一些语法上的吐槽，比如默认全局变量，局部变量要加local之类的，年代久远，记不清了总之用惯了python习惯了优雅的设计，就不习惯丑陋了（引战了引战了）&#xA;3.固件开发不活跃，现在github上的代码基本都是几年前的了，虽然最新的2.1.0发布于2017年8月，看看changelog，其实就是一个18B20驱动的重写，没有什么大改进。这也是国人类似项目的一贯作风：为了卖板子然后找个大神移植下固件，然后能把东西卖出去就OK了，至于固件的演进，看大神的的心情了……&#xA;4.nodemcu只能用在esp8266上，当然esp32也可以跑了，然而也就这样了，参照上边那条，开发不活跃啊，不像micropython或者espruino（一个跑在单片机的javascript固件），官方就支持好多的MCU&#xA;所以后来有了Arduino for ESP8266，就用Arduino IDE耍去了，那个支持的MCU多(lll￢ω￢)，以前其实也知道有MicroPython，但大神说因为8266资源有限，被裁减的太厉害（其实当然完全不是那么回事）啥也干不了，不如等ESP32（然后我就真等ESP32了）。&#xA;经过漫长的等待，ESP32的板子终于价格降到心理价位，然后果断入坑，当然是刷MicroPython了，然后为了对比，顺便把手上的8266也刷上了MicroPython固件，搞起来，先看可用内存：&#xA;ESP8266：&#xA;micropython.mem_info()&#xA;stack: 2112 out of 8192&#xA;GC: total: 35968, used: 9376, free: 26592&#xA;No. of 1-blocks: 50, 2-blocks: 10, max blk sz: 264, max free sz: 1261&#xA;嗯，8K的的栈，36K的堆确实小了些，然而……esp32也好不到哪儿去&#xA;micropython.mem_info()&#xA;stack: 736 out of 15360&#xA;GC: total: 111168, used: 6864, free: 104304&#xA;No. of 1-blocks: 26, 2-blocks: 8, max blk sz: 264, max free sz: 6402&#xA;纳尼？说好的400+Kb的内存呢，怎么只有110K左右？（虽然比8266是好多了）&#xA;经过探索gayhub上的代码，终于明白了原因：</description>
    </item>
  </channel>
</rss>