導語
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瀏覽量
38117 -
樹莓派
+關注
關注
121文章
1956瀏覽量
107044 -
RaspberryPi
+關注
關注
1文章
46瀏覽量
9389
發布評論請先 登錄
第二代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 正式發布!

評論