<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>ESP8266 :: 标签 :: yafeng 的博客</title><link>http://yafengabc.github.io/tags/esp8266/index.html</link><description/><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Sat, 19 Sep 2026 14:36:30 +0800</lastBuildDate><atom:link href="http://yafengabc.github.io/tags/esp8266/index.xml" rel="self" type="application/rss+xml"/><item><title>Arduino UNO ESP8266 ESP32 MicroBit IO操作速度对比记录</title><link>http://yafengabc.github.io/cnblogs/p11197001/index.html</link><pubDate>Tue, 16 Jul 2019 19:32:00 +0800</pubDate><guid>http://yafengabc.github.io/cnblogs/p11197001/index.html</guid><description>ESP8266 Arduino C编程&#10;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得到了如下结果：&#10;可以看到无论是loop内的，还是loop之间的间隔，都是接近的，都在3.25-3.7之间，速度比ESP8266慢几倍的水平（考虑到时序都是在loop内完成）&#10;下边是同样的代码ESP32得到的结果&#10;相比ESP8266，还是有很大进步的（综合估计得有10倍）&#10;下边是Micropython的：&#10;import machine pin13 = machine.Pin(13, machine.Pin.OUT) while True: pin13.value(1) pin13.value(0) pin13.value(1) pin13.value(0) 先上ESP32的：&#10;嗯，Arduino水平。&#10;再看ESP8266：</description></item><item><title>MicroPython入坑记(四)利用MQTT实现0编程远程控制（下）（用安卓手机）</title><link>http://yafengabc.github.io/cnblogs/p8685028/index.html</link><pubDate>Sun, 01 Apr 2018 01:02:00 +0800</pubDate><guid>http://yafengabc.github.io/cnblogs/p8685028/index.html</guid><description>先介绍下这个APP（ioT MQTT Panel）怎么用：&#10;安装我就不怎么说了，安装完打开软件是这个样子的：&#10;提示没有连接，点那个红色按钮创建一个连接：&#10;前两项都是随便填的，值得注意的的是那个Broker Web/IP Address，这个最好自己架个服务器，而不是用我填的这个测试用服务器，当然这里做个例子，先用这个凑数了，填完后点那个CREATE：&#10;可以看到名为”测试连接“的项目建成了。然后点近去：&#10;这理解释下：Topic可以理解为一个通道，比如开关，按下后会往ledctl这个通道里发ledon这个信息，再按一下会往ledctl通道里发ledoff这个信息，最终界面如下：&#10;下面，我们在MicroPython里边编写一点程序，用来接收这个界面发出的消息：&#10;首先，下载micropython的MQTT库：&#10;https://github.com/micropython/micropython-lib&#10;下找到：umqtt.simple&#10;这个目录下有几个例子，以及一个umqtt的目录(里边的simple.py就是库了)</description></item><item><title>MicroPython入坑记（三）板子上的Python到底有多快？</title><link>http://yafengabc.github.io/cnblogs/p8681713/index.html</link><pubDate>Sat, 31 Mar 2018 12:26:00 +0800</pubDate><guid>http://yafengabc.github.io/cnblogs/p8681713/index.html</guid><description>前几篇都是直接在命令上操作，然而执行py文件才是王道，其实类似nodemcu的lua固件，MicroPython也提供了一个简单的文件系统用来存代码。并自动在开机时执行：&#10;boot.py&#10;main,py&#10;两个文件&#10;windows用户的话，推荐一个软件：uPyLoader界面如下&#10;可以看到，左边是本地的文件，右边是ESP8266的文件，两边可以互相传输，也可以删除上边的文件，其他功能自行探索，这个软件自带了一个编辑器，不过很弱。&#10;还是推荐用vim或者vscode来写代码，然后用这个软件把代码传进去。&#10;测试代码么，先来个循环：&#10;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下，结果是：&#10;=== with open("test_loop.py") as f: === exec(f.read(), globals()) === 4715 4695 4742 4698 4697 &gt;&gt;&gt; 脚本确实不快，100次循环足足用了4.5ms，即使把速度调成160MHZ，也就2.5ms左右也就一次循环25us左右，而ESP32下速度就很赞了：&#10;paste mode; Ctrl-C to cancel, Ctrl-D to finish === with open("test_loop.py") as f: === exec(f.read(), globals()) === 346 262 274 267 278 &gt;&gt;&gt; 10多倍的提速2us-3us循环一次，甚至可以写dht11那样的时序驱动了。esp8266就没办法了吗？当然有!&#10;MicroPython官方文档上专门有篇代码提速的文章，其中提到了可以用装饰器micropython.native micropython.viper来给代码打鸡血（编译成机器码）&#10;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>http://yafengabc.github.io/cnblogs/p8681380/index.html</link><pubDate>Sat, 31 Mar 2018 11:13:00 +0800</pubDate><guid>http://yafengabc.github.io/cnblogs/p8681380/index.html</guid><description>先来个刷写过程：&#10;其实各种刷ESP8266/ESP32的软件都可以搞（比如刷NodeMCU的软件），不过我这还是出问题了：刷完后无限输出乱码。然后参照Micropython官方的教程，用esptool先清除所有的FLASH，然后重新刷入，正常运行：&#10;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&#10;import machine&#10;dir(esp)&#10;[’__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’]&#10;dir(machine)&#10;[’__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>http://yafengabc.github.io/cnblogs/p8680938/index.html</link><pubDate>Sat, 31 Mar 2018 08:55:00 +0800</pubDate><guid>http://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的吐槽开始：&#10;1.没有高层次的封装，缺少轮子，虽然有cjson，socket等可用，然而没有httpclient之类更高层次的封装，搞个rest 请求还得自己写http头，虽然也不麻烦，然而用惯了urllib的python用户自然不是很爽。lua本身是作为C的嵌语言设计的，所以基本库太有限，虽然网上配合lua的C库众多，然而想搞进nodemcu的固件里，我这半吊子水平还是有难度的，一句话就是nodemcu提供的功能，可以很好的搞，没提供的功能干瞪眼。&#10;2.一些语法上的吐槽，比如默认全局变量，局部变量要加local之类的，年代久远，记不清了总之用惯了python习惯了优雅的设计，就不习惯丑陋了（引战了引战了）&#10;3.固件开发不活跃，现在github上的代码基本都是几年前的了，虽然最新的2.1.0发布于2017年8月，看看changelog，其实就是一个18B20驱动的重写，没有什么大改进。这也是国人类似项目的一贯作风：为了卖板子然后找个大神移植下固件，然后能把东西卖出去就OK了，至于固件的演进，看大神的的心情了……&#10;4.nodemcu只能用在esp8266上，当然esp32也可以跑了，然而也就这样了，参照上边那条，开发不活跃啊，不像micropython或者espruino（一个跑在单片机的javascript固件），官方就支持好多的MCU&#10;所以后来有了Arduino for ESP8266，就用Arduino IDE耍去了，那个支持的MCU多(lll￢ω￢)，以前其实也知道有MicroPython，但大神说因为8266资源有限，被裁减的太厉害（其实当然完全不是那么回事）啥也干不了，不如等ESP32（然后我就真等ESP32了）。&#10;经过漫长的等待，ESP32的板子终于价格降到心理价位，然后果断入坑，当然是刷MicroPython了，然后为了对比，顺便把手上的8266也刷上了MicroPython固件，搞起来，先看可用内存：&#10;ESP8266：&#10;micropython.mem_info()&#10;stack: 2112 out of 8192&#10;GC: total: 35968, used: 9376, free: 26592&#10;No. of 1-blocks: 50, 2-blocks: 10, max blk sz: 264, max free sz: 1261&#10;嗯，8K的的栈，36K的堆确实小了些，然而……esp32也好不到哪儿去&#10;micropython.mem_info()&#10;stack: 736 out of 15360&#10;GC: total: 111168, used: 6864, free: 104304&#10;No. of 1-blocks: 26, 2-blocks: 8, max blk sz: 264, max free sz: 6402&#10;纳尼？说好的400+Kb的内存呢，怎么只有110K左右？（虽然比8266是好多了）&#10;经过探索gayhub上的代码，终于明白了原因：</description></item></channel></rss>