ruff開發板初探

物聯網的概念在1999年就被提出,可是直到今天,我們仍然感嘆物聯網的發展比想像中慢的多,究其原因,可能就是硬體層協議打通上帶來的太多問題吧。

個人理解,物聯網~=互聯網+硬體(之前本人在公司內分享過物聯網相關的知識),互聯網相關的技術已經很成熟,讓互聯網從業人員去折騰硬體相關的東西,這就有點坑了,各種協議(MQTT,COAP),各種不同場景下的傳輸終端(zigbee,ble,紅外),反正是看下來一臉懵逼,物聯網在互聯網的大環境下,使得嵌入式開發的孩子重新獲得新生,也使得互聯網從業人員(尤其是前端開發工程師)找到了一片新的藍海。

ps:可以聽下我的前同事@啊花(阿里雲物聯網事業部前端開發負責人 花名額台)的知乎live《物聯網:前端工程師的新藍海》

於是,商業上的需求,催生了ruff這樣一個產物:

Ruff這個想法誕生,到現在已有一年半了。 決定要做Ruff的動機很簡單:市面上沒有一款工具能讓我快速開發出智能硬體應用。 樹莓派固然很好,但是我依然要寫C寫驅動,搞定內存管理、進程調度、非同步IO的這些問題。 對於我這樣一個不懂嵌入式開發的人來說,光是一個對GPIO口進行高電平變低電平的操作就讓我覺得不知其然更不知其所以然。

我需要這樣的一個工具,我的朋友需要,還有千千萬萬想玩硬體的互聯網工程師需要,那為什麼不自己做一個出來呢?

做一個創新的事情,被質疑是很常見的。 沒有Uber的時候,我們很難相信讓大眾開專車是一件切實可行的事。 沒有Airbnb的時候,人們也很難相信能去別人家蹭房間這件事。 於是,滴滴的切入點是讓計程車裝個軟體, 諾基亞的切入點是讓現有的手機應用開發者做塞班開發…… 然而這些註定不會有卵用。 Uber告訴我們,只有讓不開計程車的人去開計程車才能更好解決出行問題,Airbnb告訴我們,只有讓不開酒店的人開酒店才能更好解決旅行住宿問題。 在塞班有了70%以上市場的情況下,通過讓互聯網的Java工程師進來開發應用,安卓讓移動互聯網全面爆發了。 而這一切一切的創新,在剛開始的時候,都是那麼地虛幻,那麼地不靠譜。

以上文字來自Roy Li 的專欄《Ruff之初》

我只想說,有了ruff,前端同學也可以玩硬體開發了,廢話不多說,趕緊入手吧,購買鏈接。

ps:ruff官網入口 ruff官網

一:開發板開箱

ruff淘寶店鋪購買之後馬上就到了,附幾張開箱照:

額拍的好差,實際包裝很精美的,還是來官網的照片吧:

二:準備工作

我購買的開發版的默認ruffos(固件)版本是1.7.2的,然後我下載的sdk是1.10.0(最新版)

ps:下載鏈接(sdk,固件)

這樣導致我在部署代碼的時候提示ruffos和sdk版本不匹配,所以需要升級固件版本(當然你也可以安裝1.7.2的sdk,但是我覺得都安裝成最新版本比較好)所以接下來在正式寫代碼前要升級固件:

因為,Ruff 1.6.0 之後的固件升級可以通過網頁來操作,網頁版提供了可視化的操作界面,所以我用的這個方法,在瀏覽器中輸入192.168.78.1進入 Ruff Console 頁面 。在Status目錄下可以看到當前連接的開發板的基本信息,例如固件版本,設備序列號等

我們切換到Upgrade目錄下,可以看到會出現當前應用程序版本(如果為部署任何程序就為空)和固件版本,選擇固件版本裡邊的select按鈕選擇本地已經下載的 ruffos-1.10.0.bin文件

隨即Upgrade按鈕被點亮,直接點擊升級即可,這樣你的開發版的固件和sdk都到了最新版(我這裡寫文章的時候最新版是1.10.0)

三:你的第一個ruff程序

固件和sdk搞定了之後,你就可以開始寫你的第一個程序了,這裡可以參照官網的齊步走

1.初始化程序

# 新建項目文件夾nmkdir hello-ruffn# 進入項目文件夾ncd hello-ruffn# 初始化 Ruff 應用nrap initn

2.請根據提示填寫應用名稱等內容(括弧內表示默認值,如果和預期一致,可以直接回車確認)

? app name: hello-ruffn? version: 0.1.0n? description: Hello, Ruff!n? author: Nanchao Inc.n

3.完成後, rap 會初始化項目並下載開發板的配置信息及依賴,大致的目錄如下:

src/index.js就是程序的執行入口,默認生成的index.js裡邊已經有了程序代碼:

use strict;n$.ready(function (error) {n if (error) {n console.log(error);n return;n }nn $(#led-r).turnOn();n});n$.end(function () {n $(#led-r).turnOff();n});n

這段代碼的作用是在應用啟動後點亮紅色板載 LED(設備 ID 為 led-r,# 表示通過 ID 匹配設備),並在應用退出時將其關閉。

4.連接設備

4.1 將 Ruff 開發板上的 micro USB 介面與 USB 電源線連接,Ruff 開發板隨即啟動。

4.2 開發板成功啟動後,會搭建一個名為 Ruff-[SN]([SN] 為設備序列號)的無線熱點。使用開發機連接該熱點,成功後進行後續操作(該熱點沒有網際網路接入)。

注意:連網過程中,開發板的工作指示燈會閃爍

5.將程序代碼部署到開發板上

rap deploy -sn

這個過程可以在控制台執行

rap logn

查看日誌信息,至此你的第一個ruff程序就完成了,如果一切順利,在應用啟動成功後稍等片刻,就可以看到紅色板載 LED 已經點亮了。

四:第二個程序,LCD上展示文字

基於新的硬體的開發大致過程就是添加硬體(外設),重建布局(初始化),寫代碼,再次部署

1.添加外設

首先,切換回平時常用的無線網路

從外設中找到lcd模塊(LCD1602 Display Module 型號LCD1602-02)

控制台執行

rap device add lcdn

會詢問model name 輸入:

? model: LCD1602-02n

會列出該外設的所有驅動,選一個比較新的,回車下載驅動,控制台操作截圖:

ps:添加lcd的時候會指定外設id,這個id直接對應你的程序代碼里的外設id,我這個demo里的lcd外設id設置為"lcd",這個地方要注意!

2.重建布局

添加完外設後,我們需要重新對硬體進行布局(layout)和連接。在應用目錄中執行如下命令:

rap layoutn

提供圖形化的布局編輯器:

rap layout --visualn

這時,瀏覽器會打開一個頁面展示針腳的連接情況

3.寫lcd的代碼:

use strict;nnvar lcd;nvar lcdStatus = 1; nn$.ready(function (error) {n lcd = $(#lcd); n welcome();n if (error) {n console.log(error);n return;n }n $(#led-r).turnOn();n});nn$.end(function () {n $(#led-r).turnOff();n});nnfunction welcome(){n lcd.clear();n lcd.print(i love you,);n lcd.setCursor(0,1);n lcd.print(my wife!);n }n

該代碼的用處就是在程序啟動的時候展示 「i love you, my wife!」

$(#lcd)就是上邊你在連接外設時註冊的外設id,如果有多個同類型的id,建議語義化註冊,可以通過

rap device list n

查看當前連接的外設情況,例如我這裡的外設:

4.再次部署應用

rap deploy -sn

5.查看log日誌

rap logn

不出意外的話,你的lcd會被點亮,並且展示「i love you, my wife!」,好了拿給你老婆去看吧!

推薦閱讀:

React填坑記(一):組件通信
手把手教你為 React 添加雙向數據綁定(一)
一年前端開發,學習永遠趕不上潮流,有一定的PHP基礎,現在動搖了,不知道該繼續前端,還是轉PHP?
前端開發,開發人員怎麼方便的自測IE各個版本?
天天演算法 | Easy | 10. 有效括弧:Valid Parentheses

TAG:前端开发 | Ruff | 物联网 |