做物联网产品开发有段时间了,虽然开发了两款智能产品,但hands-on的开发一直都在服务器和应用层进行,硬件层的研发并没有真的深入下去。决定有时间也对这个层面学习学习,软硬都能搞才算得上是全栈吧 :-P

要完成一个物联网产品的开发需要解决联网的问题。目前解决联网的比较常用的方案有Wi-Fi和GSM两种(NB-IOT也在上升势头,相信一年后会有较多的应用出现)。这次先学习下乐鑫ESP 8266 WI-FI芯片的开发。

由于我用的是Mac OS,所以就介绍如何在Mac上进行8266的环境设置。

安装使用esp-open-sdk

1.安装依赖关系

brew install gnu-sed --with-default-names
brew tap homebrew/dupes
brew install gperf
brew install grep
brew install autoconf
brew install binutils
brew install gawk
brew install wget
brew install automake
brew install libtool
brew install help2man

参考

2.准备case-sensitive分区

由于Mac OS的分区默认是case-insensitive的,而编译需要在case-sensitive的分区上进行,所以需要创建一个独立分区解决这个问题(linux系统上没有这个问题)。

hdiutil create ~/Desktop/eos.dmg -volname "esp-open-sdk" -size 10g -fs "Case-sensitive HFS+"
hdiutil mount ~/Desktop/eos.dmg
cd /Volumes/esp-open-sdk

3.编译esp-open-sdk

下载代码库,使用’–recursive’会同时下载crosstool-NG/esp-open-lwip/esptool/lx106-hal子模块

git clone --recursive https://github.com/pfalcon/esp-open-sdk.git

编译有两种方式:

  • 方式一(STANDALONE=y):将toolchain与SDK一起编译安装,这种方式操作简单方便,而且后期开发编译时不需要指定-I/-L参数,缺点是不便于今后SDK升级。
make STANDALONE=y
  • 方式二(STANDALONE=n):只编译Xtensa toolchain,不编译8266 SDK,这种方式便于今后SDK升级。
make STANDALONE=n

编译完成后会在当前目录下生成’xtensa-lx106-elf’目录,将’xtensa-lx106-elf/bin’添加到PATH环境变量中以便开发时使用编译器’xtensa-lx106-elf-gcc’

export PATH=$PATH:`pwd`/xtensa-lx106-elf/bin/

最后,esptool.py使用需要安装’pySerial’这个python库

pip install pyserial

4.测试开发环境

esp-open-sdk自带example,可以编译一下来测试开发环境是否设置好了

cd examples/blinky
make

如果编译成功通过则说明esp-open-sdk安装成功了。

使用ESP8266 RTOS SDK

8266还有一套基于FreeRTOS的SDK,配置这套SDK之前需要先完成前面的esp-open-sdk的配置。

1.构建SDK

我选择把这套SDK构建到同一个分区上。

cd /Volumes/esp-open-sdk
git clone https://github.com/espressif/ESP8266_RTOS_SDK.git

完成后需要设置两个环境变量’SDK_PATH’, ‘BIN_PATH’。为了简化设置我把这连个环境变量设知道’~/.bash_profile’文件中,这样可以每次打开shell后自动加载:

# ESP 8266 dev env
ESP_8266_OPEN_SDK=/Volumes/esp-open-sdk/esp-open-sdk/xtensa-lx106-elf/
ESP_8266_RTOS_SDK=/Volumes/esp-open-sdk/ESP8266_RTOS_SDK
ESP_8266_RTOS_SDK_BIN=/Volumes/esp-open-sdk/ESP8266_RTOS_BIN
export SDK_PATH=$ESP_8266_RTOS_SDK
export BIN_PATH=$ESP_8266_RTOS_SDK_BIN
PATH=$PATH:$ESP_8266_OPEN_SDK/bin

2.开发方法

RTOS SDK的代码目录中有一个样板程序,开发时可以把这个模版拷贝到开发目录中,然后运行gen_misc.sh进行编译。

cp -r examples/project_template ~/test
cd ~/test/project_template
sh gen_misc.sh

运行gen_misc.sh后会有若干选项,按照提示操作下去最后就会编译出的文件会放到‘BIN_PATH’目录下

ls /Volumes/esp-open-sdk/ESP8266_RTOS_BIN/
eagle.S             eagle.dump          eagle.flash.bin     eagle.irom0text.bin

烧录程序

串口驱动

烧录前需要先将硬件连到电脑上,如果使用的是nodeMCU的话会比较方便,只需要使用一根micro USB数据线,并下载这个驱动:nodeMCU USBtoUART驱动

烧录工具esptool.py

安装完驱动后就可以连接烧录了,程序烧录可以使用esptool.py工具完成,使用方法如下:

esptool.py --port <serial-port-of-ESP8266> write_flash -fm <mode> 0x00000 <nodemcu-firmware>.bin

参考资料