嵌入式linux之go語言開發(十一)讓web服務器跑在終端上,通過網頁配置終端參數

以數據網關或集中器設備爲例,有人知道吧。這玩意兒沒界面,但是還一大堆參數需要配置。

那怎麼搞?做個上位機工具,做界面,再做個串口協議一個個的搞嗎?

太繁瑣了,不但得制定協議,還得造工具配合調試,發佈時還得配套給用戶提供工具安裝和使用。這麼麻煩的安裝配置和使用,如何讓用戶好用,易用,愛用?

如果有一web界面,可以通過網頁訪問它,通過電腦在web網頁中對終端參數進行配置豈不是很爽?

只要能訪問到集中器設備的IP地址即可,如下這張圖的web後臺是跑在嵌入式linux上的。

那麼要在嵌入式linux上用c語言實現一web服務器?在編輯幾個網頁供客戶端瀏覽器訪問?

好吧,誰能用c語言在短時間內高效並穩定的實現,夠牛叉,是大牛了。

用c想做肯定也能實現,但是比的是誰比誰更快,誰比誰更強,誰比誰更穩,誰比誰更優。

用c可能怎麼做?移植個嵌入式的web服務器,如Boa,Shttpd,Lighttpd,Thttpd,GoAhead等,然後呢用c寫CGI程序。代碼拼接html。

c什麼輪子都得造,且短時間內不定造好,go的話你什麼輪子都可以複用。

比如這個複用了go生態裏支持百萬級併發量的高性能gin web框架。

即便用c慢騰騰的做出來,在市場上會早已失去了先機。

在這個競爭激烈的市場上,拼的是人無我有,人有我優,人優我新,人新我更新,且做到低成本和高效率。

不應該只是盲從或跟隨潮流,而應該有一種No1心態。

這種心態不是說要妄自菲薄,看不清敵人和自己。而是要樹立自信,樹立標杆,改變潮流,引領潮流。

想實現web瀏覽器訪問並通過網頁設置參數怎麼搞?方法還是有的,且很簡單。

使用 go語言來搞的話,讓你爽到天,幾分鐘搞定一個web服務器和界面。

以下爲在周立功EPC-6G2C-L的ARM板子上的測試:

讓大名鼎鼎的gin ,go的一個很流行web框架,直接跑在上面,很流暢,很贊。

生成的可執行文件有13M。

有人說,這麼大的體積啊,用在嵌入式linux上不合適吧。

但這可能是唯一的缺點,但是若你的板子是單片機,且資源很受限,還是不要玩go了。

我這嵌入式linux板子的資源256M內存,256M Flash,這麼多資源,就運行一功能性的程序,還嫌程序包體積大嗎?

板子資源如下:

U-Boot 2015.04-14492-g8762dca (Jul 19 2016 - 09:37:30)

CPU:   Freescale i.MX6UL rev1.1 at 396 MHz
CPU:   Temperature 46 C
Reset cause: WDOG
Board: EPC-M6G2C
I2C:   ready
DRAM:  256 MiB
NAND:  256 MiB
MMC:   FSL_SDHC: 0

Linux version 4.1.15-224247-gb0fdb78 (shenguiting@linux-compiler) (gcc version 4.9.2 20140904 (prerelease) (crosstool-NG linaro-1.13.1-4.9-2014.09 - Linaro GCC 4.9-2014.09) ) #1 SMP PREEMPT Mon Jul 18 15:16:44 CST 2016
CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7), cr=10c53c7d
CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache

代碼僅僅幾行而已。

package main
import "net/http"
import "github.com/gin-gonic/gin"
 
func main() {
	r := gin.Default()
	r.Static("/assets", "./assets")
	r.StaticFS("/static", http.Dir("assets"))
	r.LoadHTMLGlob("template/*")
    r.GET("/ping", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "message": "pong,respond from EPC-ZLG Board",
        })
	})
	
	r.GET("/test", func(c *gin.Context) {
        c.HTML(http.StatusOK, "test.html", gin.H{
            "title": "this is a test",
        })
    })
    r.Run(":8000") // listen and serve on 0.0.0.0:8080
}

如果覺得這個界面簡單單調,那麼來一張這個圖看看,是不是很像一web管理後臺?

沒錯,這是跑在嵌入式設備上的,對設備進行參數設置的功能管理界面。

(注:目前這只是針對自己的周立功linux開發板業餘時間的go語言實踐。若要做成一個產品,是可以達到目的的,只是得花點兒時間)

在虛擬機上編譯步驟,還可以直接在電腦上運行仿真。簡直太讚了。

go run main.go直接在電腦上跑起來。

若在板子上跑,直接 GOOS=linux GOARCH=arm GOARM=7 go build main.go

把生成的的二進制文件main拷貝到機器上即可。別忘加可執行權限。

chmod +x main

網頁界面,若不要求很花哨,就更簡單了。

<html>
<head>
<h1>
{{ .title }}
</h1>
</head>
<body>
<p>EPC-ZLG Board test</p>
<form name="form1" action="/ping" method="post">
設備地址<input type ="test" name="user" size="18"> <br />
設置密碼<input type ="password" name="psw" size="20"> <br />
 <input type ="submit" value="設置"> 
</form>
</body>
 
</html>

最後,如果有新的項目,且系統是嵌入式linux,我主張用go來開發。

姑且不說用c做得多久,用go做的話,兩到三週時間差不多了吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章