php对接mqtt协议

本文详细介绍了如何安装和配置EMQXMQTT服务器,包括启动服务、管理端口以及处理端口冲突。接着,展示了如何在PHP中使用phpMQTT类进行订阅和发布操作,同时提供了处理接收到的消息并调用API接口存储数据的示例代码。此外,还提到了在后台持续运行subscribe.php的方法。
摘要由CSDN通过智能技术生成
首先安装emqx服务
https://www.emqx.com/zh/try?product=broker
//先运行命令该命令
.\emqx install
//成功后界面上会ChangeServiceConfig 成功
//再运行
.\emqx console
//运行成功后会显示emqx is started!
//端口号被占用可以关掉端口号
//查看端口号
netstat   -aon|findstr  5037
//关掉端口号
taskkill /f /pid 53096
//然后会跳出一个界面代码,打开emqx运行所需要的各个端口
//最后运行
.\emqx start  
//没有报错就执行成功了
//浏览器访问
http://localhost:18083/#/login?to=/dashboard/overview
//第一步下载phpMQTT.php
https://github.com/bluerhinos/phpMQTT/blob/master/phpMQTT.php
//把文件放到app\admin\controller
//修改命名空间namespace app\admin\controller;
//第二步在项目根目录创建subscribe.php
<?php

require('../application/admin/controller/phpMQTT.php');


$server = 'localhost';     // change if necessary
$port = 1883;                     // change if necessary
$username = 'admin';                   // set your username
$password = 'admin888';                   // set your password
$client_id = '聪'; // make sure this is unique for connecting to sever - you could use uniqid()

$mqtt = new app\admin\controller\phpMQTT($server, $port, $client_id);
if(!$mqtt->connect(true, NULL, $username, $password)) {
	exit(1);
}

$mqtt->debug = true;
//接受主题所有
$topics['hometopic/#'] = array('qos' => 0, 'function' => 'procMsg');
$mqtt->subscribe($topics, 0);

while($mqtt->proc()) {

}

$mqtt->close();

function procMsg($topic, $msg){
    $domain ='http://think.admin.cn/api/index/add';
    var_dump($msg);
    var_dump($topic);
    $data=json_decode($msg,true);
    var_dump($data);
    $arr=curl_post($domain, $data);
    var_dump($arr);
}
function curl_post($url, $data){
    $data  = json_encode($data,320);
    // return $data;
    $headerArray = array("Content-type:application/json;charset='utf-8'", "Accept:application/json");
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headerArray);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($curl);
    curl_close($curl);
    return json_decode($output, true);
}
// 在根目录public下面运行改文件 php subscribe.php statr
// 在线上 nohup php subscribe.php &
//第三步在api/controller控制器下面创建index.php
<?php
namespace app\api\controller;

use think\Controller;
use think\Db;

class Index extends Controller
{
	
    public function add(){
		$data['msg']=input('post.dev_num');
		$data['order_no']=rand(1000,9999);
		$data['status']=1;
		$data['create_time']=date('Y-m-d H:i:s',time());
        Db::name('tp5_test')->insert($data);
		return json(true_msg($data));
    }
}

//第四步在admin/controller模块控制器里面创建发布方法
<?php
namespace app\admin\controller;

class Mqtt 
{
    //mqtt发布
    public function hometopic(){
        // 客户端id  可以用随机数
        $dev_num=input('dev_num');
        $client = "主机";
        // mqtt主机 主机,请配置为自己的主机
        $host = "localhost";
        // mqtt端口
        $port = 1883;
        // 密钥 用于证书配置,如果需要ssl认证,则必须填写
//        $this->cert= 'ca.pem';
        // mqtt账号
        $username = "admin";
        // mqtt密码
        $password = "admin888";
        // 订阅主题 订阅的主题,注意使用的主题一定要是mqtt配置过的主题,比如百度天工需要策略认证过的
        // 自己学习的时候,可以随意自定义,一般跟发布主题一致便可以收到消息
        // 如要要接受所有主题,请使用#
        $topics_name = "hometopic/".$dev_num;
 
        //引入phpMQTT 创建mqtt实例
        $mqtt = new phpMQTT($host,$port,$client);
        $payload=[
            'dev_num'=>$dev_num,   //
        ]; 
        //发布,发布内容可自定义,这里写死 
        if ($mqtt->connect(true, NULL, $username, $password)) {
            $mqtt->publish($topics_name, json_encode($payload), false);
            $mqtt->close();
            dump($topics_name);
            dump($payload);
        } else {
            echo "Time out!\n";
        }
    }
 
	
}

 
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值