内容介绍
内容介绍
项目介绍
这里是我参加Funpack第三季第五期活动板卡一的任务总结报告,我所完成的是任务二,在系统中建立一个网页,并且与LED联动,使用网线连接到设备上时,可以从网页中控制LED的开关与闪烁,实现数据传输。
大体上经过以下步骤:
- 系统镜像选择与烧录:
首先,我们需要为BBB(BeagleBone Black)开发板寻找一个合适的操作系统镜像。这个镜像应该是专为嵌入式设备设计的Linux发行版,以确保它能够与BBB板子的硬件兼容。在众多的Linux发行版中,我们可以选择如Ubuntu、Debian或者Yocto Project等,这些系统通常都有很好的社区支持和丰富的软件包。找到合适的镜像后,我们需要使用专用的烧录工具,比如Etcher或者Raspberry Pi Imager,将系统镜像烧录到SD卡中。完成烧录后,将SD卡插入BBB板子,开机即可启动并运行Linux系统。 - 开发环境搭建:
官方提供的Linux系统中已经集成了Visual Studio Code(VSCode)这一强大的代码编辑器和开发平台。VSCode不仅提供了代码编辑、调试等功能,还通过插件支持了多种编程语言和开发框架。在VSCode中,我们可以找到许多为BBB板子预装的示例程序,这些程序覆盖了控制板上各个外设的基本操作,如PWM(脉冲宽度调制)、SPI(串行外设接口)、I2C(互连集成电路)、串口通信等。 - Webserver开发与功能定制:
接下来,我们将基于官方提供的Webserver示例程序进行修改和扩展。Webserver程序允许我们通过网页界面与BBB板子进行交互。我们需要对示例程序进行分析,理解其工作原理,并根据我们的需求进行定制。例如,如果我们想要通过网页控制LED灯的开关和闪烁,我们需要在Webserver程序中添加相应的接口和逻辑。这可能涉及到编写新的HTML页面来提供用户界面,以及在服务器端编写处理HTTP请求的代码,以控制GPIO(通用输入输出)引脚的电平,从而控制LED灯的状态。 - 功能测试与优化:
在完成代码的修改和功能添加后,我们需要对整个系统进行测试,确保网页界面能够正确地控制LED灯。这包括测试LED灯的开关响应是否灵敏,闪烁频率是否符合预期等。在测试过程中,我们可能需要对代码进行调试和优化,以解决可能出现的问题,比如响应延迟、界面不友好等。
通过以上步骤的实施,我们可以能够实现通过网页控制BBB板子上的LED灯,还能够为其他外设的控制打下基础,进一步扩展BBB板子的功能和应用范围。
主要硬件介绍
- 高性能处理器:1GHz ARM Cortex-A8,支持3D图形和浮点运算。
- 实时处理能力:2个200MHz PRU,适合实时任务。
- 内存与存储:512MB DDR3L SDRAM和4GB eMMC闪存。
- 电源管理:TPS65217C PMIC和LDO,确保稳定供电。
- 调试支持:板载JTAG和串行调试接口。
- 多种电源方式:miniUSB或直流插孔供电。
- 丰富接口:高速USB 2.0、以太网、UART、HDMI。
- 用户交互:复位、启动、电源按钮和LED指示灯。
- 扩展能力:46针扩展接口,支持LCD、UART、eMMC等多种功能。
主要软件介绍
BBB板卡是一块高性能的板卡,开发该板子一般是在它运行的linux系统的基础上进行开发的,所以我们需要给它的sd卡中烧录linux系统,至于选择什么版本,可以直接去官网下载,方便快捷,不用自己编译系统。
在官方的介绍里面,官方系统中,已经自带了示例程序,需要通过打开系统已经安装了的vscode平台,进行查看编写,这里我们来到/home/debian/beaglebone-cookbook-code/06iot/flask/app3.py路径下
示例程序都是python文件,对其中一个进行改写
#!/usr/bin/env python
# From: https://towardsdatascience.com/python-webserver-with-flask-and-raspberry-pi-398423cc6f5d
# import Adafruit_BBIO.GPIO as GPIO
import os
from flask import Flask, render_template, request
app = Flask(__name__)//webserver
#define LED GPIO
ledRed = "P9_14" //led引脚号
pin = '50' # P9_14 is gpio 50
GPIOPATH="/sys/class/gpio"
pwm = '1' # pwm to use
channel = 'a' # channel to use
PWMPATH='/dev/bone/pwm/'+pwm+'/'+channel
#initialize GPIO status variable
ledRedSts = 'led off'
# Make sure pin is exported
f = open(PWMPATH+'/period', 'w')
f.write(str(1000000000))
f.close()
f = open(PWMPATH+'/enable', 'w')
f.write('1')
f.close()
f = open(PWMPATH+'/duty_cycle', 'w')
f.write('0')
f.close()
@app.route("/")
def index():
# Read Sensors Status
templateData = {
'title' : 'GPIO output Status!',
'ledRed' : ledRedSts,
}
return render_template('index3.html', **templateData)
@app.route("/<deviceName>/<action>")
def action(deviceName, action):
if deviceName == 'ledRed':
actuator = ledRed
f = open(PWMPATH+'/duty_cycle', 'w')
if action == "on":
f.write('1000000000')
ledRedSts = 'led on'
if action == "off":
f.write("0")
ledRedSts = 'led off'
if action == "flash":
f.write('500000000')
ledRedSts = 'led flashing'
f.close()
templateData = {
'ledRed' : ledRedSts,
}
return render_template('index3.html', **templateData)
if __name__ == "__main__":
app.run(host='0.0.0.0', port=8080, debug=True)
上面代码是一个使用Python编写的简单Web服务器,使用了Flask框架。它允许用户通过Web界面控制连接到树莓派(或其他支持的硬件)上的LED灯:
- 导入模块:代码开始部分导入了必要的模块,包括操作系统模块
os
和Flask框架的相关模块。 - 定义LED和PWM设置:代码定义了LED的GPIO引脚号(P9_14),对应的pin编号(50),以及PWM(脉冲宽度调制)的相关设置。
- 初始化PWM:代码初始化了PWM的周期(period)、启用状态(enable)和占空比(duty_cycle),这些设置控制LED的亮度和闪烁。
- 创建Flask应用:
app = Flask(__name__)
创建了一个Flask应用。 - 定义首页路由:
@app.route("/")
定义了根目录的路由,当用户访问Web服务器的根目录时,会显示一个名为index3.html
的HTML模板,其中包含LED的状态信息。 - 定义动作路由:
@app.route("/<deviceName>/<action>")
定义了一个动态路由,允许用户通过URL指定设备名称和动作(如/ledRed/on
)。这个路由会根据用户请求的动作(开、关、闪烁)来控制LED的状态。 - 控制LED状态:根据用户请求的动作,代码会写入不同的值到PWM的占空比文件中,从而控制LED的亮灭和闪烁。
- 更新模板数据:在执行了LED控制操作后,代码会更新
templateData
字典,将最新的LED状态传递给index3.html
模板。 - 启动Web服务器:
if __name__ == "__main__":
确保当脚本作为主程序运行时,会启动Flask应用,并设置监听所有网络接口的8080端口,开启调试模式。
效果展示
上面中红色箭头的led灯会受到网页端的控制。
总结
在本次活动中,学习了如何在linux系统环境下进行开发。在过程中遇到的问题,通过百度搜索都能找到适合的答案,使自我得到了提升,感谢硬禾学堂平台。
附件下载
例程.zip
团队介绍
无
评论
0 / 100
查看更多
猜你喜欢
Funpack3-4 基于FRDM-MCXN947的以太网通讯工具该项目使用了FRDM-MCXN947板卡,实现了通过以太网连接PC进行通信的设计,它的主要功能为:使用板卡上的以太网接口连接到电脑上并通过以太网和电脑通信,实现触摸按键,实体按键,led数据传输。。
反正都一样
35
Funpack3-5 基于Teensy 4.1的以太网通讯工具该项目使用了Teensy 4.1,实现了通过以太网连接PC进行通信的设计,它的主要功能为:使用板卡上的以太网接口连接到电脑上并通过以太网和电脑通信,实现led数据传输。。
反正都一样
10
Funpack3-5 基于Arduino UNO R4 WiFi的云端通讯工具该项目使用了Arduino UNO R4 WiFi板卡,实现了使用mqtt通讯进行通信的设计,它的主要功能为:使用板卡上的esp32wifi/蓝牙模块进行联网,并用mqtt通讯的方式与手机实现数据通讯。
反正都一样
14