Mongoose官方Github地址
官方对于Mongoose的简介:
Mongoose - Embedded Web Server / Embedded Network Library
Mongoose is a network library for C/C++. It provides event-driven non-blocking APIs for TCP, UDP, HTTP, WebSocket, MQTT, and other protocols. It is designed for connecting devices and bringing them online. On the market since 2004, used by vast number of open source and commercial products - it even runs on the International Space Station! Mongoose makes embedded network programming fast, robust, and easy. Features include:
- Cross-platform:
- works on Linux/UNIX, MacOS, Windows, Android
- works on STM32, NXP, ESP32, NRF52, TI, Microchip, and other
- write code once - and it'll work everywhere
- ideal for the unification of the network infrastructure code across company
- Built-in protocols: plain TCP/UDP, SNTP, HTTP, MQTT, Websocket, and other
- Asynchronous DNS resolver
- Tiny static and run-time footprint
- Source code is both ISO C and ISO C++ compliant
- Easy to integrate: just copy mongoose.c and mongoose.h files to your source tree
- Built-in TCP/IP stack with drivers for bare metal or RTOS systems
- Available drivers: STM32F, STM32H; NXP RT1xxx; TI TM4C; Microchip SAME54; Wiznet W5500
- A complete Web device dashboard on bare metal ST Nucleo boards is only 6 files
- For comparison, a CubeIDE generated HTTP example is 400+ files
- Can run on top of an existing TCP/IP stack with BSD API, e.g. lwIP, Zephyr, Azure, etc
- Built-in TLS 1.3 ECC stack. Also can use external TLS libraries - mbedTLS, OpenSSL, or other
- Does not depend on any other software to implement networking
- Built-in firmware updates for STM32 H5, STM32 H7
See Mongoose - an embedded Web Server, MQTT and Websocket library for complete documentation, videos, case studies, etc.
大致意思如下:
1:mongoose是一个用于C/C++的网络库,它为TCP、UDP、HTTP、WebSocket、MQTT实现了事件驱动的非阻塞API。Mongoose使嵌入式编程快速、健壮、简单。
2:mongoose可在windows、Linux、Mac和许多嵌入式架构上运行。它可以在现有的操作系统和TCP/IP堆栈(如FreeRTOS和lwIP)上运行,也可以在裸机上运行,利用Mongoose内置的TCP/IP堆栈和网络驱动程序。
这里的译文源自:mongoose简介这位博主,我没有自己翻译,这位博主写的文章也很细,大家可以去看看。我这里是简单实现了一下MQTT,他的是HTTP。
1:下载Mongoose
可以从 Mongoose 的 GitHub 页面下载最新版本的 Mongoose 库:Mongoose GitHub
解压拿到官方源码之后,目录结构如下:(不同版本可能不同,大致一样即可)
./mongoose-master
├── examples 里面有各类MCU、单片机的一些Mongoose的应用示例
├── LICENSE Mongoose官方的版权声明
├── mongoose.c Mongoose.c源文件(移植程序的核心源文件)
├── mongoose.h Mongoose.c头文件(移植程序的核心头文件)
├── README.md readme说明文档
├── reference-projects 示例工程(一些完整的工程文件)
├── src Mongoose库源文件
├── test 测试用例
└── tutorials 各类示例(包含HTTP、MQTT、TCP、UDP’等)(本次的核心)
来到“tutorials”目录下,这里有很多关于Mongoose网络库的使用例子。我们主要关注MQTT那个目录里的文件即可,其他介绍不在本次博客范围内。
2:打开MQTT目录:(终端也可以,随便)
├── mqtt-client 一个用于实现 MQTT 协议的客户端库
│ ├── main.c
│ ├── Makefile
│ ├── mongoose.c -> ../../../mongoose.c
│ ├── mongoose.h -> ../../../mongoose.h
│ ├── packed_fs.c -> ../../http/http-client/packed_fs.c
│ └── README.md
├── mqtt-client-aws-iot 一个用来与 AWS IoT 核心服务进行通信的 MQTT 客户端库
│ ├── main.c
│ ├── Makefile
│ ├── mongoose.c -> ../../../mongoose.c
│ ├── mongoose.h -> ../../../mongoose.h
│ ├── packed_fs.c -> ../../http/http-client/packed_fs.c
│ └── README.md
├── mqtt-over-ws-client 一个使用 WebSocket 协议实现 MQTT 协议的客户端库
│ ├── main.c
│ ├── Makefile
│ ├── mongoose.c -> ../../../mongoose.c
│ ├── mongoose.h -> ../../../mongoose.h
│ ├── packed_fs.c -> ../../http/http-client/packed_fs.c
│ └── README.md
├── mqtt-server 一个实现 MQTT 协议的服务器端组件
│ ├── main.c
│ ├── Makefile
│ ├── mongoose.c -> ../../../mongoose.c
│ ├── mongoose.h -> ../../../mongoose.h
│ └── README.md
└── README.md (里面有Mongoose官方的使用指南,建议看看,理解一下)(Mongoose :: Documentation)(点击网址即可查看)
mqtt目录下每一个子目录里面都有一个Makefile文件, 如果想直接运行示例,直接在相应的目录里执行“make”命令即可(不要改动文件路径,否则会报错,提示找不到相关文件)
我没有其他特殊性需求,所以直接使用“ mqtt-client”和“mqtt-server”就可以了。并且由于我没有MQTT服务器的需求,所以我也没有使用到“mqtt-server”这份代码。即:我只使用了“mqtt-client”这一份代码而已。
3:快速搭建一个简易MQTT服务器--EMQX
下载 EMQX 开源版
我自己是下载了EMQX的开源版来用,你们可以看自己的情况来。跟着EMQX的官网来搭建就很快。搭建完成之后,浏览器输入:IP加18083就可以打开“EMQX Open Source”,默认的账号:admin,密码:public。EMQX就不做介绍,有些的朋友可以搜一下怎么使用。你用别的MQTT服务器也可以。
创建设置客户端的用户与密码,我的一个server(mqtt-client),一个是client(MQTTfx)
4: 开始使用Mongoose_mqtt
打开“tutorials”下的mqtt->mqtt-client代码。
把里面的Makefile文件、二进制可执行文件(如有)、packed_fs.c文件删除。packed_fs.c:好像是嵌入式里面经常用到的字库文件(不太确定,知道的朋友可以在下方留言,我会做出相应的更正)
然后把“main.c”里面的这些改成你自己需要的:
在timer_fn函数里添加相关的验证信息。
保存之后编译,生成二进制文件--client,可以自己自定义:
gcc main.c mongoose.c -o client
5:验证
我是利用“mqttfx”这个软件模拟另一个MQTT客户端与client进行通信的。
下载链接:MQTTfx工具 (这个是需要积分的,如果没有的小伙伴可以取别的地方找找,或者留言)
(后续完善相关细节······)