Arduino for ESP8266的话,如果不修改代码,默认没有办法进入轻睡眠的省电模式,只能进入Modem Sleep,也就是说Wifi可以暂时睡眠但是CPU没法睡,Modem Sleep最低功耗在15mA-16mA,轻睡眠的最低功耗在1mA-2mA左右

如果要在Arduino中再腾出几KB内存的话,我这晨还有一个方法,就是去到esp8266 arduino的开发包中,找到一个叫"cont.h"的头文件,里边有一个栈大小的宏定义常量叫“CONT_STACKSIZE",他的值默认是4096,我试着将他改成1024,这样就省了3KB内存,具体稳定的话,我用一个程序目前测试了一下,还是可以顺利腾出3KB的内存的,因为刚好我应要用把这将近50K的内存用完,所以特此贡献这个方法
我先看看他的调度的汇编来确定一下是否有其他的隐患,目前是测得可以正常工作的

如果你用过SDK就会发现,有将近50K的内存,你用Arduino会少了几K,不好奇是去了哪里吗?有4K至少,是被用来做保存是上下文用的,什么是上下文?就是内核调度器的一个概念,你可以理解为,一个MCU要实现不同的线程,他就要为单个线程保存单独的现场环境,而这个现场环境就用掉了4K多一点的内存了

如果有空可以将试着去官网下载一个最新版的SDK文件夹,然后将"lib"中的文件替换至现在的2.0.0版的"lib"文件夹中,这样的话,可以使用一些SDK1.5.0的一些最新的特性(不知道的可以暂时不升级),记得替换前要进行好备份原来的文件夹,如果替换后编译时出错,则可以在这个旧的文件夹中找至具体出错的文件进行找旧版的覆盖上去用,目前我大部份测试Arduino 2.0.0将SDK 1.3.0替换成SDK1.5.0(最新版的)也是可以正常工作的

另外发现Arduino的一个问题就是在使用TCP(注意仅是TCP)发送一个内存缓冲区(大小是1450左右)函数的时候速度很慢(表现为TCP这个write函数执行时间较久),暂时我还没有办法找到内部的原因,但是使用SDK就没有这个问题,但是为了使用Arduino良好的编译环境,以及一堆的函数库(比如SD卡库),我在Ardiuno中使用了SDK的代码(可以直接编译成功,改动不大)


- 阅读剩余部分 -

烧录esp8266的固件可以使用esptool这个python模块,它除了能烧录固件外还可以做很多其他的事,末尾有张表列出它所有功能。用它来烧录esp8266的固件,首先得确保你电脑安装了python,如果没有安装可以到这里下载并安装 python下载 强烈建议安装的时候勾选把python加入环境变量,省的后来还得自己配置。esptool得要先安装,在linux mac下很简单一行命令就可以搞定。

sudo pip install esptool

环境都一切搞定后就简单了,调用esptool的write_flash命令来写入固件,这个命令它需要两个参数,分别是写入地址和文件路径。

- 阅读剩余部分 -

第一步,生成 R.java 文件

aapt p -f -m -J gen -S res -I $ANDROID_SDK/platforms/android-15/android.jar -M AndroidManifest.xml

第二步,编译 java 文件到 class

javac \
-target 1.6 \
-source 1.6 \
-bootclasspath $ANDROID_SDK/platforms/android-15/android.jar \
-d bin \
src/*.java \
gen/*.java

第三步,生成 classes.dex 文件

dx --dex --output=bin/classes.dex bin

第四步,打包资源文件到新建 apk 中

aapt p -f -S res -I $ANDROID_SDK/platforms/android-15/android.jar -A assets -M AndroidManifest.xml -F bin/yqmiot.ap_

第五步,打包成未签名 apk

java -classpath $ANDROID_SDK/tools/lib/sdklib.jar com.android.sdklib.build.ApkBuilderMain bin/yqmiot_unsign.apk -v -u -z bin/yqmiot.ap_ -f bin/classes.dex

第六步,给 apk 签名

jarsigner -verbose -keystore yqmiot.keystore -signedjar bin/yqmiot.apk bin/yqmiot_unsign.apk yqmiot.keystore

生成签名证书


keytool -genkey -alias demo.keystore -keyalg RSA -validity 40000 -keystore demo.keystore