超低功耗芯片ESP8266
快速入门指南中介绍了NodeMCU上的ESP8266芯片,这是一种超低功耗芯片,只利用太阳能就可以运行。
项目介绍
“菲莱”着陆器登陆彗星让我们深受启发,于是我们从前段时间开始开展低功耗的研发项目,其中假设我们只能利用太阳能对电池充电,在一定时间内进入睡眠状态,从而在某个事件中唤醒。
信息更新:目前已证实的一点是,这个项目通过只利用太阳能而持续了三天/夜,这听起来也许不算什么,但是别忘了,我们在用200mA的锂聚合物电池运行一个非常耗电的wifi模组,同时利用一个小型的0.5W 太阳能板发电。比较而言,如果不利用一些诀窍的话,锂聚合物电池经过一个小时后电量就会耗尽了。 我们应用的诀窍如下:
SparkFun ESP8266是一个很好的开发板,不过首先我们想让这个芯片也能用于NodeMCU,这样就可以不需要Arduino(TM) IDE,而直接使用LUA脚本语言为芯片编码。此外,我们还使用LUA脚本语言控制芯片的休眠模式(关闭不使用的组件),将其唤醒运行任务(像不像在现实生活中)。通过这种方式,我们可以只利用太阳能,而不用电源使ESP8266和 ESP8226运行起来。顺便说一下,我们只是用一个太阳能板和锂聚合物电池,没用什么昂贵的太阳能充电器!
将开发板和锂聚合物电池连接起来
步骤1
切掉载板后部DTR(数据终端就绪)的痕迹,从而实现串口调试,同时烧录新的固件。
步骤2
在Raspberry Pi上安装ESP8266工具链
除了为存储ESP8266而需要安装编译器和工具之外,还需要将3.3VFTDI与ESP8266适当地连接起来。
1. ESP工具——基于python用于存储ESP8266的工具
wget --no-check-certificate https://github.com/themadinventor/esptool/archive/master.zip
unzip master.zip
cd esptool-master
sudo python setup.py install
2. LUA工具——利用LUA脚本语言编码的库和示例
wget --no-check-certificate https://github.com/4refr0nt/luatool/archive/master.zip
unzip master.zip
3. NODEmcu—— 基于EPS8266支持LUA编码的固件
wget --no-check-certificate https://github.com/nodemcu/nodemcu-firmware/archive/master.zip
unzip master.zip
将最新版NODEmcu固件烧录至ESP8266:
pi@raspberrypi ~/esp/nodemcu-firmware-master/pre_build/latest $
python /home/pi/esp/esptool-master/esptool.py --port /dev/ttyUSB0 write_flash 0x00000 nodemcu_latest.bin
Connecting...
Erasing flash...
Writing at 0x00062000... (100 %)
Leaving...
完成——存储固件后,在开始下一步之前重启一次。
现在开始下载自动运行的LUA脚本,使ESP8266连接至接入点:
pi@raspberrypi ~/esp/luatool-master/luatool $
python /home/pi/esp/luatool-master/luatool/luatool.py --port /dev/ttyUSB0 --src init.lua --dest init.lua --verbose
Set timeout None
Set interCharTimeout None
Upload starting
Stage 1. Deleting old file from flash memory
->file.open("init.lua", "w") -> ok
->file.close() -> ok
Stage 2. Creating file in flash memory and write first line->file.remove("init.lua") -> ok
Stage 3. Start writing data to flash memory...->file.open("init.lua", "w+") -> ok
->file.writeline([==[print('init.lua ver 1.2')]==]) -> ok
->file.writeline([==[wifi.setmode(wifi.STATION)]==]) -> ok
->file.writeline([==[print('set mode=STATION (mode='..wifi.getmode()..')')]==]) -> ok
->file.writeline([==[print('MAC: ',wifi.sta.getmac())]==]) -> ok
->file.writeline([==[print('chip: ',node.chipid())]==]) -> ok
->file.writeline([==[print('heap: ',node.heap())]==]) -> ok
->file.writeline([==[-- wifi config start]==]) -> ok
->file.writeline([==[wifi.sta.config("
SSID
","
passkey
")]==]) -> ok
->file.writeline([==[-- wifi config end]==]) -> ok
->file.writeline([==[wifi.sta.connect()]==]) -> ok
->file.writeline([==[tmr.alarm(1, 1000, 1, function()]==]) -> ok
->file.writeline([==[if wifi.sta.getip()== nil then]==]) -> ok
->file.writeline([==[print("IP unavaiable, Waiting...")]==]) -> ok
->file.writeline([==[else]==]) -> ok
->file.writeline([==[tmr.stop(1)]==]) -> ok
->file.writeline([==[print("ESP8266 mode is: " .. wifi.getmode())]==]) -> ok
->file.writeline([==[print("The module MAC address is: " .. wifi.ap.getmac())]==]) -> ok
->file.writeline([==[print("Config done, IP is "..wifi.sta.getip())]==]) -> ok
->file.writeline([==[-- dofile ("web.lua")]==]) -> ok
->file.writeline([==[end]==]) -> ok
Stage 4. Flush data and closing file->file.writeline([==[end)]==]) -> ok
->file.flush() -> ok
->file.close() -> ok
--->>> All done <<<---
现在开始监视NODEmcu控制台,同时可以看到LUA脚本的输出:
pi@raspberrypi ~ $
screen /dev/ttyUSB0 9600
NodeMCU 0.9.5 build 20150214 powered by Lua 5.1.4
lua: cannot open init.lua
>
由于init.lua未启动,RESET、POWER ON/OFF也未启动,所以输入dofile(“init.lua”)
不能执行脚本。
NodeMCU 0.9.5 build 20150214 powered by Lua 5.1.4
init.lua ver 1.2
set mode=STATION (mode=1)
MAC: 18-FE-34-9D-B9-2A
chip: 10336554
heap: 17184
> IP unavaiable, Waiting...
IP unavaiable, Waiting...
ESP8266 mode is: 1
The module MAC address is:
Config done, IP is 192.168.2.115
>
完成——现在将ESP8266连接至接入点,显示出DHCP的IP地址。
步骤3
将你的数据传到云端!
你可以将附件中的示例传至ThingSpeak云端,不过也可以改一下传输路径,将数据传输到你喜欢的服务器上。
电流最佳化:
MCU中的ESP8266中具有有高频时钟和应用处理功能,所以在正常运行时,Wifi即便没有传输数据也会消耗将近100mA多的电量。 可以通过以下两种方法来降低功耗:一、关闭高频时钟(需要LUA 指令);二、将 ESP8266设置为睡眠模式(像着陆器登陆彗星之后一样)。关掉除定时器之外的所有组件以唤醒ESP8266:深度睡眠模式下的电耗约为88uA。这个一般芯片的电耗差别很大。
node.dsleep(microSecs);
下面是一个睡眠60秒之后等待唤醒的示例:
node.dsleep(60000000);
这就是我们采用的诀窍!在特定的时间内将ESP8266设置为深度睡眠模式,并根据这一时间唤醒芯片。你需要将XDP 连接至DTR(最好使用跨接线)。如果你想利用外部某个器件(如外触发器)将ESP8266从深度睡眠状态中唤醒,将DTR连接至GND就可以轻松搞定这一点。
Sparkfun: “XPD管脚连接至DTR时,就不能对ESP8266进行编程了。在试图上传一个示意图,要确保不要将这两个管脚连接起来。”
此外,如果你想利用串口线来监管ESP8266,要确保不要将DTR连接至FTDI。
若想获得更多信息,可点击(外部链接):
https://www.sparkfun.com/news/1842
https://learn.sparkfun.com/tutorials/esp8266-thing-hookup-guide/all#example-sketch-goodnight-thing-sleep-mode
http://tim.jagenberg.info/2015/01/18/low-power-esp8266/
http://blog.hekkers.net/2015/02/26/esp8266-in-deep-sleep/
http://blog.hekkers.net
太阳能
第一个原型已完成...将R4设置为10K,从而将充电电流降低为100mA...使用一个200mAh的锂聚合物电池和一个5V 100mA的太阳能板...确保这个太阳能板的电压不超过6V...下图是详细的电路修改(我们不能保证是否可以修改,你自己承担其中的风险):
如果太阳板最大程度地暴露在阳光下,黄灯就会亮;充电后红灯会亮...一切都会正常运作,但不要忘记使用深度睡眠模式...否则太阳能和电池的这么少的电量不会持续太久!
功耗调试
为了将功耗降低至 uA单位,我们需要深入了解ESP8266的功能...从下面的截图中可以看到利用Keysight N6781A记录的当前数据。
充电后会显示标记(1):平均电流为77,2 mA 。连接WiFi后基站开始运作,随后开始搜索DHCP的IP地址,向云端发送一个数据帧。调至深度睡眠模式后出现标记 (2):平均电流为7,8 mA。连接WiFi之后,最高值为383mA。
为什么电流依然很高?这主要与LED灯的状态有关。接下来我们不会给LED供电(通过停冲和断电两种方式)。
深度睡眠模式下的实际电耗为88uA!这简直太棒了,:-)
充电后又显示标记(1) :平均电流为72,5 mA,WiFi处于使能状态,调至深度睡眠模式之后,显示标记(2)为88.8 uA。连接WiFi后最高值为213 mA。
测示显示了60秒的深度睡眠和唤醒的测试周期:
最后将太阳能板连接到USB接口(电压最高为6V):
现在我们再测试一次:短暂的唤醒状态之后进入60s的深度睡眠状态(见上图的峰值)。现在你可以看到平均电流是负值:-4.5 mA。这一点非常棒,因为晴天时我们可以将平均值为4.5mA的电流充回锂聚合物电池,ESP8266在深度睡眠时,我们的电是用不完的。
完成——只利用一个小型的太阳能板,而不需要外部电源就就可以让特别耗电的ESP8266运行起来,我们已向你证明了这一点。
如果是在夜间或者阴天时,可以采用以下方法:
· 利用更大的太阳能板,以供应更多的电
· 减少唤醒次数,如:1次/小时
· 只在白天传输数据
· 利用一个更高效的太阳能充电器(100mA中最高为25mA)
· 利用可充电电池,相对于锂聚合物电池,这样就可以利用更多的电
· 利用BLE,而不用WiFi(这个选择是明智的)。
· 利用你自己的诀窍(若想分享可以评论一下本文)
经验之谈(关闭LED灯,R4 = 10kΩ,关闭FET/二极管)利用选好的太阳能板进行充电,平均电流为12 mA
· 晚间:利用平均电流为7mA的锂聚合物电池,每60s唤醒一次;
· 多云时:利用平均电流为5mA的锂聚合物电池,每60s唤醒一次;
· 晴天时:利用平均电流为-5mA的锂聚合物电池,每60s唤醒一次;
· 利用无休眠模式的平均电流为75 mA的锂聚合物电池,而不需用太阳能板,但要注意:传输越多的数据,就会利用更多的电量(>260 mA)——要避免这种情况,否则电量很快就会用尽。
我们来计算一下:
· 无阳光状态下利用200 mAh的锂聚合物电池,平均电流为5 mA,这样会持续40小时;
· 白天时为锂聚合物电池充电,平均电流70 mAh,持续时间为14小时
· 晚间锂聚合物电池耗电,持续时间为10小时
利用一些诀窍可以使电量持续应用数年。例如,一小时内只唤醒一次(与每分钟唤醒一次相比),这样你就可以减低电耗了.......晚间不传输数据(只计算数据),这样锂聚合物电池就会消耗更少的电。
为了只利用太阳能而实现为期一周的测试,我们利用5分钟的睡眠模式!阴天时可利用备用的锂聚合物电池,以提供70%的电量。
为了进一步使EPS8266项目操作起来更为简单,我们开始为ESP-12(如Adafruit开发板)开发一个印刷开发板,其中涉及本项目的最新发现成果:
利用太阳能的 ESP-12开发板,调节阀在背面
组件和电源
|
× | 1 | ||||||
|
× | 1 | ||||||
|
× | 1 | ||||||
|
× | 1 | ||||||
|
× | 1 | ||||||
|
电路图
改进的锂聚合物电池——从太阳能板输入
编码
init.lua
nodemcu自动运行之后开始调用 init 脚本,脚本语言为LUA,根据你的Wifi AP改变SSID和口令, 下次重启后如果想让thing.lua自动运行, 去掉注释 dofile ("thing.lua")。
print('init.lua ver 1.2') wifi.setmode(wifi.STATION) print('set mode=STATION (mode='..wifi.getmode()..')') print('MAC: ',wifi.sta.getmac()) print('chip: ',node.chipid()) print('heap: ',node.heap()) -- wifi config start wifi.sta.config("SSID","passkey") -- wifi config end wifi.sta.connect() tmr.alarm(1, 1000, 1, function() if wifi.sta.getip()== nil then print("IP unavaiable, Waiting...") else tmr.stop(1) print("ESP8266 mode is: " .. wifi.getmode()) print("The module MAC address is: " .. wifi.ap.getmac()) print("Config done, IP is "..wifi.sta.getip()) -- dofile ("thing.lua") end end)
thing.lua
ort = 80 function sendData() t1=adc.read(0) print("VOC:"..t1.." C\n") -- conection to thingspeak.com print("Sending data to thingspeak.com") conn=net.createConnection(net.TCP, 0) conn:on("receive", function(conn, payload) print(payload) end) -- api.thingspeak.com 184.106.153.149 conn:connect(80,'184.106.153.149') conn:send("GET /update?key=YOURWRITEKEY&field1="..t1.." HTTP/1.1\r\n") conn:send("Host: api.thingspeak.com\r\n") conn:send("Accept: */*\r\n") conn:send("User-Agent: Mozilla/4.0 (compatible; esp8266 Lua; Windows NT 5.1)\r\n ") conn:send("\r\n") conn:on("sent",function(conn) print("Closing connection") conn:close() end) conn:on("disconnection", function(conn) print("Got disconnection...") end) end -- send data every X ms to thing speak tmr.alarm(0, 10000, 1, function() sendData() end )
将模拟传感器的数据传至云端,从而实现数据可视化,利用 ThingSpeak 写入密钥取代 YOURWRITEKEY。
init.lua——电量测试周期LUA
FileToExecute="pw.lua" l = file.list(); for k,v in pairs(l) do if k == FileToExecute then print("*** You've got 5 sec to stop timer 0 ***") tmr.alarm(0, 5000, 0, function() print("Executing ".. FileToExecute) dofile(FileToExecute) end) end end
pw.lua——电量测试周期LUA
每60s进行一次深度睡眠...在唤醒状态下可在此执行ESP8266 代码...现在我们将睡眠时间从60s改为300s(即5分钟)。
interval = 60000000 node.dsleep(interval-tmr.now())
版权声明:
本译文仅用于学习和交流目的。非商业转载请注明译者、出处,并保留文章在译言的完整链接。
原文来源:https://www.hackster.io/
原文标题:Tame the beast: Ultra-Low Power #ESP8266 Thing (Uses LUA and solar panels)
原文地址:https://www.hackster.io/fablabeu/esp8266-thing-by-sparkfun
超低功耗芯片ESP8266相关推荐
- 基于 STM32 的语音识别智能家居控制系统的设计(LD3320语音识别芯片+ESP8266 WIFI模块+DHT11温湿度采集+MQ系列 烟雾及可燃气体+蜂鸣器+步进电机模拟窗帘+OLED液晶显示+
## **基于 STM32 的语音识别智能家居控制系统的设计(LD3320语音识别芯片+ESP8266 WIFI模块(阿里云 或ONENET或局域网)+DHT11温湿度采集+MQ系列 烟雾及可燃气体+ ...
- wifi转串口芯片——ESP8266:配置与使用
ESP8266是一款小巧的wifi转串口芯片,通过串口就可以配置模式,发送消息.接收消息.建立AP.价格也不贵,大概15元左右.经过尝试,效果还是不错的,非常适合单片机开发. 具体的接线方法大家可以自 ...
- STM32芯片超低功耗设计思路
对于给定的制造工艺和晶片区域,微控制器的功耗主要取决于两个因素(动态可控):电压和频率.ST公司L系列超低功耗芯片为130nm超低泄漏工艺,在超低功耗所做的设计思路如下: 1. 围绕Cortex-M3 ...
- ESP8266串口WiFi扩展板详解
产品简介 ESP8266串口WiFi扩展板是深圳四博智联科技有限公司开发的一款基于乐鑫ESP8266的超低功耗的UART-WiFi模块,兼容Arduino UNO.Mega等标准主板,可以方便地进行二 ...
- 十大Wifi芯片原厂
概要:不知不觉中,WiFi几乎已攻占了整个世界.现在只要你上网,可能就离不开WiFi了. 2014年是物联网WiFi市场关键的转折期,此前传统WiFi方案的价格超过40元,在对成本较敏感的电子产品消费 ...
- WiFi 芯片原厂、模组厂 一文看懂IOT WiFi选择
一:国内常用WiFi原厂 瑞昱 RTL8710.乐鑫 ESP8266.德州仪器 TI cc3200.紫光展锐RDA5981.新干线NL6621.联发科 MT7681.高通 QCA4004. 博通B ...
- 十大Wifi芯片原厂简述
来源:全球物联网观察 概要:不知不觉中,WiFi几乎已攻占了整个世界.现在只要你上网,可能就离不开WiFi了. 2014年是物联网WiFi市场关键的转折期,此前传统WiFi方案的价格超过40元,在对成 ...
- esp8266系列 wifi模块
ESP8266这个词可以理解为ESP8266EX芯片,以及依赖ESP8266EX芯片开发的系列模组的简称. esp8266 EX是乐鑫信息科技(上海)股份有限公司开发的一系列的wifi芯片 ESP82 ...
- 一、ESP8266入门(基于LUA开发)
序 一入坑便停不下来... 还挺有意思的哈,233,,,, 资料杂,自己一个一个去找确实浪费了不少时间,而且大多还都是英文的,需要硬着头皮看. 这次实践入门,更是对英语的重要确信无疑.Githu ...
最新文章
- 一次redis连接配置修改引发的redis.clients.jedis.exceptions.JedisConnectionException: Unexpected end of stream.异常
- 【剑指offer】10A--求裴波那切数列的第n项,C++实现
- IMX6ULL的GPIO操作方法
- 2021年新高考八省联考成绩查询辽宁,辽宁八省联考成绩什么时候出 辽宁八省联考成绩查询入口...
- TextView does not support text selection. Selection cancelled. 。TextViews复制文本失效解决方法
- python闯关_Day012
- JVM从入门到放弃——JVM内存模型
- mysql上传到阿里云服务器地址_从0部署Web项目到阿里云服务器上
- GridView里面模板获取唯一值(如ID)
- ureport2报表详细使用(一)-集成及配置
- ORA-00932: 数据类型不一致: 应为 -,但却获得 -
- 无刷直流电动机的工作原理
- 云服务器win10系统搭建ftp,win10系统搭建ftp服务器
- 各大搜索引擎网站登录入口
- Spring Boot 实现定时任务
- 插入, 桥 - 面面相连
- pytorch根据开放场景语音文字合成新语音(VoiceLoop)
- css3实现小图标向下引导小箭头动态效果
- word表格中 英文排版
- 产业安全专家谈|金融行业如何践行《反电信网络诈骗法》?
热门文章
- LSB顺序+随机隐写和提取(matlab)
- 划词翻译 插件的安装教程 附下载链接【超简单】
- springboot启动报错 java.lang.ArrayStoreException异常解决方法
- python easygui该如何使用?
- 细说促销(淘宝销售可看)
- 顶流AI大赛背后:OPPO小布助手的技术势能和促成的想象力
- 你距离女朋友其实只差一个幽默的句子,python教你如何快速将有趣的句子收归数据库
- 通俗易懂理解几何光学(五)光线的光路计算及像差理论
- java eclipse生成apk,将Eclipse Android项目打包成APK文件
- 《迷人的8051单片机》——导读