ESP8266是当下非常流行的一款物联网wifi模块,虽然是国产芯片,但国外也同样有非常多的应用。很多极客用这款物联网模块做出非常炫酷的东西。
ESP8266官方网站网提供了两种SDK,RTOS SDK和非OS SDK,都是基于Linux环境。由于芯片的烧录是Windows环境,所以最好使用虚拟机来搭建ESP8266开发环境,不然你安装了一个Linux电脑还需要另外一个windows电脑来烧录程序。
如果使用AT命令操作请使用非OS的SDK,其他环境建议使用RTOS的SDK,使用RTOS程序可以更加灵活,多任务实现更加容易,可以轻松的写出复杂的程序逻辑控制。
安装步骤
1、安装Linux虚拟机,VMware 或者VirtualBox都可以。我选择的是VirtualBox下的Lubuntu(Ubuntu的轻量级版)。这一步网络上教程多的是,这一步不多赘述。
下一步就是要搭建esp8266的交叉编译环境,交叉编译环境官网上面有一个镜像,可以下载来直接使用,如果想自己编译一个需要下载ESP8266芯片的交叉编译环境源码。
2、下载Esp8266交叉编译环境源码
ESP8266内嵌的CPU既不是ARM也不是MIPS,更不是X86,是Tensilica公司开发的一种嵌入式CPU Tensilica L106,需要下载这种CPU的交叉编译器。
交叉编译器在github上可以下载到,按照说明编译即可。编译完后,在xtensa-lx106-elf/bin目录下会有一大堆xtensa-lx106-elf-xxx文件
如上图所示。这时候说明我们的交叉编译环境已经完成了。这时候需要把这个bin文件的路径写到系统变量PATH里面。
3、下载ESP8266 的SDK。
下载 ESP8266_RTOS_SDK-2.0.0.tar.gz
解压 tar xzvf ESP8266_RTOS_SDK-2.0.0.tar.gz
把路径ESP8266_RTOS_SDK-2.0.0 改为 ESP8266_RTOS_SDK
会看到这目录下有这些文件。
编译工程
我们进入example文件夹下去编译一个工程。
cd ESP8266_RTOS_SDK/examples/mqtt_demo/
可以看到有gen_misc.sh文件,这个文件我们需要修改它。
vim gen_misc.sh
=====================================
#!/bin/bash
:<
******NOTICE******
MUST set SDK_PATH & BIN_PATH firstly!!!
example:
export SDK_PATH=~/esp_iot_sdk_freertos
export BIN_PATH=~/esp8266_bin
!
export SDK_PATH=$SDK_PATH --------------这行需要修改
export BIN_PATH=$BIN_PATH --------------这行需要修改
echo "gen_misc.sh version 20150911"
echo ""
。。。。。。其他略
=====================================
把SDK_PATH 和BIN_PATH的路径修改为你自己的SDK的路径。如下所示。
export SDK_PATH=/mnt/cygwin/ESP8266_RTOS_SDK/
export BIN_PATH=/mnt/cygwin/ESP8266_RTOS_SDK/bin/
修改好这两个变量后保存gen_misc.sh文件。
编译执行命令 ./gen_misc.sh,不是执行make。
执行完命令需要用户选择几个编译选项。
需要用户必须选择的
Please check SDK_PATH & BIN_PATH, enter (Y/y) to continue:
回答‘y’
STEP 2: choose bin generate(0=eagle.flash.bin+eagle.irom0text.bin, 1=user1.bin, 2=user2.bin)
enter (0/1/2, default 0):
这个默认是0,如果需要网络升级的选择1或者2.
STEP 5: choose spi size and map
0= 512KB( 256KB+ 256KB)
2=1024KB( 512KB+ 512KB)
3=2048KB( 512KB+ 512KB)
4=4096KB( 512KB+ 512KB)
5=2048KB(1024KB+1024KB)
6=4096KB(1024KB+1024KB)
7=4096KB(2048KB+2048KB) not support ,just for compatible with nodeMCU board
8=8192KB(1024KB+1024KB)
9=16384KB(1024KB+1024KB)
enter (0/2/3/4/5/6/7/8/9, default 0):
这个需要根据用户的实际flash大小来选择,可以选择的比实际的flash小,但不能选择比实际的flash大,否则烧录不进去。其他选项之间回车选择默认即可。执行完毕就开始编译了。如果没有错误最后会看到这个结果。
生成的二进制固件没有在当前目录,在SDK目录下面的bin目录下。如果编译选择的是网络升级版本则在bin/upgrade目录下。
root@esp8266-VirtualBox:/mnt/cygwin/ESP8266_RTOS_SDK/bin/upgrade# ls -l
total 6832
-rwxrwxrwx 1 root root 0 4月 2 13:55 readme.txt
-rwxrwxrwx 1 root root 298244 9月 1 00:00 user1.1024.new.2.bin
-rwxrwxrwx 1 root root 1752489 9月 1 00:00 user1.1024.new.2.dump
-rwxrwxrwx 1 root root 4943001 9月 1 00:00 user1.1024.new.2.S
user1.1024.new.2.bin是生产的固件二进制文件,可以烧写到ESP8266芯片中去。user1.1024.new.2.S是生成的反汇编文件,可以定位错误使用,格式如下。
0241bf0 <readchar>:/<readchar>
40241bf0: 0238 l32i.n a3, a2, 0
40241bf2: 000342 l8ui a4, a3, 0
40241bf5: 331b addi.n a3, a3, 1
40241bf7: 0239 s32i.n a3, a2, 0
40241bf9: 042d mov.n a2, a4
40241bfb: f00d ret.n
40241bfd: 000000 ill
閱讀更多 物聯網電子世界 的文章