基于ITop-4412的点灯实验Web & QT

(1)设计LED用户控制界面程序,能够控制开发板上灯的点亮和熄灭。

1、我们能看到,内核是默认将led设备编译进内核的,如图。

所以我们直接使用内核的leds字符设备。

2、打开Qt编写应用程序,首先我们添加两个按钮,如图。

3、这里我们使用最简单的添加槽函数的方式,右键,点击转到槽,如图。

这里我们选择点击事件,当点击这个控件的时候会调用对应的槽函数。

4、点击OK后就会转到mainwindow.cpp里,这里多了两个空的函数,在这里编写点击事件产生的动作,

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow) {
    ui->setupUi(this);
    fb = open("/dev/leds", 0);
    led1_flag = 0;
    led2_flag = 0;
    connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(on_pushButton_clicked()));
    connect(ui->pushButton_2, SIGNAL(clicked()), this, SLOT(on_pushButton_2_clicked()));

}
MainWindow::~MainWindow() {
    delete ui;
}
void MainWindow::on_pushButton_clicked()
{
    led1_flag ^= 1;
    if (led1_flag) {
        ioctl(fb, 1, 0);
    } else {
        ioctl(fb, 0, 0);
    }
}
void MainWindow::on_pushButton_2_clicked()
{
    led2_flag ^= 1;
    if (led2_flag) {
        ioctl(fb, 1, 1);
    } else {
        ioctl(fb, 0, 1);
    }
}

5、编写完成后,编译生成可运行文件。

6、使用file XX,查看下是否成功。

7、成功后将文件NFS挂在到开发板。

8、运行程序,查看效果。

通过这次实验,增加了我对Qt的代码编写的熟悉程度,同时也锻炼了我的动手能力。

(2)移植嵌入式WEB服务器,实现灯的远程控制。

       配置Web服务器

下载boa文件,解压进入src目录,进行编译

编译完成后,编辑Makefile文件,如下图所示:

之后进行make编译,如果出现报错,如下图所示,修改方式如文件《iTop4412搭建Web服务器.pdf》

编译结束之后如下图所示,存在可执行文件boa

此时查看文件boa的大小,是相对较大的,然后进行文件瘦身,输入:arm-none-linux-gnueabi-stripboa

瘦身之后查看文件大侠如下图所示:

之后通过挂在NFS将生辰大哥boa文件拷贝到开发板的bin目录下:

然后在开发板的/etc目录下创建boa文件,在根目录下创建www文件夹,然后在创建的/www文件下创建文件夹cgi-bin目录

然后将Ubuntu下的boa的配置文件boa.conf通过NFS共享到开发板的/etc/boa目录下

将Ubuntu的/etc下的mime.types文件拷贝到开发板的/etc目录下

进入/etc/boa目录下的boa.conf文件,对其进行修改,如下图所示,找到“Groupnogroup”这一行,修改为“Grouproot”

找到“#ServerNamewww.your.org.here”这一行,修改为“ServerNamewww.your.org.here

“ScriptAlias/cgi-bin//usr/lib/cgi-bin/”这一行,修改为“ScriptAlias/cgi-bin//www/cgi-bin/”,

保存并退出,

然后进行之前创建的/www目录。新建文件vi index.html

文件内容如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>led 远程控制</title>
    <style>
        body {
            background-image: url("https://www.52desk.com/bizhi/c332784.html");
            background-size: cover;
            background-repeat: no-repeat;
            text-align: center;
        }
        .ziti {
            font-size: 32px;
        }
        .juzhong {
            text-align: center;
        }
        .hsz {
            text-align: center;
        }
        .hsz td {
            color: green;
            font-size: 18px;
        }
        .hsz {
            background-color: #FCC;
        }
        .juzhong table {
            text-align: center;
        }
        .juzhong table tr {}
        #h1 {
            background-color: #0FC;
        }
        #h2 {
            background-color: #FF9;
        }
        .h3 {
            background-color: #0CF;
        }
        .ys1 {
            font-size: 24px;
        }
        .STYLE1 {
            font-size: 36px
        }
    </style>
</head>
<body class="juzhong">
    <table width="900" border="0" align="center" cellpadding="0" cellspacing="0">
        <tr>
            <td>
                <p class="STYLE1">&nbsp;</p>
                <p class="STYLE1">iTOP-4412 WEB SERVER </p>
            </td>
        </tr>
        <tr>
            <td height="30">&nbsp;</td>
        </tr>
        <tr>
            <td>
                <form action="/cgi-bin/myled.cgi" method="get" enctype="application/x-www-form-urlencoded"
                    name="form1" target="_blank" id="form1">
                    <table width="300" border="1" align="center" cellpadding="1" cellspacing="1">
                        <tr>
                            <td>Led1</td>
                            <td><input name="led1" type="checkbox" id="led1" value="1" />
                                <label for="led1"></label>
                            </td>
                        </tr>
                        <tr>
                            <td>Led2</td>
                            <td><input name="led2" type="checkbox" id="led2" value="2" />
                                <label for="led2"></label>
                            </td>
                        </tr>
                        <tr>
                            <td colspan="2"><input type="submit" name="submit" id="submit" value="submit" /></td>
                        </tr>
                        <tr>
                            <td colspan="2"><input type="button" value="Turn Off All" onclick="turnOffAll();" /></td>
                        </tr>
                    </table>
                </form>
            </td>
        </tr>
        <tr>
            <td>
                <p>&nbsp;</p>
            </td>
        </tr>
    </table>
    <p>&nbsp;</p>
    <script>
        function turnOffAll() {
            document.getElementById("led1").checked = false;
            document.getElementById("led2").checked = false;
        }
    </script>
</body>
</html>

保存并退出

在/bin下运行boa服务:

在本地浏览器输入开发板ip地址进行访问如下图所示:

进入开发板的/www/cgi-bin目录,新建文件myled.c,内容如下:

#include <stdio.h>
#include <stdlib.h>
int main() {
       char *data;
       int leds[2] = {0, 0};
       long m, n;
       int exit = 0, i, fd;
       printf("Content-Type:text/html;charset=gb2312\n\n");
       printf("<html>\n");
       printf("<body>\n");
       printf("<title>iTOP-4412</title> ");
       printf("<h3>iTOP-4412</h3> ");
       data = getenv("QUERY_STRING");
       printf("<p>receive data:%s</p>", data);
       while (*data != '\0') {
              if (*data == '=')
                     switch (*(data + 1)) {
                            case '1':
                                   leds[0] = 1;
                                   break;
                            case '2':
                                   leds[1] = 1;
                                   break;
                            default:
                                   exit = 1;
                                   break;
                     }
              if (exit == 1)
                     break;
              data++;
       }
       fd = open("/dev/leds", 0);
       for (i = 0; i < 2; i++) {
              if (leds[i] == 1)
                     printf("<p>%d\t</p>", i + 1);
              ioctl(fd, leds[i], i);
       }
       printf("</body>\n");
       printf("</html>\n");
       return 0;
}

然后使用命令:arm-none-linux-gnueabi-gcc -o myled.cgi myled.c -static进行编译,生成可执行文件:

然后再开启服务,本地访问:输入169.254.62.230,进行远程控制。

  • 23
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值