美文网首页
Linux环境下配置MQTT扩展库的操作手册(php5.6 宝塔

Linux环境下配置MQTT扩展库的操作手册(php5.6 宝塔

作者: 通辽网站建设 | 来源:发表于2021-01-21 10:17 被阅读0次

1. MQTT简介

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,

有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,

被用来当做传感器和致动器(比如通过Twitter让房屋联网)的通信协议。

目前在中国市场应用比较多的是云喇叭和云打印。

服务器端需要有一个能接收和发送MQTT消息的服务器。可以采购阿里云的微消息队列 MQTT 版

https://www.aliyun.com/product/mq4iot?source=5176.11533457&type=copy

微消息队列 MQTT 版是专为移动互联网(MI)、物联网(IoT)领域设计的消息产品,

覆盖互动直播、金融支付、智能餐饮、即时聊天、移动 Apps、智能设备、车联网等多种应用场景;

通过对 MQTT、WebSocket 等协议的全面支持,连接端和云之间的双向通信,实现 C2C、C2B、B2C

等业务场景之间的消息通信,可支撑千万级设备与消息并发。

阿里云已经做好了MQTT相关环境的配置,后台还有一些统计和查询等功能,还是比较方便。

初期可以选择按照流量计费。这样比较节省费用。

如果你自己不想采用阿里云的MQTT的服务器,也可以自己配置标准MQTT环境,也不难。

以上是服务器端。下面说说客户端,用PHP开发MQTT相关程序在客户端就需要安装相关的类库。

这有2种方法。

1.下载phpMQTT.php一个小型的类库,但是不稳定。用的很少。

2.下载mosquitto库,然后在Linux环境下编译安装。下载地址

http://mosquitto.org/files/source

笔者已经在Linux centos环境下PHP5.6的环境下配置成功mosquitto 1.5

配置手册因为篇幅原因不详细列出。如果有需要,可以联系我本人QQ:804752009

本人采购的是阿里云MQTT的服务器,客户端代码一部分如下

use Mosquitto\Client;

##此处填写阿里云帐号 AccessKey

$accessKey = 'LTAI4G6rWGk1KQ1qmZ9Xcj11';

##此处填写阿里云帐号 SecretKey

$secretKey = '0moMPlnaMoHfB4aG86GDEeYd3tcD22';

## 接入点地址,购买实例后从控制台获取

$endPoint = '22-cn-nif20cwcu01.mqtt.aliyuncs.com';

##实例 ID,购买后从控制台获取

$instanceId = 'post-cn-nif20cwcu44';

## MQTT 第一级 Topic 需要在 MQTT 控制台提前申请

$topic = 'JUXTC_yuyin';

## MQTT 客户端ID 前缀, GroupID,需要在 MQTT 控制台申请

$groupId = 'GID_juxtc';

## MQTT 客户端ID 后缀,DeviceId,业务方自由指定,需要保证全局唯一,禁止 2 个客户端连接使用同一个 ID

## 设备IMEI号码

$deviceId = '862167051682090';

## QOS必须为2

$qos = 2;

$port = 1883;

$keepalive = 90;

$cleanSession = true;

$clientId = $groupId . '@@@' . $deviceId;

## 发送端ClientID,@@@后面字符串可以随意修改,不能与设备IMEI重复

$masterClientId=$groupId . '@@@20191010master';

echo $clientId . "\n";

$mid = 0;

## 初始化客户端,需要设置 clientId 和 CleanSession 参数,参考官网文档规范

$mqttClient = new Mosquitto\Client($masterClientId, $cleanSession);

## 设置鉴权参数,参考 MQTT 客户端鉴权代码计算 username 和 password

$username = 'Signature|' . $accessKey . '|' . $instanceId;

$sigStr = hash_hmac("sha1", $masterClientId, $secretKey, true);

$password = base64_encode($sigStr);

echo "UserName:" . $username . "  Password:" . $password . "\n";

$mqttClient->setCredentials($username, $password);

## 设置连接成功回调

$mqttClient->onConnect(function ($rc, $message) use ($mqttClient, &$mid, $topic, $qos, $clientId) {

    echo date('Y-m-d H:i:s')." 连接成功:Connnect to Server Code is " . $rc . " message is " . $message . "\n";

    ## P2P消息的二级 topic 是/p2p/,三级 topic 是目标客户端的 clientId

    $mqttP2PTopic = $topic . "/p2p/" . $clientId;

    $printText="ABCD1\r\n";//打印内容

    $ZPL=bin2hex($printText);

    $hexBin=pack("H*",$ZPL);

    $len=strlen($hexBin)+4;//打印指定尾部4字节

    $lenHex=dechex($len);

    $len_MSB=dechex(($len&0xff00)>>8);

    $len_LSB=dechex($len&0x00ff);

    $lenMSBStr=str_pad($len_MSB,2,0,STR_PAD_LEFT);

    $lenLSBSTR=str_pad($len_LSB,2,0,STR_PAD_LEFT);

    echo "数据长度:".$len;

    echo "\r最高位是".$lenMSBStr;

    echo "\r最低位是".$lenLSBSTR;

    $printHex="1E1001".$lenMSBStr.$lenLSBSTR.$ZPL."1B636F90";

    echo "\r最终打印内容,请转HEX:".$printHex;

    echo date('Y-m-d H:i:s')." 推送Topic:".$mqttP2PTopic."\n";

    echo date('Y-m-d H:i:s')." 推送内容:".$printHex."\n";

    $mqttClient->publish($mqttP2PTopic, pack("H*",$printHex), $qos);

});

如果有需要,可以联系我本人QQ:804752009

相关文章

网友评论

      本文标题:Linux环境下配置MQTT扩展库的操作手册(php5.6 宝塔

      本文链接:https://www.haomeiwen.com/subject/ynerzktx.html