Sonoff Basic 的視覺化編程

Sonoff Basic 的視覺化編程
一篇關於如何用廉價的中國設備創建可程式邏輯控制器的文章。 這種設備將在家庭自動化和學校電腦科學的實踐課程中得到應用。
作為參考,預設情況下,Sonoff Basic 程式透過中國雲端服務與行動應用程式搭配使用;在建議的修改後,與該裝置的所有進一步互動都可以在瀏覽器中進行。

第 I 部分. 將 Sonoff 連接到 MGT24 服務

第 1 步:建立控制面板

在網站上註冊 管理24 (如果尚未註冊)並使用您的帳戶登入。
登入Sonoff Basic 的視覺化編程

若要為新裝置建立控制面板,請按一下「+」按鈕。
建立面板的範例Sonoff Basic 的視覺化編程

建立面板後,它將出現在您的面板清單中。

在建立的面板的「設定」標籤中,找到「裝置 ID」和「授權金鑰」欄位;將來在設定 Sonoff 裝置時將需要此資訊。
選項卡範例Sonoff Basic 的視覺化編程

步驟 2. 重新刷新設備

使用實用程序 XTCOM_UTIL 下載韌體 PLC 索諾夫基本型 到設備,為此您需要一個 USB-TTL 轉換器。 這裡 指令 и 影片教學.

步驟 3. 設備設置

將設備通電,待 LED 亮起後,按住按鈕直到 LED 開始週期性均勻閃爍。
此時會出現一個名為「PLC Sonoff Basic」的新Wi-Fi網絡,將您的電腦連接到該網路。
LED指示說明

LED指示
設備狀態

週期性雙閃
沒有連接到路由器

持續發光
與路由器建立連接

週期性均勻閃爍
Wi-Fi 存取點模式

熄滅了
無電源

開啟網路瀏覽器並在網址列輸入文字“192.168.4.1”,進入裝置的網路設定設定頁面。

填寫欄位如下:

  • 「網路名稱」和「密碼」(將裝置連結到您的家庭 Wi-Fi 路由器)。
  • 「設備 ID」和「授權金鑰」(用於在 MGT24 服務上授權設備)。

設定設備網路參數範例Sonoff Basic 的視覺化編程

儲存設定並重新啟動裝置。
這裡 影片教學.

步驟 4. 連接感測器(選購)

目前韌體最多支援四個 ds18b20 溫度感測器。 這裡 影片教學 用於安裝感測器。 顯然,這一步是最困難的,因為它需要直臂和烙鐵。

第二節。 視覺化程式設計

第 1 步:建立腳本

用作程式設計環境 塊狀,該環境易於學習,因此您無需成為程式設計師即可創建簡單的腳本。

我添加了用於寫入和讀取設備參數的專用區塊。 任何參數都可以透過名稱來存取。 對於遠端設備的參數,使用複合名稱:“參數@設備”。
選項下拉列表Sonoff Basic 的視覺化編程

循環開啟和關閉負載 (1Hz) 的範例場景:
Sonoff Basic 的視覺化編程

同步兩個獨立設備操作的腳本範例。 即,目標設備的繼電器重複遠端設備的繼電器的操作。
Sonoff Basic 的視覺化編程

恆溫器場景(無遲滯):
Sonoff Basic 的視覺化編程

若要建立更複雜的腳本,您可以使用變數、迴圈、函數(帶參數)和其他結構。 這裡就不詳細描述了,網路上已經有很多了。 關於 Blockly 的教育資料.

第 2 步:腳本順序

腳本不斷運行,一旦到達終點,就會重新開始。 在這種情況下,有兩個區塊可以暫時暫停腳本,「延遲」和「暫停」。
“延遲”區塊用於毫秒或微秒延遲。 此區塊嚴格保持時間間隔,阻塞整個裝置的運作。
「暫停」區塊用於第二(或更少)延遲,而且它不會阻止裝置中其他進程的執行。
如果腳本本身包含無限循環,且其主體不包含“暫停”,則解釋器會獨立啟動短暫的暫停。
如果分配的記憶體堆疊耗盡,解釋器將停止執行這種耗電的腳本(小心遞歸函數)。

第三步:偵錯腳本

若要偵錯已載入至裝置中的腳本,您可以逐步執行程式追蹤。 當腳本的行為與作者的意圖不同時,這可能非常有用。 在這種情況下,追蹤可以讓作者快速找到問題的根源並修正腳本中的錯誤。

調試模式下計算階乘的場景:
Sonoff Basic 的視覺化編程

調試工具非常簡單,由三個主要按鈕組成:「開始」、「向前一步」和「停止」(我們也不要忘記「進入」和「退出」調試模式)。 除了逐步追蹤之外,您還可以在任何區塊上設定斷點(透過點擊該區塊)。
若要在監視器中顯示參數(感測器、繼電器)的目前值,請使用「列印」區塊。
這裡 概覽影片 關於使用調試器。

好奇的部分。 引擎蓋下是什麼?

為了使腳本能夠在目標設備上運行,開發了一個字節碼解釋器和一個包含 38 個指令的彙編器。 Blockly 的原始碼內建了一個專門的程式碼產生器,可以將視覺塊轉換為彙編指令。 隨後,該彙編程式被轉換為字節碼並傳輸到設備執行。
這個虛擬機器的架構非常簡單,沒有什麼特別的描述點;在網路上你會找到很多關於設計最簡單的虛擬機器的文章。
我通常為我的虛擬機器的堆疊分配1000字節,這足夠備用。 當然,深度遞歸可以耗盡任何堆疊,但它們不太可能有任何實際用途。

產生的字節碼非常緊湊。 例如,計算相同階乘的字節碼只有 49 個位元組。 這是它的視覺形式:
Sonoff Basic 的視覺化編程

這是他的彙編程式:

shift -1
ldi 10
call factorial, 1
print
exit
:factorial
ld_arg 0
ldi 1
gt
je 8
ld_arg 0
ld_arg 0
ldi 1
sub
call factorial, 1
mul
ret
ldi 1
ret

如果表示的彙編形式沒有任何實用價值,那麼「javascrit」選項卡恰恰相反,比視覺塊給出了更熟悉的外觀:

function factorial(num) {
  if (num > 1) {
    return num + factorial(num - 1);
  }
  return 1;
}

window.alert(factorial(10));

關於性能。 當我運行最簡單的閃存腳本時,我在示波器螢幕上看到了 47 kHz 方波(處理器時脈為 80 MHz)。
Sonoff Basic 的視覺化編程Sonoff Basic 的視覺化編程
我覺得這已經是一個不錯的結果了,至少這個速度比之前快了差不多十倍 LUA и 埃斯普魯伊諾.

最後一部分

總而言之,我想說的是,腳本的使用不僅使我們能夠對單獨設備的操作邏輯進行編程,而且還使將多個設備連接到單一機制中成為可能,其中某些設備影響其他設備的行為。
我還注意到,所選的儲存腳本的方法(直接在設備本身中,而不是在伺服器上)簡化了將已經工作的設備切換到另一台伺服器,例如切換到家庭 Raspberry,這裡 指令.

僅此而已,我很高興聽到建議和建設性的批評。

來源: www.habr.com

添加評論