导语
OpenWRT是一款开源固件,可加载到许多市售路由器上。该固件为较旧或过时的硬件提供了升级途径,并为较新的设备提供了定制/高级功能。
由于 OpenWRT 占用空间较小(176MB 对比 1.7GB 以上的树莓派OS镜像),它非常适合速度和内存使用率较高的老款 Raspberry 硬件。
对于小型家庭和办公室项目,OpenWRT 将提供一些有趣的网络解决方案,例如将 树莓派变成接入点或将其用作无线 LAN 桥接器。但需要注意的是,Raspberry Pi WiFi 硬件不会提供与专用路由器相同的性能。
本文来自国外网友的实操,主要内容包括:
- 如何安装旧的 Raspberry Pi Model B 并运行 OpenWRT
- 我还尝试解释如何安装许多常见的树莓派功能(加载软件、GPIO、I2C……)
优点和缺点
在进入树莓派 OpenWRT 项目之前,了解它与默认的 Raspberry Pi OS 相比的地位很有用。
OpenWRT 的一些优势(优于 Raspbian/Raspberry PI OS)包括:
- 它速度很快,被设计为在内存有限的低端 CPU 上运行
- 聚焦网络功能
- 快速启动
- 操作系统占用空间更小,因此甚至可以使用较旧的 4 GB SD 卡(2GB 是可能的,但可能无法加载许多软件包)。
OpenWRT 的一些限制:
- 没有 X-window 桌面
- 系统设置不像默认的 Raspberry PI OS 那样方便(没有raspi-config)
- 默认安装非常简单,因此您需要手动加载软件包(甚至 Bash 和 Nano)
- 某些软件包的安装可能比较困难(例如 Node-Red)
入门
尽管 OpenWRT 是为在路由器上运行而设计的,但从很多方面来看,在 Raspberry Pi 上运行更方便。
使用树莓派的一些好处包括:
- 你不会让树莓派变"砖",事实上用OpenWRT刷路由器经常会这样
- SD/microSD 卡比大多数家用路由器拥有更多的空间
- 树莓派有一个 HDMI 连接,因此你可以直接在 树莓派上工作(适合入门)
有关 OpenWRT Raspberry Pi 图像,请参阅:https://openwrt.org/toh/raspberry_pi_foundation/raspberry_pi
您可以使用标准 Raspi 映像器在 SD 卡上安装 OpenWRT。对于 Linux 系统,可以通过以下方式安装映像器:
sudoapt update && sudo apt install rpi-imager
加载 SD 卡后,有几种方法可以启动并运行 OpenWRT 系统。以下是使用的步骤。
1. 将显示器和键盘连接到 Pi
让它启动,然后转到命令提示符,并设置一个静态 LAN 地址:
# Enter your own static IP. Note: change the gateway/DNS for your setupucisetnetwork.lan.proto="static"ucisetnetwork.lan.ipaddr="192.168.0.140"ucisetnetwork.lan.netmask="255.255.255.0"ucisetnetwork.lan.gateway="192.168.0.1"ucisetnetwork.lan.dns="192.168.0.1"uci commit network
如果您能够看到 LAN 上的 IP 地址,您可以简单地执行以下操作:
#SetPiforDHCPandthencheckits addressucisetnetwork.lan.proto="dhcp"ucicommitnetwork
2. 将 Pi 硬连线到您的 LAN
将树莓派的网口连接到您的笔记本网口,然后重新启动模块。
您现在可以从笔记本电脑上使用 OpenWRT 的 Web 界面,或者使用安全 shell (ssh) 命令行界面。
我喜欢使用 ssh 选项来开始,因为我可以粘贴命令组。要开始使用 ssh(使用我的静态 IP):
$ ssh root@192.168.0.140BusyBox v1.35.0 (2023-01-03 0021 UTC) built-in shell (ash) _______ ________ __| |.-----.-----.-----.| | | |.----.| |_| - || _ | -__| || | | || _|| _||_______|| __|_____|__|__||________||__| |____| |__| W I R E L E S S F R E E D O M-----------------------------------------------------OpenWrt 22.03.3, r20028-43d71ad93e-----------------------------------------------------=== WARNING! =====================================There is no root password defined on this device!Use the "passwd" command to set up a new passwordin order to prevent unauthorized SSH logins.--------------------------------------------------root@OpenWrt:~#
3.安装所需软件
默认的 OpenWRT 安装非常简单,因此可能需要一些基本包。
OpenWRT 使用opkg来安装软件。(注意:OpenWRT 不支持 apt 和 apt-get)。
# Install some software, but update list firstopkgupdate# Install Bash, nano editoropkg install bash nano# For Python projects install the base Python3 and pipopkg install python3 python3-pip# For Pi GPIO projectsopkg install gpioctl-sysfs gpiod-tools
如果您计划在 Raspberry Pi 上做一些项目,添加 Bash、Python 和 GPIO 硬件支持将会很有用。
LuCI – OpenWRT Web 界面
系统启动并运行后,可以使用 LuCI Web 界面设置其他功能,如网络接口和自定义软件。
许多软件包还包括 LuCI Web 附加组件。
从 LuCI 界面,您可以轻松看到有多少内存和磁盘空间可用。如果您计划加载大量软件包,检查此屏幕非常重要。
设置 USB WiFi 适配器
对于 Raspberry Pi 型号 3 和 4,OpenWRT 将识别其内置 WiFi 硬件,但是对于早期型号或想要使用 USB WiFi 适配器的项目,您需要执行此步骤。
在 OpenWRT 上,必须手动添加 USB 设备的配置。
第一步是安装 USB 实用程序包:
# Update the package listopkgupdate# Add USB Utils (has lsusb)opkginstall usbutils
添加usbutils后, lsusb命令将显示有关已连接 USB 设备的信息(注意:仍需加载驱动程序)。对于使用旧 Realtek WiFi 适配器的 Raspberry Pi B 设置,输出为:
root@OpenWrt_Pi1:~# lsusbBus001Device004: ID0bda:8189Manufacturer_Realtek RTL8187B_WLAN_AdapterBus001Device003: ID0424:ec00 Bus001Device002: ID0424:9512 Bus001Device001: ID1d6b:0002Linux5.10.176dwc_otg_hcd DWC OTG Controller
从此列表中我可以看到我需要搜索RTL8187B_WLAN_Adapter。 Luci Web 界面可用于查找和安装所需的网络驱动程序。
一旦启用 USB WiFi 适配器,就可以使用几种不同的无线布置,其中一些更常见的设置是:
- 无线应用节点(类似典型的 Raspberry Pi 设置)
- 接入点节点,用于设置您自己的自定义网络
- 无线网桥,用于扩展现有的无线网络
对于简单的无线应用节点,进入 LuCI 网页界面的Network->Wireless菜单选项,然后选择您的无线电并扫描无线网络。配置 SSID(无线连接)后,选择Edit添加网络信息。
确保选择lan和wwan,这样您将能够通过无线和有线连接远程访问树莓派节点。
使用 SFTP 和 FileZilla
如果您仅使用 SSH 和 Luci Web 界面,远程操作 OpenWRT 可能会有点困难。安全文件传输协议 (SFTP) 服务器包可用于大大改善配置和编码文件的编辑和保存。
OpenSSH-FTP 服务器包的安装方式如下:
# For remote work add an SFTP serveropkgupdateopkg install openssh-sftp-server
加载该软件后,可以在笔记本电脑上使用像 FileZilla 这样的图形化 SFTP 客户端包。
FileZilla 允许使用简单的可视化界面进行远程编码和维护。以下是 FileZilla 连接到 OpenWRT Raspberry Pi 节点的示例。FileZilla 上的文件关联已设置,以将 py 文件链接到基本的 Python Idle 编辑器。
树莓派3 示例
我想做一个更完整的树莓派功能测试。对于这个项目,可以使用树莓派3,测试控制 USB 电源。(注意:USB 电源控制仅适用于树莓派3 和 4)。
我的目标是尝试使用 GPIO、I2C 和 USB 电源。在最终项目中,我使用了 OpenWRT 的内置 uhttpd Web 服务器来展示结果。
下面是我为使事情顺利进行而采取的一些单独步骤。
GPIO 设置
需要加载基本的 GPIO 包:
# update list of available packagesopkgupdateopkg install gpioctl-sysfs gpiod-tools
安装基本的 GPIO 软件后,可以在 Bash(或默认的 OpenWRT shell ash)中读取和写入 Raspberry Pi 引脚。
在使用 GPIO 引脚之前,需要先定义它。可以使用tee命令创建包含所有必需文件的 gpio 定义,例如:
# Create a gpio4 definitionecho4 |tee/sys/class/gpio/export# Show the file structurels/sys/class/gpio/gpio4active_low direction power ueventdevice edge subsystem value
创建 GPIO 定义然后写入引脚并读回值的示例是:
# Define the pin as an outputecho"out"> /sys/class/gpio/gpio4/direction# Set the pin on (1)echo1 > /sys/class/gpio/gpio4/value# Read the pin valuecat/sys/class/gpio/gpio4/value1
如果您正在进行一些尝试并且想要删除 gpio 定义,那么请写入unexport文件:
# Remove GPIO4echo4 |tee/sys/class/gpio/unexport
I2C 设置
为了使 I2C 设置正常工作,需要加载 Raspberry Pi I2C 芯片组驱动程序和 I2C 工具:
# Update the opk list. This needs to be done once after a power upopkgupdateopkg install kmod-i2c-bcm2835 i2c-tools
下一步是编辑文件:/boot/config.txt
nano /boot/config.txt
在文件底部添加三行 dtparam:
################################################################################# Bootloader configuration - config.txt################################################################################################################################################################# For overclocking and various other settings, see:# https://www.raspberrypi.org/documentation/configuration/config-txt/README.md################################################################################# OpenWrt configincludedistroconfig.txt[all]# Place your custom settings here.dtparam=i2c1=ondtparam=spi=ondtparam=i2s=on
编辑文件后,需要重新启动系统。此后,可以连接 I2C 设备。要检查有线设备的 I2C 地址,请使用i2cdetect命令:
i2cdetect-y1 0 1 2 3 4 5 6 7 8 9 a b c d e f00: -- -- -- -- -- -- -- --10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --20: -- -- -- -- -- -- -- --28-- -- -- -- -- -- --30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --40: -- -- -- -- -- -- -- --48-- -- -- -- -- -- --50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --70: -- -- -- -- -- -- --77
(注意:对于这个 i2cdetect 示例,地址 28 和 48 来自 Pimoroni Explorer HAT,地址 77 是 BME280 传感器)。
通常,下一步是使用 pip 安装 Python,然后安装任何所需的 I2C 设备库。对于这个项目,我使用了 BME280 温度/湿度传感器。
BME280 传感器设置
每个传感器都有自己特定的库,但是您可能需要 python3-smbus 支持。
对于我的传感器,我需要:
opkg updateopkg install python3 python3-pipopkg install python3-smbus#Install Python BME280 temperature/humidity sensor librarypip install bme280
Python bme280 库也有一个 Bash 接口,因此要从 I2C 地址 77 获取数据:
https://pypi.org/project/bme280/
# Get the BME280 sensor data from address 0x77read_bme280 --i2c-address0x771005.19hPa 38.38% 19.25C
控制 USB 电源
控制 USB 电源并不常见。一些用例可能是:USB 风扇和灯或重置 Pi 正在供电/连接的 Arduino 控制器。
要使用此功能您需要运行:
opkginstall usbutils uhubctl
lsusb 命令将显示哪些智能 USB 设备已连接,但不会显示 USB 风扇和灯等简单硬件。
lsusb--tree/: Bus01.Port1: Dev1, Class=root_hub, Driver=dwc_otg/1p,480M |__ Port1: Dev2, If0, Class=, Driver=hub/5p,480M |__ Port1: Dev3, If0, Class=, Driver=smsc95xx,480M
对于树莓派3 和 4,所有 USB 端口的电源都通过端口 2 集中在一起,因此遗憾的是无法为单个 USB 端口供电。如前所述,树莓派1 和 2 上的芯片组不支持 USB 电源控制。
树莓派4 有两个内置 USB 集线器。集线器 1-1 连接到 USB 2.1 标准上的所有 USB 端口。集线器 2 控制 USB 3.0标准上的所有端口和以太网插孔。
打开/关闭/切换 USB 端口并保持以太网插孔供电的命令是:
uhubctl-l1-1-p2-aonuhubctl-l1-1-p2-aoffuhubctl-l1-1-p2-a toggle
OpenWRT uhttpd Web 服务器
OpenWRT 预装了轻量级uhttp Web 服务器。该服务器用于 LuCI Web 界面,但也可用于自定义应用程序。
对于自定义 Web 项目,请将文件添加到: /www/cgi-bin
此目录允许运行任何 CGI 程序(Bash、Python、Lua 等)。请记住在 CGI 脚本文件上设置执行权限:
chmod+x mycgifile
Pi3 CGI Web 示例
该项目的硬件设置使用了 Pimoroni Explorer HAT Pro。这款 Pi Top 有四个内置彩色 LED(位于引脚 4、17、27 和 5)。在切换 GPIO 引脚之前,需要定义设备并设置方向:
#!/bin/bash## setgpio - setup GPIO#forpinin4 17 27 5do gpiodev=/sys/class/gpio/ gpiodev+=$pin echo$pin|tee/sys/class/gpio/export echo"out"> /sys/class/gpio/gpio$pin/directiondonels/sys/class/gpio
对于我的网页,一些按钮用于传递查询字符串变量,该变量在输出 HTML 之前在脚本顶部读取。BME280 传感器数据显示为一个简单的 Bash 变量。
#!/bin/bash## toggle - Bash CGI to show some standard functions# - toggle GPIO LEDs and USB power# - show some I2C sensor results# Note: GPIO pins need to be setup as outputsset-e# Toggle a pin if it's passed in the queue stringif [["$QUERY_STRING"=~"gpio"]];then pin=$QUERY_STRING # Read the GPIO pin value and then toggle it if["$(cat /sys/class/gpio/$pin/value)"== 1 ];then echo0 > /sys/class/gpio/$pin/value else echo1 > /sys/class/gpio/$pin/value fifi# Toggle USB power, ensure to add '&' for CGI useif[["$QUERY_STRING"=~"usb"]];then uhubctl -l 1-1 -p 2 -a toggle &> /dev/nullfi# Get BME280 sensor datadata=$(read_bme280 --i2c-address 0x77)echo"Content-type: text/html"echo""echo"OpenWRT PI Toogle
OpenWRT PI CGI
Toggle Hardware
onclick='location.href="?gpio4"'>Toggle GPIO4 LED1
onclick='location.href="?gpio17"'>Toggle GPIO17 LED2
onclick='location.href="?gpio27"'>Toggle GPIO27 LED3
onclick='location.href="?gpio5"'>Toggle GPIO5 LED4
onclick='location.href="?usb"'>Toggle USB Power
BME280 Sensor Data
$data"exit0
网页调用地址为: http://你的树莓派ip/cgi-bin/toggle
下面是网页和 Pi 设置的图片。
概括
- OpenWRT 可以为旧的 Raspberry Pi 硬件注入活力。我注意到旧的 Pi 硬件的性能有了很大的改进,这使得系统非常实用。
- 长期使用 Raspberry Pi 的用户一开始可能会发现 OpenWRT 缺少预装应用程序、驱动程序并且没有桌面,这有点令人沮丧。
- 值得注意的是,某些软件包(例如 Node-Red)需要一些工作才能安装。
那么你对于OpenWRT在树莓派上的应用有哪些看法,欢迎评论区讨论。
-
LAN
+关注
关注
0文章
232浏览量
38422 -
树莓派
+关注
关注
122文章
2034浏览量
107692 -
RaspberryPi
+关注
关注
1文章
46浏览量
9490
发布评论请先 登录
第二代Raspberry Pi发布,微软推出Windows 10 for Raspberry Pi 2
安装Raspberry Pi Clock Hat的教程分享
raspberry pi官网
基于诺基亚5110的Raspberry Pi帽子
使用balena在Raspberry Pi 4创建私有LoRaWAN网络

使用Raspberry Pi的Motioneyeos网络摄像头运动检测

【树莓派Pi5】树莓派 Raspberry Pi 5 正式发布!

评论