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

目录

喷淋实验--嵌入式实训

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级别,使得它成为物联网和其他低带宽、高延迟网络环境下的理想选择。

简单的喷淋实验--嵌入式实训_第1张图片

简单的喷淋实验--嵌入式实训_第2张图片



采集信息:

小程序/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
#include"mqtt.h"
#include

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表示程序正常结束。

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

运行结果:

简单的喷淋实验--嵌入式实训_第3张图片

简单的喷淋实验--嵌入式实训_第4张图片

运行视频如下:

喷淋实验--实训

你可能感兴趣的:(单片机,平时学习,课外新知识,apache)