树莓派-通过Web网页实现对树莓派的关机和重启操作

实现思路:

1.通过在树莓派上搭建一个http服务器,如:Apache,增加一个控制树莓派的页面。

2.通过在树莓派的控制页面,写入需要在终端执行的命令。

3.服务器端通过python,定时读取文件内容,执行终端命令。


实现步骤:

1.搭建php+Apache环境:

本文主要描述程序编写,如何搭建php+Apache环境,可以网上查找资料,自行实现。

2.编写Web网页控制端:

大致界面像这样:


代码:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>树莓派Web控制中心</title>
    <script src="js/jquery-3.2.1.min.js" type="text/javascript"></script>
    <script src="js/bootstrap.min.js" type="text/javascript"></script>
    <link href="css/bootstrap.css" rel="stylesheet" type="text/css" />
    <link href="css/font-awesome-4.7.0/css/font-awesome.min.css" rel="stylesheet" type="text/css" />
    <style type="text/css">
        .page-header { margin: 20px 0; border-bottom: 1px solid #eee; padding-bottom: 0; text-align: center; }
        .btn-item { text-align: center; }
        i { margin-right: 3px; display: inline-block; }
        h1 { text-align: center; }
        .tip { font-weight: bold; color: black; }
        .lead { font-size: small; }
    </style>
</head>
<body>
    <div class="container">
        <div class="page-header">
            <h3>
                树莓派Web控制中心</h3>
            <p class="lead">
                用于控制连接到树莓派的各种传感器
            </p>
        </div>
        <div class="panel panel-primary">
            <div class="panel-heading">
                设备</div>
            <div class="panel-body">
                <div class="row">
                    <div class="col-xs-3 btn-item">
                    </div>
                    <div class="col-xs-3 btn-item">
                        <button type="button" class="btn btn-danger btn-trigger">
                            <i class="fa fa-power-off"></i>关机</button>
                    </div>
                    <div class="col-xs-3 btn-item">
                        <button type="button" class="btn btn-primary btn-trigger">
                            <i class="fa fa-refresh"></i>重启</button>
                    </div>
                    <div class="col-xs-3 btn-item">
                    </div>
                    <script type="text/javascript">
                        var url = "ajax/pi.php";
                        $(function () {
                            $(".btn-trigger").click(function () {
                                var text = $(this).text().replace(/ /g, "").replace(/\n/g, "").replace(/\r/g, "").replace(/\t/g, "");
                                var cmd = "";
                                switch (text) {
                                    case "关机":
                                        cmd = "sudo shutdown -h now";
                                        break;
                                    case "重启":
                                        cmd = "sudo reboot";
                                        break;
                                }
                                if (confirm("确定要执行该命令吗?")) {
                                    $.ajax({
                                        type: "POST",
                                        url: url,
                                        data: {
                                            action: "set-linux-cmd",
                                            cmd: cmd
                                        },
                                        success: function (result) {
                                            $(".tip").html(result);
                                        }
                                    });
                                }
                            });
                        });
                    </script>
                </div>
            </div>
        </div>
        <div class="panel panel-primary">
            <div class="panel-heading">
                传感器</div>
            <div class="panel-body">
                <div class="row">
                    <div class="col-xs-12">
                        <span style="color: gray">待接入,敬请期待...</span>
                    </div>
                </div>
            </div>
        </div>
        <div class="panel panel-primary" style="border-color:#555">
            <div class="panel-heading" style="background: #555">
                终端</div>
            <div class="panel-body">
                <div class="row">
                    <div class="col-xs-12">
                        <div class="alert alert-success" style="" role="alert">
                            执行:<span class="tip"> </span>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</body>
</html>

请求处理代码:

<?php
$action=$_POST["action"];
$cmd=$_POST["cmd"];
if($action=="set-linux-cmd"){ 
	$myfile=fopen("linuxcmd.txt","w") or die("unable to open file!");
	fwrite($myfile,$cmd); 
	$str=file_get_contents("linuxcmd.txt");
	echo($str);	
}
?>
完整代码见文末附件。

3.服务器端Python脚本

import os

while True:
    #read cmd
    file=open("/var/www/html/pi/ajax/linuxcmd.txt","r")
    text=file.read()
    file.close()    
    
    if(text!=""):       
        #clear cmd
        file=open("/var/www/html/pi/ajax/linuxcmd.txt","w")
        file.write("")
        file.close()
        #print(text)
        os.system(text)

4.将脚本设置为开机运行

在终端运行:

sudo nano /etc/rc.local

在exit 0这行代码前一行,添加:

python /home/pi/linuxcmd.py

保存文件并退出。


5.重启系统


附:完整代码

1.Web端代码 

2.服务器端代码




评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值