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

基于BeagleBone Black的网页LED控制功能(flask+gpiod)

目录

  • 项目介绍
  • 硬件介绍
  • 项目设计
    • 开发环境
    • 功能实现
      • 控制LED外设
      • 构建Webserver
  • 功能展示
  • 项目总结

👉 【Funpack3-5】基于BeagleBone Black的网页LED控制功能
👉 Github: EmbeddedCamerata/BBB_led_flask_web_control

项目介绍

基于 BeagleBoard Black 开发板,在系统中使用 Flask 建立一个网页,并且与板载 LED 联动。板卡通过网线与 PC 通信与供电,可以从网页中控制 LED 的开关与闪烁。

👉 BBB Cookbook

硬件介绍

BeagleBone® Black 是一款面向开发人员和业余爱好者的低成本、高扩展、并有社区支持的开发平台。处理器选用了 TI AM3358 芯片,基于 ARM Cortex-A8 架构处理器。还配备了丰富的扩展资源,包括 HDMI 接口、以太网、SD 卡槽、并预留了足够多的管脚用于 AD 转换、LCD 显示屏、PWM 输出、I2C、串口等等。板卡可运行完整的 Linux 系统,且支持多种编程语言。

板卡基本外设

项目设计

开发环境

本项目使用 BBB 官方提供的 Debian 11.7 镜像,通过 SD 卡安装系统。而后,在 linux 内用 Python flask 库进行开发,可能需要将板卡联网再安装 python3-flaskpython-gpiod

功能实现

Flask 是一个使用 Python 编写的轻量级 Web 应用框架,它简洁而灵活,适用于开发小型至中型的 Web 应用。本项目使用 Flask 构建一个简单的 webserver:

  1. 定义路由和视图函数:通过装饰器来定义 URL 路由和对应的视图函数,当用户访问该 URL 时,Flask 将会调用对应的视图函数进行处理
  2. 编写视图函数:编写视图函数来处理用户的请求,并返回相应的响应结果
  3. 运行 Flask 应用:启动 Flask 应用,运行应用并监听指定的端口,等待用户请求

控制LED外设

BBB 板载4个 LED USR0~3。在 linux 板卡上,一般通过 libgpiod 对 GPIO 进行控制,gpiod 包对 libgpiod 进行了封装以供在 Python 调用。通过 gpioinfo 命令查看 USR0~3 对应的 GPIO 所在的 chip 与 line:

gpioinfo | grep -i -e chip -e usr

输出如下:

gpiochip0 - 32 lines:
gpiochip1 - 32 lines:line  21: "[usr0 led]" "beaglebone:green:usr0" output active-high [used]line  22: "[usr1 led]" "beaglebone:green:usr1" output active-high [used]line  23: "[usr2 led]" "beaglebone:green:usr2" output active-high [used]line  24: "[usr3 led]" "beaglebone:green:usr3" output active-high [used]
gpiochip2 - 32 lines:
gpiochip3 - 32 lines:

如下所示,通过 gpiod 可以控制 USR3:

import gpiod
import timeLED_CHIP = 'gpiochip1'
LED_LINE_OFFSET = [24]  # USR0 run: gpioinfo | grep -i -e chip -e usrchip = gpiod.Chip(LED_CHIP)
lines = chip.get_lines(LED_LINE_OFFSET)
lines.request(consumer='main.py', type=gpiod.LINE_REQ_DIR_OUT)state =  0      # Start with LED off
while True:lines.set_values([state])state = ~state      # Toggle the statetime.sleep(0.25)

在 Python 中通过 chip.get_lines([...]) 获取到 GPIO 所在的 line,通过 request 设置方向为输出,之后通过 lines.set_values([...]) 即可实现 GPIO 控制。 再写一个控制 USR3 闪烁的函数:

def blink_led():i = 5while i:state = lines.get_values()[0]lines.set_values([1 - state])time.sleep(0.5)i -= 1

构建Webserver

先新建 statictemplates 目录,分别存放静态资源,例如图片、js、css文件,与模板文件。templates 下编写一个简单的 css,展示 LED 状态并设置三个按键控制其亮、灭、闪烁:

<!DOCTYPE html><head><title>GPIO Control</title><link rel="stylesheet" href='../static/style.css' />
</head><body><h2>BBB LED Webserver Control</h2><h3> Status </h3>LED ==> {{ led }}<br><h3> Commands </h3>LED Ctrl ==><a href="/on" class="button">TURN ON</a><a href="/off" class="button">TURN OFF</a><a href="/blink" class="button">BLINK</a>
</body></html>

主程序上,先例化一个 Flask 应用实例,再为其指定路由:

  1. 根 URL 显示网页与 LED 状态
  2. 动作响应,根据响应的具体结果,on、off、或 blink 响应不同的动作,通过 line.set_values() 实现 LED 亮灭,通过上述 blink_led() 函数实现闪烁。最后更新网页
from flask import Flask, render_template
app = Flask(__name__)@app.route("/")
def index():# Read Sensors Statusstate = lines.get_values()[0]templateData = {"title": "GPIO output Status","led": state,}return render_template("index.html", **templateData)@app.route("/<action>")
def action(action):if action == "on":lines.set_values([1])if action == "off":lines.set_values([0])if action == "blink":blink_led()state = lines.get_values()[0]templateData = {"led": state,}return render_template("index.html", **templateData)

最后在 0.0.0.0:8080 上运行该 webserver 即可。

if __name__ == "__main__":app.run(host="0.0.0.0", port=8080, debug=True)

功能展示

首先通过 USB 将板卡与 PC 连接,板卡通过 USB 供电。在 PC 上连接板卡的有线网。此时,PC IP 地址为192.168.7.1,板卡地址为 192.168.7.2。

连接板卡以太网
打开端口即可查看网页,网页中显示 LED 状态及三个控制按键:

Flask 应用实例网页
USR3 LED 位于左下,靠近以太网口。用户点击不同按键改变 LED 状态后,网页会更新状态。

USR3亮

👉 详细展示参见:B站:基于BeagleBone Black的网页LED控制功能

项目总结

本次项目基于 BeagleBoard Black、gpiod 与 Flask 实现了在系统中建立网页界面,与用户进行交互与数据显示,学习了 Linux 开发板上控制 GPIO 的库 gpiod 的使用方法,实现了从网页中控制板载 LED 的开关与闪烁。

相关文章:

基于BeagleBone Black的网页LED控制功能(flask+gpiod)

目录 项目介绍硬件介绍项目设计开发环境功能实现控制LED外设构建Webserver 功能展示项目总结 &#x1f449; 【Funpack3-5】基于BeagleBone Black的网页LED控制功能 &#x1f449; Github: EmbeddedCamerata/BBB_led_flask_web_control 项目介绍 基于 BeagleBoard Black 开发板…...

【C语言】单片机map表详细解析

1、RO Size、RW Size、ROM Size分别是什么 首先将map文件翻到最下面&#xff0c;可以看到 1.1 RO Size&#xff1a;只读段 Code&#xff1a;程序的代码部分&#xff08;也就是 .text 段&#xff09;&#xff0c;它存放了程序的指令和可执行代码。 RO Data&#xff1a;只读…...

Java中的继承和实现

Java中的继承和实现在面向对象编程中扮演着不同的角色&#xff0c;它们之间的主要区别可以从以下几个方面进行阐述&#xff1a; 1. 定义和用途 继承&#xff08;Inheritance&#xff09;&#xff1a;继承是面向对象编程中的一个基本概念&#xff0c;它允许我们定义一个类&…...

uniapp云打包

ios打包 没有mac电脑,使用香蕉云编 先登录香蕉云编这个工具,新建csr文件——把csr文件下载到你电脑本地: 然后,登录苹果开发者中心 生成p12证书 1、点击+号创建证书 创建证书的时候一定要选择ios distribution app store and ad hoc类型的证书 2、上传刚才从本站生成的…...

端口安全技术原理与应用

目录 概述 端口安全原理 端口安全术语 二层安全地址配置 端口模式下配置 全局模式下配置 动态学习 二层数据包处理流程 三层安全地址配置 三层数据包处理流程 端口安全违例动作和安全地址老化时间 查看命令 端口安全的注意事项 小结 概述 园区网的接入安全关系着…...

数据集-目标检测系列-鲨鱼检测数据集 shark >> DataBall

数据集-目标检测系列-鲨鱼检测数据集 shark >> DataBall 数据集-目标检测系列-鲨鱼检测数据集 shark 数据量&#xff1a;6k 数据样例项目地址&#xff1a; gitcode: https://gitcode.com/DataBall/DataBall-detections-100s/overview github: https://github.com/Te…...

数字乡村解决方案-3

1. 国家大数据战略与数字乡村 中国第十三个五年规划纲要强调实施国家大数据战略&#xff0c;加快建设数字中国&#xff0c;推进数据资源整合和开放共享&#xff0c;保障数据安全&#xff0c;以大数据助力产业转型升级和提高社会治理的精准性与有效性。 2. 大数据与数字经济 …...

WPF文本框无法输入小数点

问题描述 在WPF项目中&#xff0c;文本框BInding双向绑定了数据Text“{UpdateSourceTriggerPropertyChanged}”&#xff0c;但手套数据是double类型&#xff0c;手动输入数据时&#xff0c;小数点输入不进去 解决办法&#xff1a; 在App.xaml.cs文件中添加语句&#xff1a; …...

R开头的后缀:RE

RE表示方位上的向后&#xff0c;一种时空上的折返&#xff0c;和表示否定意味的不。 68.re- 空间顺序 ①表示"向后&#xff0c;相反&#xff0c;不" RE表示正向抵抗的力的词语&#xff0c;和情绪的词语&#xff0c;用来表示一种极力的反抗和拒绝&#xff0c;包括…...

Vue2配置环境变量的注意事项

在实际开发中时常会遇到需要开发环境与生产环境中一些参数的替换,为了方便线上线下环境变量切换可以利用node中的process进行环境变量管理 实现步骤如下: 1.在 根目录 新增环境文件 .env.development 和 .env.production 注意文件名称保持一致( 需要强调的是文件中的变量名切…...

机器学习:探索未知边界,解锁智能潜力

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 在这个日新月异的科技时代&#xff0c;机器学习作为人工智能领域的核心驱动力&#xff0c;正以前所未有的速度改变着我们的世界。从智能家居的个性化推荐到自动驾驶汽车的精准导航&#xff0c;从医疗诊断的辅助…...

万户OA-ezOFFICE fileUpload.controller 任意文件上传漏洞复现

0x01 产品描述&#xff1a; 万户OA&#xff08;Office Automation&#xff09;是一款企业级协同办公管理软件&#xff0c;旨在为企业提供全面的办公自动化解决方案。万户ezOFFICE存在任意文件上传漏洞。攻击者可以通过该远程下载任意文件到目标服务器&#xff0c;导致攻击者可获…...

Time-MoE : 时间序列领域的亿级规模混合专家基础模型

Time-MoE : 时间序列领域的亿级规模混合专家基础模型 时间序列预测一直是量化研究和工业应用中的重要课题。随着深度学习技术的发展&#xff0c;大规模预训练模型在自然语言处理和计算机视觉领域取得了显著进展&#xff0c;但在时间序列预测领域&#xff0c;这些模型的规模和运…...

Spring Boot入门指南

前言 Spring Boot 是由 Pivotal 团队提供的全新框架&#xff0c;其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置&#xff0c;从而使开发人员不再需要定义样板化的配置。本文将详细介绍 Spring Boot 的基本概念、环境搭建、第一…...

MYSQL(学习笔记)

<div>深分页怎么优化&#xff1f;</div> <div>还是以上面的SQL为空&#xff1a;select * from xxx order by id limit 500000, 10;</div> <div>方法一&#xff1a;</div> <div>从上面的分析可以看出&#xff0c;当offset非常大时&am…...

学校周赛(1)

A - Short Sort 题目&#xff1a; 思路&#xff1a; 本条题目只允许改一处地方&#xff0c;只有三个字母&#xff0c;我们可以直接枚举所有移动过的结果&#xff0c;同时使用哈希去记录其值&#xff0c;对于每一个输入我们都寻找是否有这个值记录&#xff0c;有则输出YES否则…...

人生苦短,我用Python✌

面向代码的解释型语言 数据开发和AI 编程语言:让计算机了解我们干什么&#xff0c;翻译官 1.下载软件 解释器安装 点击第二个 改路径 D:\python 安装 测试 winr打开 输入代码 输出 退出环境 exit&#xff08;&#xff09; 新建文本文档后缀改成py 编写 运行 安装编写代码…...

uniapp js判断key是否在json中?

推荐学习文档 golang应用级os框架&#xff0c;欢迎stargolang应用级os框架使用案例&#xff0c;欢迎star案例&#xff1a;基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识&#xff0c;这里有免费的golang学习笔…...

Codeforces Round 975 (Div. 2) C. Cards Partition

题目链接&#xff1a;题目 大意&#xff1a; 给出若干种卡片&#xff0c;每种卡片有一定数量&#xff0c;你可以加入不超过 k k k张任意已给出种类的卡片&#xff0c;使得它们可以被分成若干组&#xff0c;每组容量一定&#xff0c;且同组内不存在相同种类的卡片&#xff0c;…...

Qt 首次配置 Qt Creator 14.01 for Python

前言&#xff1a; 如何用QT实现Python的配置的交互界面。本文从0开始&#xff0c;进行实践的介绍。 在上一节里面&#xff0c;我们做了社区版本的配置&#xff1a; https://blog.csdn.net/yellow_hill/article/details/142597007?spm1001.2014.3001.5501 这一节&#xff0…...

为Claude Code寻找稳定替代方案,Taotoken接入配置指南

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 为Claude Code寻找稳定替代方案&#xff0c;Taotoken接入配置指南 当开发者依赖Claude Code这类编程助手工具进行日常开发时&#…...

【omc】Claude Code 必备神器:Oh-My-ClaudeCode 让你的 AI 编程效率翻倍

用过 Claude Code 的人都知道&#xff0c;它很强。 但强归强&#xff0c;用起来有不少痛点&#xff1a;Token 烧得快、任务动不动崩溃、复杂项目搞不定。 Oh-My-ClaudeCode&#xff08;OMC&#xff09;就是来治这些病的。一、为什么需要 OMC&#xff1f; 原生 Claude Code 的三…...

3分钟上手QrazyBox:让损坏的二维码“起死回生“的终极修复工具

3分钟上手QrazyBox&#xff1a;让损坏的二维码"起死回生"的终极修复工具 【免费下载链接】qrazybox QR Code Analysis and Recovery Toolkit 项目地址: https://gitcode.com/gh_mirrors/qr/qrazybox 你是否曾经遇到过这样的场景&#xff1a;打印出来的二维码被…...

从MobileNetV1到RetinaFace:轻量化主干网络在人脸检测中的架构演进与实践

1. 轻量化主干网络的演进背景与需求 在移动端和嵌入式设备上实现实时人脸检测一直是计算机视觉领域的重要挑战。传统的人脸检测算法如Viola-Jones虽然计算量小&#xff0c;但在复杂场景下的检测精度有限。随着深度学习技术的发展&#xff0c;基于卷积神经网络的人脸检测方法逐渐…...

HTML转Figma:连接网页开发与设计协作的桥梁

HTML转Figma&#xff1a;连接网页开发与设计协作的桥梁 【免费下载链接】figma-html Convert any website to editable Figma designs 项目地址: https://gitcode.com/gh_mirrors/fi/figma-html 在今天的数字产品开发流程中&#xff0c;设计和开发团队之间的协作常常面临…...

免费开源的终极分子绘图神器:5分钟快速上手Ketcher完整指南

免费开源的终极分子绘图神器&#xff1a;5分钟快速上手Ketcher完整指南 【免费下载链接】ketcher Web-based molecule sketcher 项目地址: https://gitcode.com/gh_mirrors/ke/ketcher 你是否厌倦了笨重的化学绘图软件&#xff1f;想找一款既专业又轻量的分子结构编辑器…...

Cursor Pro功能完整破解指南:三步实现免费无限使用

Cursor Pro功能完整破解指南&#xff1a;三步实现免费无限使用 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your trial …...

使用 Taotoken 后如何通过用量看板清晰掌握各模型消耗与成本分布

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 使用 Taotoken 后如何通过用量看板清晰掌握各模型消耗与成本分布 当你在项目中接入多个大模型时&#xff0c;一个常见的困扰是成本…...

5分钟掌握foo2zjs:让Linux完美支持100+打印机型号的终极方案

5分钟掌握foo2zjs&#xff1a;让Linux完美支持100打印机型号的终极方案 【免费下载链接】foo2zjs A linux printer driver for QPDL protocol - copy of http://foo2zjs.rkkda.com/ 项目地址: https://gitcode.com/gh_mirrors/fo/foo2zjs 在Linux系统中使用打印机常常会…...

基于MCP协议的能源转型智能体:架构、实现与应用场景解析

1. 项目概述&#xff1a;能源转型智能体的“大脑”与“手脚”最近在做一个挺有意思的项目&#xff0c;核心是围绕一个叫apifyforge/energy-transition-intelligence-mcp的智能体展开的。这名字听起来有点拗口&#xff0c;拆开来看&#xff0c;“apifyforge”是发布者&#xff0…...