導(dǎo)語(yǔ)
OpenWRT是一款開(kāi)源固件,可加載到許多市售路由器上。該固件為較舊或過(guò)時(shí)的硬件提供了升級(jí)途徑,并為較新的設(shè)備提供了定制/高級(jí)功能。
由于 OpenWRT 占用空間較?。?76MB 對(duì)比 1.7GB 以上的樹(shù)莓派OS鏡像),它非常適合速度和內(nèi)存使用率較高的老款 Raspberry 硬件。
對(duì)于小型家庭和辦公室項(xiàng)目,OpenWRT 將提供一些有趣的網(wǎng)絡(luò)解決方案,例如將 樹(shù)莓派變成接入點(diǎn)或?qū)⑵溆米鳠o(wú)線 LAN 橋接器。但需要注意的是,Raspberry Pi WiFi 硬件不會(huì)提供與專用路由器相同的性能。
本文來(lái)自國(guó)外網(wǎng)友的實(shí)操,主要內(nèi)容包括:
- 如何安裝舊的 Raspberry Pi Model B 并運(yùn)行 OpenWRT
- 我還嘗試解釋如何安裝許多常見(jiàn)的樹(shù)莓派功能(加載軟件、GPIO、I2C……)
優(yōu)點(diǎn)和缺點(diǎn)
在進(jìn)入樹(shù)莓派 OpenWRT 項(xiàng)目之前,了解它與默認(rèn)的 Raspberry Pi OS 相比的地位很有用。
OpenWRT 的一些優(yōu)勢(shì)(優(yōu)于 Raspbian/Raspberry PI OS)包括:
- 它速度很快,被設(shè)計(jì)為在內(nèi)存有限的低端 CPU 上運(yùn)行
- 聚焦網(wǎng)絡(luò)功能
- 快速啟動(dòng)
- 操作系統(tǒng)占用空間更小,因此甚至可以使用較舊的 4 GB SD 卡(2GB 是可能的,但可能無(wú)法加載許多軟件包)。
OpenWRT 的一些限制:
- 沒(méi)有 X-window 桌面
- 系統(tǒng)設(shè)置不像默認(rèn)的 Raspberry PI OS 那樣方便(沒(méi)有raspi-config)
- 默認(rèn)安裝非常簡(jiǎn)單,因此您需要手動(dòng)加載軟件包(甚至 Bash 和 Nano)
- 某些軟件包的安裝可能比較困難(例如 Node-Red)
入門(mén)
盡管 OpenWRT 是為在路由器上運(yùn)行而設(shè)計(jì)的,但從很多方面來(lái)看,在 Raspberry Pi 上運(yùn)行更方便。
使用樹(shù)莓派的一些好處包括:
- 你不會(huì)讓樹(shù)莓派變"磚",事實(shí)上用OpenWRT刷路由器經(jīng)常會(huì)這樣
- SD/microSD 卡比大多數(shù)家用路由器擁有更多的空間
- 樹(shù)莓派有一個(gè) HDMI 連接,因此你可以直接在 樹(shù)莓派上工作(適合入門(mén))
有關(guān) OpenWRT Raspberry Pi 圖像,請(qǐng)參閱:https://openwrt.org/toh/raspberry_pi_foundation/raspberry_pi
您可以使用標(biāo)準(zhǔn) Raspi 映像器在 SD 卡上安裝 OpenWRT。對(duì)于 Linux 系統(tǒng),可以通過(guò)以下方式安裝映像器:
sudoapt update && sudo apt install rpi-imager
加載 SD 卡后,有幾種方法可以啟動(dòng)并運(yùn)行 OpenWRT 系統(tǒng)。以下是使用的步驟。
1. 將顯示器和鍵盤(pán)連接到 Pi
讓它啟動(dòng),然后轉(zhuǎn)到命令提示符,并設(shè)置一個(gè)靜態(tài) 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 地址,您可以簡(jiǎn)單地執(zhí)行以下操作:
#SetPiforDHCPandthencheckits addressucisetnetwork.lan.proto="dhcp"ucicommitnetwork
2. 將 Pi 硬連線到您的 LAN
將樹(shù)莓派的網(wǎng)口連接到您的筆記本網(wǎng)口,然后重新啟動(dòng)模塊。
您現(xiàn)在可以從筆記本電腦上使用 OpenWRT 的 Web 界面,或者使用安全 shell (ssh) 命令行界面。
我喜歡使用 ssh 選項(xiàng)來(lái)開(kāi)始,因?yàn)槲铱梢哉迟N命令組。要開(kāi)始使用 ssh(使用我的靜態(tài) 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.安裝所需軟件
默認(rèn)的 OpenWRT 安裝非常簡(jiǎn)單,因此可能需要一些基本包。
OpenWRT 使用opkg來(lái)安裝軟件。(注意: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
如果您計(jì)劃在 Raspberry Pi 上做一些項(xiàng)目,添加 Bash、Python 和 GPIO 硬件支持將會(huì)很有用。
LuCI – OpenWRT Web 界面
系統(tǒng)啟動(dòng)并運(yùn)行后,可以使用 LuCI Web 界面設(shè)置其他功能,如網(wǎng)絡(luò)接口和自定義軟件。
許多軟件包還包括 LuCI Web 附加組件。
從 LuCI 界面,您可以輕松看到有多少內(nèi)存和磁盤(pán)空間可用。如果您計(jì)劃加載大量軟件包,檢查此屏幕非常重要。
設(shè)置 USB WiFi 適配器
對(duì)于 Raspberry Pi 型號(hào) 3 和 4,OpenWRT 將識(shí)別其內(nèi)置 WiFi 硬件,但是對(duì)于早期型號(hào)或想要使用 USB WiFi 適配器的項(xiàng)目,您需要執(zhí)行此步驟。
在 OpenWRT 上,必須手動(dòng)添加 USB 設(shè)備的配置。
第一步是安裝 USB 實(shí)用程序包:
# Update the package listopkgupdate# Add USB Utils (has lsusb)opkginstall usbutils
添加usbutils后, lsusb命令將顯示有關(guān)已連接 USB 設(shè)備的信息(注意:仍需加載驅(qū)動(dòng)程序)。對(duì)于使用舊 Realtek WiFi 適配器的 Raspberry Pi B 設(shè)置,輸出為:
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 界面可用于查找和安裝所需的網(wǎng)絡(luò)驅(qū)動(dòng)程序。
一旦啟用 USB WiFi 適配器,就可以使用幾種不同的無(wú)線布置,其中一些更常見(jiàn)的設(shè)置是:
- 無(wú)線應(yīng)用節(jié)點(diǎn)(類似典型的 Raspberry Pi 設(shè)置)
- 接入點(diǎn)節(jié)點(diǎn),用于設(shè)置您自己的自定義網(wǎng)絡(luò)
- 無(wú)線網(wǎng)橋,用于擴(kuò)展現(xiàn)有的無(wú)線網(wǎng)絡(luò)
對(duì)于簡(jiǎn)單的無(wú)線應(yīng)用節(jié)點(diǎn),進(jìn)入 LuCI 網(wǎng)頁(yè)界面的Network->Wireless菜單選項(xiàng),然后選擇您的無(wú)線電并掃描無(wú)線網(wǎng)絡(luò)。配置 SSID(無(wú)線連接)后,選擇Edit添加網(wǎng)絡(luò)信息。
確保選擇lan和wwan,這樣您將能夠通過(guò)無(wú)線和有線連接遠(yuǎn)程訪問(wèn)樹(shù)莓派節(jié)點(diǎn)。
使用 SFTP 和 FileZilla
如果您僅使用 SSH 和 Luci Web 界面,遠(yuǎn)程操作 OpenWRT 可能會(huì)有點(diǎn)困難。安全文件傳輸協(xié)議 (SFTP) 服務(wù)器包可用于大大改善配置和編碼文件的編輯和保存。
OpenSSH-FTP 服務(wù)器包的安裝方式如下:
# For remote work add an SFTP serveropkgupdateopkg install openssh-sftp-server
加載該軟件后,可以在筆記本電腦上使用像 FileZilla 這樣的圖形化 SFTP 客戶端包。
FileZilla 允許使用簡(jiǎn)單的可視化界面進(jìn)行遠(yuǎn)程編碼和維護(hù)。以下是 FileZilla 連接到 OpenWRT Raspberry Pi 節(jié)點(diǎn)的示例。FileZilla 上的文件關(guān)聯(lián)已設(shè)置,以將 py 文件鏈接到基本的 Python Idle 編輯器。
樹(shù)莓派3 示例
我想做一個(gè)更完整的樹(shù)莓派功能測(cè)試。對(duì)于這個(gè)項(xiàng)目,可以使用樹(shù)莓派3,測(cè)試控制 USB 電源。(注意:USB 電源控制僅適用于樹(shù)莓派3 和 4)。
我的目標(biāo)是嘗試使用 GPIO、I2C 和 USB 電源。在最終項(xiàng)目中,我使用了 OpenWRT 的內(nèi)置 uhttpd Web 服務(wù)器來(lái)展示結(jié)果。
下面是我為使事情順利進(jìn)行而采取的一些單獨(dú)步驟。
GPIO 設(shè)置
需要加載基本的 GPIO 包:
# update list of available packagesopkgupdateopkg install gpioctl-sysfs gpiod-tools
安裝基本的 GPIO 軟件后,可以在 Bash(或默認(rèn)的 OpenWRT shell ash)中讀取和寫(xiě)入 Raspberry Pi 引腳。
在使用 GPIO 引腳之前,需要先定義它??梢允褂胻ee命令創(chuàng)建包含所有必需文件的 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
創(chuàng)建 GPIO 定義然后寫(xiě)入引腳并讀回值的示例是:
# 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
如果您正在進(jìn)行一些嘗試并且想要?jiǎng)h除 gpio 定義,那么請(qǐng)寫(xiě)入unexport文件:
# Remove GPIO4echo4 |tee/sys/class/gpio/unexport
I2C 設(shè)置
為了使 I2C 設(shè)置正常工作,需要加載 Raspberry Pi I2C 芯片組驅(qū)動(dòng)程序和 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
編輯文件后,需要重新啟動(dòng)系統(tǒng)。此后,可以連接 I2C 設(shè)備。要檢查有線設(shè)備的 I2C 地址,請(qǐng)使用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
(注意:對(duì)于這個(gè) i2cdetect 示例,地址 28 和 48 來(lái)自 Pimoroni Explorer HAT,地址 77 是 BME280 傳感器)。
通常,下一步是使用 pip 安裝 Python,然后安裝任何所需的 I2C 設(shè)備庫(kù)。對(duì)于這個(gè)項(xiàng)目,我使用了 BME280 溫度/濕度傳感器。
BME280 傳感器設(shè)置
每個(gè)傳感器都有自己特定的庫(kù),但是您可能需要 python3-smbus 支持。
對(duì)于我的傳感器,我需要:
opkg updateopkg install python3 python3-pipopkg install python3-smbus#Install Python BME280 temperature/humidity sensor librarypip install bme280
Python bme280 庫(kù)也有一個(gè) Bash 接口,因此要從 I2C 地址 77 獲取數(shù)據(jù):
https://pypi.org/project/bme280/
# Get the BME280 sensor data from address 0x77read_bme280 --i2c-address0x771005.19hPa 38.38% 19.25C
控制 USB 電源
控制 USB 電源并不常見(jiàn)。一些用例可能是:USB 風(fēng)扇和燈或重置 Pi 正在供電/連接的 Arduino 控制器。
要使用此功能您需要運(yùn)行:
opkginstall usbutils uhubctl
lsusb 命令將顯示哪些智能 USB 設(shè)備已連接,但不會(huì)顯示 USB 風(fēng)扇和燈等簡(jiǎn)單硬件。
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
對(duì)于樹(shù)莓派3 和 4,所有 USB 端口的電源都通過(guò)端口 2 集中在一起,因此遺憾的是無(wú)法為單個(gè) USB 端口供電。如前所述,樹(shù)莓派1 和 2 上的芯片組不支持 USB 電源控制。
樹(shù)莓派4 有兩個(gè)內(nèi)置 USB 集線器。集線器 1-1 連接到 USB 2.1 標(biāo)準(zhǔn)上的所有 USB 端口。集線器 2 控制 USB 3.0標(biāo)準(zhǔn)上的所有端口和以太網(wǎng)插孔。
打開(kāi)/關(guān)閉/切換 USB 端口并保持以太網(wǎng)插孔供電的命令是:
uhubctl-l1-1-p2-aonuhubctl-l1-1-p2-aoffuhubctl-l1-1-p2-a toggle
OpenWRT uhttpd Web 服務(wù)器
OpenWRT 預(yù)裝了輕量級(jí)uhttp Web 服務(wù)器。該服務(wù)器用于 LuCI Web 界面,但也可用于自定義應(yīng)用程序。
對(duì)于自定義 Web 項(xiàng)目,請(qǐng)將文件添加到: /www/cgi-bin
此目錄允許運(yùn)行任何 CGI 程序(Bash、Python、Lua 等)。請(qǐng)記住在 CGI 腳本文件上設(shè)置執(zhí)行權(quán)限:
chmod+x mycgifile
Pi3 CGI Web 示例
該項(xiàng)目的硬件設(shè)置使用了 Pimoroni Explorer HAT Pro。這款 Pi Top 有四個(gè)內(nèi)置彩色 LED(位于引腳 4、17、27 和 5)。在切換 GPIO 引腳之前,需要定義設(shè)備并設(shè)置方向:
#!/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
對(duì)于我的網(wǎng)頁(yè),一些按鈕用于傳遞查詢字符串變量,該變量在輸出 HTML 之前在腳本頂部讀取。BME280 傳感器數(shù)據(jù)顯示為一個(gè)簡(jiǎn)單的 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
網(wǎng)頁(yè)調(diào)用地址為: http://你的樹(shù)莓派ip/cgi-bin/toggle
下面是網(wǎng)頁(yè)和 Pi 設(shè)置的圖片。
概括
- OpenWRT 可以為舊的 Raspberry Pi 硬件注入活力。我注意到舊的 Pi 硬件的性能有了很大的改進(jìn),這使得系統(tǒng)非常實(shí)用。
- 長(zhǎng)期使用 Raspberry Pi 的用戶一開(kāi)始可能會(huì)發(fā)現(xiàn) OpenWRT 缺少預(yù)裝應(yīng)用程序、驅(qū)動(dòng)程序并且沒(méi)有桌面,這有點(diǎn)令人沮喪。
- 值得注意的是,某些軟件包(例如 Node-Red)需要一些工作才能安裝。
那么你對(duì)于OpenWRT在樹(shù)莓派上的應(yīng)用有哪些看法,歡迎評(píng)論區(qū)討論。
-
LAN
+關(guān)注
關(guān)注
0文章
232瀏覽量
37951 -
樹(shù)莓派
+關(guān)注
關(guān)注
119文章
1905瀏覽量
106598 -
RaspberryPi
+關(guān)注
關(guān)注
1文章
46瀏覽量
9307
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
第二代Raspberry Pi發(fā)布,微軟推出Windows 10 for Raspberry Pi 2
安裝Raspberry Pi Clock Hat的教程分享
raspberry_pi各版本差別
raspberry pi官網(wǎng)
可視頻直播的Raspberry Pi網(wǎng)絡(luò)控制機(jī)器人

在Raspberry Pi上通過(guò)網(wǎng)絡(luò)控制LED

基于諾基亞5110的Raspberry Pi帽子
使用balena在Raspberry Pi 4創(chuàng)建私有LoRaWAN網(wǎng)絡(luò)

使用Raspberry Pi的Motioneyeos網(wǎng)絡(luò)攝像頭運(yùn)動(dòng)檢測(cè)

使用Raspberry Pi構(gòu)建網(wǎng)絡(luò)攝像頭

【樹(shù)莓派Pi5】樹(shù)莓派 Raspberry Pi 5 正式發(fā)布!

評(píng)論