当前位置: 首页 > news >正文

使用lighttpd和开发板进行交互

文章目录

    • 🧠 一、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.xdnf.cn/news/755515.html

相关文章:

  • Node.js 全栈技术栈的开发者,Web3 面试题
  • 从架构视角设计统一网络请求体系 —— 基于 uni-app 的前后端通信模型
  • 如何使用 Docker 部署grafana和loki收集vllm日志?
  • IDEA常用快捷键
  • 6.1 数学复习笔记 23
  • Freefilesync配置windows与windows,windows与linux之间同步
  • LTSPICE仿真电路:(三十二)差动放大器电流源
  • openssl 怎么生成吊销列表
  • 【论文解读】DETR | End-to-End Object Detection with Transformers
  • 分类预测 | Matlab实现CNN-LSTM-Attention高光谱数据分类
  • 多线程——线程池
  • Linux下目录递归拷贝的单进程实现
  • C++读写锁以及实现方式
  • 深入理解短链服务:原理、设计与实现全解析
  • 6级翻译学习
  • 蓝桥云课ROS学习C++教程cpp-geeksforgeeks版本
  • Vue-1-前端框架Vue基础入门之一
  • 6、在树莓派上安装 NTP(Network Time Protocol )服务的步骤
  • Linux --进程状态
  • 论文阅读笔记——Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset
  • 《Python语言程序设计》2018 第4章第9题3重量和价钱的对比,利用第7章的概念来解答你
  • 广东WordPress开发公司及服务
  • 2025年渗透测试面试题总结-奇安信[实习]安全服务工程师(题目+回答)
  • 深入探讨redis:万字讲解集群
  • POJO、DTO和VO:Java应用中的三种关键对象详解
  • 重学计算机网络之以太网
  • 北斗导航 | 高级接收机自主完好性监测算法研究进展
  • 适配器模式:让不兼容接口协同工作
  • 雷达中实信号与复信号
  • 学习BI---BI看板的生命周期