利用Mongoose库实现MQTT通信

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工具 (这个是需要积分的,如果没有的小伙伴可以取别的地方找找,或者留言)

(后续完善相关细节······)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/149189.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【吉林一号卫星简介】

吉林一号卫星 吉林一号卫星是中国长光卫星技术有限公司研制的遥感卫星,也是该公司在建的核心工程,是中国重要的光学遥感卫星星座。以下是对吉林一号卫星的详细介绍: 一、卫星概况 中文名:吉林一号外文名:Jilin 1 Bus…

视频汇聚EasyCVR视频监控平台调取接口提示“认证过期”是什么原因?

视频汇聚EasyCVR视频监控平台,作为一款智能视频监控综合管理平台,凭借其强大的视频融合汇聚能力和灵活的视频能力,在各行各业的应用中发挥着越来越重要的作用。EasyCVR平台具备强大的拓展性和灵活性,支持多种视频流的外部分发&…

丝杆支撑座许用条件的解析

丝杆支撑座连接滚珠丝杆使用能够支撑滚珠丝杆,使之更加平稳的运动,显著提高传动效率、降低噪音、提高精度、延长使用寿命等优势,是自动化设备中重要的传动元件。影响丝杆支撑座的因素主要包括轴承类型、润滑脂的使用、密封圈的保护、使用环境…

实现边框渐变效果

实现思路:定义一个具有相对定位、白色背景和透明边框的元素。边框宽度为3像素,并且有20像素的圆角。通过background-clip: padding-box;确保背景不会延伸到边框之外。 使用一个伪元素&::before来创建一个渐变边框。这个伪元素被放置在主元素的外部&…

Qt-QComboBox输入类控件(31)

目录 描述 核心方法 核心信号 使用 代码方式 界面操作方式 动态使用 如何看待输入输出 String与QString互相转化 描述 一个可以下拉的输入框 核心方法 addItem(constQString&)添加⼀个条⽬currentIndex()获取当前条⽬的下标 从0开始计算.如果当前没有条⽬被选中…

Xcode 16 上传AppStore遇到第三方库 bitcode 的问题

Xcode 16 上传AppStore遇到第三方库 bitcode 的问题 最近两天更新了Xcode 16,然后正好要发布新版本的App,打包Adhoc没问题,但是上传AppStoreConnect或者TestFlight就不行解决方案参考资料 最近两天更新了Xcode 16,然后正好要发布新…

RegNet(CVPR2020):Designing Network Design Spaces,设计一个网络设计空间!

RegNet:Designing Network Design Spaces RegNet:设计一个网络设计空间 论文地址: https://arxiv.org/pdf/2003.13678 1、前言 在这项工作中,作者提出了一种新的网络设计范例。 作者的目标是帮助增进对网络设计的理解并发现跨设置…

【js逆向学习】酷我音乐排行榜 python+nodejs(webpack)

逆向目标 目标网址: https://www.kuwo.cn/rankList目标接口: https://www.kuwo.cn/api/www/bang/bang/musicList 加密参数: 参数一:secret参数二:reqId 逆向过程 老规矩先分析网络请求,我们可以分析到网络请求是通过ajax进行的&#xff…

【研赛E题成品论文】24华为杯数学建模研赛E题成品论文+可运行代码丨免费分享

2024华为杯研究生数学建模竞赛E题成品论文已出! E题 高速公路应急车道紧急启用模型 一、问题一模型建立与求解 1.1 问题一求解思路 赛题要求我们基于四个观测点的视频数据,提取交通流参数并分析这些参数随时间的变化规律。交通流参数包括:…

JAVA并发编程系列(11)线程池底层原理架构剖析

面试官:说说JAVA线程池的几个核心参数? 之前我们用了10篇文章详细剖析了synchronized、volatile、CAS、AQS、ReentrantLock、Semaphore、CountDownLatch、CyclicBarrier、并发锁、Condition等各个核心基础原理,今天开始我们说说并发领域的各种…

ChatGLM-6B:部署指南与实战应用全解析

🍑个人主页:Jupiter. 🚀 所属专栏:Linux从入门到进阶 欢迎大家点赞收藏评论😊 目录 SD3ComfyUI文生图部署步骤DAMODEL-ChatGLM-6B 服务端部署1.1、实例创建1.2、模型准备1.3、模型启动 SD3ComfyUI文生图部署步骤 Chat…

Redis6.0.9配置redis集群

写在前面 最近在完成暑期大作业,期间要将项目部署在云服务器上,其中需要进行缓存的配置,决定使用Redis,为了使系统更加健壮,选择配置Redis-Cluster。由于服务器资源有限,在一台服务器上运行6个Redis Instan…

pnpm : 无法加载文件

1、以管理员身份运行window powershell 2、执行Get-ExecutionPolicy,显示Restricted 3、执行set-ExecutionPolicy,会提示输入参数,此时输入RemoteSigned回车 4、执行y回车

想把泰文从文本上识别,什么软件工具好用呢?

泰文识别技术涉及将泰文图像转换成数字文本,主要通过光学字符识别(OCR)技术实现。这项技术广泛应用于文档处理、语言学习和翻译服务。实现泰文识别的方法包括使用手机应用程序、在线服务、专业软件,以及结合人工智能和机器学习。此…

【Docker】如何让docker容器正常使用nvidia显卡

首先确保宿主机正常安装了显卡驱动 nvidia-smi打印显卡信息如下: 安装nvidia-container-toolkit工具 sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit sudo systemctl restart docker运行如下命令测试显卡是否在容器内可用 …

Arduino中使用库文件读取陀螺仪MPU6050欧拉角

目录 1、库文件安装 (1)方法1-网上下载库文件 (2)方法2-本地库文件夹中添加 2、欧拉角获取 (1)打开测试程序 (2)读欧拉角程序 (3)坐标系和欧拉角说明 …

征才令!开物™创新论文激励计划,等你来大展身手

背景介绍 随着云计算、人工智能的迅猛发展,现有的IT系统变得日益复杂,网络技术亟需创新才能满足现代数据中心、智算中心的网络需求。在这一背景下,被定义为“未来数据中心第三颗主力芯片”的DPU崭露头角,成为未来网络技术的发展方…

iOS V2签名网站系统源码 开源免授权

简介 这是一款iOS 签名站的开源源码,免去了授权,它支持UDID获取、软件选择以及签名码功能。 同时,用户可以多开APP进行安装。这是一个自主可下载的版本,感兴趣的用户可以自行获取。 界面

aws s3 存储桶 前端组件上传简单案例

写一个vue3 上传aws oss存储的案例 使用到的插件 npm install aws-sdk/client-s3 注意事项 : 1. 本地调试 , 需要设置在官网设置跨域 必须!!! 否则调试不了 ,前端代理是不起作用的 ,因为是插…

【JavaEE】——单例模式引起的多线程安全问题:“饿汉/懒汉”模式,及解决思路和方法(面试高频)

阿华代码,不是逆风,就是我疯,你们的点赞收藏是我前进最大的动力!!希望本文内容能够帮助到你! 目录 一:单例模式(singleton) 1:概念 二:“饿汉模…