物聯網之 NodeMCU:無線灌溉控制器
物聯網之NodeMCU
2017年10月24日星期二
《使用mongoos-os系列》
目 錄
一、 NodeMCU的選擇 3
二、 韌體的選擇 3
三、 UI(使用者介面) 4
四、 進一步 12
五、 程式碼修改 15
一、NodeMCU的選擇
1、NodeMCU V2
核心是ESP-12E,CPU速度80MHZ和160MHZ,SRAM包括64KB指令和96KB資料,外接4MB位元組的Flash儲存。
2、NodeMCU-32S
核心是ESP-32S,雙核CPU,SRAM總數是520KB,接有4MB位元組的Flash儲存。
以上配置的硬體,價格便宜,記憶體卻是很大,用來執行http server綽綽有餘。
NodeMCU V2價格一般為23元,NodeMCU-32S價格為39元,配合I2C介面的IO板,完全可以用於小型應用。
二、韌體的選擇
選擇Mongoose-OS,它以Mongoose庫為基礎實現了常用的網路服務:http,mqtt,sntp,rpc。最終商業化時,程式語言應選C,它速度快,佔用RAM空間少。mJs用於快速產品原型和做Demo演示。
如下資源剩餘,是在開啟http, mqtt, sntp, rpc服務之後,並週期讀取sth10溫溼度資料。
如果使用lua韌體,執行http server很容易記憶體不足,甚至註釋都要佔用記憶體。使用eLua的好處是,不必考慮記憶體管理,只管用,不用考慮回收。
Mongoose-OS的example,混雜著mongoos lib函式,官方的社群文件不齊全。若是檢視其lib,可以發現它只是對mongoos庫做了一個封裝,我們可以根據業務情況,寫自己的lib,譬如讀取sht20溫溼度資料。進一步功夫可花在mongoos庫的使用上,它是背後的神仙。
三、UI(使用者介面)
以NodeMCU為例,其4MB的FLAH儲存空間,足夠我們揮霍程式碼和HTML頁面。當前應用,只使用到純文字,尚未使用圖文並茂的形式。
2014年10月29,W3C正式釋出html5標準,它帶來許多新特性和便利性,至今已經是扔掉IE這個包袱,使用新技術來開發頁面的時候了。
儘管大膽使用新技術,因為在我們中國,智慧手機基本人均
利用現有ESP8266的硬體,不額外增加SRAM和外接FLASH,通過HTML技術,你仍然可以把NodeMCU裝扮的珠翠羅綺,把你的小清新風格展示的完完整整。
頁面需要css樣式美化介面,使用ajax與NodeMCU進行互動。
官方有一個wifi-setup-web例子,用來設定wifi的資訊。它使用了XMLHttpRequest來進行ajax讀寫,在檔案<head>標籤內做css定義。
<style>
...
.form-control { margin: 0.5em 0; }
.form label { min-width: 8em; display: inline-block; }
...
</style>
<script>
var ajax = function(opts) {
var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
xhr.onreadystatechange = function() {
if (xhr.readyState != 4) return;
if (xhr.status == 200) {
(opts.success || function() {})(xhr.responseText, xhr);
} else {
(opts.error || function() {})(xhr.responseText, xhr);
}
};
...
</script>
這種寫法,單個檔案的響應時間要快,上面這個html才5.9KB。
但是要做的完善一些,要考慮加上正則驗證,原始寫法的繁瑣還是比較令人頭疼。
我們決定使用bootstrap框架和jquery,可以在網站上進行定製,去掉不必要的元件。
最節省記憶體和儲存空間,而且頁面響應速度最快的做法是使用CDN加速,在/fs目錄下的html頁面檔案中引用:
<head>
...
<link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css rel="stylesheet">
...
若是NodeMCU總是可以連入網際網路,那麼本文至此就可以閱讀結束了。UI框架可隨心所願的選擇,怎一個爽快了得。
不過,考慮到非Internet連線下,還要有一個好看的介面,則要把樣式檔案拷貝到/fs目錄下。而後咱html中引用即可,mongoose的filesystem(檔案系統)會響應http請求,將.css和.js檔案傳送給客戶端。
大小合計167KB,esp8266的無線傳輸速度夠快,慢在從flash讀取檔案資料,第1次載入耗時20多秒,以後再呼叫會使用快取,基本上是秒開。
最初的想法是,尋找它們的迷你版本,既有其效果、功能,又有小尺寸。
還真是可以找到:
miinicss,網站:http://minicss.org/
可以使用它的預定義版本(http://minicss.org/flavors)。文件很齊全,有線上預覽效果功能,漂亮度小於bootstrap。但比pure等要好看,而且全面。
zeptojs, 網站:http://zeptojs.com/
有中文版本的網頁可以看:http://www.css88.com/doc/zeptojs_api/
這個js的使用,和jquery差別不大,很容易遷移。但不支援偽選擇部分功能,在除錯時,使用firefox或者chrome瀏覽器,按F12調出除錯頁面,可以看到響應、錯誤。
這兩個檔案尺寸小許多,而且minicss不需要jqeruy來支援:
尺寸小了2/3,頁面載入速度已經可以接受了,畢竟我們是個32位小微控制器模樣。
四、進一步
在minicss和zeptojs官方頁面上:
但是上圖可以看到它是39KB。
那就是,把它們壓縮一下,做到gzip格式。
壓縮工具,就是gzip,下載地址:http://www.gzip.org/#exe
我們是win7系統,從列表第1個下載。
在執行裡鍵入cmd,進入命令視窗,敲入:
gzip zepto.js
即可,它自動生成.gz檔案。有個-9最好壓縮的選項,沒有多大影響,因為js檔案已經是mini版本了。
我們自己生成的檔案比官方標的尺寸大小基本一致。
現代瀏覽器,應支援gzip,不支援的瀏覽器棄用。正常做法是維護兩個版本的檔案,壓縮和未壓縮的,判斷瀏覽器header,不支援gzip的,傳送原版;支援gzip的,則傳送壓縮版本。我們採用非正常做法,只是使用gzip版本檔案。
第一步,修改html檔案中的引用,在原先的引用程式碼檔名後面加上.gz即可,如:
...
<script src="zepto.js.gz"></script>
<link rel="stylesheet" href="mini-nord.css.gz">
...
第二步,修改http_server初始化函式。
我們只對js和css進行壓縮,而且檔案只有2個。所以只需要在HTTP事件中判斷到,客戶端請求的是zepto.js.gz和mini-nord.css.gz,響應對應的content-type和conten-encoding即可。
來看一下,Chrome的除錯臺(F12調出):
General下,請求了http://192.168.100.102/zepto.js.gz,狀態碼是200,成功。有時是304,這是系統快取,強制更新按Ctrl+F5。響應頭Reponse Headers裡面,可以看到正確的返回了內容型別和內容編碼。
而第3項請求頭裡,說了接受任何型別的檔案,接受的編碼有gzip。
這樣mongoose-os, js的gzip檔案和瀏覽器,三者達成一致,頁面正常沒有錯誤。頁面初次載入速度也很快。基本上和引用CDN加速效果相當(後者還是要快點,網路快於flash讀取)。
那麼mongoose-os服務端,怎麼處理呢?
它幾個模組之間耦合性大,鬆散性不足。
若你用過STM32的HAL庫,會發現它有的函式使用weak定義,可以進行覆蓋(Override),但是mongoose-os不行,或者是它想著讓大家用它的企業版。
五、程式碼修改
http_server模組中的全域性變數s_listen_conn是靜態的,不能外部extern引用,而RPC模組要註冊mgos_rpc_http_handler這個事件處理,我們才能使用/rpc這個URL來做一些操作,包括websocket。
所以,拷貝http_server到專案目錄下,做程式碼修改;關閉http.enable,手動呼叫函式mgos_http_server_init,http服務可以用,但是websocket等不可以用。
而且其他庫裡都有庫依賴,依賴github上的連結。在專案的mos.yml使用name: http-server-1.18指定使用本地lib,編譯上,mos總去呼叫https://github.com/mongoose-os-libs/http-server,然後就提示no rule make http-server。
...
至此,NodeMCU 即可以隨心所欲的更換自己的服裝,其他UI框架定製並壓縮以後,尺寸也是大幅度變小。Html檔案也可以壓縮,/fs目錄下都是.gzip時,可以省卻判斷語句。
這種做法簡單、粗暴,若是想同時提供未壓縮版,也是在這個位置上做判斷,截獲並修改path即可。
利用成品的UI框架,犧牲一點速度,得到的效果還是很不錯的。
龍口
2017年10月24日星期二
相關推薦
物聯網之 NodeMCU:無線灌溉控制器
物聯網之NodeMCU 2017年10月24日星期二 《使用mongoos-os系列》 目 錄 一、 NodeMCU的選擇 3 二、 韌體的選擇 3 三、 UI(使用者介面) 4 四、 進一步 12 五、 程式碼修改 15 一、NodeMCU的選擇 1、N
為物聯網而生:高性能時間序列數據庫HiTSDB商業化首發!
ec2 dll UC npv rbf asi AR ioc AC 7f9vd3痛味乜譚團角http://wenda.cngold.org/question747501.htmmum4e4陌低蟹園腔勻http://wenda.cngold.org/question747391
工業物聯網之從 Modbus 到 Web 數據可視化
提取 return === .com nop 組件 應用 兩種 sta 前言 工業物聯網是一個範圍很大的概念,本文從數據可視化的角度介紹了一個最小化的工業物聯網平臺,從 Modbus 數據采集到前端數據可視化呈現的基本實現思路。這裏面主要涉及基於 Modbus 通訊規約
什麽是lora物聯網技術 LoRa和無線技術的區別
調制 多節點 物聯 即使 節點 能量 低功耗 還需要 形式 隨著物聯網技術的發展,湧現出多種無線技術,在這些技術中,LPWAN通信技術中的其中一種形式LoRa技術出現,它的遠距離、低功耗、多節點、低成本的特性,得到了物聯網界的認可。 LoRa作為目前最有發展前景的低功耗
物聯網企業採風:PTC
一、什麼是PTC 曾經,PTC公司是專門做服務性製造(生產管理,生產流程優化,物流優化等)的軟體公司,90年代進入中國,在中國有700名員工,全球6000名。在上海、深圳、北京有辦事處。PTC公司在美國納斯達克上市。 2013年開始PTC轉型為IoT公司,2013年底2.5億美金
物聯網企業採風:Teleena
關於Teleena Teleena總部位於荷蘭,是領先的移動服務提供商(MVNE),在英國設有辦事處。Teleena為全球範圍內行動網路運營商(MNOs),有線電視公司和移動虛擬網路運營商(MVNO)提供移動資料服務,以擴充套件他們的行動網路覆蓋範圍,為他們創收。Teleena還為全
物聯網企業採風:Telit
關於Telit Telit自己對自己的評價是: Telit is the global leader in Internet of Things (IoT) enablement. We offer the industry’s broadest portfolio of
物聯網企業採風:Cumulocity
關於Cumulocity Cumulocity總部設在德國杜塞爾多夫,前身是諾基亞西門子網路(Nokia Siemens Networks)的一部分,2010年開始了IoT平臺的開發,命名為Cumulocity,之後於2012年脫離出來成為一個獨立的公司。如今Cumulocity提供
機智雲物聯網平臺1:資料收集
機智雲物聯網平臺:https://accounts.gizwits.com/zh-cn/login?redirect_url=https%3A//dev.gizwits.com/zh-cn/developer/product/&set_token_url=https://dev.gizwits.com
NB-IOT 和 LoRa物聯網長距離低功耗無線技術哪個更好
LPWAN(low-power Wide-Area Network,低功耗廣域網)近年來快速興起。NB-IoT與LoRa是其中的典型代表,也是最有發展前景的兩個低功耗廣域網通訊技術。那麼NB-IOT 和 LoRa物聯網長距離低功耗無線技術哪個更好呢? NB-IoT技術具備四大優勢:
工業物聯網中如何選擇無線模組?
本文簡要概述了目前市場上的一些選擇,並描述了每種選擇的優缺點,各個技術在傳輸距離、資料吞吐量、電池壽命與延遲之間的平衡。為物聯網裝置選擇無線技術是令人頭疼的問題,只有充分考慮搭建的整個系統的每一個細節,才能全面瞭解其優勢和劣勢。 端點: 這就是物聯網中“物”。它可以是一個恆溫器、門鎖、GPS跟蹤器或洗碗機
物聯網的5種無線技術
各種型別的無線技術和網路允許裝置在沒有電纜的情況下彼此和網路(TCP / IP網路)說話(傳送資料)。有許多不同的無線技術可以在用於物聯網(IoT)和機器到機器(M2M)通訊的硬體產品中實現。 電氣和電子工程師協會(IEEE)為802.15技術設立了七個任務組。這些小組為;用於個人區域網路的常見無線技術設定
物聯網之NB-IoT技術實踐開發二(NB-IoT開發環境搭建及模組驅動開發)
STM32CubeMX安裝及使用 1、STM32CubeMX介紹 2、STM32CubeMX安裝 3、STM32CubeMX使用 STM32CubeMX介紹 STM32CubeMX簡介: 微控制器圖形化配置 – 自動處理引腳衝突 – 動態設定確定的時鐘樹
物聯網之LoRa開發與應用一(M0工程建立)
M0工程建立主要分如下四步: 1、IO埠配置 2、時鐘配置 3、外設配置 4、printf函式重定向 IO配置: 1、看懂原理圖 2、建立IO功能對映表 3、通過STM32Cubemx配置IO工作模式 STM32F051K8U6 IO功能對映表 序號
物聯網之MQTT 協議
物聯網之MQTT 協議 文章目錄 物聯網之MQTT 協議 Mqtt 協議框架 定義 訂閱(Subcription) 主題(Topic Name) 服務質量(Q
物聯網之STM32開發三(USART串列埠)
STM32-USART串列埠的應用 內容概要: 序列通訊的基本概念 串列埠暫存器介紹 STM32實現串列埠資料的收發 HAL串列埠庫函式的使用及printf的實現 序列通訊的基本概念: 內容概要: 通訊的基本概念 USART介紹 串列埠的電路連線 串列埠
物聯網之所用--藍芽 PK Wi-Fi
在物聯網領域,這個命題其實已經討論很久,但是從歷史以及市場來看,Wi-Fi顯然是更佔據了上風,儘管藍芽已被廣泛應用於手機、電腦、耳機、音箱、相機等消費電子產品,幾乎人人盡知,但在新興的物
物聯網之STM32開發四(中斷系統)
STM32-中斷系統 內容概要: STM32中斷系統概述 外部中斷控制器EXTI 按鍵中斷例項 串列埠中斷例項 STM32中斷系統概述: 內容概要: 中斷的基本概念 巢狀向量控制器NVIC 中斷及異常向量表 中斷優先順序 中斷的基本概念: 處理器中
物聯網改變未來:第一步,從物聯網應用開始
在遙遠的過去,人們都是用馬車運送貨物,但是隨著汽車火車的出現,依靠馬車運送貨物的年代已經過去了。而隨著科技的不斷革新,傳統的貨物運輸模式正在慢慢被改變。今天,我們正在使用物聯網感測器技術與卡車相結合打造出一種新的現代化車隊。 卡車的運輸推動了全球的發展,據統計,美國卡車卡車運輸佔了貨物
【IoT】物聯網之 WIFI 一鍵配網 smartConfig 淺析(ESP32)
一、背景 物聯網時代技術開始規模化服務於民眾,方便快捷顯得尤為重要,WIFI 直連便是一個典型案例。 目前主流的 WIFI 配置模式有以下 2 種: 1、智慧硬體處於 AP 模式(類似路由器,組成區域網),手機用於 STA 模式 手機連線到處於 AP 模式的智慧硬體後