Funpack3-5:基于BeagleBone® Black的WEB控制LED实验
该项目使用了BeagleBone® Black,实现了WEB控制LED实验的设计,它的主要功能为:在系统中建立一个网页,并且与LED联动,使用网线连接到设备上时,可以从网页中控制LED的开关与闪烁。
标签
Funpack活动
LED
WEB
StreakingJerry
更新2025-01-14
62

项目描述

这个项目使用BeagleBone® Black开发板,在系统中建立一个网页,并且与LED联动,使用网线连接到设备上时,可以从网页中控制LED的开关与闪烁


软件流程图及各功能对应的主要代码片段及说明

整个项目实现的流程图如下:

image.png

在开始项目前,先了解一下如何进入开发环境。


BBB开发板上有一颗4GB的EMMC,里面已经含有出场预装系统。但是这个系统的Kernel版本较老,可以自己更新一下,最方便的方式还是直接使用TF卡系统,这样也方便不同的项目用不同的TF卡,可以快速切换。


进入下面的官方界面,然后选择筛选,下载第一个固件就可以。这个带IOT结尾的固件代表了最小化系统,没有图形化界面,对于BBB这样内存并不富裕的板子来说非常合适。

image.png


下载后,可以使用 balenaEtcher 或任何类似烧录程序,把img烧录到一张空白TF卡,烧完后插入BBB开发板,上电就可以自动进入TF卡系统。

image3


通过USB线插上电脑后,板子会自动虚拟出来一个网卡设备,这个设备在电脑上的IP为192.168.7.1,而在BBB开发板上的IP为192.168.7.2。现在就可以直接使用这个开发板IP来通过SSH连接。登录的用户是debian,密码是temppwd。这些信息在输入密码前也会直接显示出来。

image.png


有线网络连接不需要配置,直接插上网线,就可以看到获取到了自家路由器的IP地址。当然我们也可以通过这个IP来SSH到开发板。

image.png

项目使用python代码构建,其中WEB服务器基于原本就自带的Flask来搭建。项目文件夹中只有两个文件,一个是主程序,另一个templates文件夹用来放HTML文件。

先看下主程序:

from flask import Flask, render_template, request
import Adafruit_BBIO.GPIO as GPIO
import threading
import time


for i in range(4):
    GPIO.setup("USR%d" % i, GPIO.OUT)


def led_on():
    for i in range(4):
        GPIO.output("USR%d" % i, GPIO.HIGH)


def led_off():
    for i in range(4):
        GPIO.output("USR%d" % i, GPIO.LOW)


app = Flask(__name__)


led = ""


@app.route("/")
def index():
    global led
    led = request.args.get("led")
    return render_template("index.html")


def loop():
    current_time = time.time()
    led_state = 0
    while True:
        if led == "on":
            led_on()
        elif led == "off":
            led_off()
        elif led == "blink":
            if time.time() - current_time > 0.2:
                if led_state:
                    led_off()
                    led_state = 0
                else:
                    led_on()
                    led_state = 1
                current_time = time.time()




if __name__ == "__main__":
    t1 = threading.Thread(target=loop, daemon=True)
    t1.start()


    app.run("0.0.0.0", 88, True)

板子上可以被控制的LED一共有4个。出于实验目的,四个LED我就通过循环的方式一起控制了。

app是flask搭建的服务器,服务器的web页面来源于templates文件夹中的index.html。

由于服务器运行方法是阻断的,因此如果我们想控制LED闪烁,需要有另外一个线程来控制闪烁的时间间隔。因此我把所有的LED控制都放到了这个线程的loop循环中,通过一个全局变量led来传递当前LED应有的状态。


同时循环中LED闪烁没用使用sleep方法,而是用了计时的非阻塞方法。这样可以实现在闪烁中改变LED状态时,LED可以立马响应,不用等到延迟结束后下一个循环。


特别需要注意的是,由于BBB开发板本来就自带一些WEB服务,因此这里我们的端口要要避开原有服务。我选择了88端口。


html文件创建了一个简单的web页面,中间显示三个按钮,按下可以分别使用get方法传递不同的参数。

<html>


<head>
    <title>FunPack 3-5</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="icon" href="data:,">
    <style>
        html {
            font-family: Helvetica;
            display: inline-block;
            margin: 0px auto;
            text-align: center;
        }


        h1 {
            color: #0F3376;
            padding: 2vh;
        }


        p {
            font-size: 1.5rem;
        }


        .button {
            display: inline-block;
            background-color: #e7bd3b;
            border: none;
            border-radius: 4px;
            color: white;
            padding: 16px 40px;
            text-decoration: none;
            font-size: 30px;
            margin: 2px;
            cursor: pointer;
        }


        .button2 {
            background-color: #4286f4;
        }
    </style>
</head>


<body>
    <h1>FunPack 3-5</h1>
    <p><a href="/?led=on"><button class="button">ON</button></a></p>
    <p><a href="/?led=off"><button class="button button2">OFF</button></a></p>
    <p><a href="/?led=blink"><button class="button button3">BLINK</button></a></p>
</body>


</html>


功能展示及说明

运行代码可以通过 sudo python3 main.py 完成。看到这些输出,说明服务器已经开始工作。同时应该看到所有的灯都熄灭。

image.png


可以通过网线的IP来访问WEB服务器,也可以通过USB虚拟网卡的IP来访问。这里我选择使用网线来访问。在浏览器中输入之前通过ifconfig看到的地址,别忘记端口号,就可以打开界面。

image.png


当点击打开LED,可以看到所有灯全亮:

f579a137fece54477c0a700b3ec4ad9.jpg


当然也可以按OFF来关闭所有的灯,或按Blink来让灯闪烁。

02daafdd6db4078a7ded582f54e4998.jpg


对本活动的心得体会

这次活动迎来了久违的linux开发板。在linux系统中使用完整的python开发,便利性,灵活性和易用性都比单片机上升了好几个档次,开发体验非常好。

附件下载
web.zip
团队介绍
个人
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号