Flutter MQTT通信插件zyg_mqtt_plugin的使用

Flutter MQTT通信插件zyg_mqtt_plugin的使用

zyg_mqtt_plugin

这是中裕冠的MQTT插件。


使用步骤

安装

在项目的pubspec.yaml文件中添加以下依赖:

dependencies:
  zyg_mqtt_plugin: ^0.0.2

引入

在需要使用该插件的地方引入:

import 'package:zyg_mqtt_plugin/zyg_mqtt_plugin.dart';

1. 挂载 ZygMqttWidget()

示例代码如下:

Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: Stack(
            children: [
              ZygMqttWidget(),
            ],
          ),
        ),
      ),
    );
}

2. 配置(必须先配置,再去连接)

// 先配置,再去连接
const productKey = 'a1WPnByrqko'; // 产品密钥
const deviceName = '1224708605@qq.com'; // 设备名称
const deviceSecret = '3a694c1543fa8582ffc6d8ff1d7af6ca'; // 设备密钥
// 当前产品和设备所属地域的ID
// const region = 'us-west-1';
const region = 'cn-shanghai';

// 接收消息时使用的订阅URL
String subscribeUrl = '/${productKey}/${deviceName}/user/get';
// 发送消息时使用的发布URL
String publishUrl = '/${productKey}/${deviceName}/user/update';

// 配置MQTT插件
ZygMqttPlugin().setConfigure(productKey, deviceName, deviceSecret, region, subscribeUrl, publishUrl);

3. 设置连接状态回调

// 连接状态回调
ZygMqttPlugin().myConnectStateCallback = (state) {
  if (ZygConnectState.connected == state) {
    print('已连接');
    setState(() {
      connectState = '已连接';
    });
  } else if (ZygConnectState.disconnect == state) {
    print('已断开');
    connectState = '已断开';
  }
};

4. 设置接收消息回调

// 接收消息回调,rawData是接收到的原始数据,jsonData是JSON格式的数据
ZygMqttPlugin().myReceiveCallback = (rawData, jsonData) {
  setState(() {
    receiveDataList.add(rawData.toString());
  });
};

5. 去连接MQTT

// 连接到MQTT服务器
ZygMqttPlugin().goToConnetMqtt();

6. 去发送MQTT消息

// 获取电量的指令
Map map = {
  "target_device": "89860124801080169975", // 目标设备ID
  "cmd": "detect_battery" // 命令
};

String msg = jsonEncode(map);

// 发送数据
ZygMqttPlugin().sendData(msg);

完整示例代码

以下是完整的示例代码:

import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:zyg_mqtt_plugin/zyg_mqtt_plugin.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _platformVersion = 'Unknown';
  final _zygMqttPlugin = ZygMqttPlugin();
  List<String> receiveDataList = [];
  String connectState = '未连接';

  [@override](/user/override)
  void initState() {
    super.initState();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: Stack(
            children: [
              ZygMqttWidget(),
              ListView(
                children: [
                  Text(
                    '连接状态:$connectState',
                    style: TextStyle(color: Colors.red),
                  ),
                  SizedBox(height: 20),
                  FilledButton(
                    onPressed: () {
                      // 配置MQTT参数
                      const productKey = 'a1WPnByrqko';
                      const deviceName = '1224708605@qq.com';
                      const deviceSecret = '3a694c1543fa8582ffc6d8ff1d7af6ca';
                      const region = 'cn-shanghai';

                      String subscribeUrl = '/${productKey}/${deviceName}/user/get';
                      String publishUrl = '/${productKey}/${deviceName}/user/update';

                      // 设置MQTT配置
                      ZygMqttPlugin().setConfigure(productKey, deviceName, deviceSecret, region, subscribeUrl, publishUrl);

                      // 设置连接状态回调
                      ZygMqttPlugin().myConnectStateCallback = (state) {
                        if (ZygConnectState.connected == state) {
                          print('已连接');
                          setState(() {
                            connectState = '已连接';
                          });
                        } else if (ZygConnectState.disconnect == state) {
                          print('已断开');
                          setState(() {
                            connectState = '已断开';
                          });
                        }
                      };

                      // 设置接收消息回调
                      ZygMqttPlugin().myReceiveCallback = (rawData, jsonData) {
                        setState(() {
                          receiveDataList.add(rawData.toString());
                        });
                      };

                      // 连接到MQTT服务器
                      ZygMqttPlugin().goToConnetMqtt();
                    },
                    child: Text('连接MQTT'),
                  ),
                  SizedBox(height: 20),
                  FilledButton(
                    onPressed: () {
                      // 发送电量检测命令
                      Map map = {
                        "target_device": "89860124801080169975",
                        "cmd": "detect_battery"
                      };
                      String msg = jsonEncode(map);
                      ZygMqttPlugin().sendData(msg);
                    },
                    child: Text('发送数据'),
                  ),
                  ...receiveDataList.map((data) => Text(data)).toList(),
                ],
              ),
            ],
          ),
        ),
      ),
    );
  }
}

更多关于Flutter MQTT通信插件zyg_mqtt_plugin的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter MQTT通信插件zyg_mqtt_plugin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


zyg_mqtt_plugin 是一个用于在 Flutter 应用中实现 MQTT 通信的插件。MQTT 是一种轻量级的发布/订阅消息传输协议,常用于物联网(IoT)设备之间的通信。使用 zyg_mqtt_plugin,你可以轻松地在 Flutter 应用中集成 MQTT 功能。

以下是使用 zyg_mqtt_plugin 的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 zyg_mqtt_plugin 的依赖:

dependencies:
  flutter:
    sdk: flutter
  zyg_mqtt_plugin: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 导入插件

在你的 Dart 文件中导入 zyg_mqtt_plugin

import 'package:zyg_mqtt_plugin/zyg_mqtt_plugin.dart';

3. 初始化 MQTT 客户端

创建一个 MQTT 客户端实例并连接到 MQTT 服务器:

final mqttClient = ZygMqttPlugin();

Future<void> connectToMqtt() async {
  final broker = 'mqtt.example.com'; // MQTT 服务器地址
  final port = 1883; // MQTT 端口
  final clientId = 'flutter_client'; // 客户端 ID

  await mqttClient.connect(broker, port, clientId);
}

4. 订阅主题

订阅一个或多个 MQTT 主题以接收消息:

Future<void> subscribeToTopic(String topic) async {
  await mqttClient.subscribe(topic);
}

5. 发布消息

向指定的 MQTT 主题发布消息:

Future<void> publishMessage(String topic, String message) async {
  await mqttClient.publish(topic, message);
}

6. 接收消息

设置一个回调函数来处理接收到的消息:

void onMessageReceived(String topic, String message) {
  print('Received message from $topic: $message');
}

mqttClient.onMessageReceived = onMessageReceived;

7. 断开连接

在应用程序退出或不再需要 MQTT 连接时,断开连接:

Future<void> disconnectFromMqtt() async {
  await mqttClient.disconnect();
}

8. 处理错误

你可以设置一个错误处理回调来处理连接或通信中的错误:

void onError(dynamic error) {
  print('MQTT Error: $error');
}

mqttClient.onError = onError;

示例代码

以下是一个完整的示例,展示了如何使用 zyg_mqtt_plugin 进行 MQTT 通信:

import 'package:flutter/material.dart';
import 'package:zyg_mqtt_plugin/zyg_mqtt_plugin.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MqttExample(),
    );
  }
}

class MqttExample extends StatefulWidget {
  [@override](/user/override)
  _MqttExampleState createState() => _MqttExampleState();
}

class _MqttExampleState extends State<MqttExample> {
  final mqttClient = ZygMqttPlugin();

  [@override](/user/override)
  void initState() {
    super.initState();
    connectToMqtt();
    mqttClient.onMessageReceived = onMessageReceived;
    mqttClient.onError = onError;
  }

  Future<void> connectToMqtt() async {
    final broker = 'mqtt.example.com';
    final port = 1883;
    final clientId = 'flutter_client';

    await mqttClient.connect(broker, port, clientId);
    await subscribeToTopic('test/topic');
  }

  Future<void> subscribeToTopic(String topic) async {
    await mqttClient.subscribe(topic);
  }

  Future<void> publishMessage(String topic, String message) async {
    await mqttClient.publish(topic, message);
  }

  void onMessageReceived(String topic, String message) {
    print('Received message from $topic: $message');
  }

  void onError(dynamic error) {
    print('MQTT Error: $error');
  }

  [@override](/user/override)
  void dispose() {
    mqttClient.disconnect();
    super.dispose();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('MQTT Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () => publishMessage('test/topic', 'Hello MQTT'),
          child: Text('Publish Message'),
        ),
      ),
    );
  }
}
回到顶部