Linux環(huán)境下配置MQTT擴展庫的操作手冊(php5.6 寶塔)
二次開發(fā) admin 發(fā)布時間:2021-01-21 10:18:40 瀏覽: 次
1. MQTT簡介
MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸)是IBM開發(fā)的一個即時通訊協(xié)議,
有可能成為物聯(lián)網的重要組成部分。該協(xié)議支持所有平臺,幾乎可以把所有聯(lián)網物品和外部連接起來,
被用來當做傳感器和致動器(比如通過Twitter讓房屋聯(lián)網)的通信協(xié)議。
目前在中國市場應用比較多的是云喇叭和云打印。
服務器端需要有一個能接收和發(fā)送MQTT消息的服務器。可以采購阿里云的微消息隊列 MQTT 版
https://www.aliyun.com/product/mq4iot?source=5176.11533457&type=copy
微消息隊列 MQTT 版是專為移動互聯(lián)網(MI)、物聯(lián)網(IoT)領域設計的消息產品,
覆蓋互動直播、金融支付、智能餐飲、即時聊天、移動 Apps、智能設備、車聯(lián)網等多種應用場景;
通過對 MQTT、WebSocket 等協(xié)議的全面支持,連接端和云之間的雙向通信,實現(xiàn) C2C、C2B、B2C
等業(yè)務場景之間的消息通信,可支撐千萬級設備與消息并發(fā)。
阿里云已經做好了MQTT相關環(huán)境的配置,后臺還有一些統(tǒng)計和查詢等功能,還是比較方便。
初期可以選擇按照流量計費。這樣比較節(jié)省費用。
如果你自己不想采用阿里云的MQTT的服務器,也可以自己配置標準MQTT環(huán)境,也不難。
以上是服務器端。下面說說客戶端,用PHP開發(fā)MQTT相關程序在客戶端就需要安裝相關的類庫。
這有2種方法。
1.下載phpMQTT.php一個小型的類庫,但是不穩(wěn)定。用的很少。
2.下載mosquitto庫,然后在Linux環(huán)境下編譯安裝。下載地址
http://mosquitto.org/files/source
筆者已經在Linux centos環(huán)境下PHP5.6的環(huán)境下配置成功mosquitto 1.5
配置手冊因為篇幅原因不詳細列出。如果有需要,可以聯(lián)系我本人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,業(yè)務方自由指定,需要保證全局唯一,禁止 2 個客戶端連接使用同一個 ID
## 設備IMEI號碼
$deviceId = '862167051682090';
## QOS必須為2
$qos = 2;
$port = 1883;
$keepalive = 90;
$cleanSession = true;
$clientId = $groupId . '@@@' . $deviceId;
## 發(fā)送端ClientID,@@@后面字符串可以隨意修改,不能與設備IMEI重復
$masterClientId=$groupId . '@@@20191010master';
echo $clientId . "\n";
$mid = 0;
## 初始化客戶端,需要設置 clientId 和 CleanSession 參數(shù),參考官網文檔規(guī)范
$mqttClient = new Mosquitto\Client($masterClientId, $cleanSession);
## 設置鑒權參數(shù),參考 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字節(jié)
$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 "數(shù)據(jù)長度:".$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);
});
如果有需要,可以聯(lián)系我本人QQ:804752009
相關推薦
- ecshop等電商網站對接阿里云短信驗證碼功能(PHP版本)
- 如果利用京東聯(lián)盟API把京東的商品展示在自己的網站(PH
- 谷歌Google驗證碼的開發(fā)實例,PHP版本源碼
- 騰訊云域名解析API開發(fā)的若干經驗(PHP版本開發(fā)實例)
- 無憂四方支付平臺源碼(PHP版本,完全開源)代付功能,入金
- 最新四方支付平臺源碼(PHP版本,完全開源)提供第四方支
- 瀚銀ecshop,thinkphp,shopnc在線支付接口,支付插件(pay
- 現(xiàn)代金控ecshop,thinkphp,shopnc在線支付接口,支付插件
- 首信易ecshop,thinkphp,shopnc在線支付接口,支付插件(p
- 環(huán)迅ecshop,thinkphp,shopnc在線支付接口,支付插件(pay