一、硬件介绍:
一直期盼的linux板子终于来了,funpack3-5提供了三块开发板供选择,第一块就是这个BeagleBone® Black狗板啦!不过在此之前,自己确实没有留意过这个BBB的linux开发板,上网查了介绍,发现它是和树莓派齐名的linux开发板。BeagleBone 可以运行完整的 Linux 系统,程序的编写、编译和调试都可以在板子上进行,而且支持多种编程语言,如常用的 C、C++、Python、perl 都可以在 BeagleBone 内使用。此外,BeagleBone 还自带了基于 Web 的 Cloud9 编辑器以及对应的 BoneScript 语言,可以方便的在电脑浏览器中对 BeagleBone 进行编程。
BeagleBone Black 是一款基于 TI 公司 AM3358 处理器的开发套件,处理器集成了高达 1GHz 的 ARM Cortex A8 内核,并提供了丰富的外设接口,包括网口、USB Host、USB OTG、TF卡接口、串口、JTAG接口(默认不焊)、HDMI D Type 接口、eMMC、ADC、I2C、SPI 、PWM 和 LCD 接口。板载了512MB DDR3 SDRAM 内存,和4G的eMMC Flash固盘。
性能方面不算很高,但是够用,主打一个接口多。不过4G固盘,确实有点不够用,好在还有SD卡槽,可以进行扩充存储。
二、任务选择:
选择了BBB板子,我选择了任务2:在系统中建立一个网页,并且与LED联动,使用网线连接到设备上时,可以从网页中控制LED的开关与闪烁。
三、准备工作:
1、升级操作系统。拿到板子第一步,习惯性先升级系统。去官方主页下载最新的Debian的镜像文件,要留意上边的文件筛选,他家的产品还是挺多的,这里要选择手头这个BeagleBone Black开发板的镜像文件。这里我选择的是“BeaglePlay Debian 12.7 2024-09-04 XFCE Flasher”
通过Win32DiskImager进行烧录SD卡,然后插入SD卡,就可以通过SD卡启动,启动后,板子上的蓝灯会闪烁,应该是将SD卡的内容拷贝到固盘上,等待即可。
2、联网。BBB板子作为单板计算机,是提供了SSH服务,通过网络可以登录到操作系统来操作硬件的。系统将USB口作为网口进行了驱动,默认的IP为“192.168.7.2”,用户为“debian”,密码为:“temppwd”,超级用户密码也是“temppwd”。
板子上还提供了一个RJ45网口,另外还有一个USB口,在这里将手头的WAN1100网口通过USB口插入,无需安装驱动,即可可以识别到无线网卡了。
通过文件"/etc/network/interfaces"配置有线网络。
source /etc/network/interfaces.d/*
auto eth0
iface lo inet loopback
allow-hotplug eth0
iface eth0 inet static
address 100.196.128.14
netmask 255.255.255.224
通过文件“/etc/wpa_supplicant/wpa_supplicant-wlan0.conf”配置无线网络,连接自己的wifi。
ctrl_interface=DIR=/run/wpa_supplicant GROUP=netdev
update_config=1
p2p_disabled=1
#country=US
network={
ssid="Xiaomi 13"
psk="weile150"
}
然后通过命令 "sudo apt update;sudo apt upgrade"对系统做一下升级。
四、任务实现:
使用web页面控制LED灯的状态。在单板计算机上实现这个功能,和使用单片机实现区别还是蛮大的。在BBB板子上可以运行Python,所以就计划直接使用python来实现WEB页面的管理。BBB板子的GPIO口,也有python对应的库来实现管理,所以整个任务使用python来实现就变得很简单了。
1、安装对应的python包。
pip3 install --upgrade Adafruit_BBIO
pip3 install flask
Flask 是一个用 Python 编写的轻量级 Web 应用框架。使用这个框架,可以很轻易地搭建自己的WEB服务。Adafruit BBIO 是一个 API,用于从 Beaglebone 上运行的 Python 应用程序启用GPIO、PWM、ADC、UART、SPI和eQEP(正交编码器)硬件访问。
2、设计web页面。浏览器访问时,读取的内容为服务器传递的html页面,在这个页面中,添加了3个按钮,分别对应了“LED灯开”、“LED灯关”、“LED灯闪烁”三个功能。
<!Document html>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<!-- 新 Bootstrap 核心 CSS 文件 -->
<link rel="stylesheet" href="//cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap.min.css">
<!-- 可选的Bootstrap主题文件(一般不用引入) -->
<link rel="stylesheet" href="//cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap-theme.min.css">
<style>
a {
width:100%
}
</style>
<head>
<title>LED灯开关</title>
</head>
<body>
<div class="container-fluid">
<div class="row">
<a href="/on" class="btn btn-success btn-lg" role="butoon">开</a>
</div>
</br>
<div class="row">
<a href="/off" class="btn btn btn-info btn-lg" role="button">关</a>
</div>
</br>
<div class="row">
<a href="/sansuo" class="btn btn-danger btn-lg" role="button">闪烁</a>
</div>
</div>
<!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->
<script src="//cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script>
<!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
<script src="//cdn.bootcss.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
</body>
3、搭建WEB服务。使用flask的框架。先建立文件夹BBB_led 作为项目目录。在文件夹下建立子文件夹templates,用来存放web页面,将上边的页面文件命名为"ctlled.html",最后在项目文件夹BBB_led下,建立python文件BBB_led
app = Flask(__name__)
# 进入的首个网页
@app.route('/', methods=['GET', 'POST'])
def main():
return render_template("ctlled.html") # 返回网页
4、控制LED。BBB开发板上使用两组23X2的排母,将管脚引了出来。可以通过映射去控制对应的管脚。板子上还有4颗LED灯,分别是USER0、USER1、USER2、USER3。在这里,我直接使用板子上的LED0的灯来做展示。
浏览器通过get方式访问,后台通过不同的字符串来执行相应的动作。
# 点击打开
@app.route('/on', methods=['GET'])
def on():
GPIO.output("USR0", GPIO.HIGH) # GPIO.26高电平
time.sleep(3.5) # 延时3.5s
print("555") # 打印555
return render_template("ctlled.html") # 返回一开始的页面
# 点击关闭
@app.route("/off", methods=['GET'])
def off():
GPIO.output("USR0", GPIO.LOW) # GPIO.26低电平
time.sleep(3.5)
print("666")
return render_template("ctlled.html") # #返回一开始的页面
# 点击闪烁
@app.route("/sansuo", methods=['GET'])
def sansuo():
for i in range(10):
GPIO.output("USR0", GPIO.HIGH)
time.sleep(0.2)
GPIO.output("USR0", GPIO.LOW)
time.sleep(0.2)
print("666")
return render_template("ctlled.html")
五、效果展示:
六、心得体会:
终于等到了linux的开发板,能参加这次活动超级开心。单板计算机既能很好地跑各种软件,如C、python,又能和底层硬件打交道,控制GPIO的输出、输入。在整个学习过程中,还有各位老师的耐心指导,非常感谢!