【北京迅为】iTOP-4412全能版使用手册-第三十五章 WEB控制LED

news2025/1/14 0:28:41

iTOP-4412全能版采用四核Cortex-A9,主频为1.4GHz-1.6GHz,配备S5M8767 电源管理,集成USB HUB,选用高品质板对板连接器稳定可靠,大厂生产,做工精良。接口一应俱全,开发更简单,搭载全网通4G、支持WIFI、蓝牙、陀螺仪、CAN总线、RS485总线、500万摄像头等模块,稳定运行Android 4.0.3/Android 4.4操作,系统通用Linux-3.0.15+Qt操作系统(QT支持5.7版本),Ubuntu版本:12.04,接口智能分配 方便好用。


第三十五章 WEB控制LED

本章介绍了额外的一些 web 知识,用于实现网络数据的传输。用户可以在这个例子的基础上扩展其功能。

配套视频为:

“视频 21web 控制 led”

上一章讲了在 iTOP-4412 开发板上搭建 web 服务器,这一章在前面一章的基础上讲解一下通过 web 网页实现控制 LED。

要实现控制 led,需要 CGI 编程,CGI(Common Gateway Interface)是外部应用扩展,应用程序与 www 服务器交互的一个标准接口。按照 CGI 标准编写的外部扩展应用程序可以处理客户端浏览器输入的数据,从而完成客户端与服务器的交互操作。而 CGI 规范就定义了 web 服务器如何向扩展应用程序发送消息,在收到扩展应用程序的信息后又如何进行处理等内容。通过 CGI 可以提供许多静态的 HTML 网页无法实现的功能。比如搜索引擎、基于web 的数据库访问等等。

首先进入到的开发板文件系统所在的目录,如下图

 

在前面的搭建 web 服务器章节,在修改 boa.conf 配置文件的时候指定了 web 网页的存放目录“DocumentRoot /www”,现在打开之前在 www 目录创建的 index.html,如下图所示。 

 

打开 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 type="text/css"> body {

background-color: #999900; text-align: center;

}

.ziti {

font-size: 24px;

}

.juzhong {

text-align: center;

}

.hsz {

text-align: center;

}

.hsz td { color: #00F;

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"> </p>

<p class="STYLE1">iTOP-4412 WEB SERVER </p></td>

</tr>

<tr>

<td height="30"> </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>

</table>

</form></td>

</tr>

<tr>

<td ><p> </p> </td>

</tr>

</table>

<p> </p>

</body>

</html>

如下图所示,

 

然后保存并退出。上面输入的是 HTML 格式的代码,主要是用到了通过表单向服务器提交信息,在表单里面指定了服务器端处理接收到信息的 CGI 程序是 myled,这是在 form 表单的属性里设置的,代码是“form action="/cgi-bin/myled.cgi" method="get”,使用的传递数据的方式是 get 方法,如下图所示。 

 

修改完了 index.html,需要些 CGI 程序。在 boa 的配置文件 boa.conf 里面指定了 CGI 程序的存储目录是“ScriptAlias /cgi-bin/ /www/cgi-bin/”,如下图所示。 

 

现在进入到 开发板文件系统的 www/cgi-bin 目录,如下图所示。 

 

然后再 cgi-bin 目录创建 myled.c,如下图所示。 

 

然后在 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;
}

 如下图所示。

 

最后保存并退出。

上面的代码是 C 语言,主要是完成了获取 web 提交过来的数据,然后对获得的数据解析,最后会调用 led 的 ioctl 函数来点亮或关闭 led。里面的 printf 打印语句,最终会生成一个 web 页面。接下来编译 myled.c 生成 myled.cgi(在 index.html 的表单里面设置了处理文请求的 cgi 程序是 myled.cgi),使用命令“arm-none-linux-gnueabi-gcc -o myled.cgi myled.c -static”编译 myled.c,如下图所示。

 

编译完成后,可以看到在 www/cgi-bin 目录下生成了 myled.cgi,如下图所示。 

 

注意:生成的 myled.cgi 需要有可执行权限,所以使用 chmod 命令修改下它的权限,如下图所示。 

现在控制 led 的 web 程序就已经完成了,现在启动开发板,如下图所示。 

 

通过上图可以看到 iTOP-4412 开发板已经起来了,然后打开 PC 的浏览器,输入开发板的 ip 地址,如下图所示。 

 

输入完成后,按回车,即可打开开发板的 index.html 页面,如下图所示。 

 

可以选中 led1 和 led2 右边的复选框,如下图所示。 

 

然后点击页面上的“submit”按钮,会打开一个新的 web 页面,如下图。 

 

上图中的页面里面的信息就是 myled.cgi 程序里面的 printf 打印出来的,其中“receive data:led1=1&led2=2&submit=submit”,就是客户端通过 get 方式传递给 web 服务器的数据,下面两行的 1 和 2 是 myled.cgi 程序从“receive data:led1=1&led2=2&submit=submit”里面解析出来的值。同时还可以在串口上看到iTOP-4412 开发板 led 驱动打印出来的信息,如下图所示。 

 

至此通过 web 页面控制 led 的实验已经完成了,可以参照这个例程来自己实现一个控制蜂鸣器的 web 程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2252867.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

轻量的基于图结构的RAG方案LightRAG

LightRAG出自2024年10月的论文《LIGHTRAG: SIMPLE AND FASTRETRIEVAL-AUGMENTED GENERATION》(github)&#xff0c;也是使用图结构来索引和搜索相关文本。 LightRAG作者认为已有的RAG系统有如下两个限制&#xff0c;导致难以回答类似"How does the rise of electric vehi…

分布式cap

P&#xff08;分区安全&#xff09;都能保证&#xff0c;就是在C&#xff08;强一致&#xff09;和A&#xff08;性能&#xff09;之间做取舍。 &#xff08;即立马做主从同步&#xff0c;还是先返回写入结果等会再做主从同步。类似的还有&#xff0c;缓存和db之间的同步。&am…

AD7606使用方法

AD7606是一款8通道最高16位200ksps的AD采样芯片。5V单模拟电源供电&#xff0c;真双极性模拟输入可以选择10 V&#xff0c;5 V两种量程。支持串口与并口两种读取方式。 硬件连接方式&#xff1a; 配置引脚 引脚功能 详细说明 OS2 OS1 OS2 过采样率配置 000 1倍过采样率 …

[VUE]框架网页开发02-如何打包Vue.js框架网页并在服务器中通过Tomcat启动

在现代Web开发中&#xff0c;Vue.js已经成为前端开发的热门选择之一。然而&#xff0c;将Vue.js项目打包并部署到生产环境可能会让一些开发者感到困惑。本文将详细介绍如何将Vue.js项目打包&#xff0c;并通过Tomcat服务器启动运行。 1. 准备工作 确保你的项目能够正常运行,项…

服务器与普通电脑有什么区别?

服务器和普通电脑&#xff08;通常指的是个人计算机&#xff0c;即PC&#xff09;有众多相似之处&#xff0c;主要构成包含&#xff1a;CPU&#xff0c;内存&#xff0c;芯片&#xff0c;I/O总线设备&#xff0c;电源&#xff0c;机箱及操作系统软件等&#xff0c;鉴于使用要求…

2.2 线性表的顺序表示

2.2.1 顺序表的定义 一、顺序表的基本概念 线性表的顺序存储又称顺序表。 它是用一组地址连续的存储单元依次存储线性表中的数据元素&#xff0c;从而使得逻辑上相邻的连个元素在物理上也相邻。 第1个元素存储在顺序表的起始位置&#xff0c;第i个元素存储位置后面紧接着存…

游戏引擎学习第30天

仓库: https://gitee.com/mrxiao_com/2d_game 回顾 在这段讨论中&#xff0c;重点是对开发过程中出现的游戏代码进行梳理和进一步优化的过程。 工作回顾&#xff1a;在第30天&#xff0c;回顾了前一天的工作&#xff0c;并提到今天的任务是继续从第29天的代码开始&#xff0c…

探索HarmonyOS:一键掌握Router与NavPathStatck的传参和页面回调技巧

路由的选择 HarmonyOS提供两种路由实现的方式&#xff0c;分别是 Router 和 NavPatchStack。两者使用场景和特效各有优劣。 组件适用场景特点备注Router模块间与模块内页面切换通过每个页面的url实现模块间解耦NavPathStack模块内页面切换通过组件级路由统一路由管理 什么时候使…

每日计划-1203

1. 完成 236. 二叉树的最近公共祖先 ​ /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/ class Solution {public:TreeNode* lowe…

【AI系统】Auto-Tuning 原理

Auto-Tuning 原理 在硬件平台驱动算子运行需要使用各种优化方式来提高性能&#xff0c;然而传统的手工编写算子库面临各种窘境&#xff0c;衍生出了自动生成高性能算子的的方式&#xff0c;称为自动调优。在本文我们首先分析传统算子库面临的挑战&#xff0c;之后介绍基于 TVM…

多组学数据如何发表高分SCI论文,以RNA-Seq数据为例

随着高通量测序以及生物信息学的发展&#xff0c;R语言在生物大数据分析以及数据挖掘中发挥着越来越重要的作用。想要成为一名优秀的生物数据分析者与科研团队不可或缺的人才&#xff0c;除了掌握对生物大数据挖掘与分析技能之外&#xff0c;还要具备一定的统计分析能力与SCI论…

攻防世界-easyupload-新手训练区域

赛前回顾 1.文件上传绕过方式 1.mime&#xff1a;可以通过关闭浏览器js&#xff0c;浏览器f12切断点&#xff0c;burp抓包该文件类型来绕过 2.双写php绕过pphphp或者phpphp 3.使用ptml来绕过&#xff0c;phtml也是通过php来解析的 4..htaccess绕过&#xff0c;这个是apache的解…

位图的学习

一&#xff0c;位图介绍 位图&#xff08;Bitmap&#xff09;是一种用于存储图像的方式&#xff0c;它通过二维矩阵&#xff08;由像素组成&#xff09;来表示图像的每一个细节。每个像素通常对应一个特定的颜色值&#xff0c;位图的每个“位”就代表了图像的一个像素。 位图…

正则化(Regularization)

正则化&#xff08;Regularization&#xff09;是机器学习和统计建模中用来防止过拟合的一种技术。当模型过于复杂&#xff0c;例如拥有过多的参数或层级时&#xff0c;它可能会在训练数据上表现得非常好&#xff0c;但对未见过的数据&#xff08;即测试数据或真实世界的数据&a…

集成网关 -- 新节点的开发说明

在node-red中&#xff0c;nVisual节点可以帮助我们更快快简捷的完成新的功能&#xff0c;今天我来分享一下关于node-Red中关于nVisual新节点开发基础教程。 首先来看一下基本node-red节点文件目录&#xff0c;当前新开发的7个节点都放在了“node-red\packages\node_modulesno…

小程序入门学习(六)之本地生活案例

效果图如下&#xff1a; 关键代码如下&#xff1a; app.json {"pages": ["pages/home/home","pages/message/message","pages/contact/contact"],"window": {"backgroundTextStyle": "light","n…

ArcGIS对地区进行筛选提取及投影转换

首先我们需要对坐标系和投影这些概念做进一步的解释。 1、基本概念&#xff1a; 想要理解坐标系和投影的概念&#xff0c;首先我们需要先理解什么是坐标。顾名思义&#xff0c;坐标就是指我们所在的位置&#xff0c;比如我在离旗杆东北部50m处&#xff0c;其实就是离旗杆东边…

MFC图形函数学习13——在图形界面输出文字

本篇是图形函数学习的最后一篇&#xff0c;相关内容暂告一段落。 在图形界面输出文字&#xff0c;涉及文字字体、大小、颜色、背景、显示等问题&#xff0c;完成这些需要系列函数的支持。下面做简要介绍。 一、输出文本函数 原型&#xff1a;virtual BOOL te…

Mysql如何实现原子性(MVCC实现原理)

Mysql如何实现原子性(MVCC实现原理) Mysql实现原子性主要通过一下机制 锁MVCC多版本并发控制 MVCC的实现原理 在介绍MVCC的实现原理之前需要先介绍一下Mysql表中的隐藏字段 , 以及undo_log版本链以及readview 1. Mysql中的隐藏字段 Mysql在创建表的时候除了我们所定义的字…

遇到问题:hive中的数据库和sparksql 操作的数据库不是同一个。

遇到的问题&#xff1a; 1、hive中的数据库和sparksql 操作的数据库不同步。 观察上面的数据库看是否同步 &#xff01;&#xff01;&#xff01; 2、查询服务器中MySQL中hive的数据库&#xff0c;发现创建的位置没有在hdfs上&#xff0c;而是在本地。 这个错误产生的原因是&…