第1章 项目描述
1.1 项目介绍
本项目完成电子森林网站“Funpack3-5”活动板卡1 BeagleBone® Black的任务二。在系统中建立一个网页,并且与LED联动,使用网线连接到设备上时,可以从网页中控制LED的开关与闪烁。本项目在网页中实现了PRU点灯的效果。
1.2 设计思路
首先借助于官方文档与例程,以及官方在gitlab的代码仓库,C语言实现PRU编译后点灯。然后借助于python 的paramiko 库实现上位机网络登陆 linux 开发板,然后使用 gradio 库,构建一个网页前端,包含一个点灯按钮及其他功能,实现对开发板的控制,最后退出开发板,关灯。另外,基于gradio自带的内网穿透功能,暴露这一网页到公网,实现了全球任意位置对该板卡的硬件进行控制。
1.3 硬件介绍
BeagleBone® Black 是一款面向开发人员和业余爱好者的低成本、高扩展、并有社区支持的开发平台。处理器选用了TI AM3358芯片,基于ARM Cortex-A8架构处理器。还配备了丰富的扩展资源,包括HDMI接口、以太网、SD 卡槽、并预留了足够多的管脚用于AD转换、LCD显示屏、PWM输出、I2C、串口等等。板卡可运行完整的 Linux 系统,且支持多种编程语言。
采用内存512 MB DDR 3 L,CPU为Sitara AM3358BZCZ100, 1GHZ。有一个USB接口,一个micro HDMI 接口可以连接显示器,该系统也可以使用2.4 GHz 无线接收器实现键鼠操控。
存储:内置4GB的eMMC闪存,用于存储操作系统和用户数据。
I/O接口:
2x 46-pin双排扩展头,提供GPIO、I2C、SPI、UART等多种接口。
1x 2x20-pin P8/P9扩展头,提供额外的GPIO和PWM接口。
1x microSD卡槽,用于扩展存储。
视频输出:支持HDMI输出,分辨率可达1080p。
电源:通过micro USB接口供电,支持5V DC。
尺寸:尺寸为82mm x 50mm,便于嵌入式项目集成。
其他特性:
支持Linux操作系统,如Debian和Ubuntu。
支持多种编程语言和开发工具,如Python、Java、C/C++等。
支持多种通信协议,如I2C、SPI、UART、CAN等。
该板卡出厂系统内置了cloud9 ,这是亚马逊开源的网页。
该板卡作为近十年来的国际热门 linux 开发板,拥有非常强大的官方文档支持与社区资源:
代码仓库:https://git.beagleboard.org/docs/docs.beagleboard.io/-/tree/main
文档:
https://docs.beagleboard.io/latest/boards/beaglebone/black/index.html#beagleboneblack-home
https://docs.beagleboard.org/beaglebone-black.pdf
支持外设:https://elinux.org/Beagleboard:BeagleBone_Black_Accessories
官方镜像更新:https://beagleboard.org/latest-images
综上,BeagleBone Black是一款功能强大、性价比高的单板计算机,适合用于各种嵌入式系统和物联网项目。它的硬件配置和丰富的接口使其成为教育、研究和工业应用的理想选择。
1.3.1 PRU基础概念
PRU 是 AM335x SoC 上的双核微控制器系统。它旨在用于高速无抖动 IO 控制。PRU 独立于 linux 调度程序,可以直接访问 BeagleBone Black 的 IO 引脚,是 IO 密集型任务的理想选择。
为 PRU 编写固件,编写加载程序。
在 PRU C 之上实现一种语言来实现。它将直接编译为 PRU C。这也可以通过在 PRU 上实现字节码引擎来解决,但这将导致 PRU 上本已有限的资源的浪费。使用这种方法,两个 PRU 内核可以彼此独立运行。
simpPRU 是一种过程编程语言
simpPRU 代码的扩展名为 `.sim`。
simpPRU 提供了一个控制台应用程序来使用 Remoteproc 功能。
1.3.2 连接
注意,上电开机,关机需要按一下S3电源键。
通过 USB 连接和 Web 访问,插上官方 USB(板卡附赠,可以同时供电与交换网络数据),接入PC端,打开本地服务器。在 BeagleBone 的板载存储中其实已经存放了文档和驱动,它们可以帮助你更容易地连接 BeagleBone。注意修改以太网硬件的IP 地址(固定IP), `192.168.7.1`。
大约 20 秒后,一个可移动存储设备会出现在你的磁盘列表中,双击其中的 START.htm 。
输入http://192.168.7.2/ide.html 即可联网。
其他连接方式:VSCode远程连接ssh;mobaxterm连接。
使用mobaxterm软件输入 `192.168.7.2` 和 `debian`,输入密码
1.3.3 点灯所关联的硬件与命令行
BeagleBone black wireles 上有4个可以闪的用户灯,名字为 USR 0-3。
cd /sys/devices/platform/leds/leds/
# 可以看到三个灯
ls
cd beaglebone\:green\:usr1
# 可以看到设备
ls
brightness device max_brightness power subsystem trigger uevent
trigger:工作模式。有很多模式可以选。因为我们要手动使用,需要将其配置为 none。
max_brightness : 最大亮度,因为我们的灯只有开和关两个状态,所以1为最亮,0为灭。不用配置。
brightness:亮度。输入1为亮,0为灭。
echo none >trigger #配置
cat trigger #打印
echo 1 > brightness # 点亮1
echo 0 > brightness # 关闭0
第2章 软件流程图
第3章 各功能对应的主要代码片段及说明
3.1 上位机部分
创建 SSH 客户端。
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
尝试SSH连接板卡:
def connect_to_board():
try:
ssh.connect(ssh_host, ssh_port, ssh_username, ssh_password)
return "Connected to the development board."
except Exception as e:
return f"Failed to connect: {e}"
驱动点灯程序:
执行 hello.pru0 ,只需要:
cd /opt/source/pru-cookbook-code/02start && make TARGET=hello.pru0
3.2 板卡PRU编译
在 https://github.com/VedantParanjape/simpPRU.git 下载代码库。拉入单片机即可。
如果常规PRU点灯启停:
cd /opt/source/pru-cookbook-code/06io
source setup.sh
make
bone$ make stop
- Stopping PRU 0
stop
bone$ make start
- Starting PRU 0
start
另外PRU还可以参考:
https://docs.beagleboard.org/latest/books/pru-cookbook/02start/start.html#blinking-an-led 。
3.3 PRU代码解读
本文使用“hello.pru0.C”。
GPIO控制:
uint32_t *gpio1 = (uint32_t *)GPIO1;
循环控制:
for(i=0; i<10; i++) {
gpio1[GPIO_SETDATAOUT] = USR3; // The the USR3 LED on
__delay_cycles(500000000/5); // Wait 1/2 second
gpio1[GPIO_CLEARDATAOUT] = USR3;
__delay_cycles(500000000/5);
}
第4章 功能展示及说明
程序启动,Gradio 自动创建一个免费内网穿透远程服务器。
然后会自动打开网页,具备部分功能,点击make可以直接让USER3的LED灯实现点灯。
还有output区域显示当前状态。
第5章 对本活动的心得体会
本次活动接触了BeagleBone® Black 板卡,不同于常规的linux板卡,其支持PRU特性让需要工业应用成为可能,另外也是第一次了解到这个系列板卡以及非常丰富的社区支持,非常适合自学的开发板。
本次活动也设计了一版上位机SSH通讯的代码,并且完成了板卡控制任务,积累了一定的经验。
最后,感谢电子森林提供的活动与支持。