快速入门指南中介绍了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开发板,调节阀在背面

组件和电源

SparkFun Sparkfun ESP8266 Thing
× 1
SparkFun FTDI Basic Breakout - 3.3V
× 1

圆柱型锂离子电池- 3.7v 2200mAh

大功率——以下针对太阳能开发板

× 1
Raspberry Pi 2 Model B
× 1

200mAh or 400mAh的锂聚合物电池

小功率——太阳能开发板只需一块小的电池

× 1

0.5W太阳能板

小功率——太阳能开发板需要最高点压5.5V、电流110mA的太阳能板

电路图

改进的锂聚合物电池——从太阳能板输入

编码


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相关推荐

  1. 基于 STM32 的语音识别智能家居控制系统的设计(LD3320语音识别芯片+ESP8266 WIFI模块+DHT11温湿度采集+MQ系列 烟雾及可燃气体+蜂鸣器+步进电机模拟窗帘+OLED液晶显示+

    ## **基于 STM32 的语音识别智能家居控制系统的设计(LD3320语音识别芯片+ESP8266 WIFI模块(阿里云 或ONENET或局域网)+DHT11温湿度采集+MQ系列 烟雾及可燃气体+ ...

  2. wifi转串口芯片——ESP8266:配置与使用

    ESP8266是一款小巧的wifi转串口芯片,通过串口就可以配置模式,发送消息.接收消息.建立AP.价格也不贵,大概15元左右.经过尝试,效果还是不错的,非常适合单片机开发. 具体的接线方法大家可以自 ...

  3. STM32芯片超低功耗设计思路

    对于给定的制造工艺和晶片区域,微控制器的功耗主要取决于两个因素(动态可控):电压和频率.ST公司L系列超低功耗芯片为130nm超低泄漏工艺,在超低功耗所做的设计思路如下: 1. 围绕Cortex-M3 ...

  4. ESP8266串口WiFi扩展板详解

    产品简介 ESP8266串口WiFi扩展板是深圳四博智联科技有限公司开发的一款基于乐鑫ESP8266的超低功耗的UART-WiFi模块,兼容Arduino UNO.Mega等标准主板,可以方便地进行二 ...

  5. 十大Wifi芯片原厂

    概要:不知不觉中,WiFi几乎已攻占了整个世界.现在只要你上网,可能就离不开WiFi了. 2014年是物联网WiFi市场关键的转折期,此前传统WiFi方案的价格超过40元,在对成本较敏感的电子产品消费 ...

  6. WiFi 芯片原厂、模组厂 一文看懂IOT WiFi选择

      一:国内常用WiFi原厂 瑞昱 RTL8710.乐鑫 ESP8266.德州仪器 TI cc3200.紫光展锐RDA5981.新干线NL6621.联发科 MT7681.高通 QCA4004. 博通B ...

  7. 十大Wifi芯片原厂简述

    来源:全球物联网观察 概要:不知不觉中,WiFi几乎已攻占了整个世界.现在只要你上网,可能就离不开WiFi了. 2014年是物联网WiFi市场关键的转折期,此前传统WiFi方案的价格超过40元,在对成 ...

  8. esp8266系列 wifi模块

    ESP8266这个词可以理解为ESP8266EX芯片,以及依赖ESP8266EX芯片开发的系列模组的简称. esp8266 EX是乐鑫信息科技(上海)股份有限公司开发的一系列的wifi芯片 ESP82 ...

  9. 一、ESP8266入门(基于LUA开发)

    序 一入坑便停不下来...  还挺有意思的哈,233,,,,  资料杂,自己一个一个去找确实浪费了不少时间,而且大多还都是英文的,需要硬着头皮看.  这次实践入门,更是对英语的重要确信无疑.Githu ...

最新文章

  1. 一次redis连接配置修改引发的redis.clients.jedis.exceptions.JedisConnectionException: Unexpected end of stream.异常
  2. 【剑指offer】10A--求裴波那切数列的第n项,C++实现
  3. IMX6ULL的GPIO操作方法
  4. 2021年新高考八省联考成绩查询辽宁,辽宁八省联考成绩什么时候出 辽宁八省联考成绩查询入口...
  5. TextView does not support text selection. Selection cancelled. 。TextViews复制文本失效解决方法
  6. python闯关_Day012
  7. JVM从入门到放弃——JVM内存模型
  8. mysql上传到阿里云服务器地址_从0部署Web项目到阿里云服务器上
  9. GridView里面模板获取唯一值(如ID)
  10. ureport2报表详细使用(一)-集成及配置
  11. ORA-00932: 数据类型不一致: 应为 -,但却获得 -
  12. 无刷直流电动机的工作原理
  13. 云服务器win10系统搭建ftp,win10系统搭建ftp服务器
  14. 各大搜索引擎网站登录入口
  15. Spring Boot 实现定时任务
  16. 插入, 桥 - 面面相连
  17. pytorch根据开放场景语音文字合成新语音(VoiceLoop)
  18. css3实现小图标向下引导小箭头动态效果
  19. word表格中 英文排版
  20. 产业安全专家谈|金融行业如何践行《反电信网络诈骗法》?

热门文章

  1. LSB顺序+随机隐写和提取(matlab)
  2. 划词翻译 插件的安装教程 附下载链接【超简单】
  3. springboot启动报错 java.lang.ArrayStoreException异常解决方法
  4. python easygui该如何使用?
  5. 细说促销(淘宝销售可看)
  6. 顶流AI大赛背后:OPPO小布助手的技术势能和促成的想象力
  7. 你距离女朋友其实只差一个幽默的句子,python教你如何快速将有趣的句子收归数据库
  8. 通俗易懂理解几何光学(五)光线的光路计算及像差理论
  9. java eclipse生成apk,将Eclipse Android项目打包成APK文件
  10. 《迷人的8051单片机》——导读