通辽易联通达有限公司,通辽网站建设,网页设计,网站推广,营销型网站建设专家 通辽您最信赖的互联网服务专家   通辽互联网资深品牌,企业营销专家
  专注:通辽网站建设网站设计网站制作网站改版
企业服务区域战略合作伙伴!服务电话0475-2793529
您当前的位置: 首页 > 网站优化动态

网站优化动态

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

发布日期:2021-01-21信息来源: 通辽网站建设|通辽网页设计|通辽网络公司-通辽易联通达点击: 我要评论()

 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 MosquittoClient;

##此处填写阿里云帐号 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 . " ";

$mid = 0;

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

$mqttClient = new MosquittoClient($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 . " ";

$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 . " ";

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

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

    $printText="ABCD1 ";//打印内容

    $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 " 最高位是".$lenMSBStr;

    echo " 最低位是".$lenLSBSTR;

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

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

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

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

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

});

 

 

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

相关阅读

分享到:

网友评论:

表情:

  • 字体加粗
验证码: 验证码,看不清楚?请点击刷新验证码
网友评论仅供网友表达个人看法,并不表明本网站同意其观点或证实其描述