简单的喷淋实验--嵌入式实训

news2024/10/1 19:20:53

目录

喷淋实验--嵌入式实训

1.MQTT通信原理

2.MQTT库的移植

3.代码流程

运行视频如下:


喷淋实验--嵌入式实训

1.MQTT通信原理

MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅消息传输协议,旨在提供可靠、高效的通信机制,适用于各种网络环境和设备。

MQTT通信原理如下:

  1. 客户端连接:MQTT协议使用TCP/IP作为传输层协议,客户端通过建立与MQTT代理服务器(也称为Broker)的TCP连接来进行通信。

  2. 订阅主题:客户端可以订阅一个或多个主题(Topic),表示对感兴趣的消息进行关注。主题是消息发布者和订阅者之间的桥梁。

  3. 发布消息:客户端可以发布消息到指定的主题。消息由两部分组成:主题和有效负载(Payload)。有效负载可以是任何格式的数据,例如文本、二进制等。

  4. 代理服务器路由:当有消息发布到某个主题时,MQTT代理服务器将根据订阅关系,将消息路由给所有订阅了该主题的客户端。

  5. 消息传输质量:MQTT支持三种消息传输质量:

    • 最多一次(At most once):消息发布者发布后,不会进行确认,且不保证消息能够成功传输到订阅者。
    • 至少一次(At least once):消息发布者发布后,会收到确认,如果没有收到确认,则会进行重传,保证消息至少被传输一次到订阅者。
    • 正好一次(Exactly once):消息发布者发布后,会进行两阶段确认,确保消息只传输一次到订阅者。
  6. 保持连接:MQTT协议支持客户端和代理服务器之间的长连接,避免了频繁建立和断开连接的开销。客户端和代理服务器之间可以通过心跳机制保持连接状态。

  7. QoS级别:MQTT协议定义了三个QoS级别(Quality of Service):

    • QoS 0:最多一次,消息会尽力传输,但不保证可靠性。
    • QoS 1:至少一次,确保消息至少传输一次,可能会重复传输。
    • QoS 2:正好一次,确保消息仅传输一次,使用了两阶段确认机制。

        总体来说,MQTT采用发布/订阅模型,通过代理服务器实现消息的路由和传输,支持灵活的订阅主题和发布消息的方式,以及可配置的消息传输质量和QoS级别,使得它成为物联网和其他低带宽、高延迟网络环境下的理想选择。



采集信息:

小程序/Linux           订阅者         1703161172612/AIOTSIM2APP

元宇宙                     发布者         1703161172612/AIOTSIM2APP

Linux订阅的主题是元宇宙发布的主题


控制设备:

小程序/Linux         发布者                 1703161172612/APP2AIOTSIM

元宇宙                   订阅者                 1703161172612/APP2AIOTSIM

Linux发布的主题是元宇宙订阅的主题


2.MQTT库的移植

目的:让Linux操作系统支持MQTT通信。

  1. MQTT库移植的步骤在群文件中下载MQTT源码文件压缩包paho.mqtt.c-1.3.0.tar.gz
  2. 将源码文件压缩包放到Linux操作系统中
  3. 使用tar -xvf paho.mqtt.c-1.3.0.tar.gz命令解压MQTT库文件压缩包

4.执行下述命令:  

       cd paho.mqtt.c-1.3.0/install/

            sudo cp include/* /usr/include/

            sudo cp -d lib/*so* /usr/lib/

3.代码流程

打开MQTT
订阅主题(元宇宙的发布主题)

while(1)
{
获取数据
if(数据   >   最大值)
{
		发送消息(给元宇宙的订阅主题发消息,喷淋关);
}
else if(数据   <   最小值)
{
发送消息(给元宇宙的订阅主题发消息,喷淋开);
}
打印数据;
sleep(1);
}
关闭MQTT;

函数接口:

打开MQTT
mqtt_init();


订阅函数和发布函数
int mqtt_subscribe(const char *topic)
功能:订阅主题
参数:元宇宙发布主题

int mqtt_publish(const char *topic, char *msg)
功能:发布消息
参数:元宇宙的订阅主题	消息

获取数据
float get_virtual_env()
功能:获取土壤湿度数据
参数:空

关闭MQTT;
exit_mqtt();

#include<stdio.h>
#include"mqtt.h"
#include<unistd.h>

int main(int argc, char *argv[]){
    //1-连接服务器
    mqtt_init();

    //2-订阅元宇宙平台主题,获得数据串
        //通过目标节点的发布主题,才能的得到发布的内容
    mqtt_subscribe("1703406852492/AIOTSIM2APP");

    //3.定义变量接收到存储解析的数据
    float soilHum=0;

    //4.循环获取数据,下发控制指令
    while (1){
        sleep(1);
        soilHum= get_virtual_env();
        if (soilHum>80){
            mqtt_publish("1703406852492/APP2AIOTSIM", "{\"irrigated\":false}");
            mqtt_publish("1703406852492/APP2AIOTSIM", "{\"alarm\":true}");
            printf("关闭喷淋,警报响起。。。。\n");
        }
        else if (soilHum<10){
            mqtt_publish("1703406852492/APP2AIOTSIM", "{\"irrigated\":true}");
            mqtt_publish("1703406852492/APP2AIOTSIM", "{\"alarm\":false}");
            printf("打开喷淋,警报关闭。。。。\n");
        }
        sleep(1);
        printf("当前湿度:%.2f\n", soilHum);
    }
    exit_mqtt();
    return 0;
}

        上述程序使用MQTT协议进行物联网通信的示例程序。根据代码的逻辑,大致可以分为以下几个步骤:

  1. 导入必要的头文件,包括"stdio.h"、"mqtt.h"和"unistd.h"。

  2. 在主函数中,首先调用mqtt_init()函数来初始化MQTT连接。

  3. 调用mqtt_subscribe()函数订阅指定的主题,该主题用于接收元宇宙平台发布的数据。

  4. 定义一个float类型的变量soilHum,用于存储解析得到的数据。

  5. 进入一个无限循环,在循环中通过get_virtual_env()函数获取虚拟环境的湿度数据,并将其赋值给soilHum变量。

  6. 根据湿度数据的不同情况,使用mqtt_publish()函数向指定主题发送控制指令,控制喷淋器的状态和警报器的状态。

  7. 在每次循环中,使用printf()函数打印当前湿度数据。

  8. 最后,调用exit_mqtt()函数关闭MQTT连接,并返回0表示程序正常结束。

        总的来说,这段代码是一个简单的智能灌溉系统的控制程序,通过接收来自元宇宙平台的湿度数据,根据设定的阈值进行判断,并控制喷淋器和警报器的状态

运行结果:

运行视频如下:

喷淋实验--实训

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

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

相关文章

基于Java SSM框架实现教学质量评价评教系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现教学质量评价评教系统演示 摘要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;教学质量评价系统当然也不能排除在外。教学质量评价系统是以实际运用为…

Git本地仓库命令补充

说明&#xff1a;之前对Git本地仓库的基础使用总结过一篇笔记&#xff0c;Git本地仓库使用&#xff0c;本文对Git的一些基础命令进行补充。 一步提交 通常&#xff0c;我们本地仓库使用Git&#xff0c;文件都需要先 add&#xff0c;将文件从工作区加入到暂存区&#xff0c;然…

MOSFET管驱动设计细节,波形分析

MOSFET管驱动设计细节,波形分析 Chapter1 MOSFET管驱动设计细节,波形分析MOSFET驱动芯片的内部结构MOS驱动电路设计需要注意的地方MOS管驱动电路参考MOS管驱动电路的布线设计常见的MOS管驱动波形高频振铃严重的毁容方波又胖又圆的肥猪波打肿脸充正弦的生于方波他们家的三角波大…

windows server 2008 R2 x64 基础知识(2)

一、防火墙设置 1.windows防火墙的种类&#xff1a; 1)工作组网络环境 2)域网络环境 2.防火墙的配置 1)打开管理工具&#xff1a;win->管理工具->高级安全windows防火墙 2)管理配置&#xff1a; (1)防火墙的数据流类型 a.入站流量&#xff1a;外部访问内部分流量 b…

Trinity软件对转录组进行无参比对教程

写在前面 2023年将结束&#xff0c;小杜的生信笔记分享个人学习笔记也有2年的时间。在这2年的时间中&#xff0c;分享算是成为工作、学习和生活中的一部分。自己为了运行和维护社群也算花费大量的时间和精力&#xff0c;自己认为还算满意吧。对于个人来说&#xff0c;自己一直…

Tauri:构建高效安全的桌面应用程序 | 开源日报 No.124

tauri-apps/tauri Stars: 64.6k License: Apache-2.0 Tauri 是一个开源项目&#xff0c;它可以通过 Web 前端构建更小、更快和更安全的桌面应用程序。 该项目具有以下优势和特点&#xff1a; Tauri 可以帮助用户构建桌面应用程序&#xff0c;并使用 web 前端技术进行界面设计…

uniapp框架——初始化vue3项目(搭建ai项目)

uniapp框架 uni-app 是一个使用 Vue.js 开发所有前端应用的框架&#xff0c;开发者编写一套代码&#xff0c;可发布到iOS、Android、Web&#xff08;响应式&#xff09;、以及各种小程序&#xff08;微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/淘宝&#xff09;、快应用等多个平…

[deepspeed]deepspeed安装和测试代码

deepspeed官方对linux系统支持非常好&#xff0c;安装流程较为简单&#xff0c;推荐使用linux系统使用deepspeed.deepspeed由于要使用大模型进行训练和推理&#xff0c;建议显存>24GB。windows上官方不直接支持&#xff0c;但是网上有安装whl文件&#xff0c;只能0.8.3这样老…

【IO】IO模型与零拷贝

前言&#xff1a; 正在运行的程序其实就是系统中的一个进程&#xff0c;操作系统会为每一个进程分配内存空间&#xff0c;而内存空间分为两部分&#xff0c;一部分是用户空间&#xff0c;这是用户进程访问的内存区域&#xff1b;另一部分是内核空间&#xff0c;是操作系统内核访…

matlab实践(十一):导弹追踪

1.题目 a9.94,x062.06 2.方程 我们有&#xff1a; ( d x d t ) 2 ( d y d t ) 2 w 2 (\frac{\mathrm d\mathrm x}{\mathrm d\mathrm t})^2(\frac{\mathrm d\mathrm y}{\mathrm d\mathrm t})^2\mathrm w^2 (dtdx​)2(dtdy​)2w2 还有导弹始终指向船 ( d x d t d y d t ) …

R语言——基本操作(二)

目录 一、矩阵与数组 二、列表 三、数据框 四、因子 五、缺失数据 六、字符串 七、日期和时间 参考 一、矩阵与数组 matrix&#xff1a;创建矩阵&#xff0c;nrow 和 ncol 可以省略&#xff0c;但其值必须满足分配条件&#xff0c;否则会报错 只写一个值则自动分配&…

用CSDN训练的InsCode AI创作博文:数据治理体系建设

想不想用AI帮我们写方案&#xff1f; 想尝试用CSDN提供的InsCode AI创作助手协助我们进行技术方案的创作&#xff0c;看看效果如何&#xff0c;能不能辅助我们日常的方案编写与创作&#xff1f;以前用ChatGPT也尝试过&#xff0c;但对于专业性更强的内容&#xff0c;还有表现的…

企业知识库与企业文化:相互影响与共同发展

在当今知识经济的时代&#xff0c;企业知识库和企业文化已经成为企业核心竞争力的重要组成部分。它们之间相互影响&#xff0c;共同发展&#xff0c;为企业的发展提供强大的支撑。本文将探讨企业知识库与企业文化之间的关系&#xff0c;以及如何通过相互促进&#xff0c;推动企…

Windows漏洞利用开发——利用ROP绕过DEP保护

实验6 Windows漏洞利用开发 6.1实验名称 Windows漏洞利用开发 6.2实验目的 学习windows漏洞利用开发&#xff0c;使用kali linux相关工具对windows内目标程序进行漏洞利用 6.3实验步骤及内容 第三阶段&#xff1a;利用ROP绕过DEP保护 了解DEP保护理解构造ROP链从而绕过DEP…

【习题】运行Hello World工程

判断题 1. DevEco Studio是开发HarmonyOS应用的一站式集成开发环境。 正确(True)错误(False) 正确(True) 2. main_pages.json存放页面page路径配置信息。 正确(True)错误(False) 正确(True) 单选题 1. 在stage模型中&#xff0c;下列配置文件属于AppScope文件夹的是&am…

详解现实世界资产(RWAs)

区块链中的现实世界资产&#xff08;RWAs&#xff09;是代表实际和传统金融资产的数字通证&#xff0c;如货币、大宗商品、股票和债券。 实际世界资产&#xff08;RWA&#xff09;的通证化是区块链行业中最大的市场机会之一&#xff0c;潜在市场规模可达数万万亿美元。理论上&…

【Pytorch】学习记录分享7——PyTorch数据增强/经典网络架构训练图像分类模型

【Pytorch】学习记录分享7——PyTorch 1. 数据增强、transform 模块数据预处理部分&#xff1a;网络模块设置&#xff1a;网络模型保存与测试 2. 迁移学习3. 参考pytorch官网例子 1. 数据增强、transform 模块 数据预处理部分&#xff1a; 数据增强&#xff1a;torchvision中…

MySQL高级应用-2

MySQL高级应用-2 1事务应用场景:以上三个场景的共同点是什么&#xff1f;事务的概念&#xff1a;事务特性ACIDMySQL事务控制实例演示示例 1示例 2 拓展&#xff1a;事务的隔离级别作用JAVA处理事务-模拟转账 2 自定义变量用户变量示例&#xff1a;局部变量示例 3 流程控制结构分…

JavaWeb笔记之WEB项目

一. 版本控制 版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理&#xff0c;是软件配置管理的核心思想之一。 版本控制最主要的功能就是追踪文件的变更。它将什么时候、什么人更改了文件的什么内容等信息忠实地了记录下来。每一次文件的改变&a…

C# SqlSugar 数据库 T4模板

生成效果 模板代码 <# template debug"false" hostspecific"true" language"C#" #> <# output extension".cs" #> <# assembly name"System.Core" #> <# assembly name"System.Data" #>…