简易制作智能插座WIFI版--软件篇

硬件搭建参考上篇:https://blog.csdn.net/qq_34472145/article/details/94561226

一、前言

上篇主要完成插座接收MQTT服务器的消息,而服务器则要接收到APP的发送的指令并转换为自定义的消息下发到WiFi模块,系统架构图如下:在这里插入图片描述
WIFI模块运行的代码见上篇,接下来是服务器提供MQTT和WEB的服务程序,秉承简易的原则,这里采用PHP编写

二、准备环境

(一)硬件环境:
一台有公网IP的服务器,推荐采用云服务器(百度、阿里、腾讯或其他)
(提示:用虚拟机也可以,不过要在局域网下,且手机能够访问得到)
(二)软件环境:
LAMP环境:linux(ubuntu)+apache2+mysql+php5
必要的库:MQTT类代码 https://segmentfault.com/a/1190000014031341?utm_source=tag-newest

三、实施步骤

(一)新建三个文件,分别是Mqtt.class.php、mymqtt.php、processControl.php
Mqtt.class.php:为上面的MQTT类代码
mymqtt.php:封装mqtt要使用的参数和功能函数
processControl.php:get方式接收用户发送的参数,执行消息发布动作
1)mymqtt.php 功能函数主要有封装数据、发布消息

<?php
        require_once "Mqtt.class.php";
        class MyMQTT
        {
                public $server_ip = "134.175.231.46"; //服务器 ip地址
                private $server = "j8home.cn";     // 服务代理地址(mqtt服务端地址)
                private $port = 1883;                     // 通信端口
                private $username = "admin";       // 用户名(如果需要)
                private $password = "123456";      // 密码(如果需要
                private $client_id = "server_smho001"; // 设置你的连接客户端id

				//发布消息
                function pubmsg($topic,$msg){
                        $mqtt = new Mqtt($this->server, $this->port, $this->client_id); //实例化MQTT类
                         if ($mqtt->connect(true, NULL, $this->username, $this->password)) {
                            //如果创建链接成功
                           	   $mqtt->publish($topic, $msg, 0);     //发布
                          	   $mqtt->close();    //发送后关闭链接
                         } else {
                             echo "Time out!\n";
                         }
                }
                
                //订阅消息
                function submsg($topic,$msg){
                        $mqtt = new Mqtt($this->server, $this->port, $this->client_id);
                        if(!$mqtt->connect(true, NULL, $this->username, $this->password)) { //链接不成功再重复执行监听连接
                            exit(1);
                        }
                        $topics[$topic] = array("qos" => 0, "function" => "procmsg");
                        // 订阅主题, qos为0
                        $mqtt->subscribe($topics, 0);
                        while($mqtt->proc()){
                        }
                        //死循环监听
                        $mqtt->close();
                }

                //处理消息
                function procmsg($topic, $msg){ //信息回调函数 打印信息
                       echo "Msg Recieved: " . date("r") . "\n";
                          echo "Topic: {$topic}\n\n";
                          echo "\t$msg\n\n";
                          $a = json_decode($msg);
                          var_dump($a);
                          die;
                }
                
                //按json格式封装成消息内容
                function makepacket($id,$status){
                        return  '{"id":"'.$id.'","status":"'.$status.'"}';
                }
        }
?>

2)processControl.php 以访问url链接的形式发送消息(非安全地),如下:

//processControl.php
<?php
        header("Content-type:text/html;charset=utf-8");
        require_once "mymqtt.php";
        $topic ="devices/socket/relay1";
        $id = isset($_GET['id'])? strval($_GET['id']):"";  //插座ID
        $status = isset($_GET['status'])?  strval($_GET['status']):"";   //插座状态
        $mqtt = new MyMQTT();   //创建自定义类对象
        $msg = $mqtt-> makepacket($id,$status);   //封装数据
        $mqtt->pubmsg($topic,$msg);   //发布消息
?>

服务端准备结束,接下来就是安卓端制作了,未完。。待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值