我们来谈谈如何开始使用Linux中的Mongoose Embedded Web Server开发ESP8266芯片的网络应用。 我将使用Ubuntu,但是所有的东西都可以轻松适应任何Linux发行版。
谁是谁
从你开始阅读这篇文章以来,我假设你知道Linux,ESP8266和Mongoose。 所以只是一个简短的介绍。
ESP8266
廉价的芯片与综合WiFi,由Expressif开发。 如果您想详细了解详情,请查看官方网站 。
Mong ose
Mongoose是一个完整的多协议库,由Cesanta开发的40kB以下的核心。 在Cesanta网站上查找有关它的模式信息 。
Linux
真? :-)
将ESP8266连接到计算机
好的,我们需要做的第一件事是将ESP8266芯片连接到电脑。 你可以通过几种方法来实现。
NodeMCU
如果您有一个NodeMCU模块,通过板载的UART到USB转换器,您需要做的是通过USB将模块连接到计算机。 吻!
连接外部UART-USB转换器
如果您的ESP模块没有内部UART-USB转换器,则需要外部UART-USB转换器。 有一吨他们 - 只是谷歌它。
选择适用于Linux(基本上大多数),并具有3.3V引脚,并记住:大多数UART-USB转换器都具有3.3V和5V引脚,但不应将ESP连接到5V引脚。 该器件不耐压,可能会烧坏您的模块。
现在连接(ESP - >转换器):
VCC - > 3.3V
GND - > GND
RX0 - > TX (不是RX)
TX0 - > RX
CH_PD - > 3.3V
与Arduino连接
如果您没有UART-USB转换器,但具有3.3V引脚的Arduino,您可以轻松使用它来连接ESP:
- 通过USB将Arduino连接到电脑
- 将Arduino的RESET连接到GND:需要禁用主机处理器,因为我们只需要UART-USB模块
- 连接ESP(ESP - > Arduino)
- VCC - > 3.3V
- GND - > GND
- RX0 - > RX0 (不是TX)
- TX0 - > TX
- CH_PD - > 3.3V
验证连接
如果您的连接正常,ESP应显示为新的tty设备。 通常,通过UART-USB转换器连接的NodeMCU和ESP显示为/ dev / ttyUSBx(x = 0,1,2等),Arduino的版本显示为/ dev / ttyACMx(x = 0,1,2等)
您可以使用命令dmesg | grep usb找到你的设备。
例如,在连接NodeMCU后,您会看到类似的东西:
[ 1496.765417] usb 2-3.3: new full-speed USB device number 15 using xhci_hcd
[ 1496.867729] usb 2-3.3: New USB device found, idVendor=10c4, idProduct=ea60
[ 1496.867736] usb 2-3.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1496.867740] usb 2-3.3: Product: CP2102 USB to UART Bridge Controller
[ 1496.867743] usb 2-3.3: Manufacturer: Silicon Labs
[ 1496.867745] usb 2-3.3: SerialNumber: 4202
[ 1497.900384] usbcore: registered new interface driver usbserial
[ 1497.900423] usbcore: registered new interface driver usbserial_generic
[ 1497.900457] usbserial: USB Serial support registered for generic
[ 1497.903897] usbcore: registered new interface driver cp210x
[ 1497.903989] usbserial: USB Serial support registered for cp210x
[ 1497.904382] usb 2-3.3: cp210x converter now attached to ttyUSB0
您可以看到,NodeMCU现在可用作/ dev / ttyUSB0 。
作为最后检查,使用任何终端连接到新设备; 我要用picocom 这是一个轻便的终端。 在Ubuntu中可以安装:
sudo apt install picocom
试:
picocom /dev/ttyUSB0 -b 115200
如果一切正常,您应该在picocom输出中看到“ Terminal ready ”。
修复“拒绝访问”错误
如果picocom说“访问被拒绝”通常意味着当前用户不是拨号组的成员:在Linux中,为了访问串口,用户必须是该组的成员。
跑:
sudo usermod -aG docker $USER
命令,注销,重新登录并尝试重新连接ESP。 “拒绝访问”应该没有了。
建设Mongoose
从这里下载最新的Mongoose版本。
Mongoose附带了ESP8266和RTOS SDK的示例。 它位于GitHub 。
注意:ESP8266有两个版本的SDK。 第一个是非操作系统,第二个是基于RTOS的。 在本文中,我将使用后者。 要找到他们之间的区别,谷歌或在官方论坛上阅读这个答案。
要构建示例,您有两个选项:
- 使用码头和即时使用的Docker窗图像
- 在您的计算机上安装SDK和工具链
使用Docker
这更简单,我相信更好的方法。 Cesanta的码头图像包含构建Mongoose for ESP所需的所有内容(而不仅仅是Mongoose - 任何ESP应用程序)。 所以,您不需要在本地安装东西,您可以轻松地与朋友和同事分享代码,以便他们能够构建固件并获得完全相同的结果。
码头安装指南可在此处使用 。 尝试,这真的很简单,你只需要将Docker存储库添加到你的Linux中,并将其作为一个常规程序安装到apt中 。
一旦docker安装到mongoose / examples / ESP8266_RTOS文件夹并运行build.sh
在第一个build docker将下载所需的图像。 这可能需要一段时间,具体取决于您的互联网频道。 但是,一旦build.sh在./bin文件夹中完成,你会发现两个.bin文件。
那就是固件。 你这样做
使用本地SDK
如果docker对您而言太简单,或者由于任何原因您想要使用本地安装的工具,您也可以这样做。
这有点困难和无聊,但没有什么太复杂。 特别是,由于Cesanta为您建立了一些工具,您不需要从源代码构建它们。
这是它的工作原理:
- 从这个 repo克隆ESP RTOS SDK。 示例makefile在/ opt / ESP8266_RTOS_SDK文件夹中查找它,因此,可以在构建示例之前将克隆的repo放入此文件夹或修改其路径(见下文)。
- 从此公用文件夹下载xtensa-lx106-elf.tar.bz2。
- 打包xtensa-lx106-elf.tar.bz2文件。 例如,到/ opt文件夹:
sudo tar -xvf xtensa-lx106-elf.tar.bz2 -C / opt
- 修改您的PATH变量,例如,它将工具链解包到/ opt文件夹中使用以下命令:
export PATH = / opt / xtensa-lx106-elf / bin:$ PATH
(我也建议将此命令添加到.bashrc或.profile文件夹中,以便在系统重启后保持更改)
现在运行:
$ export SDK_PATH=/opt/ESP8266_RTOS_SDK # Put your path to SDK here
$ export BIN_PATH=./bin; mkdir ./bin
$ make clean; make BOOT=none APP=0 SPI_SPEED=40 SPI_MODE=dio SPI_SIZE_MAP=0
而现在,如果一切安装正确,你将有固件在./bin文件夹
你再次做到了!
闪烁的ESP
有很多工具可用于闪存ESP8266。 我们要使用esptool 。 要使用它,克隆这个 repo,并在您的PATH变量中添加esptool.py的路径(这是可选的,只是方便)。
现在断开picocom,如果仍然连接(提示:按Ctrl + A; Ctrl + D退出)并运行:
esptool.py --port /dev/ttyUSB0 --baud 230400 \
write_flash --flash_mode=dio --flash_size=4m \
0x00000 ${BIN_PATH}/eagle.flash.bin \
0x20000 ${BIN_PATH}/eagle.irom0text.bin \
0x7e000 ${SDK_PATH}/bin/esp_init_data_default.bin
重要提示:如果您的模块不是NodeMCU,则需要在闪烁之前将GPIO0接地(将GPIO0接地模块切换到闪烁模式)。 闪烁后,将GPIO0从地线断开并重启ESP。
如果没有发生错误,您将看到如下输出:
Connecting...
Erasing flash...
Took 0.58s to erase flash block
Wrote 35840 bytes at 0x00000000 in 1.8 seconds (157.5 kbit/s)...
Erasing flash...
Took 2.02s to erase flash block
Wrote 301056 bytes at 0x00020000 in 15.4 seconds (156.7 kbit/s)...
Erasing flash...
Took 0.11s to erase flash block
Wrote 1024 bytes at 0x0007e000 in 0.1 seconds (163.5 kbit/s)...
Leaving…
准备! 现在,您的固件会闪烁设备。
第一个结果
现在你应该会看到一个“Mongoose”WiFi网络出现。 该示例设置AP。 使用密码“Mongoose”连接,然后导航到http://192.168.4.1/,您将看到一个“你好,世界”的问候页面。
恭喜! 您只需运行ESP8266上的Web服务器!
下一步
接下来的步骤取决于你。 您可以使用所描述的示例作为起点。
查看其user_main.c文件。 它设置了WiFi接入点并启动Web服务器。 您可以轻松地将AP模式更改为站模式(并连接到WiFi网络),并使用Mongoose API来实现任何您想要的。 这是使用Mongoose的常见方法,因此,您可以使用另一个Mongoose示例来构建您的程序,并在您的ESP设备上拥有http,tcp,udp,mqtt和更多功能。
使用Espressif文档(例如这个 )来了解如何规则ESP8266 WiFi模块(而不是WiFi)和Mongoose 文档来发现Mongoose功能。
拳打不死!