在Linux中使用Mongoose开发ESP8266的网络应用程序

我们来谈谈如何开始使用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:

  1. 通过USB将Arduino连接到电脑
  2. 将Arduino的RESET连接到GND:需要禁用主机处理器,因为我们只需要UART-USB模块
  3. 连接ESP(ESP - > Arduino)
    1. VCC - > 3.3V
    2. GND - > GND
    3. RX0 - > RX0 (不是TX)
    4. TX0 - > TX
    5. 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的。 在本文中,我将使用后者。 要找到他们之间的区别,谷歌或在官方论坛上阅读这个答案。

要构建示例,您有两个选项:

  1. 使用码头和即时使用的Docker窗图像
  2. 在您的计算机上安装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为您建立了一些工具,您不需要从源代码构建它们。

这是它的工作原理:

  1. 这个 repo克隆ESP RTOS SDK。 示例makefile在/ opt / ESP8266_RTOS_SDK文件夹中查找它,因此,可以在构建示例之前将克隆的repo放入此文件夹或修改其路径(见下文)。
  2. 从此公用文件夹下载xtensa-lx106-elf.tar.bz2。
  3. 打包xtensa-lx106-elf.tar.bz2文件。 例如,到/ opt文件夹:

    sudo tar -xvf xtensa-lx106-elf.tar.bz2 -C / opt

  4. 修改您的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功能。

拳打不死!

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏