使用lighttpd和开发板进行交互

news2025/6/4 12:29:46

文章目录

    • 🧠 一、Lighttpd 与开发板的交互原理
      • 1. 什么是 Lighttpd?
      • 2. 与开发板交互的方式?
    • 🧾 二、lighttpd.conf 配置文件讲解
      • ⚠️ 注意事项:
    • 📁 三、目录结构说明
    • 💡 四、使用 C 编写 CGI 脚本(实现点灯)
      • 1. 示例:C语言 CGI 脚本(控制 GPIO)
      • 2. 编译并设置权限
    • 🌐 五、网页中调用 CGI(按钮触发)
    • 🛠️ 六、调试建议
    • ✅ 总结

🧠 一、Lighttpd 与开发板的交互原理

1. 什么是 Lighttpd?

Lighttpd 是一个轻量级 Web 服务器,适合资源受限的嵌入式开发板运行。它支持:

  • 静态网页服务(HTML、图片等)
  • 动态网页处理(如 CGI 脚本)
  • 支持 FastCGI、SCGI、URL 重写等

2. 与开发板交互的方式?

Lighttpd 自身不直接控制硬件(比如点灯),而是通过调用 CGI 程序(通常是用 C 语言或 shell 写的),这些程序再调用开发板底层的接口,比如:

  • 操作 GPIO 口实现“点灯”
  • 读取传感器数据返回网页
  • 执行控制指令等

总结:网页点击按钮 → 请求 CGI 脚本 → 脚本操作硬件并返回结果 → 网页展示结果


🧾 二、lighttpd.conf 配置文件讲解

一个典型的配置如下:

server.modules = (
    "mod_access",
    "mod_alias",
    "mod_compress",
    "mod_redirect",
    "mod_rewrite",
    "mod_cgi"
)

server.document-root = "/etc/lighttpd/www"   # 网站根目录
server.port = 8080                           # 启动监听端口
server.errorlog = "/etc/lighttpd/error.log"  # 错误日志
dir-listing.activate = "enable"              # 浏览目录功能

index-file.names = ( "index.html" )          # 默认主页文件名

mimetype.assign = (
    ".html" => "text/html",
    ".txt"  => "text/plain",
    ".jpg"  => "image/jpeg",
    ".png"  => "image/png",
    ""      => "application/octet-stream"
)

# 配置 CGI 路由规则
$HTTP["url"] =~ "^/cgi-bin/" {
    cgi.assign = ( ".cgi" => "" )
}

⚠️ 注意事项:

  • accesslog.filenameserver.modules-dir 是无效选项,可以删除;
  • cgi.assign 中的 "cgi" 要确保对应文件有执行权限;
  • mod_cgi 必须包含在 server.modules 中。

📁 三、目录结构说明

比如 /etc/lighttpd/ 目录结构如下:

/etc/lighttpd/
├── www/                   # 网站根目录
│   ├── index.html         # 默认主页
│   └── cgi-bin/           # CGI 程序存放目录
│       └── led.cgi        # 用 C 写的 CGI 程序
├── lighttpd.conf          # 配置文件
├── error.log              # 错误日志
└── access.log             # 访问日志(可选)

💡 四、使用 C 编写 CGI 脚本(实现点灯)

1. 示例:C语言 CGI 脚本(控制 GPIO)

代码:led.cgi

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    printf("Content-type: text/html\n\n");
    printf("<html><body>");

    // 简单模拟点灯,真实环境用 /sys/class/gpio/ 或驱动接口
    system("echo 1 > /sys/class/leds/led0/brightness");

    printf("<h1>LED 已开启!</h1>");
    printf("</body></html>");

    return 0;
}

2. 编译并设置权限

# 交叉编译
aarch64-linux-gcc -o led.cgi led.c

# 放入 CGI 目录
cp led.cgi /etc/lighttpd/www/cgi-bin/
chmod +x /etc/lighttpd/www/cgi-bin/led.cgi

🌐 五、网页中调用 CGI(按钮触发)

index.html 示例:

<!DOCTYPE html>
<html>
<head><title>LED 控制</title></head>
<body>
    <h1>控制面板</h1>
    <form action="/cgi-bin/led.cgi" method="GET">
        <button type="submit">点亮LED</button>
    </form>
</body>
</html>

访问开发板网页:http://开发板IP:8080
点击按钮,即会请求 /cgi-bin/led.cgi,从而点亮灯。


🛠️ 六、调试建议

  • 404 错误排查

    • 确认 URL 是 /cgi-bin/*.cgi
    • CGI 文件可执行 (chmod +x)
    • 文件路径正确,配置中的路径匹配上
  • 权限问题

    • CGI 操作硬件需 root 权限运行
    • 确保 CGI 能访问 /sys/class/gpio 或相关硬件路径
  • 日志查看

    cat /etc/lighttpd/error.log
    

✅ 总结

项目内容
Web 服务Lighttpd 监听 8080 端口,提供页面
动态响应使用 C 编写的 CGI 程序,响应用户点击
硬件控制CGI 调用系统命令或控制设备驱动实现
网页交互表单或 JS 请求触发 CGI 执行
关键配置mod_cgicgi-bin、执行权限

效果实现:

在这里插入图片描述
点击后可以跳转到另外一个界面:

在这里插入图片描述

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

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

相关文章

DRF的使用

1. DRF概述 DRF即django rest framework&#xff0c;是一个基于Django的Web API框架&#xff0c;专门用于构建RESTful API接口。DRF的核心特点包括&#xff1a; 序列化&#xff1a;通过序列化工具&#xff0c;DRF能够轻松地将Django模型转换为JSON格式&#xff0c;也可以将JS…

2024年09月 C/C++(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C++编程(1~8级)全部真题・点这里 第1题:有几个PAT 字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位,第 4 位(A),第 6 位(T);第二个 PAT 是第 3 位,第 4 位(A),第 6 位(T)。 现给定字符串,问一共可以形成多少个 PAT? 时间限制:1000 内存限制:26214…

免费且好用的PDF水印添加工具

软件介绍 琥珀扫描.zip下载链接&#xff1a;https://pan.quark.cn/s/3a8f432b29aa 今天要给大家推荐一款超实用的PDF添加水印工具&#xff0c;它能够满足用户给PDF文件添加水印的需求&#xff0c;而且完全免费。 这款PDF添加水印的软件有着简洁的界面&#xff0c;操作简便&a…

mqtt协议连接阿里云平台

首先现在的阿里云物联网平台已经不在新购了&#xff0c;如下图所示&#xff1a; 解决办法&#xff1a;在咸鱼上租用一个账号&#xff0c;先用起来。 搭建阿里云平台&#xff0c;参考博客&#xff1a; &#xff08;一&#xff09;MQTT连接阿里云物联网平台&#xff08;小白向&…

一文详谈Linux中的时间管理和定时器编程

&#xff08;目录&#xff09; 先说一些在计算机中需要用到时间的地方&#xff1a;系统日志log、OS调度(时间片、定时器)等等~~ 时间的计量 计时的方式发展&#xff1a;日晷、沙漏 -> 机械钟 -> 石英振荡器、晶振 -> 铯原子钟 -> 氢原子钟 计算机中的计时方式&…

性能优化 - 理论篇:常见指标及切入点

文章目录 引言一、 Java 性能优化的核心思路二、为什么要度量&#xff1f;三、常用性能衡量指标详解3.1 吞吐量与响应速度3.2 响应时间的具体度量&#xff1a;平均响应时间与百分位数3.3 并发量3.4 秒开率&#xff08;页面秒开&#xff09;3.5 正确性&#xff08;功能可用性&am…

【论文阅读 | PR 2024 |ICAFusion:迭代交叉注意力引导的多光谱目标检测特征融合】

论文阅读 | PR 2024 |ICAFusion&#xff1a;迭代交叉注意力引导的多光谱目标检测特征融合 1.摘要&&引言2.方法2.1 架构2.2 双模态特征融合&#xff08;DMFF&#xff09;2.2.1 跨模态特征增强&#xff08;CFE&#xff09;2.2.2 空间特征压缩&#xff08;SFS&#xff09;…

华为OD机试真题——模拟消息队列(2025A卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

2025 A卷 100分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 2025华为OD真题目录+全流程解析/备考攻略/经验分享 华为OD机试真题《模拟消息队列》: 目录 题…

MySql(十三)

目录 mysql外键约束 准备工作 创建表 插入数据 创建表时添加外键 1..格式 2..创建表student表时&#xff0c;为其添加外键 3.插入数据测试 正常数据 异常数据 3.使用alter添加外键 删除外键 添加外键 4.Mysql外键不生效的原因 修改引擎 phpystudy的mysql位置 mysql外键约束 注&…

iOS —— UI 初探

简介 第一次新建时&#xff0c;你可能会好奇。为什么有这么多文件&#xff0c;他们都有什么用&#xff1f; App 启动与生命周期管理相关 文件名 类型 作用 main.m m 程序入口&#xff0c;main() 函数定义在这里 AppDelegate.h/.m h/m App 启动/进入后台/退出等全局事…

day23-计算机网络-1

1. 网络简介 1.1. 网络介质 网线&#xff1a;cat5,cat5e 六类网线&#xff0c;七类网线&#xff0c;芭蕾网线光纤&#xff1a;wifi&#xff1a;无线路由器&#xff0c;ap5G 1.2. 常见网线类型 1.2.1. 双绞线&#xff08;Twisted Pair Cable&#xff09;【最常用】 按性能主…

C语言基础(09)【数组的概念 与一维数组】

数组 数组的概念 什么是数组 数组是相同类型、有序数据的集合。 数组的特征 数组中的数据称之为数组的元素(数组中的每一个匿名变量空间&#xff0c;是同构的)数组中的元素存放在内存空间建立。 衍生概念&#xff1a;下标&#xff08;索引&#xff09; 下标或者索引代表…

【JavaScript】Ajax 侠客行:axios 轻功穿梭服务器间

一、AJAX 概念和 axios 使用讲解 什么是 AJAX ? 使用浏览器的 XMLHttpRequest 对象与服务器通信 浏览器网页中&#xff0c;使用 AJAX技术&#xff08;XHR对象&#xff09;发起获取省份列表数据的请求&#xff0c;服务器代码响应准备好的省份列表数据给前端&#xff0c;前端…

Django数据库连接报错 django.db.utils.NotSupportedError: MySQL 8 or later is required

可尝试换django版本 pip install django3.2.13 另外mysql下载地址 https://dev.mysql.com/downloads/installer/ 安装可以参考&#xff1a; https://blog.csdn.net/HHHQHHHQ/article/details/148125549 重点&#xff1a;用户变量添加 C:\Program Files\MySQL\MySQL Server …

2025年- H57-Lc165--994.腐烂的橘子(图论,广搜)--Java版

1.题目描述 2.思路 3.代码实现 import java.util.LinkedList; import java.util.Queue;public class H994 {public int orangesRotting(int[][] grid) {//1.获取行数int rowsgrid.length;int colsgrid[0].length;//2.创建队列用于bfsQueue<int[]> quenew LinkedList<…

(9)-Fiddler抓包-Fiddler如何设置捕获Https会话

1.简介 由于近几年来各大网站越来越注重安全性都改成了https协议&#xff0c;不像前十几年前直接是http协议直接裸奔在互联网。接着讲解如何抓取https协议会话。 2.什么是HTTPS&#xff1f; HTTPS就是加过密的HTTP。使用HTTPS后&#xff0c;浏览器客户端和Web服务器传输的数…

Vue-Router 基础使用

Vue Router 是 Vue 官方的客户端路由解决方案。 客户端路由的作用是在单页应用 SPA 中将浏览器的 URL 和用户看到的内容绑定起来。当用户在应用中浏览不同页面时&#xff0c;URL 会随之更新&#xff0c;但页面不需要从服务器重新加载。 Vue Router 基于 Vue 的组件系统构建&a…

【案例分享】蓝牙红外线影音遥控键盘:瑞昱RTL8752CJF

蓝牙红外线影音遥控键盘 Remotec的无线控制键盘采用瑞昱蓝牙RTL8752CJF解决方案&#xff0c;透过蓝牙5.0与手机配对后&#xff0c;连线至 Remotec 红外 code server 取得对应影音视觉设备的红外 code后&#xff0c;即可控制多达2个以上的影音视觉设备&#xff0c;像是智能电视…

网络协议的原理及应用层

网络协议 网络协议目的为了减少通信成本&#xff0c;所有的网络问题都是传输距离变长的问题。 协议的概念&#xff1a;用计算机语言来发出不同的信号&#xff0c;信号代表不同的含义&#xff0c;这就是通信双方的共识&#xff0c;便就是协议。 协议分层&#xff08;语言层和…

Express教程【003】:Express获取查询参数

文章目录 3、获取URL中携带的查询参数3.1 参数形式&#xff1a;查询字符串3.2 参数形式&#xff1a;动态参数3.3 参数形式&#xff1a;Json数据 3、获取URL中携带的查询参数 3.1 参数形式&#xff1a;查询字符串 1️⃣通过req.query对象&#xff0c;可以访问到客户端通过查询…