[ Gobot ] 在 ESP8266上使用 Go語言

才剛寫完 "在 ESP8266上燒錄 MicroPyhton",緊接著就寫 Gobot好像對 MicroPython始亂終棄的感覺。
其實最近寫 Django server碰到效能上的瓶頸,軟硬體的效能都已經很 TOUGH了,聽說 Go語言效能很接近 C語言, 考慮來學學 Golang來提升一下職場競爭力。剛好才寫了 MicroPython就順便試試 Gobot來學習 Golang。

使用 Golang開發 ESP8266可以透過 WiFi連線上傳代碼,非常方便,但起手式稍微有點複雜。
首先需要先依賴 Arduino IDE對 ESP8266進行基礎設定。
Arduino IDE若要對 ESP8266進行燒錄,需要安裝 ESP8266工具,但安裝之前需要先將 Arduino外部的資源位置告訴 IDE。
先將 "http://arduino.esp8266.com/stable/package_esp8266com_index.json" 加入 "額外的開發板管理員網址"。

接著安裝 ESP8266工具,到開發板管理員搜尋 "esp8266"並安裝。

接著需要依賴 Firmata Builder來建立 Gobot需要的 .ino文件。
建立文件前,需要安裝 .ino文件需要的套件 "ConfigurableFirmata"。

安裝後,到 Firmata Builder的網站準備建立 .ino文件。

SSID就是 WiFi的名稱,密碼的部分則是從 .ino文件中進行修改。
其中 Network port是之後透過連線更新代碼時使用的 port。
若擔心找不到 ESP8266的 IP,可以透過 Local IP先直接設定。設定完 IP後,就會顯示 Subnet mask和 Gateway IP,請設定和即將連接的路由器一樣。
Core features的部分,是按照官網建議的選項選擇的。
接著移到網頁最下方,filename可以隨便取,接著點擊 Download按鈕下載。

最後利用 Arduino IDE開啟下載的文件,修改文件中的 WiFi密碼。當然也可以修改 SSID。

最後,在燒錄前記得選擇對應的開發板,點擊上傳 (我的開發板是 NodeMCU)。

燒錄完成後可以用 ping指令來測試 ESP8266的連線狀況。
$ ping 10.1.26.22
64 bytes from 10.1.26.22: icmp_seq=0 ttl=255 time=308.297 ms
64 bytes from 10.1.26.22: icmp_seq=1 ttl=255 time=5.463 ms
64 bytes from 10.1.26.22: icmp_seq=2 ttl=255 time=4.627 ms
...

開始之前,先安裝 Gobot的套件。
$ go get -d -u gobot.io/x/gobot/...
接著就可以使用 Robot官網提供的代碼,命名為 blink.go。
package main

import (
        "time"

        "gobot.io/x/gobot"
        "gobot.io/x/gobot/drivers/gpio"
        "gobot.io/x/gobot/platforms/firmata"
)

func main() {
        firmataAdaptor := firmata.NewTCPAdaptor("10.1.26.22:3030")
        led := gpio.NewLedDriver(firmataAdaptor, "2")

        work := func() {
                gobot.Every(1*time.Second, func() {
                        led.Toggle()
                })
        }

        robot := gobot.NewRobot("bot",
                []gobot.Connection{firmataAdaptor},
                []gobot.Device{led},
                work,
        )

        robot.Start()
}
最後執行文件。
$ go run blink.go
因為是透過網路,所以只要在同一個內網,就可以透過 WiFi控制。
可惜的是只要按下 "CONTRAL + C",ESP8266就會停止動作。怎麼讓程式持續執行,可能還要再研究一下了
但也因為是本地電腦主控,所以可以很方便地在本地端對硬體進行操控或是獲取資料。

文章參考 Gobot

留言

  1. 你好,最近我也在研究esp8266,请问下让程序持久化执行的研究有结果了吗?还有就是

    回覆刪除
    回覆
    1. 在 ESP8266上使用 Gobot,實際上是在 Arduino firmware架構下,透過 Arduino的程式接收來自 Gobot的指令。所以實際狀況下,ESP8266並沒有儲存 Gobot的代碼,而只是執行了來自 Gobot的命令。
      除非選擇其他硬體,比如 Raspberry Pi, Dragonboard, PocketBeagle等,就有能力儲存 Gobot的代碼並執行。
      若 Gobot不是你唯一的選項,個人認為使用 MicroPython應該是最具彈性的。使用 MicroPython中的工具 WebREPL,便可遠端編程和上傳文件,可以參考下面的連結。
      https://learn.adafruit.com/micropython-basics-esp8266-webrepl/access-webrepl

      刪除

張貼留言