低功耗、WiFi、蓝牙都齐全了,不过还不止如此——DFRobot 萤火虫ESP32开发板上手
扫描二维码
随时随地手机看文章
萤火虫ESP32(Fire Beetle Board-ESP32)是DFRobot推出的基于ESP32模块的一款物联网开发板,板载ESP-WROOM-32双核芯片,支持WiFi和蓝牙双模通信,外围兼容低功耗硬件设计,深度睡眠模式下功耗仅为10uA。主控器支持USB和外接3.7V锂电池两种供电方式,可实现双电源下自动切换电源功能,并支持USB和外接DC两种充电方式。体积小巧,接口方便,上手简单,可直接应用于物联网低功耗项目。
另外,Fire Beetle Board - ESP32主板在硬件上做了特殊的arduino IDE兼容,不用手动切换boot模式,实现一键下载。在编程方面,支持Arduino、idf(linux)、micropython等多种方式,并且,对于Arduino IDE做了引脚映射,可以直接传递Dx来配置引脚,使用方式上兼容UNO,从而降低了使用的门槛。
DFRobot是全球领先的致力于为创客提供产品和服务的综合性平台,提供了丰富的开源硬件产品供用户选择,从Arduino到各种SBC,从传感器到各种类型的扩展板,都能找到DFRobot的影子,此次体验的Fire Beetle ESP32隶属Fire Beetle Board系列,该系列的另外两款开发板分别是BLE和ESP8266开发板,面向蓝牙及WiFi应用,此次的Fire Beetle Board-ESP32则使用了乐鑫的ESP32模块,同时集成BLE及WiFi应用。
Fire Beetle Board-ESP32的产品包装如下
标签上标注有产品型号Fire Beetle Board-ESP32及SKU货号DFR0478。
完整的产品清单,除了Fire Beetle Board-ESP32开发板之外,还提供了排针及排母各一套,供用户自行焊接。
开发板正面看到的ESP-WROOM-32模块是整个开发板的核心,该模块来自乐鑫。乐鑫此前曾推出备受好评的ESP8266,提供了低价WiFi解决方案,后来推出的ESP32,则同时集成了BLE和WiFi两方面的无线通信功能。乐鑫官方也推出了自己的ESP32评估板,开发流程稍显复杂,虽然也支持Arduino的开发,但是开发过程和基于IDF的开发方法一样,稍微复杂了一点,对新手来说不是那么友好。
除了ESP32模块外,开发板上引出了GPIO接口等,默认没有焊接,用户可以根据需要,从附件里选择焊接排针或排母。开发板右侧提供了两种类型的电源接口,USB及锂电池接口。其它的外设如LED、复位按键等均可以通过开发板上的丝印查看其所在的位置。
Fire Beetle Board-ESP32背面图,所有引出的焊盘都标注了对应的功能。Fire Beetle Board-ESP32的引脚做了特殊的 Arduino IDE的PIN兼容,使用Arduino IDE编译时可以直接使用Dx(x=0,1,2,3,4...)来控制相应的 GPIO 口。
Fire Beetle Board-ESP32的双供电接口设计,开发/调试时一般使用USB接口来供电,USB接口也用来下载代码,还可以用来连接UART与PC通信。
ESP-WROOM-32模块内置天线,不必外接天线就可以使用,金属封装有效屏蔽了外部信号的干扰。
Fire Beetle Board-ESP32的主要功能是提供蓝牙及WiFi通信,除此外,还提供了有限的GPIO接口,可以用来实现简单的开关切换操作及PWM输出等应用,部分GPIO也可以复用为SPI及I2C等常用微处理器外设接口。Fire Beetle Board-ESP32的主要特性如下
• 处理器:Tensilica LX6双核处理器(一核处理高速连接;一核独立应用开发),主频240MHz,SRAM容量为520KB
• Flash:16Mbit
• Wi-Fi协议:802.11 b/g/n/d/e/i/k/r (802.11n,速度高达150 Mbps),A-MPDU和A-MSDU聚合,支持0.4us防护间隔,2.4GHz
• 蓝牙协议:符合蓝牙v4.2 BR/EDR和BLE标准
• 支持低功耗:10uA
• 外设接口:GPIO包括10个digital及5个analog,SPI/I2C/I2S与arduino UNO接口兼容
• 模块尺寸:24 × 53(mm)/0.94 x 2.09(inches)
• 电源接口:USB及锂电池接口
ESP32支持丰富的开发环境,乐鑫官方推荐使用IDF来进行开发,DFRobot则提供了Arduino来进行软件开发,另外ESP32也支持MicroPython来进行开发。
使用IDF来进行开发的话,最佳的环境是Linux系统,可以使用物理或虚拟Linux系统来搭建开发环境,本文使用的是Windows 10下的Ubuntu Shell来进行演示。
打开Ubuntu Shell,先安装基本的工具链并设置工作参数,指令如下
sudo apt-get install git wget make libncurses-dev flex bison gperf python python-serial
mkdir -p ~/esp
cd ~/esp
wget https://dl.espressif.com/dl/xtensa-esp32-elf-linux64-1.22.0-73-ge28a011-5.2.0.tar.gz
tar -xzf ~/Downloads/xtensa-esp32-elf-linux64-1.22.0-73-ge28a011-5.2.0.tar.gz
export PATH="$PATH:$HOME/esp/xtensa-esp32-elf/bin"
上述指令包含了必要的依赖包安装、工具链的下载及工作环境的设置等内容。[!--empirenews.page--]
安装后的esp目录结构如下
dev@desktop:~/esp$ tree -L 3 --dirsfirst
.
├── esp-idf
│ ├── components
│ │ ├── app_trace
│ │ ├── app_update
│ │ ├── aws_iot
│ │ ├── bootloader
...
│ │ ├── vfs
│ │ ├── wear_levelling
│ │ ├── wpa_supplicant
│ │ └── xtensa-debug-module
│ ├── docs
│ │ ├── api-guides
│ │ ├── api-reference
...
│ │ └── resources.rst
│ ├── examples
│ │ ├── bluetooth
...
│ │ ├── wifi
│ │ └── README.md
│ ├── make
│ │ ├── common.mk
│ │ ├── component_common.mk
│ │ ├── component_wrapper.mk
│ │ ├── project_config.mk
│ │ └── project.mk
│ ├── tools
│ │ ├── catch
│ │ ├── ci
│ │ ├── esp_app_trace
...
│ │ └── idf_size.py
│ ├── add_path.sh
│ ├── CONTRIBUTING.rst
│ ├── Kconfig
│ ├── LICENSE
│ └── README.md
其中esp-idf目录包含了ESP32的主要组件代码,examples目录包含了示例代码,tools目录则包括一些常用的工具。
进入examples目录下的blink目录,这里包含一个点灯工程所需要的代码。在该目录下执行命令
make menuconfig
该命令打开工程配置窗口,对当前工程进行配置,配置的内容主要包括Bootloader、串口名称及参数、编译选项等。如下图是选择具体串口参数的配置画面
这里需要注意一点,Fire Beetle Board-ESP32本身并没有提供FT232之类的串口模块,相反,在Fire Beetle Board-ESP32上有一个STM32F042微处理器,应该是用来提供串口通信功能的。
另外,Fire Beetle Board-ESP32内置的LED连接到ESP32的D9接口,该GPIO的ESP32编号为2,如下图所示
在前面提到的工程配置窗口中,继续配置用到的GPIO接口,如下图所示
Fire Beetle Board-ESP32默认使用D9来控制LED,该PIN的编号为2,所以这里要指定GPIO为2。
接下来就可以使用make flash命令来编译并上传代码到ESP32开发板了,如下
由于之前已经编译过代码,这里看到的是直接上传代码的过程,另外也可以看到一些硬件相关的信息,如芯片型号及FLASH的大小等信息。最后看到代码上传成功后,自动硬件复位并开始执行刚上传的代码,同时会看到开发板上的LED灯开始闪烁。
另外顺便也使用IDF编译了bluetooth的GATT SERVER工程文件,并上传到开发板,GATT SERVER的主要配置如下
#define GATTS_SERVICE_UUID_TEST_A 0x00FF
#define GATTS_CHAR_UUID_TEST_A 0xFF01
#define GATTS_DESCR_UUID_TEST_A 0x3333
#define GATTS_NUM_HANDLE_TEST_A 4
#define GATTS_SERVICE_UUID_TEST_B 0x00EE
#define GATTS_CHAR_UUID_TEST_B 0xEE01
#define GATTS_DESCR_UUID_TEST_B 0x2222
#define GATTS_NUM_HANDLE_TEST_B 4
#define TEST_DEVICE_NAME "ESP_GATTS_DEMO"
#define TEST_MANUFACTURER_DATA_LEN 17
这里定义了两个SERVICE,UUID分别为0x00EE和0x00FF,每个SERVICE都定义了相应的Characteristic。另外设备的名称定义为"ESP_GATTS_DEMO"。
使用NRF CONNECT测试画面如下
这是扫描到的BLE信息,包括SERVICE、RSSI等信息。
这是连接到设备后的信息,展开相关的Service,还可以对其中的Characteristic进行读写操作。
由于IDF一般需要在LINUX系统下使用,对于新手来说略微复杂了一点,DFRobot也提供了基于Arduino的操作。
使用Arduino来操作的话,先要配置相应的硬件支持,打开Arduino IDE,在Preferences对话框中添加如下的URL
https://git.oschina.net/dfrobot/FireBeetle-ESP32/raw/master/package_esp32_index.json
在Boards Manager中添加对Fire Beetle Board-ESP32的支持,如下
添加了对Fire Beetle Board-ESP32的支持后,就可以使用Arduino来开发ESP32了。
Fire Beetle Board-ESP32除了支持蓝牙外,还支持WiFi功能。对于像Fire Beetle Board-ESP32这样没有显示器的设备来说,WiFi的配置就比较麻烦一点。大部分的作法是直接在源码里指定相关路由器的SSID及PASSWORD,这样的硬编码方式,虽然可用,但是灵活性大打折扣。为此,很多设备都结合手机APP来实现对开发板的智能自动配置,如此一来,灵活性和适用性大大增强了。[!--empirenews.page--]
打开Examples目录下的WiFiSmartConfig.ino文件,该文件包含如下智能配置代码
//Init WiFi as Station, start SmartConfig
WiFi.mode(WIFI_AP_STA);
WiFi.beginSmartConfig();
//Wait for SmartConfig packet from mobile
Serial.println("Waiting for SmartConfig.");
while (!WiFi.smartConfigDone()) {
delay(500);
Serial.print(".");
}
这一段代码的执行需要结合APP来操作,通过与APP的通信来获取当前路由器的登录信息如SSID及口令等。
将代码编译并上传到开发板后,打开串口观察输出信息如下
此时开发板等待APP的配置信息。乐鑫提供了APP程序IOT Espressif,用来协同配置WiFi连接,启动APP并配置好与当前路由器的连接后,看到如下信息
看到开发板已获取到了IP地址!
手机端配置后的信息如下
很好很强大!
乐鑫也提供了APP的源码,有兴趣的可以去好好研究下,毕竟智能配置功能在实际产品应用中是不可或缺的啊!
最后要来体验一把MicroPython。
MicroPython将Python移植到了控制器上,Python简单易用,以前一直是PC和LINUX系统的专利,现在在微控制器上也可以使用Python了,虽然有些限制,但不管怎么说,这是个好的开端!随着微控制器性能和配置的大幅提升,以后的MicroPython体验应该会越来越好。
要想在Fire Beetle Board-ESP32跑Python,首先得让Python驻留在开发板上。从https://micropython.org/download这里去下载适合ESP32的固件,然后使用esptool.py工具将该固件写入到开发板,
dev@desktop:~/esp/esp-idf$ components/esptool_py/esptool/esptool.py --chip esp32 --port /dev/ttyS6 write_flash -z 0x1000 ../esp32-20171120-v1.9.2-443-g236297f4.bin
看到如下信息的话,就表明已将MicroPython固件写入到开发板了
esptool.py v2.1
Connecting.....
Chip is ESP32D0WDQ6 (revision 0)
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Auto-detected Flash size: 8MB
Flash params set to 0x0230
Compressed 934416 bytes to 586368...
Wrote 934416 bytes (586368 compressed) at 0x00001000 in 52.1 seconds (effective 143.4 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting...
使用串口终端软件就可以与开发板交互了,如下
这是MicroPython的最新版本,当前为v1.9.2,专为ESP32编译的固件。
接下来可以点灯,也可以配置WIFI等,这里就不多说,可以到MicroPython的官网上去学习学习,好好体验这个微控制器上的Python!
写到这里,差不多要结束了。不过说真话,确实有点意犹未尽!
总结一下,初看Fire Beetle Board-ESP32,感觉就是这么小的一块板,能有多大的能量!事实是,这么小的一块板,却集WiFI/BLE通信于一体,外设如GPIO/SPI/I2C一个也不少,加上低功耗、Arduino IDE支持、MicroPython支持,真是乱花渐欲迷人眼!
一个字,赞!