内容介绍
内容介绍
基于 BeagleBone Black 的WEB LED控制
硬件平台介绍
BeagleBone Black 是一款广受欢迎的开源单板计算机 (SBC),以其强大的性能、灵活的 GPIO 和丰富的接口,广泛用于嵌入式开发、物联网 (IoT) 项目、机器人控制等场景。它由 BeagleBoard.org 基金会开发,专注于低功耗、开源生态和扩展性,适合从初学者到专业开发者。
处理器
- 型号: 德州仪器 (TI) AM3358 ARM Cortex-A8。
- 主频: 高达 1 GHz。
- 特色组件:
- 3D 图形处理单元 (GPU): 支持简单的图形显示应用。
- 两个可编程实时单元 (PRU):
- 用于实时任务,例如 PWM 信号生成、编码器读数和工业协议实现。
- 支持纳秒级精度,适合高要求的控制任务。
内存与存储
- RAM: 512 MB DDR3。
- 内置存储: 4 GB eMMC 闪存,预装 Linux Debian 操作系统。
- 扩展存储: 通过 microSD 卡插槽扩展,支持系统引导和数据存储。
接口与外设
- 网络连接:
- 10/100 Mbps 以太网接口,支持稳定的有线网络连接。
- 视频输出:
- HDMI 接口: 支持 1280x720 分辨率的视频输出。
- USB:
- 1 个 USB Host 接口: 可连接外设,如键盘、鼠标、Wi-Fi 模块等。
- 1 个 Micro-USB 接口: 用于供电或数据通信。
- GPIO 引脚:
- 2×46 引脚的扩展接头,总计 92 个引脚,包含多种功能:
- 数字 GPIO:控制外部设备。
- UART: 支持多个串口通信。
- SPI、I2C、CAN 总线: 与传感器、执行器等模块通信。
- PWM: 控制伺服电机、LED 调光等。
- ADC: 7 通道,12 位分辨率,用于模拟信号输入(例如传感器)。
设计说明
作业题目:
- 在系统中建立一个网页,并且与 LED 联动,使用网线连接到设备上时,可以从网页中控制 LED 的开关与闪烁
设计思路
- 此板卡板载4个LED灯,一个以太网接口。
- 后端的 LED 控制可以使用 Adafruit-BBIO 库来驱动。
- 前端 可以使用 Flask web框架来简单时间。
详细设计说明
后端设计
导入库
import Adafruit_BBIO.GPIO as GPIO
from flask import Flask, render_template, redirect, url_for
import time
import threading
Adafruit_BBIO.GPIO:该库用于访问 BeagleBone 等开发板的 GPIO 引脚,可以用于控制 LED、按钮等硬件设备。Flask:Flask 是一个轻量级的 Web 框架,用于创建 Web 应用。time:用于控制时间延迟,例如控制 LED 闪烁的频率。threading:用于创建并管理多线程,实现后台跑马灯效果的控制。
设置 LED 引脚
python
复制代码LED_PINS = ["USR%d" % i for i in range(4)]
for led in LED_PINS:
GPIO.setup(led, GPIO.OUT)
LED_PINS = ["USR%d" % i for i in range(4)]:这行代码创建了一个包含 4 个 LED 引脚名称的列表LED_PINS。这些引脚是 BeagleBone 上默认的USR1到USR4LED 引脚。GPIO.setup(led, GPIO.OUT):设置每个 LED 引脚为输出模式,允许程序控制它们的状态(开 / 关)。
Flask 应用初始化
python
复制代码app = Flask(__name__)
app = Flask(__name__):初始化 Flask 应用对象,这是创建和运行 Flask 应用所需的标准步骤。__name__参数表示当前脚本的名字。
控制 LED 状态的函数
python
复制代码def set_led_state(led, state):
"""设置指定 LED 的状态"""
GPIO.output(led, GPIO.HIGH if state == 'on' else GPIO.LOW)
set_led_state(led, state):这个函数根据传入的状态('on' 或 'off')控制指定的 LED 引脚。GPIO.output(led, GPIO.HIGH):如果状态是 'on',则将 LED 引脚设置为高电平(点亮 LED)。GPIO.output(led, GPIO.LOW):如果状态是 'off',则将 LED 引脚设置为低电平(熄灭 LED)。
读取所有 LED 状态
python
复制代码def read_led_state():
"""读取所有 LED 的状态"""
return [GPIO.input(led) for led in LED_PINS]
read_led_state():此函数返回所有 LED 的当前状态(开或关)。它通过调用GPIO.input(led)来获取每个 LED 引脚的当前电平(高或低),并返回一个包含所有 LED 状态的列表。
跑马灯线程函数
def run_chase():
"""实现跑马灯效果"""
global running
while running:
for led in LED_PINS:
set_led_state(led, 'on')
time.sleep(0.1)
set_led_state(led, 'off')
time.sleep(0.1)
run_chase():这是跑马灯效果的实现函数。它会按顺序逐个点亮并熄灭所有 LED,创建一个跑马灯的效果。time.sleep(0.1)用于控制每个 LED 的闪烁时间间隔(0.1 秒)。global running:使用global关键字访问并修改全局变量running,该变量控制跑马灯效果的运行状态。while running:当running为True时,跑马灯效果持续运行。否则,退出循环停止跑马灯效果。
主页路由
@app.route('/')
def index():
"""主页路由,显示 LED 状态和跑马灯状态"""
led_states = read_led_state() # 读取当前 LED 状态
return render_template('index.html', led_states=led_states, running=running)
@app.route('/'):这个装饰器定义了主页路由(根路径),即访问http://localhost:5000/时触发index()函数。read_led_state():调用之前定义的函数来获取所有 LED 的当前状态。render_template('index.html', ...):将 LED 状态和跑马灯状态传递给index.html模板,以便在网页上显示。
单独控制 LED 开关
@app.route('/led/<int:led_id>/<state>')
def control_led(led_id, state):
"""控制单个 LED 开关"""
if 0 <= led_id < len(LED_PINS) and state in ['on', 'off']:
set_led_state(LED_PINS[led_id], state)
return redirect(url_for('index'))
@app.route('/led/<int:led_id>/<state>'):这个路由定义了用户可以通过 URL 控制单个 LED 的开关。例如,访问http://localhost:5000/led/0/on会点亮第一个 LED。led_id和state是 URL 参数,led_id指定要控制的 LED 引脚(通过索引),state指定 LED 的状态('on' 或 'off')。set_led_state(LED_PINS[led_id], state):调用之前定义的函数控制指定 LED 引脚的状态。redirect(url_for('index')):控制完成后,重定向回主页,刷新页面以显示新的 LED 状态。
切换跑马灯状态
@app.route('/toggle_chase')
def toggle_chase():
"""切换跑马灯状态"""
global running
if running:
running = False # 停止跑马灯
else:
running = True # 启动跑马灯
chase_thread = threading.Thread(target=run_chase)
chase_thread.daemon = True
chase_thread.start()
return redirect(url_for('index'))
@app.route('/toggle_chase'):定义了一个路由,用于启用或停止跑马灯效果。global running:检查全局变量running的状态并切换它。threading.Thread(target=run_chase):当启动跑马灯时,创建一个新的线程来执行run_chase函数,这样跑马灯效果就可以在后台运行,而不会阻塞主线程。chase_thread.daemon = True:将线程设置为守护线程,确保在主程序退出时,后台线程也会自动停止。chase_thread.start():启动新的线程开始跑马灯效果。
运行 Flask 应用
if __name__ == '__main__':
try:
app.run(host='0.0.0.0', port=5000, debug=True)
except KeyboardInterrupt:
print("Exiting gracefully...")
finally:
GPIO.cleanup() # 确保清理 GPIO 状态
if __name__ == '__main__':确保仅在直接运行该脚本时启动 Flask 应用,而不是在被导入时启动。app.run(host='0.0.0.0', port=5000, debug=True):启动 Flask 应用,监听所有网络接口的 5000 端口,debug=True启用调试模式。try-except:捕捉键盘中断信号(Ctrl+C),确保退出时打印消息并清理 GPIO 状态。GPIO.cleanup():在程序退出时调用,确保清理 GPIO 设置,防止后续脚本出错。
总结
出现 Temporary failure resolving*** 的错误
- 在 sudo apt update 的过程中,出现报错。
- 网上找到问题发现是DNS的问题
cat /etc/resolv.conf
- 添加DNS地址
sudo nano /etc/resolv.conf
# 写入这些
nameserver 8.8.8.8
nameserver 8.8.4.4
- 再更新,就可以执行了。
前端知识学习
对前端框架和HTML语言有了一定的了解。
附件下载
my_flask_app.zip
团队介绍
个人
评论
0 / 100
查看更多
猜你喜欢
【Funpack3-5】基于BeagleBone Black的网页LED控制功能该项目使用了BeagleBone Black、Flask、gpiod,实现了通过网页控制板载LED的设计,它的主要功能为:在系统中使用Flask建立了一个网页,实时显示板载LED状态与操作按键。板卡通过网线与PC通信与供电,可从网页中控制LED的开关与闪烁。。
葉SiR
361
Funpack3-5:基于BeagleBone® Black的网页LED控制该项目使用了BeagleBone® Black,实现了网页LED控制的设计,它的主要功能为:基于BeagleBone上的AM3358,运行Linux在其中部署网页,控制板载LED。
振青666
477
Funpack3-5 BeagleBone Black 网页控制LED该项目使用了BeagleBone Black,实现了网页控制LED的设计,它的主要功能为:BeagleBone Black 搭建基于 Flask 框架的网页,在局域网内通过电脑或者移动端访问网页控制LED点亮与闪烁的功能。。
Batman9527
426