使用HTML和cgi控制I.MX6ULL开发板上的LED

news2024/9/28 5:34:00

一.HTML文件

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>LED_device</title>     
    </head>
    <body>
 
        <form action="/cgi-bin/led.cgi" method="post">
            <p>LED设备号</p>
            <input type="text" name="name">
            <p>操作</p>
            <input type="text" name="number">
            <input type="submit" value="提交">
        </form>

        <a href="/cgi-bin/test.cgi"> 跳转到test.cgi </a>
 
    </body>
</html>

二.led.c文件

#include <stdio.h>
#include "cgic.h"
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>



#define LED_DEVICE "/sys/class/leds/sys-led/brightness"

#define LED_DEVICE0    1
#define LED_ON  1
#define LED_OFF 0


int cgiMain() 
{
    char name[241] = {0};
    char number[241] = {0};
    int led_device = 0;
    int led_operation = 0; 
    int fd = -1;

    fd = open(LED_DEVICE,O_RDWR);
    if(0 > fd)
    {
        printf("led device open failed\n");
    }

    cgiHeaderContentType("text/html");
    fprintf(cgiOut, "<HTML>\n");

        fprintf(cgiOut,"<HEAD>\n");

            fprintf(cgiOut, "<TITLE>LED CGI</TITLE>\n");
            fprintf(cgiOut,"<meta charset='utf-8'>\n");

        fprintf(cgiOut,"</HEAD>\n");

        fprintf(cgiOut,"<BODY>\n");

            fprintf(cgiOut, "<H1>LED CGI</H1>\n");
            cgiFormString("name",name,241);                         //获取名为name的数据
            cgiFormString("number",number,241);                     //获取名为number的数据
            fprintf(cgiOut,"<H2>name=%s</H2>\n",name);
            fprintf(cgiOut,"<H2>number=%s</H2>\n",number);
            fprintf(cgiOut, "<a href='/led.html'>回到LED控制界面</a>\n\n");

            led_device = atoi(name);
            led_operation = atoi(number);

            if((led_device == LED_DEVICE0) && (led_operation == LED_ON))
            {
                fprintf(cgiOut,"<p>开灯操作成功</p>");
            }
            else if((led_device == LED_DEVICE0) && (led_operation == LED_OFF))
            {
                fprintf(cgiOut,"<p>关灯操作成功</p>\n");
            }
            else
            {
                fprintf(cgiOut,"<p>操作指令有误</p>\n");
            }


        fprintf(cgiOut, "</BODY>\n");

        /* 对比设备和操作指令,使用write函数向LED文件写入数据以控制灯的亮灭 */
        if(led_device == LED_DEVICE0 && led_operation == LED_ON)
        {
            write(fd,"1",1);
        }
        else if(led_device == LED_DEVICE0 && led_operation == LED_OFF)
        {
            write(fd,"0",1);
        }


        close(fd);

    fprintf(cgiOut, "</HTML>\n");


    return 0;
}

在led.html网页中输入设备号为1,操作指令为1则可开灯,操作指令为0则关灯

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

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

相关文章

夫妻双方均年过四十长期分居,离婚不仅因为不同房!李秘书专业写作:这是一篇涉离婚纠纷的民事起诉状

夫妻双方均年过四十长期分居&#xff0c;离婚不仅因为不同房&#xff01; 李秘书专业写作&#xff1a;这是一篇涉离婚纠纷的民事起诉状 &#xff08;精品范文&#xff09; 离 婚 起 诉 状 原告&#xff1a;曹某琴&#xff0c;女&#xff0c;现年40岁&#xff0c;汉族&#x…

Web前端 - HTML、CSS

w3school 在线教程 Vscode工具&#xff1a; Live Preview: 右键show Preview 实时预览效果 Live Preview: HTML AI助手 CSS (Cascading Style Sheets&#xff0c;层叠样式表&#xff09;&#xff0c;是一种用来为结构化文档&#xff08;如 HTML 文档或 XML 应用&#xff0…

PHP校园跑腿跳蚤市场助手系统小程序源码

&#x1f3c3;‍♀️&#x1f6cd;️【校园新风尚】跑腿跳蚤市场助手系统&#xff0c;便捷交易新体验&#xff01;&#x1f389; &#x1f680;一键下单&#xff0c;跑腿无忧 学习太忙没时间取快递&#xff1f;食堂太远懒得动&#xff1f;校园跑腿助手系统来帮你&#xff01;…

分子筛自动填充高原制氧机的特点

在高原地区&#xff0c;氧气稀薄&#xff0c;对人体的正常生理活动带来了诸多挑战。而分子筛自动填充高原制氧机的出现&#xff0c;为解决高原缺氧问题提供了有效的解决方案。以下是这种制氧机的一些特点&#xff1a; 高效制氧能力&#xff1a; 分子筛自动填充高原制氧机采用先…

PS DRAM接口的函数式编程模型(二)

DRAM Input Impedance (ODT) Calibration&#xff08;DRAM输入阻抗校准&#xff09; ODT技术通过在DRAM内部集成终结电阻&#xff0c;实现对信号线的终端匹配。当DRAM作为接收器时&#xff0c;ODT电阻能够吸收信号线上的反射波&#xff0c;防止信号反射对后续信号造成影响&…

职业院校云计算实训室建设方案全景剖析

在信息化社会的今天&#xff0c;云计算作为一项关键技术&#xff0c;正在迅速改变着教育和培训的方式。本文旨在探讨如何通过"职业院校云计算实训室建设方案"&#xff0c;为学生提供一个现代化、高效的学习和研究环境&#xff0c;以适应云计算技术的发展和市场需求。…

cpp depends源码有向图分析工具

使用 cpp-dependencies.exe --dir ./example --output image.dot 输出 参考 GitHub - tomtom-international/cpp-dependencies: Tool to check C #include dependencies (dependency graphs created in .dot format) 创作不易&#xff0c;小小的支持一下吧&#xff01;

06-图3 六度空间(C)

这个很好想&#xff0c;尤其是经过图的连通集&#xff0c;所以这一次我才有之前写的代码为主体以邻接表的方法构建了方法一&#xff0c;至于运用 邻接矩阵&#xff0c;可以查看我之前的图的连通集这一方案&#xff0c;稍微改装&#xff0c;便解决这一问题了。 “六度空间”理论…

【数据结构】PTA 带头结点的链式表操作集 C语言

本题要求实现带头结点的链式表操作集。 函数接口定义&#xff1a; List MakeEmpty(); Position Find( List L, ElementType X ); bool Insert( List L, ElementType X, Position P ); bool Delete( List L, Position P ); 其中List结构定义如下&#xff1a; typedef struc…

Prism框架

使用 NuGet包下载 -- > Prism.Unity 框架中的数据与行为 BindableBase 在ViewModel中需要继承此类 通知属性的三种方式&#xff1a; public class MainViewModel : BindableBase {// 基本的通知属性private string _value;public string Value{get { return _value; }s…

SOMEIP_ETS_049: echoUTF8DYNAMIC_length_too_long_for_String

测试目的&#xff1a; 验证设备&#xff08;DUT&#xff09;是否能够正确处理一个长度大于实际字符串长度的echoUTF8DYNAMIC字符串&#xff0c;并返回错误消息。 描述 本测试用例旨在检查DUT在接收到一个长度超出实际字符串长度的UTF8DYNAMIC字符串的SOME/IP消息时&#xff…

Vue的生命周期理解,简单易理解

什么是Vue的生命周期 简单来说&#xff0c;Vue的生命周期就是vue实例从创建到销毁的一个过程&#xff0c;即从创建–>初始化数据–>编译模板–>挂载Dom -->渲染、更新 -->渲染–>销毁 的一系列过程。 Vue的生命周期有哪些阶段 Vue的生命周期&#xff0c;主…

使用 preloadRouteComponents 提升 Nuxt 应用的性能

title: 使用 preloadRouteComponents 提升 Nuxt 应用的性能 date: 2024/8/19 updated: 2024/8/19 author: cmdragon excerpt: preloadRouteComponents 是提升 Nuxt 应用性能的一个简单而有效的工具。通过在适当的时候预加载路由组件&#xff0c;你可以为用户提供更快速、更流…

LangGPT结构化提示词

LangGPT是Language For GPT-like LLMs的简称&#xff0c;中文名为结构化提示词&#xff0c;LangGPT是一个帮助你编写高质量提示词的工具&#xff0c;理论基础是我们提出的一套模块化、标准化的提斯提编写方法论——结构化提示词。我们希望揭开提示工程的神秘面纱&#xff0c;为…

传统园区转型升级智慧园区的路径探讨

随着科技的快速发展和经济结构的转型升级&#xff0c;传统园区面临着转型的迫切需求。智慧园区以其高效、绿色、智能的特点&#xff0c;成为了未来园区发展的方向。本文将从几个关键方面探讨传统园区如何实现向智慧园区的转型升级。 一、智慧园区的概念与特点 智慧园区是基于…

懂管理的网安人才,为什么越来越受企业青睐?

说实话&#xff0c;要是几年前有人跟我说网安人才还得懂管理&#xff0c;我可能会嗤之以鼻。网安不就是搞技术的吗&#xff1f;整天跟漏洞、防火墙、IDS打交道&#xff0c;为啥又扯到管理了&#xff1f; 但是仔细一想&#xff0c;好像时代确实变了。 由于现在的就业形势紧迫&a…

Gemma Chat【所有人都能本地部署的对话AI】

简介 Gemma Chat 是一个聊天应用&#xff0c;专注于实现高效的消息交互。这个项目使用 Docker 来简化部署流程gemma_chat&#xff0c;并且源代码托管在 GitHubGitHub - Park-C159/gemma_chat&#xff0c;方便开发者下载、修改和贡献。 技术栈和特色 Gemma Chat 的开发选用了 …

\r和\n不同系统的区别

文章目录 一、\r和\n的来源1、回车和换行来源2、关于字符2.1、可显示字符2.2、不可显示字符&#xff08;控制字符&#xff09; 二、\n和\r差异1、不同操作系统中的回车换行2、影响 一、\r和\n的来源 1、回车和换行来源 在最初的电传打印机时代&#xff0c;每打完一行需要换行的…

识别出未知的“FT232R USB UART”设备

使用串口调试助手测试485,笔记本电脑不识别端口&#xff0c;查看设备管理器后提示 识别出未知的“FT232R USB UART”设备 跳转FTDI官网下载驱动 &#xff08;https://ftdichip.com/drivers/d2xx-drivers/&#xff09; 继续往下拉 下载后安装即可正常使用

C++实战项目:日期计算器的实现

前言 Hello&#xff0c;小伙伴们&#xff0c;经过了前面对C基础知识的学习&#xff0c;我们今天就着重运用一下前面学习到的知识&#xff0c;来通过类和对象以及运算符重载的部分知识来实现&#xff0c;来完成我们的日期计算器。 日期计算器&#xff0c;顾名思义&#xff0c;…