why
这又是一篇软件的安装及卸载类水文。
本文的目的是,记录并阐述如何用Ardunio IDE对ESP32 NodeMCU板子刷入蓝牙BLE串口透传固件。当然,把NodeMCU作蓝牙串口透传用是一种资源浪费,但对于手上没有蓝牙透传模块而只有NodeMCU的应急场景,还是有点用的。
已经知道如何做的,可以关闭本文节省时间。
how
1. 安装Ardunio IDE
既然是利用Ardunio IDE来进行固件的刷入,第一步当然是下载Ardunio IDE。
下载地址:https://www.arduino.cc/en/main/software
建议下载zip版,绿色,解压即用。我这里假设你将Ardunio IDE下载并解压到 D:/Protable 目录下:
2. 下载ESP32的Ardunio库
下载地址:https://github.com/espressif/arduino-esp32
用git clone或者Download ZIP的模式皆可:
这里我假设你是用Download ZIP模式下载的,并且下载后的文件为arduino-esp32-master.zip。
注意:
更加推荐的做法是用下面这个命令来拉取代码:
git clone --recursive https://github.com/espressif/arduino-esp32.git
git submodule update --init
3. 安装ESP32的Ardunio库
在 D:\Portable\arduino-1.8.12\hardware 路径下,创建espressif\esp32目录,并将上一步中下载的ardunio-esp32-master.zip解压到这个目录下:
4. 安装ESP32的构建工具
执行 D:\Portable\arduino-1.8.12\hardware\espressif\esp32\tools 目录下的get.exe:
我估计你在下载xtensa-esp32-elf-win32-1.22.0-80-g6c4433a-5.2.0.zip工具时,大概率会卡很久,因为这个工具非常大。
实际上,这个get.exe本质就是下载esptool-2.6.1-windows.zip、mkspiffs-0.2.3-arduino-esp32-win32.zip、xtensa-esp32-elf-win32-1.22.0-80-g6c4433a-5.2.0.zip这三个工具到dist目录,并分别将上述三个zip解压到tools目录下的esptool、mkspiffs、xtensa-esp32-elf:
知道了这个get.exe的本质就好了,如果有读者在执行get.exe时工具下载时间过长(甚至不确定网络有没有问题、有没有在正常下载,因为没有进度显示),可以在下面留言,我将这三个工具共享出来,然后手动解压到目标目录即可。
5. 编译、烧写NodeMCU蓝牙透传固件
ESP32 NodeMCU的microUSB接口连接了一块板载CP2102串口芯片,安装好CP2012驱动。我假设将NodeMCU的microUSB口接入到电脑USB口(注意不是板子上的TX/RX引脚,烧录固件用的是microUSB的串口)后对应的是COM6。
打开Ardunio IDE(D:\Portable\arduino-1.8.12\arduino.exe):
Tools下,Board选中NodeMCU-32S,Port选中COM6:
打开蓝牙串口透传示例工程,File/Example/ESP32 BLE Ardunio/BLE_uart:
这就是BLE串口透传的固件代码,编译、烧写(本质上是Ardunio IDE调用的esptool.py通过串口烧写)即可:
注意:
此固件代码,在收到数据的前后会打印一些提示信息,如上图中#if 0块中的代码,如果要做成透传,需要将这些代码注释掉。
6. 功能验证
串口透传,走的串口不是上面步骤里烧固件的microUSB的那个串口,而是板子上TX/RX接口。用USB转串口的板子,将TX、RX接入到电脑上,在串口调试工具里打开这个串口。
要验证蓝牙发送功能的话,可以下载nrf connect app,这是nordic官方出的BLE调试工具(或者其他的BLE调试app或者小程序)。
打开手机的蓝牙,在BLE app中连接UART Service节点:
在Services标签页中的Nordic UART RX Characteristic服务中,点击那个向上的箭头,发送数据,选择Uint8,发送内容为97(字母"a"的ASCII编码),点击Write:
可以在电脑上观察到通过蓝牙透传收到的串口数据(我这里是注释掉了上面所述的提示信息,因而只有一个“a”即接收到的数据):
summary
本文讲述了如何用Ardunio IDE构建(也可以是开发)NodeMCU固件,烧写用的是板载的usb串口,并演示了一个串口透传的案例。
整体流程相对来说还是比较简单的,希望对大家有用。