C#写的WebServices可运行于树莓派
閱讀目錄
- Raspkate - 基于.NET的可運(yùn)行于樹莓派的輕量型Web服務(wù)器
- Raspkate項(xiàng)目
- 演示
Raspkate - 基于.NET的可運(yùn)行于樹莓派的輕量型Web服務(wù)器
最近在業(yè)余時(shí)間玩玩樹莓派,剛開始的時(shí)候在樹莓派里寫一些基于wiringPi庫的C語言程序來控制樹莓派的GPIO引腳,從而控制LED發(fā)光二極管的閃爍,后來覺得,是不是可以使用HTML5+jQuery等流行的前端技術(shù)做一個(gè)簡單的Web站點(diǎn),讓樹莓派搭載這個(gè)站點(diǎn),通過手機(jī)或者平板電腦來控制樹莓派。經(jīng)過一番調(diào)研,考慮如下:
- 使用Apache或者Nginx搭建一個(gè)Web服務(wù)器
- 優(yōu)點(diǎn):服務(wù)器實(shí)現(xiàn)相對(duì)成熟
- 缺點(diǎn):偏重,而且與樹莓派的交互需要涉及Service調(diào)用,而實(shí)現(xiàn)RESTful服務(wù)對(duì)于Apache或者Nginx需要額外的組件支持,要付出一定的學(xué)習(xí)成本
- 使用Python+Flesk
- 優(yōu)點(diǎn):技術(shù)相對(duì)成熟,也有很多成功應(yīng)用案例
- 缺點(diǎn):對(duì)于我來說需要額外學(xué)習(xí)Python語言
基于這樣的前提,鑒于目前Mono在Linux下的出色表現(xiàn),想想還是自己使用.NET開發(fā)一個(gè)輕量型的Web服務(wù)器吧,第一期版本讓它既支持靜態(tài)文件的訪問服務(wù),也支持RESTful API的調(diào)用,在RESTful API中可以暴露訪問樹莓派GPIO引腳的接口,供HTML5+jQuery的單頁面應(yīng)用調(diào)用,于是也就實(shí)現(xiàn)了在任意設(shè)備上通過瀏覽器來控制樹莓派的目的。
回到目錄Raspkate項(xiàng)目
Raspkate項(xiàng)目的名字,我想就是兩個(gè)方面:Rasp,它來源于樹莓派的英文名字Raspberry Pi,有表示“小、輕量”的意義,而Kate則寓意能夠充分發(fā)揮開發(fā)者的想象,對(duì)其進(jìn)行擴(kuò)展和定制。Raspkate就是這樣一款基于.NET Framework、由C#開發(fā)的輕量型Web服務(wù)器,它的核心部分是一個(gè)HttpListener對(duì)象,通過多線程模型將HTTP請(qǐng)求異步委托給HttpListener執(zhí)行。當(dāng)一個(gè)HTTP請(qǐng)求被接受的時(shí)候,Raspkate會(huì)根據(jù)請(qǐng)求的格式或類型,分配特定的模塊(Module)對(duì)請(qǐng)求進(jìn)行處理,然后將處理結(jié)果返回。如果請(qǐng)求的是一個(gè)文件,那么Raspkate會(huì)返回文件的內(nèi)容,如果是一個(gè)RESTful請(qǐng)求,則Raspkate會(huì)使用已經(jīng)注冊的RESTful API控制器來處理這個(gè)請(qǐng)求,并將計(jì)算結(jié)果以JSON格式返回。
開源地址
Raspkate項(xiàng)目是開源的,代碼庫地址是:https://github.com/daxnet/raspkate,所使用的許可協(xié)議是GPL2.0,(因?yàn)槠渌褂玫呐c樹莓派相關(guān)的組件是第三方的由GPL2.0授權(quán)的開源庫),因此,不能在商業(yè)環(huán)境中使用此項(xiàng)目。
應(yīng)用場景
您可以在以下場景中使用Raspkate:
整體架構(gòu)
下圖展示了Raspkate項(xiàng)目的整體架構(gòu)設(shè)計(jì):
可以看到,在Raspkate核心部分就是一個(gè)HTTP Listener組件,并且由Module和Configuration支撐Raspkate完成HTTP請(qǐng)求處理。每個(gè)模塊可以包含多個(gè)HTTP Handler,這在定義模塊的時(shí)候可以對(duì)多個(gè)HTTP Handler進(jìn)行注冊。
Raspkate配置信息(也就是上圖中的Configuration)非常簡單,下圖就是這個(gè)配置信息的類型視圖,在RaspkateConfiguration對(duì)象上,設(shè)定了HttpListener所使用的Prefix,而Modules部分則指定了Raspkate掃描可用模塊的路徑,IsRelative指定模塊路徑是否是相對(duì)的。
以下是一個(gè)標(biāo)準(zhǔn)的Raspkate配置文件:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | <?xml?version="1.0" encoding="utf-8" ?> <configuration> ??<configSections> ????<section?name="raspkateConfiguration" type="Raspkate.Config.RaspkateConfiguration, Raspkate"/> ??</configSections> ??<raspkateConfiguration?xmlns="urn:Raspkate.Config" prefix="http://127.0.0.1:9023/"> ????<modules> ??????<add?path="modules"/> ????</modules> ??</raspkateConfiguration> </configuration> |
代碼使用
首先,使用Git客戶端將代碼庫克隆到本地:
| 1 | git clone https://github.com/daxnet/raspkate |
然后,在裝有MSBuild的Windows機(jī)器上,執(zhí)行build.bat命令:
- build.bat All?- 這將編譯所有模塊,并將模塊的二進(jìn)制文件復(fù)制到modules目錄下
- build.bat Minimal?- 這僅編譯核心模塊(不包含類似樹莓派支持等擴(kuò)展模塊)
如果是在裝有Mono的Linux機(jī)器上,則相應(yīng)地執(zhí)行build.sh即可。
在編譯完成之后,進(jìn)入bin目錄,執(zhí)行RaspkateService.exe即可(注意:如果是在樹莓派中執(zhí)行,并且希望加載樹莓派支持模塊,則需要通過?sudo ./RaspkateService.exe?命令執(zhí)行,以獲得root權(quán)限)。在成功啟動(dòng)后,你應(yīng)該看到類似下面的畫面:
這時(shí),打開瀏覽器,在瀏覽器中輸入http://127.0.0.1:9023,您應(yīng)該可以看到類似以下的畫面:
這表示您已經(jīng)成功運(yùn)行Raspkate服務(wù),此頁面顯示了運(yùn)行服務(wù)器相關(guān)的信息。注意:如果你希望你的Raspkate服務(wù)能夠在同網(wǎng)絡(luò)的其它機(jī)器訪問,請(qǐng)?jiān)趫?zhí)行RaspkateService.exe之前,將RaspkateService.exe.config文件中的Prefix設(shè)置修改為:http://+:9023/。但這樣做可能會(huì)牽涉到用戶訪問控制的問題,如果將Prefix改為該值后,出現(xiàn)Raspkate無法啟動(dòng)的問題,請(qǐng)先在Command Line執(zhí)行:
| 1 | netsh http add urlacl url="http://+:9023/" user=everyone |
演示
這里有幾張屏幕截圖,展示了Raspkate提供的相關(guān)功能。
獲取并顯示樹莓派信息
以下屏幕截取自我的手機(jī)瀏覽器,分別顯示了我的樹莓派系統(tǒng)信息、樹莓派主板信息以及樹莓派中所有引腳的名稱、類型和電平值列表。
????????
使用HTML5+jQuery控制發(fā)光二極管的點(diǎn)亮和熄滅狀態(tài)
前端是一個(gè)寄宿在Raspkate上的一個(gè)HTML5+jQuery的單頁面應(yīng)用,后端是運(yùn)行Raspkate的樹莓派。
????
出處:https://www.cnblogs.com/Leo_wl/p/5319481.html
轉(zhuǎn)載于:https://www.cnblogs.com/mq0036/p/11140947.html
總結(jié)
以上是生活随笔為你收集整理的C#写的WebServices可运行于树莓派的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 菜鸟学习初级教程-----强烈推荐(看完
- 下一篇: c# char unsigned_dll