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

在Raspberry Pi上通過網(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)動檢測

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

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

評論