1、kaa 连接esp8266
1) 烧写模式
ESP8266-01 | USB-to-TTL |
---|---|
URXD | TXD |
UTXD | RXD |
CH_PD | 3.3V |
GND | GND |
VCC | 3.3V |
GPIO0 | GND |
GPIO2 | 3.3V |
2)运行模式
ESP8266-01 | USB-to-TTL |
---|---|
URXD | TXD |
UTXD | RXD |
CH_PD | 3.3V |
GND | GND |
VCC | 3.3V |
2、基础环境配置
以纯净的ubuntu16.04 64位系统为例
1)安装相关依赖库
sudo apt-get install autoconf libtool libtool-bin bison build-essential gawk git gperf flex texinfo libncurses5-dev libc6-dev-amd64 python-serial libexpat-dev python-setuptools
2)指定ESP8266 SDK和工具链存储的目录
export ESPRESSIF_HOME=/opt/Espressif/
3)安装toolchain
cd $ESPRESSIF_HOME
git clone -b lx106-g++ git://github.com/jcmvbkbc/crosstool-NG.git
cd crosstool-NG
./bootstrap && ./configure --prefix=$(pwd)
make
sudo make install
./ct-ng xtensa-lx106-elf
./ct-ng build
加入toolchain工具位置到环境变量
echo "export PATH=$ESPRESSIF_HOME/crosstool-NG/builds/xtensa-lx106-elf/bin:\$PATH" >> ~/.bashrc
4)安装 ESP8266 RTOS SDK
cd $ESPRESSIF_HOME
export ESP_SDK_HOME=$ESPRESSIF_HOME/esp-rtos-sdk
git clone https://github.com/espressif/esp_iot_rtos_sdk.git $ESP_SDK_HOME
cd $ESP_SDK_HOME
git checkout 169a436ce10155015d056eab80345447bfdfade5
wget -O lib/libhal.a https://github.com/esp8266/esp8266-wiki/raw/master/libs/libhal.a
cd $ESP_SDK_HOME/include/lwip/arch
sed -i 's:#include "c_types.h"://#include "c_types.h":' $ESP_SDK_HOME/include/lwip/arch/cc.h
5)安装esptool.py
cd $ESPRESSIF_HOME
git clone https://github.com/espressif/esptool.git
cd esptool
python setup.py install
3、创建kaa应用
kaa官网demo地址:
[sample demo]: https://github.com/kaaproject/kaa/tree/v0.10.0//doc/Programming-guide/Using-Kaa-endpoint-SDKs/C/SDK-ESP8266/attach/esp8266-sample/
目录结构
CMakeLists.txt
driver/
uart.h
uart.c
ld/
eagle.app.v6.ld
eagle.rom.addr.v6.ld
kaa/
<put Kaa SDK here>
user/
user_main.c
src/
kaa_demo.c
CMakeLists.txt是一个CMake脚本。
driver/ uart.c和driver/ uart.h文件实现ESP8266 UART接口的驱动程序。
ld /目录包含ESP8266应用程序所需的两个链接器脚本。
kaa /目录是你放置生成的Kaa C SDK压缩包并解压的地方。
mkdir kaa && cd kaa
tar zxf kaa-c * .tar.gz
user / user_main.c包含ESP8266应用程序入口ponit(user_init()函数)并执行ESP8266特定的初始化(例如,初始化UART)。
src / kaa_demo.c是一个具有最小Kaa代码的独立于platofrm的源文件。
注:
1)修改kaa/CMakeLists.txt以下选项为off
option(WITH_EXTENSION_PROFILE "Enable profile extension" OFF)
option(WITH_EXTENSION_CONFIGURATION "Enable configuration extension" OFF)
option(WITH_EXTENSION_EVENT "Enable event extension" OFF)
option(WITH_EXTENSION_LOGGING "Enable logging extension" OFF)
option(WITH_EXTENSION_NOTIFICATION "Enable notification extension" OFF)
option(WITH_EXTENSION_USER "Enable user extension" OFF)
option(WITH_ENCRYPTION "Enable encryption" OFF)
option(KAA_RUNTIME_KEY_GENERATION "Enable RSA key generation at runtime" OFF)
2)修改ld/eagle.app.v6.ld文件中相关代码
在.text : ALIGN(4)
部分中,找到包含以下内容的行:
( .literal .text .literal.* .text.* .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
从那里删除部分.literal.* .text.*
并将其移动到.irom0.text : ALIGN(4)
,在_irom0_text_start = ABSOLUTE(.)
;之后添加以下行
*(*.literal.* .text.*)
现在将所有以.literal.和.text开始的部分放置ROM中,这是一个简单粗暴的方法,不管* .a模块(如下面在.text : ALIGN(4)
部分中的行所定义的那样),这种类型的所有部分都被移到ROM中。 可能有未发生的复杂情况但 绝对有空间优化链接器映射,这节省了大量的RAM和内存
编译应用程序
mkdir build
cd build
cmake .. \
-DCMAKE_TOOLCHAIN_FILE=../kaa/toolchains/esp8266.cmake \
-DKAA_PLATFORM=esp8266 \
-DBUILD_TESTING=OFF \
-DCMAKE_BUILD_TYPE=MinSizeRel \
-DKAA_MAX_LOG_LEVEL=3
-DWITH_ENCRYPTION = OFF
make
烧写esp8266模块
1)生成烧写的bin文件
esptool.py elf2image build/kaa_demo
使用esptool.py工具产生两个二进制文件 - kaa_demo-0x00000.bin和kaa_demo-0x40000.bin分别flash到0x00000和0x40000 flash地址。
2)烧写程序
sudo esptool.py write_flash 0x00000 build/kaa_demo-0x00000.bin 0x40000 build/kaa_demo-0x40000.bin