Raspberry Pi, UPNP(二), Scala
Raspberry Pi
概述
樹莓派(Raspberry Pi)在極客領域可謂大名鼎鼎,它的官網是:
https://www.raspberrypi.org/
從型號來看,它可以分為三大類型:
1)B型。面向開發者和學生。
2)A型和Zero型。面向批量制造類的客戶。
從技術角度來說,樹莓派雖然優秀,然而有實力制作這樣開發板的公司,沒有一千,也有幾百。但世界范圍內,只有Raspberry Pi和Arduino這兩款開發板取得了成功。
Arduino是一款微控制器,主要用于電子工程領域,比如工業設備、傳感器控制等。程序設計偏單片機風格,價格低廉,計算能力有限。它的官網:
https://www.arduino.cc/
而Raspberry Pi的定位是一個廉價的PC。其計算能力和目前的智能手機相當,但操作系統卻和普通的桌面系統類似,因此,普通的PC應用可以很方便的移植過來。
Raspberry Pi官方OS是Raspbian,這是一個基于Debian的Linux發行版。除此之外,還有幾個Ubuntu定制版。甚至微軟也為此專門推出了Windows 10 IOT,其地址為:
https://developer.microsoft.com/en-us/windows/iot
這一點是很有象征意義的,這表明Raspberry Pi及其社區的影響力,已經到了MS這樣的巨頭也不能無視的地步了。
Raspberry Pi的成功之道
嵌入式開發板這種東西,在國內已經有十多年的歷史。我至今仍然記得,2007年的時候,公司的一套類智能手機的開發板,居然要3000元。所以寶貝的不得了,不相干的人根本沒機會把玩。
從知名度來說,友善之臂和周立功,算是國內開發板賣的比較好的了,但前者日子過得一般,后者的主要業務也轉向工控領域。
那么Raspberry Pi的成功之道是什么呢?我個人總結起來,有以下幾點:
1.把握住了市場對于廉價計算的需求。單片機講究價格便宜,性能夠用就好,而PC追求功能強大。因此,在單片機和PC之間,存在一個巨大的細分市場。這個市場既需要強大的計算能力,也需要便宜的價格。Raspberry Pi很好的滿足了這一點。
2.通用的計算平臺。很多手機開發板的計算能力和Raspberry Pi類似,但為什么Raspberry Pi取得了成功呢?因為,手機OS主要面向普通用戶,對于程序開發不太友好,而Raspberry Pi則更多強調它是一個功能完整的PC。
它使用了普通的桌面Linux,集成了完整的開發環境,對于小程序,甚至可以直接在Raspberry Pi上編譯執行,就和在PC上一樣。
一般的服務器應用,如Apache等,也可以像在PC上那樣安裝運行。這些都使得它的應用場景較手機平臺有了極大的擴展。
而國內的開發板,很多仍然停留在手機開發板的階段,對于通用計算,理解支持都不到位。
3.開放的態度。Raspberry Pi的開放不僅體現在它使用了很多開源軟件,更在于它的軟硬件都是開源的。這樣,也就給了極客群體擴展使用它的機會,反過來又促進了Raspberry Pi的發展。Raspberry Pi和極客群體之間的互動,使得它突破了產品或平臺的限制,而構成了一個有機的生態系統。
反觀國內的開發板生產商,或曰“解決方案提供商”,實際上陷入了一個怪圈。它們為了推銷自己的硬件或者軟件,而有意對某些部分閉源。但實際上,生態那么差,你就算免費我都懶得用。因為,嵌入式平臺都是專有平臺,需要程序員投入額外的精力,去理解一些離開該平臺就用不到的知識,而這是需要成本的。
Raspberry Pi成立之初的非營利性質,反而幫助它們賺到了這個細分市場中最多的錢,這對于國內眾解決方案提供商,真是一個莫大的諷刺。
4.完善的服務。很多國內廠商提供的所謂服務,無非也就是建個網站,讓人下載一些資料而已。這樣的等級實在太低了。
Raspberry Pi建有專門的軟件倉庫,安裝軟件就和PC上的Ubuntu一樣方便。
這里,我們可以拿友善之臂的Nano PC作為一個對比。
兩者的設計風格和外設接口,基本一致。Nano PC T2的硬件略好于Raspberry Pi 3B,好得不多,價錢也基本相當。
但是,資料、軟件、生態,完全沒得玩啊。你就算再便宜50塊錢,我也會選擇Raspberry Pi。新手絕對不推薦Nano PC!
唯一值得欣慰的是,友善之臂也開始在Github上創建自己的代碼倉庫,并借助了Debian的軟件倉庫,這在一定程度上,挽回了一些劣勢。
卡片PC
常見的卡片PC,除了Raspberry Pi之外,還有Intel的NUC。但是后者除了體積小之外,售價和普通PC相當,不適合當玩具。
Raspberry Pi的成功案例(不定期更新)
http://dcaoyuan.github.io/papers/rpi_cluster/component.html
這是一個Raspberry Pi的集群。
Raspberry Pi 3B初體驗
采購的Raspberry Pi 3B,今天(2016.5.10)終于到貨了,比想象中要小巧一些。這里需要注意的是,35美元(或者類似價錢的RMB),除了板子之外,什么都沒有。你必須自己準備電源和TF卡,好在這些東西都是標準件,并不難找。
安裝OS
官方推薦使用NOOBS,但其實直接燒鏡像更簡單快捷。這里我使用的是Raspbian OS。
登錄Raspberry Pi
1.串口登錄
Raspberry Pi 3B的GPIO接口圖如下所示:
其中,串口和樹莓派的連線方式如下:
| VCC | +3.3V |
| RX | TXD |
| TX | RXD |
| GND | Ground |
這里我犯了一個錯誤,將VCC接到+5V上,差點將串口轉接板燒掉。用戶如果無法判斷自己串口設備的VCC,建議先接上+3.3V試試。
然而這樣做之后,串口并不穩定,無法順利登錄設備。原因在于:
http://ju.outofmemory.cn/entry/245310
2.網口登錄
Raspberry Pi默認支持SSH登錄。這里我使用putty作為SSH客戶端。
首先,用網線將Pi和PC連接到同一個局域網中。然后進入路由器的界面,如下圖:
“客戶端列表”如下圖:
其中raspberrypi就是Pi的hostname。
選擇對應的IP地址,進行SSH登錄。Pi的默認用戶名是pi,密碼為raspberry。需要注意的是,putty首次登錄不會成功,需要關閉會話,并再次登錄,才能獲得相關密鑰,并登錄成功。
3.遠程桌面登錄
VNC或者MS遠程桌面都能登錄Pi,這里使用VNC協議。
Raspbian和Ubuntu一樣,使用apt-get來安裝軟件包。但它默認使用的是國外的軟件源,因此速度很慢。
我們首先在下面的網頁中,查找適合的鏡像軟件源:
http://www.raspbian.org/RaspbianMirrors
國內的話,一般推薦清華和中科大的源。東軟的源,雖然支持的開源軟件數量最多,但速度完全不敢恭維。
http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/
http://mirrors.ustc.edu.cn/raspbian/raspbian/
修改源的方法:
sudo vi /etc/apt/sources.list
安裝TightVncServer:
sudo apt-get install tightvncserver
首次運行tightvncserver,會讓你設置遠程訪問的密碼。
相應的客戶端下載地址:
http://www.tightvnc.com/download.php
打開TightVncViewer,在Remote Host中填入Raspberry Pi的IP地址,注意IP后需要加“:1”,否則連接不上。
文件傳輸
Raspberry Pi默認支持SFTP協議。打開FileZilla,主機一欄填寫:
sftp://192.168.1.102 (換成您的樹莓派的IP地址。前面的sftp://一定要加)
填入登錄的用戶名、密碼,點擊快速連接即可。
擴展系統分區
官方鏡像中,root分區只有2~3GB,這個對于較大的TF卡來說,是一個很大的浪費。因此,需要擴展系統分區。
方法一如下圖所示:
方法二:
sudo raspi-config
VNC進階教程
開機自動啟動
https://github.com/antkillerfarm/antkillerfarm_crazy/blob/master/other/vncserver
將上面的腳本放到/etc/init.d/vncserver中。
然后執行以下命令:
sudo chmod +x /etc/init.d/vncserver
sudo update-rc.d vncserver defaults
sudo service vncserver start
調整分辨率
vncserver -geometry 1440x900 :1
并不是所有的分辨率Pi都支持。Pi的默認分辨率是800x600,其他支持的分辨率還有1440x900。(不全,有興趣的自己慢慢試)
修改hostname
默認的hostname是raspberrypi。將/etc/hostname和/etc/hosts中的相應字段,改成你想要的名字,保存重啟即可。
UPNP(二)
upnp-inspector
upnp-inspector是一個局域網內的UPNP協議的嗅探分析器。可充當DMC,推送多媒體數據到相關DLNA設備。安裝方法如下:
sudo apt-get install upnp-inspector
upnp-inspector的功能包括:
1.列出局域網內的UPNP設備。
2.列出UPNP設備所支持的UPNP服務。
3.列出UPNP服務所支持的函數,并可發送相關函數。(左鍵雙擊樹狀列表中的函數名即可)
upnp-inspector是coherence的一部分。后者是一個Python語言寫的DLNA框架。它的官網:
http://coherence-project.org/
upnp-inspector的代碼地址:
https://github.com/coherence-project/UPnP-Inspector
libmcupnp
libmcupnp是一個基于libupnp的Control Point實現,用C++寫的。從代碼來看,明顯參考了libupnp里的demo示例。
https://sourceforge.net/projects/libmcupnp/
gupnp
這是GNOME項目的upnp庫,使用libsoup處理HTTP,libxml處理XML。它的官網是:
https://wiki.gnome.org/Projects/GUPnP
Scala
官網:
http://www.scala-lang.org/
教程:
http://www.runoob.com/scala/scala-tutorial.html
sbt
sbt是scala的構建工具,其作用類似于Java的Ant和Maven。
官網:
http://www.scala-sbt.org/
教程:
https://github.com/CSUG/real_world_scala/blob/master/02_sbt.markdown
安裝
echo "deb https://dl.bintray.com/sbt/debian /" | sudo tee -a /etc/apt/sources.list.d/sbt.list sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2EE0EA64E40A89B84B2DF73499E82A75642AC823 sudo apt-get update sudo apt-get install sbt參見:
http://www.scala-sbt.org/release/docs/Installing-sbt-on-Linux.html
常用命令
sbt有一個和scala類似的命令行交互界面,可以輸入相關的命令。其中常用的有:
compile
package
run
GUI
scala的GUI方案和Java完全一致,只要Java能用的GUI,scala都能用。這里僅以JavaFX為例討論scala的GUI開發。
方法一:采用一般的scala調用Java的方式。參見:
http://alvinalexander.com/scala/scala-javafx-hello-world-example
正如上面網頁指出的,這里的main函數實際上是有一定技巧在里面的,寫起來并不簡潔,而且代碼風格更像是Java,而不是scala。
方法二:ScalaFX
ScalaFX是對JavaFX的封裝,風格更接近于scala。
官網:
http://www.scalafx.org/
sbt支持:
libraryDependencies += "org.scalafx" %% "scalafx" % "8.0.92-R10"
總結
以上是生活随笔為你收集整理的Raspberry Pi, UPNP(二), Scala的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习(十六)——隐式狄利克雷划分
- 下一篇: 机器学习(十八)——关联规则挖掘