项目介绍
本项目使用BeagleBone Black作为主控,选择的任务是网页点灯
项目详情
通过在系统中建立一个网页,并且与LED联动,使用网线连接到设备上时,可以从网页中控制LED的开关与闪烁
开发环境
芯片介绍
AM335x 微处理器以 ARM Cortex-A8 处理器为基础,通过图像、图形处理、外设以及 EtherCAT 和 PROFIBUS 等工业接口选件得到增强。 这些设备支持高级操作系统(HLOS)。 处理器 SDK Linux® 和 TI-RTOS 可从 TI 免费获得。 AM335x 微处理器包含功能框图所示的子系统: 微处理器单元 (MPU) 子系统基于 ARM Cortex-A8 处理器,PowerVR SGX™ 图形加速器子系统提供 3D 图形加速,支持显示和游戏效果。
PRU-ICSS 与 ARM 内核分离,允许独立运行和时钟,从而提高了效率和灵活性。PRU-ICSS 支持额外的外设接口和实时协议,如 EtherCAT、PROFINET、EtherNet/IP、PROFIBUS、Ethernet Powerlink、Sercos 等。此外,PRU-ICSS 的可编程特性及其对引脚、事件和所有片上系统 (SoC) 资源的访问,为实现快速、实时响应、专用数据处理操作、定制外设接口以及卸载 SoC 其他处理器内核的任务提供了灵活性。
开发板介绍
BeagleBone Black 是一款面向开发人员和业余爱好者的低成本、高扩展、社区支持的开发平台,板卡处理器选用的是 TI 公司 AM3358 芯片, 处理器集成了高达 1GHz 的 ARM Cortex™ A8 内核,具有强大的处理能力并提供了丰富的外设接口。BeagleBone® Black面向开源社区用户、开源硬件爱好者和任何对Arm Cortex-A8低成本处理器感兴趣的人而设计,配备精简,旨在为不需要搭建完整开发平台并想体验Arm处理器功能的用户提供入门的捷径。它配备了最低限度的外设,使用户能够体验处理器的强大功能,还提供了许多接口,用户还可以开发自己的电路板或添加自己的电路。
板卡框图
设计思路
1、搭建一个本地Nginx服务器
Nginx是一款轻量级的Web服务器、反向代理服务器及电子邮件(IMAP/POP3)代理服务器
主要特点
- 高性能:Nginx设计重点是高并发、高性能和低资源消耗,特别适用于静态内容的分发和反向代理服务。官方测试Nginx能够支撑5万并发连接,并且CPU、内存等资源消耗非常低。
- 稳定性:Nginx运行非常稳定,启动特别容易,并且几乎可以做到7×24不间断运行,即使运行数个月也不需要重新启动。
- 丰富的功能集:Nginx具有反向代理、负载均衡、缓存、虚拟主机等多种功能。
- 简单的配置文件:Nginx的配置文件非常简洁,还能够支持perl语法,Bug非常少。
- 广泛的兼容性:Nginx可以在大多数Unix、Linux OS上编译运行,并有Windows移植版。
2、了解如何操作gpio
操作gpio的流程是先确认gpio的引脚编号,然后就可以通过open函数打开对应的led文件,通过write函数就能控制gpio输出是高低电平,最后通过close函数关闭对应的文件
3、编写网页代码
想要编写网页就得了解HTML、CSS和JavaScript。
HTML 是网页的基础结构,用于定义网页的内容和布局。它通过标签(tags)来标记内容,浏览器会根据这些标签渲染出网页的结构
CSS 用于控制网页的外观和样式,包括颜色、字体、布局、动画等。它使网页内容与样式分离,便于维护和复用
JavaScript 是一种脚本语言,用于为网页添加动态功能和交互行为。它可以直接操作 HTML 和 CSS,实现复杂的逻辑和动态效果
通过对HTML、CSS和JavaScript的编写就能完成网页的设计
程序流程
代码介绍
下面的代码是对板载的灯进行一个流水灯展示,操作gpio的流程是先通过open打开led文件,然后进行write操作,最后关闭文件
import time
import os
LEDs=4
LEDPATH='/sys/class/leds/beaglebone:green:usr'
# Turn off triggers
for i in range(LEDs):
# print(LEDPATH+str(i)+"/trigger")
f = open(LEDPATH+str(i)+"/trigger", "w")
f.write("none")
f.close()
# Open a file for each LED
f = []
for i in range(LEDs):
f.append(open(LEDPATH+str(i)+"/brightness", "w"))
# Sequence
while True:
for i in range(LEDs):
f[i].seek(0)
f[i].write("1")
time.sleep(0.25)
for i in range(LEDs):
f[i].seek(0)
f[i].write("0")
time.sleep(0.25)
要用网页控制灯,要先安装flask
Flask 被称为“microframework”,因为它使用简单的核心,并通过 extension 增加其他功能。Flask 没有默认使用的数据库、窗体验证工具,但支持功能扩展,可以根据需求扩展所需的模块。相较于 Django,Flask 更加轻量、灵活,可定制化高,更适用于小型项目开发。
下面的代码是导入对应的库和设置led的路径,并且设置了ledRedSts 接收led的状态
import os
import time
# import Adafruit_BBIO.GPIO as GPIO
from flask import Flask, render_template, request
app = Flask(__name__)
GPIOPATH=GPIOPATH="/sys/class/gpio"
LEDPATH='/sys/class/leds/beaglebone:green:usr'
#define actuators GPIOs
ledRed = "3" # "P9_14"
ledRedSts = 0
下面的代码设置了网页的根路径,并且读取了led的状态赋值到ledRedSts ,然后传送给网页显示
@app.route("/")
def index():
# Read GPIO Status
f = open(LEDPATH+ledRed+"/brightness", "r")
ledRedSts = f.read()[:-1]
f.close()
templateData = {
'led' : ledRedSts,
}
return render_template('index5.html', **templateData)
下面的代码是根据接收到网页传递的值进行判断。然后进行相应的控制,点击TURN OFF会关闭USER4
点击TURN ON会点亮USER4,点击TURN TOGGLE会让USER4以800ms闪烁3次
@app.route("/<deviceName>/<action>")
def action(deviceName, action):
if deviceName == 'ledRed':
actuator = ledRed
f = open(LEDPATH+ledRed+"/brightness", "w")
if action == "on":
f.write("1")
if action == "off":
f.write("0")
if action == "toggle":
f.close()
f = open(LEDPATH+ledRed+"/brightness", "w")
f.seek(0)
f.write("1")
time.sleep(0.8)
f.seek(0)
f.write("0")
time.sleep(0.8)
f.seek(0)
f.write("1")
time.sleep(0.8)
f.seek(0)
f.write("0")
time.sleep(0.8)
f.seek(0)
f.write("1")
time.sleep(0.8)
f.seek(0)
f.write("0")
time.sleep(0.8)
f.close()
f = open(LEDPATH+ledRed+"/brightness", "r")
ledRedSts = f.read()[:-1]
f.close()
templateData = {
'led' : ledRedSts,
}
return render_template('index5.html', **templateData)
下面是html代码
<!DOCTYPE html>
<head>
<title>GPIO Control</title>
<link rel="stylesheet" href='../static/style.css'/>
</head>
<body>
<h1>GPIO Control</h1>
<h2> LED Status </h2>
<h3> LED ==> {{ led }}</h3>
<h2> Actuator Status & Control </h2>
<h3> RED LED ==>
<a href="/ledRed/off"class="button">TURN OFF</a>
<a href="/ledRed/on" class="button">TURN ON</a>
<a href="/ledRed/toggle" class="button">TURN TOGGLE</a>
</h3>
</h3>
</body>
</html>
网页控制界面
实物图
心得体会
通过这次活动我学习到了Linux开发板是怎么控制led的、怎么利用网页控制led,收获了许多知识,在这里非常感谢硬禾学堂和digikey联合赞助的Funpack活动让我收获了许多知识。