使用Web页面远程控制LED

CGI(通用网关接口)是Web服务器运行时外部程序的规范,按CGI编写的程序可以拓展服务器功能。CGI程序可以与浏览器进行交互,还可以通过数据API与数据库服务器等外部数据源进行通信,从数据库服务器中获取数据。格式化为HTML文档后,发送给浏览器,也可以从浏览器中获取数据存放到数据库中。几乎所有的服务器都支持CGI,可以使用任何语言编写CGI。CGI分为直接CGI和间接CGI两种,标准CGI使用命令行参数或环境变量表示服务器的详细请求,服务器与浏览器通信采用标准输入输出方式。间接CGI又称缓冲CGI,在CGI程序和CGI接口之间插入一个缓冲程序,缓冲程序与CGI接口间用标准输入输出进行通信

实验步骤:

  1. 替换/www目录下的index.html文件

  2. 确认boa.conf(/etc/boa/)配置文件中CGI的存放路径,打开boa.conf,确定内容为ScriptAlias /cgi-bin/ /www/cgi-bin

  3. 进入/www/cgi-bin,将交叉编译myled.c生成的可执行文件(文件后缀必须是.cgi)拷贝到该目录

    arm-none-linux-gnueabi-gcc -o myled.cgi myled.c -static

  4. 修改可执行文件myled.cgi的权限为777

  5. 网络设备输入http://192.168.3.20(开发板IP地址)

    程序执行结果

相关代码如下:

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">&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></table></form></td></tr><tr><td ><p>&nbsp;</p>    </td></tr>
</table>
<p>&nbsp;</p>
</body>
</html>

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;
}

使用Web页面远程控制LED相关推荐

  1. MQTT进阶:web端远程控制LED灯

    前言 本篇教程是MQTT的进阶篇,在云服务器搭建好了MQTT服务器后,使用网页连接MQTT服务器,并发布相关的控制信息到服务器指定的Topic,ESP32在本地连接WIFI,订阅相同的Topic,收到 ...

  2. 【ESP 保姆级教程】疯狂点灯篇 —— 案例:ESP8266 + LED + 按键 + Web页面控制(Web页面控制开关LED灯)

    忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️ ❤️ 本篇创建记录 2021-06-04 ❤️ ❤️ 本篇更新记录 2022-01-21 ❤️

  3. android+app+wifi+控制+协议,玩转OneNET物联网平台之MQTT服务④ —— 远程控制LED(数量无限制)+ Android App控制...

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.但愿你们分享给你周边须要的朋友或者同窗,说不定大神成长之路有博哥的奠定石...android 若是以为有用,麻烦点赞收藏,您的 ...

  4. Web 服务器远程控制硬件(Arduino)

    Web 服务器远程控制硬件(Arduino) 程序流程 程序 后续 程序流程 定义热点名和密码 设置IP地址 IPAddress sip(192,168,1,29) 设置模式 WiFiServer s ...

  5. esp8266连接远程服务器IP,ESP8266连接服务器实现远程控制LED灯

    本帖最后由 chenyuechi 于 2017-7-17 15:32 编辑 本教程是用ESP8266实现远程控制LED灯的亮/灭,只要学会了控制LED灯,就可以控制继电器.电机等很多东西噢 开发之前大 ...

  6. java实现页面高效刷新_selenium高效应对Web页面元素刷新的实例讲解

    当我们在页面上进行selenium.type()或者selenium.click()操作的时候,往往需要需要等待一个元素的出现,对于一般的网页,当我们进入一个新页面的时候,往往会使用selenium. ...

  7. ASP.NET Web页面(.aspx)添加用户控件(.ascx)无显示的问题

    写好的用户控件点击视图显示没有问题,但是将控件添加到Web窗体上时却显示如下图标: F5运行,查看源代码:有代码--但是页面却显示一片空白. 分析代码,比较了一下能显示用户控件的其他web页面以及代码 ...

  8. 像数据分析一样写 Web 页面,这个 Python 库做到了!

    作者|刘早起 来源|早起Python 提起用 Python 写一个 web 页面,总是会想起Django/Flask等这样的大家伙. 他们确实好用,但就是流程繁琐,比如有时就想写一个简单的页面,比如问 ...

  9. 用服务器安装nginx部署web页面

    作为一个野生的iOSer,技术栈好像还没到这么远,平时也用不太到,主要最自学的几个方面碰巧联系在了一起,因为爱好吧,就研究了下.对了还有戴铭做的那个iOS高阶晋级网课,我也打算订阅一份,并且每章带有我 ...

最新文章

  1. 【每日DP】day2、P1879 [USACO06NOV]Corn Fields G玉米地(状压DP模板题)难度⭐⭐⭐★
  2. 根据两点间的经纬度计算距离
  3. 自写sonar 插件加载到sonar 服务中的展示信息
  4. 攻防世界 适合做桌面_空间“狭小”的二人世界,适合情侣们做浪漫的事情
  5. IT职业生涯中的必修课
  6. Linux 进程地址空间1_数据结构和接口
  7. 使用pyecharts绘制新冠肺炎疫情地图
  8. Navicat 中文破解版
  9. 51nod 1534 棋子游戏(博弈)
  10. ppt圆形箭头怎么画
  11. x86代表计算机的,X86是32位还是64位 X86和X64含义介绍
  12. 未来10年35项最值得你期待的技术(中)
  13. CEF3 C++接口实现自定义浏览器[simple version]
  14. 试发贴:央视《焦点访谈》曝光淘宝网纵容售假
  15. 通过PS把素色的旗袍换成青花瓷样式的旗袍
  16. CSS中左上朝向三角形(Top-Left Triangle)的几种制作方式
  17. ACP——ECS题库
  18. arm64 blr指令
  19. 【数据结构复习】二叉树的遍历——从微软2014校园招聘说起
  20. HVV-Learning-区域边界网络下的攻击链路与攻击事件(BLAUKC)

热门文章

  1. 液压与气压传动基础知识点
  2. IBM实习日记——3.31
  3. Java架构直通车——锁分段技术:微信如何扛住 10 亿用户同时修改微信号?
  4. Slicer学习笔记(十四)vtkMRMLVolumeNode 与 vtkImageData
  5. 文档是怎么在线翻译的?
  6. mac通过终端命令删除文件
  7. 支持向量机之超平面理解
  8. 字王x2ttf字库制作软件发布:“全民造字时代来临,会涂鸦,就会truetype”
  9. 【JAVA长虹键法】第十一式 装饰器模式(23种设计模式)
  10. 为何手机5G有时候比4G还慢?