Funpack3-5 BeagleBone Black 任务2:基于网页的点灯
该项目使用了BeagleBone Black开发板、Python语言,实现了通过网页控制LED亮灭/闪烁的设计,它的主要功能为:点击网页上的按钮,可控制板子上USR3的LED的亮、灭或闪烁。
标签
Funpack活动
开发板
sksks
更新2025-01-15
中山大学
4

Funpack3-5 :基于网页的BeagleBone Black点灯

一、项目简介

本项目基于BeagleBone Black平台,使用python开发,建立了一个网页与开发板LED联动,当开发板通过网线连接到电脑时,可通过网页控制LED的开关与闪烁


二、硬件介绍

BeagleBone Black开发板

1722565549565.jpg

BeagleBone Black 是一款面向开发人员和业余爱好者的低成本、高扩展、社区支持的开发平台,板卡处理器选用的是 TI 公司 AM3358 芯片, 处理器集成了高达 1GHz 的 ARM Cortex™ A8 内核,具有强大的处理能力并提供了丰富的外设接口BeagleBone® Black面向开源社区用户、开源硬件爱好者和任何对Arm Cortex-A8低成本处理器感兴趣的人而设计,配备精简,旨在为不需要搭建完整开发平台并想体验Arm处理器功能的用户提供入门的捷径。它配备了最低限度的外设,使用户能够体验处理器的强大功能,还提供了许多接口,用户还可以开发自己的电路板或添加自己的电路。


特性

  • 处理器 TI Sitara 处理器:AM3358BZCZ100
    • 1GHz ARM® Cortex-A8 处理器
    • SGX 3D 图形引擎
    • NEON 浮点加速器
    • 2×32 位 200MHz 可编程实时单元 (PRU)
  • 内存
    • SDRAM:512MB DDR3L 800MHZ
    • 板载闪存:4GB,8 位嵌入式 MMC (eMMC)
  • 接口
    • 高速 USB 2.0 客户端端口: 通过 miniUSB 访问 USB0,客户端模式
    • 高速 USB 2.0 主机端口: 访问 USB1,A 型插座,500mA LS/FS/HS
    • 串行端口: UART0 通过 6 针 3.3V TTL 接头访问。接头已填充
    • 10/100M 以太网接口(RJ45)
  • 视频/音频接口
    • HDMI D 型接口
    • LCD 接口
    • HDMI 接口立体声音频


三、 设计思路

本项目使用python语言开发,通过flack建立一个web服务器,使用html制作了一个简易网页,通过点击网页上的按钮可以直接控制开发板LED的io文件,从而控制LED的开关和闪烁。设计步骤如下:

  1. 更新系统镜像。BeagleBone Black开发板(以下简称BBB)自带镜像版本比较旧,更新镜像有利于后续开发。从BeagleBone官网下载最新版本的镜像,使用BalenaEtcher将镜像烧录至MicroSD卡。将烧录好的MicroSD卡插入BBB卡槽,按住Boot按钮后上电连接至电脑,此时启动的就是MicroSD卡中的新版本镜像。

image.png

  1. 开启自带的VScode编辑器。通过putty等方式连接到BBB,输入如下指令
sudo systemctl enable bb-code-server.service

稍等片刻即可开启VScode。浏览器中输入http://192.168.7.2:3000(或http://192.168.6.2:3000)进入VScode。

image.png

  1. 编写代码和网页。

四、 效果展示

  1. 打开网页

image.png

  1. 控制LED开关:

点击on按钮后,USR3亮起

7c25ddf849737f920bcb3a39d6b0b13.jpg

点击off按钮后,USR3熄灭

903c8be68205a48d0d8d95fcbbff0e0.jpg

点击blink后,USR3闪烁

五、主要代码

控制部分

from flask import Flask, redirect, url_for, request, render_template
import threading
import time

blink_enable=0
app = Flask(__name__)
LEDPATH='/sys/class/leds/beaglebone:green:usr3/brightness'

#控制LED亮起
def turn_on():
  with open(LEDPATH,"w") as f:
    f.seek(0)
    f.write("1")

#控制LED熄灭
def turn_off():
  with open(LEDPATH,"w") as f:
    f.seek(0)
    f.write("0")

#控制LED闪烁
def blink_LED():
  global blink_enable
  while(blink_enable):
    turn_on()
    print(0)
    time.sleep(0.5)

    turn_off()
    print(1)
    time.sleep(0.5)

@app.route('/')
def index():
  return render_template("index.html")

@app.route('/on',methods = ['POST', 'GET'])
def on():
  global blink_enable
  if request.method == 'POST':
    blink_enable=0
    turn_on()
  return render_template("index.html")

@app.route('/off',methods = ['POST', 'GET'])
def off():
  global blink_enable
  if request.method == 'POST':
    blink_enable=0
    turn_off()
  return render_template("index.html")

@app.route('/blink',methods = ['POST', 'GET'])
def blink():
  global blink_enable
  if request.method == 'POST':
    blink_enable=1
    t = threading.Thread(target=blink_LED)#开启线程,用于控制LED闪烁
    t.start()
    t.join()
  return render_template("index.html")



if __name__ == '__main__':
  app.run()

网页部分

<html>
    <head>
        <style>
        .centered-title {
          text-align: center;
        }
        </style>
    </head>
    <h2 class="centered-title">LED Control</h2>
    <body class="centered-title">
        <form action = "/proxy/5000/on" method = "post">
            <p><input type = "submit" value = "on" /></p>
        </form>
        <form action = "/proxy/5000/off" method = "post">
            <p><input type = "submit" value = "off" /></p>
        </form>
        <form action = "/proxy/5000/blink" method = "post">
            <p><input type = "submit" value = "blink" /></p>
        </form>
        <form action = "/proxy/5000/close" method = "post">
            <p><input type = "submit" value = "close" /></p>
        </form>
    </body>
</html>


附件下载
main.py
主函数
index.html
网页代码
团队介绍
中山大学2021级通信工程学生
团队成员
sksks
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号