這篇文章來源于DevicePlus.com英語網站的翻譯稿。
用于OTG、被動冷卻系統、LED心跳燈以及大容量電容的VNC
profit_image – stock.adobe.com
什么是VNC?
VNC(虛擬網絡計算)一種易于使用的工具軟件,可以幫助您成功訪問所連接到的任何設備上的圖形用戶界面(GUI)。它在帶寬、延遲以及安全性方面靈活性很高。當您使用VNC時,設備在局域網或外網都可以。
您可以輕松并且安全地從Windows、macOS 或Linux連接到您的Pi。這是一款適用于共享遠程計算的通用設備。但是,當使用微型服務器就足夠時,就不要運行大型服務器。Raspberry Pi計算機的使用十分環保,如此一來您就可以為解決氣候變化問題出一份力了!
安裝和設置
該過程的實現不需要具備相關的網絡知識,但是您需要準備好一個Pi。Raspberry Pi 2 B+及以上的任何版本都可以,版本1對于響應式VNC會話來說太慢了。
基本設置請參考本文 , 而關于如何配置您的Raspberry Pi來使用靜態IP請參考此處 。
當您身在外地想要連接家里或實驗室的設備時,才會需要靜態IP,這可以保證Pi沒有從DHCP獲取別的IP地址,從而防止擾亂端口轉發。
此處可用的所有Raspberry Pi Linux鏡像都為您提供了RealVNC服務器的選項。您應該選擇“Raspbian Buster with desktop”變體,并通過USB轉microSD適配器,使用“dd”或您的Pi,將其閃存到microSD卡中。
sudo unzip -px raspbian_latest | dd bs=1M of=/dev/sdX
其中,“X”是相關磁盤,例如如果您使用的是一個Raspberry Pi,通過USB轉microSD適配器進行閃存,“X”為/dev/sda。在這一點上請務必小心,否則將會寫入錯誤位置。在您的Pi/Linux系統上使用“lsblk”找出您想要寫入的磁盤。
例如:
pi@raspberry$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 1 30.2G 0 disk /media/pi/SANDISK_32GB mmcblk0 179:0 0 29.8G 0 disk ├─mmcblk0p1 179:1 0 256M 0 part /boot └─mmcblk0p2 179:2 0 29.6G 0 part / pi@raspberry$ sudo umount /media/pi/SANDISK_32GB pi@raspberry$ sudo unzip -px raspbian_latest | dd bs=1M of=/dev/sda &;&; sync &;&; echo If Raspbian has automounted your disk (again), see it with 'ls_blk' &;&; echo and then unmount it ... again.
一個更簡單的方法是使用Etcher,它甚至可以幫助您直接解壓所下載的文件。請點擊此鏈接獲取相關說明。
實例
完成microSD卡閃存后,您就可以啟動Pi了。首先,您需要決定是否通過顯示器進行操作。
一個無顯示器操作的實例是如果您的Pi在機器人中,同時您希望在系統運行時使用一個GUI編輯器來對代碼進行調整,而如果沒有連接顯示器,請使用“sudo raspi-config”指令。
-> ‘3 Boot Options’(三種啟動選項)
-> ‘B1 Desktop / CLI’(B1 桌面 / CLI)
-> ‘B1 Console’ (B1控制臺)來停止Xserver。這樣做可以節省RAM和CPU的消耗。
通過LAN連接Raspberry Pi
如果要將Pi與顯示器一起使用,需要連接HDMI線纜和USB鍵盤及鼠標。
然后,在您的Pi終端輸入指令“sudo raspi-config”,接下來:
然后 ……
接下來 ……
如果要求重新啟動,點擊“OK”,然后退出raspi-config。
現在,啟用RealVNC服務器,再次在Pi終端輸入指令“sudo raspi-config”。
然后……
接下來……
選擇“Yes”并再次退出raspi-config。如果系統發生更改時需要進行重新啟動,您將會收到重啟的提示,此時請選擇“是”。
重新啟動后,您可以使用用戶名“pi”和密碼進行連接。我們稍后將介紹客戶端軟件的安裝。
如果您打算進行無顯示器操作,請在“/etc/rc.local”文件種添加以下行。如果不是,請跳過本節。
# HEADLESS if /usr/bin/pgrep -U pi vncserver >/dev/null ; then /bin/sh -c '/usr/bin/sudo -u pi /usr/bin/vncserver -kill :1 >/dev/null 2>&;1 || :' fi /bin/sh -c '/usr/bin/sudo -u pi /usr/bin/vncserver -depth 24 -geometry 1280x1024 :0 >/dev/null 2>&;1'
現在,您可以使用VNC客戶端登錄您的Pi了。目前為止我認為最好用的是Raspbian系統自帶或已經安裝好的一個軟件:RealVNC Viewer。
它為macOS、Windows、Linux以及其他許多系統(包括Android和iPhone iOS)提供了客戶端(預編譯為二進制包)。您可以點擊此處下載您所需要的客戶端。在macOS 和Windows上并不需要什么特殊的操作,只需雙擊所要下載的軟件即可。在Ubuntu或其他類似的基于Debian的發行版上,對于modern模式的設備,在終端窗口中使用以下指令下載“DEB x64”:
sudo dpkg -i VNC-Viewer-6.19.325-Linux-x64.deb
對于其他Linux系統,請根據需要使用RPM或者獨立的BIN,或通用腳本。安裝完成后,輸入“vncviewer”并按下回車鍵。您將會看到一個高級的GUI界面。在頂部,您需要輸入Pi的地址,您可以通過在Pi終端輸入“hostname -I”來找到該地址信息。另一種選擇是使用適用于iPhone iOS 或Android的免費Fing應用程序。
地址格式為IP:PORTl。例如,在這個網絡中,10.0.9.116:5900是我的Pi上的“:0”實例,而“:1”實例將使用端口5901,因此我輸入10.0.9.116:5901。
輸入地址后,按下回車鍵,然后稍等片刻。系統會提示您進行身份驗證,并且可以設置VNC Viewer來存儲登錄信息。然后,您將直接進入Pi的桌面環境中。
通過網絡/WAN連接Raspberry Pi
通過互聯網連接到您的Pi這一過程有點復雜。您需要在路由器上設置端口轉發,還需要將Pi設置為使用靜態IP地址。使用安裝或設置部分中的鏈接來設置一個靜態IP地址,或者如果您的路由器包含此選項,可以在網絡客戶端列表中選擇Pi,并設置DHCP地址保留。這樣的話就可以保證Pi始終具有相同的IP地址了。
接下來,將外部端口20202/tcp通過端口轉發傳輸到您的Pi端口22/tcp。如此一來就無需暴露VNC服務器,我們將能夠確保與您的Pi之間的連接是盡可能安全的。RealVNC只為企業用戶提供256位AES,但是我們暫時不需要購買,SSH可以提供很大的幫助。
將以下指令復制到Pi的終端窗口中:
sudo service ssh start sudo systemctl enable ssh sudo apt-get update sudo apt-get -y install ufw sudo ufw enable sudo ufw default deny sudo ufw logging low sudo ufw allow log 5900/tcp sudo ufw allow log 5901/tcp sudo ufw allow log 22/tcp
請務必使用“sudo raspi-config”或“passwd pi”更改默認密碼,千萬不要在“raspberry”上公開SSH密鑰。
需要明確的是,請確保您將通過端口轉發將20202 _TCP_傳輸到了Pi靜態IP地址—端口22 _TCP_。
動態DNS?
現在一切都準備好了,您可以在工作場所,或者任何其他地方連接到您的Pi了。如何連接?您的Pi所在網絡的外部地址是什么?
通過動態DNS,您就可以使用“一般”名稱進行連接,從而解決這個問題了。“Example.com”中包含了一個使用“一般”名稱的示例,并且您無需記住IP地址就可以實現連接。想要記住IP地址“93.184.216.34”似乎有些麻煩,因為您有太多需要記住的事情了。
但是,您可以輕松記住諸如“risingsun.csproject.org”之類的地址。讓我們在您的Pi上安裝一個動態DNS客戶端,這樣就可以保證這個名稱始終指向您的Pi的外部網絡地址了。
請在您的Pi終端粘貼以下指令:
apt-get update apt-get -y install inadyn
您需要選擇一個動態DNS服務商。如果您想要免費的,請使用FreeDNS。注冊并使用指令sudo nano /etc/inadyn.conf來編輯“/etc/inadyn.conf:”。為方便起見,此處列出了相關參數:
period = 300 # The FreeDNS username must be in lower case and # the password (max 16 chars) is case sensitive provider freedns.afraid.org { username = lower-case-username password = case-sensitive-pwd hostname = some.example.com }
獲取所有信息后,將這些指令粘貼到Pi的終端窗口:
# Start it now sudo service inadyn start # Persist across reboots sudo systemctl enable inadyn
要連接到您的Pi,現在需要在您的工作站或者筆記本電腦上執行以下操作(這適用于macOS 和Linux,Windows上的SSH隧道不在本文討論范圍內):
ssh -l pi -p 20202 -L 5900:localhost:5900 risingsun.csproject.org
這將為您的VNC通訊創建一個SSH隧道。對于Raspberry 2 B+及更高版本的型號,SSH并不會造成CPU利用率增高的問題,所以不用擔心。
為了通過隧道連接,請在VNC Viewer中輸入地址“127.0.0.1:5900”,然后通過本地SSH隧道連接到Pi上的VNC服務。
如有必要,請輸入您的憑據,然后您將會返回到Pi的桌面環境。即使您在一個咖啡廳或者機場使用公共Wi-Fi也不用擔心了。
當然,您也可以僅通過SSH連接到Pi,然后使用以下指令啟動VNC服務ad-hoc:
nohup vncserver :0
這將會持續運行,直到您殺死進程(例如用“pkill -9 -U pi vncserver”指令)。
提升您的VNC體驗
您可以做一些事情來提升VNC性能。一種方法是將圖形減少到16位或16位以下,以獲得一個更加舒適的用戶體驗。
延遲是很大的問題,如果您將您的Pi通過以太網連接到本地網絡,將會對緩解該問題有很大的幫助。
如果您的連接速度不夠快(或者其他正在使用的用戶占用了很大的資源空間),您可以安裝speedtest-cli來發現這一情況。將以下行粘貼到您的終端中:
sudo apt update sudo apt-get -y install speedtest-cli speedtest-cli --bytes --simple
我的Pi上的輸出如下:
Ping: 2.723 ms Download: 9.96 Mbyte/s Upload: 0.50 Mbyte/s
上傳速度為0.5Mbyte/s,約等于4Mbit/s,對于24位、1280×1024分辨率的VNC來說勉強夠用。
對于GUI,您應該改掉默認界面。該默認界適用于舊的512MB RAM Raspberry Pi,但是如果您想要一個常規、直觀的界面,這就不是很好用了。
vanilla Raspberry Pi桌面主要由大量的功能包組成,這些包來自于元功能包集“raspberrypi-ui-mods”和“lxde-common”。它具有一個額外的功能,就是有助于向VNC用戶提供LXPolkit錯誤信息。
如果您有一個16-32GB microSD卡和一個Raspberry Pi 2 B+(或更高版本),我強烈建議您安裝MATE桌面環境。
MATE將能夠大大提升您的整體使用體驗!
請將以下命令行粘貼到您的Pi終端:
sudo apt-get update sudo apt-get -y remove raspberrypi-uid-mods lxde* sudo apt-get -y install mate-desktop-environment mate-themes mate-utils mate-tweak mate-terminal
如果您安裝了MATE,請將以下行粘貼到您的~/.vnc/xstartup文件中:
#! /bin/sh if [ -r ${HOME}/.Xresources ] ; then xrdb ${HOME}/.Xresources fi xsetroot -solid grey -cursor_name left_ptr &; mate-session
然后,重新啟動。如果您有了內存高達4GB的新版Raspberry Pi 4 B,這就更好了,您再也不會需要轉換到您的microSD卡了。即使在我使用的Raspberry Pi 2 B+上,MATE也很少會需要我去轉換。就是這么好用。
附加內容
為您的Pi添加被動冷卻系統
在CPU上切一個大圓孔
對于Raspberry Pi 2 B+及更高版本的型號,都存在發熱的問題。您可以通過指令“vcgencmd measure_temp”隨時查看系統溫度,如果溫度達到了閾值80C/176F,您的Pi將會自動降低時鐘頻率,以避免發生過熱導致的“未定義行為”。
因此,您的1.2GHz CPU有可能會以600MHz的頻率運行一段時間,并且在熱量消散之前不會恢復到全速運行。如果您將Pi放置在一個氣流受限的機箱中,那么那些微型散熱器將可能不會起到作用,而如果您使用了四個核,且負載均為100%,那這些散熱器就真的一點作用也沒有了。有一個名為gpio-fan的內置config.txt參數可用于驅動風扇(參見“/boot/overlays/README”),但是我們并不想在每次刷新microSD卡時都要對其進行設置。
這時候,我們可以采取另一種方法—使用介電溫度開關。通過使用絕緣導熱膠帶將其連接到CPU散熱器上,它將會接通5V軌道電源到一個5V風扇之間的電路。我使用了一個常開型,可以在溫度達到華氏113度時接通電路。電路一旦接通,風扇就會驅散CPU中的熱量。0.75W的迷你風扇是一個不錯的選擇,如果我們使用一個環流二極管(ROHM BAT86肖特基),就可以防止產生電壓超過5V軌道電源的尖峰脈沖,這樣風扇的使用就非常安全了。
BOM
您將會需要以下部件:
1x KSD9700 溫度開關,常開,45C/113F | https://www.aliexpress.com/item/10pcs-2500W-Temperature-control-switch-KSD9700-45-Degrees-Celsius-Normally-open-N-O-10A-250V-Thermal/32790498666.html |
1x BAT86 肖特基二極管 | https://www.newark.com/nexperia/bat86/rectifier-diode-single-50-v-200/dp/96K6771 |
1x 5V 風扇 | https://www.banggood.com/5v-303010mm-3010-Cooling-Fan-with-2-Pin-Dupont-Wire-for-3D-Printer-Part-p-1421461.html?rmmds=buy&;cur_wbarehouse=CN |
細絞線 | https://www.daburn.com/2671UltraFlexibleSub-MiniatureWire-U/LSTYLE15681692.aspx |
1x 40V/2200uF 電容,電解 | https://www.newark.com/illinois-capacitor/228tta050m/aluminum-electrolytic-capacitor/dp/30K6693 |
導熱膠帶 | https://www.adafruit.com/product/1468 |
2x Raspberry Pi 散熱器 | https://www.adafruit.com/product/3082 |
開始構建!
實際上,只需將5V GPIO引腳上的一根電線(或一種會使保修失效的方式—在microUSB端口一邊的大功率“D5”二極管上焊接一根線)連接到介質開關的一根電線上,然后再將其另一根電線連接到風扇的正極端子即可。
將一個BAT86肖特基環流二極管按照從風扇負極端子到正極端子的方向進行正向偏置連接,然后將風扇的負極端子連接到GND來完成電路連接。您可以自行創建構成地面的條件,那么GND將是無處不在的。Pi功能性非常強,可以處理極微小的接地回路。
或者,選擇一個不會出錯的方法,即直接將其連接到一個GPIO GND引腳上。唯一要注意的細節是要確保導熱膠帶導熱性能很好,需要事先用異丙醇對散熱器和開關進行擦拭。一切準備就緒后,請使用一大塊熱膠將其固定在該位置上。
使用熱膠將其固定
KSD9700被埋在熱膠和Kapton膠帶下面,位于上圖中CPU的右側。在運行過程中,當“vcgencmd measure_temp”返回53C/127.4F時,45C/113F開關將閉合,并持續驅動風扇,直到“vcgencmd measure_temp”保持返回38C/100.4F為止。即便是在CPU四核100%負載的情況下,也只有持續時間發生變化。這是因為開關本身必須吸收足夠多的熱量才會達到133F,而CPU傳感器的讀數會超前一些。
這種類型的開關可以使用十年,并且十分耐用,獨立于config.txt 中的“gpio-fan”參數。同時,它也很容易制作。準備好您的熱膠槍吧!
為您的Pi添加一個LED心跳燈電路
BOM
4x ROHM SLR343BC4TT32 3mm 藍色 LEDs | https://www.avnet.com/shop/us/products/rohm/slr343bc4tt32-3074457345627700657?CMP=EMA_ECIA_inventoryfeed_VSE?aka_re=1 |
1x 2N7000 N-通道 MOSFET | https://www.oddwires.com/2n7000-2n7000ta-small-signal-mosfet-10-pack/ |
4x 330 ohm 電阻 | https://www.sparkfun.com/products/14490 |
細絞線 | https://www.daburn.com/2671UltraFlexibleSub-MiniatureWire-U/LSTYLE15681692.aspx |
1x 4.7kOhm 電阻 | https://www.adafruit.com/product/2783 |
開始構建!
一個小的Pi植入板可以成為一個真正的藍色心跳燈。LED的萬向性將會通過熱膠和一些來自反編譯筆記本電腦LCD的薄膜得到增強。
關閉和啟動性能良好!陽極氧化鋁網可以保護風扇不受損傷,但是會減少約40%的氣流流動。
那么,為什么這個Pi上有一個大容量2200uF電容呢?是的,這里有一個電容,并且直接連接到了5V/GND GPIO 引腳上。
這里使用電容的原因和低音喇叭中使用電容的原因相同。即使您已經一切準備就緒了,使用了官方Raspberry Pi 5.25V SMPS電源和低電阻線,但是如果您的電流消耗突然激增(比如電流需要快速從1A變為2A),可能還是會遇到問題。
對我來說,這種情況最常發生在我在寫入一個USB硬盤的同時又執行大量CPU工作和網絡工作的時候。這種時候我會收到嚴重的欠壓警告。如果您的5V引腳上的電壓約為4.65V或低于這個數值,就會遇到這種情況,這非常令人心煩。
那么,如果SMPS電源無法應對偶爾出現的尖峰電壓或傳輸電壓怎么辦?您需要添加一個存儲電容器,電容量越大越好,但是根據經驗法則,系統每流入1A的電流需要1000uF,實際電容量要略大于這個值,所以為2200uF。Raspberry Pi 4 B的額定電流為3A,因此需要使用約3300uF的電容。您也可以選擇更高性能的電容,比如使用一個超級電容肯定會進一步提高性能。電容的另一個優點是也可以用于點焊。
您可以在心跳燈電路中使用這個簡單的Python 3腳本。
[ begin heartbeat.py ]
#! /usr/bin/env python3 import RPi.GPIO as GPIO from time import sleep GPIO.setmode( GPIO.BCM ) # # Count 12 from the 3V3,5V pins at the top of the # GPIO header _led = 18 # BCM18/BOARD12/PWM0 pin GPIO.setup( _led , GPIO.OUT ) pwm = GPIO.PWM( _led, 100 ) pwm.start( 0 ) p=print _step = 3 def get_load(): _f = open( '/proc/loadavg', 'r' ) _buf = _f.read( 30 ) _f.close() return float ( _buf.split()[0] ) def get_delay(): _load = get_load() _delay_base = 0.2 if _load >= 0 and _load < 0.33: _delay = _delay_base elif _load < 0.66 and _load >= 0.33: _delay = _delay_base / 2 elif _load < 1 and _load >= 0.66: _delay = _delay_base / 3 elif _load < 1.33 and _load >=1: _delay = _delay_base / 4 elif _load < 1.66 and _load >= 1.33: _delay = _delay_base / 5 elif _load < 2 and _load >= 1.66: _delay = _delay_base / 6 elif _load < 2.33 and _load >= 2: _delay = _delay_base / 7 elif _load < 2.66 and _load >= 2.33: _delay = _delay_base / 8 elif _load < 3 and _load >= 2.66: _delay = _delay_base / 9 elif _load < 3.33 and _load >= 3: _delay = _delay_base / 10 elif _load < 3.66 and _load >= 3.33: _delay = _delay_base / 11 elif _load < 4 and _load >= 3.66: _delay = _delay_base / 12 else: _delay = _delay_base / 20 # GO FAST # ET CETERA return _delay if __name__ == '__main__': try: while True: for _it in range( 20, 100, _step ): pwm.ChangeDutyCycle( _it ) sleep( get_delay() ) sleep( 0.25 ) for _it in range( 100, 20, -(_step) ): pwm.ChangeDutyCycle( _it ) sleep( get_delay() ) sleep( 0.25 ) except KeyboardInterrupt: print( "[!] Caught ^C, breaking ..." ) # Stop the PWM now that we're leaving pwm.stop() # Clean up pin states, bring them all low GPIO.cleanup() exit()
[ end heartbeat.py ]
將腳本“heartbeat.py”放入“/home/pi”中,并使用如下指令確保在您的Pi啟動時會開始運行腳本:
/bin/sh -c '/usr/bin/sudo -u pi /usr/bin/python3 /home/pi/heartbeat.py >/dev/null 2>&;1' &;
同樣,請務必將其放置在“exit 0”行上方。
現在,當您的Pi沒有負載時,您會看到穩定跳動的藍光,中等負載時看到以更高的頻率跳動的藍光,并且每次您的Pi加載時都會出現快速跳動。
然而,在這么簡單的一個事物上投入時間還有一個更重要的原因。
這是中等負載下的一張照片:
一個舒緩的藍光跳動節奏可以提示Pi操作者一切都在按照計劃進行。
“我的PI崩潰了嗎?”—設法了解這一問題的答案始終是必要的,尤其是當您在運行一個無顯示器系統時。如果Pi真的崩潰了,心跳燈將會死機并停止跳動,或者直接熄滅。
為了給您的Pi生成負載,請將以下內容粘貼到您的終端中:
dd if=/dev/zero bs=1M of=/dev/zero &; dd if=/dev/zero bs=1M of=/dev/zero &; dd if=/dev/zero bs=1M of=/dev/zero &; dd if=/dev/zero bs=1M of=/dev/zero &; # Let it load, let it load, let it load ... sleep 120 kill $( jobs -p )
接下來請觀看我的小型Raspberry Pi 2 B+在重負載下的視頻剪輯(所有核的利用率均為100%):
冷卻并不容易,但是是十分必要的!我們采用被動冷卻的方式從Raspberry交換熱量。
Lasse Efrayim Jespersen
Lasse出生在以色列,后來移居到較冷的緯度地區。出于個人興趣,他逐漸了解到了Perl的直接、C/C++的高效以及MicroPython的優雅。他喜歡用ESP8266/ESP32/Raspberry Pi和Arduino來制作機器。
審核編輯黃宇
-
服務器
+關注
關注
13文章
9698瀏覽量
87300 -
VNC
+關注
關注
0文章
19瀏覽量
9405 -
Raspberry Pi
+關注
關注
2文章
620瀏覽量
22905
發布評論請先 登錄
如何在Raspberry Pi上安裝TensorFlow

如何在Raspbian上設置沒有顯示器和鍵盤的Raspberry Pi

【Raspberry Pi 3試用體驗】搭建minidlna服務器(結項二)
請問Raspberry Pi怎么傳輸視頻?
安裝Raspberry Pi Clock Hat的教程分享
怎樣在RaspberryPi上設置VNC服務器
基于諾基亞5110的Raspberry Pi帽子
如何將Raspberry Pi用作DNS服務器?

將Raspberry Pi設置為家庭媒體服務器

如何在Raspberry Pi零2W上阻止帶有Pi孔的廣告

使用Raspberry PI 4單板計算機構建Samba NAS服務器

評論