IoT 物聯網教學-Logyun連雲 – 史上最簡單IoT模組

一、介紹

Logyun連雲是CIRCUS Pi 特別為專案製作上,有IOT 需求的使用者打造的Wi-Fi 模組。簡單易懂的使用方式,具備與各種微控制器、微電腦良好的通用性,內建各項老師用於教學或學生製作專案時常用的功能,加速使用者的開發。為了讓剛學習程式設計的學生能上手 Logyun連雲 ,支援目前最夯的微控制器BBC micro:bit,並提供可用於程式編輯器MakeCode 的擴充積木與範例程式,使入門的玩家或習慣使用micro:bit 開發的使用者也能透過Logyun連雲 製作相關專題。

對於進階使用者,我們也提供Raspberry Pi Pico 與Arduino 的使用範例與程式,並提供能自訂 Logyun連雲 功能的方法,您將能透過自己熟悉的方式或語言,打造屬於自己的 Logyun連雲模組。若想恢復原廠內建的功能,也有相關的教學與方法,讓您無後顧之憂的玩轉 Logyun連雲

文章重點章節整理:

二、與一般模組的差異?

Logyun連雲與一般的Wi-Fi 模組一樣,可讓您的設備透過該模組連上網路,不同之處在於Logyun連雲並不是透過AT 指令做為控制命令。連雲內部含有各項功能,透過各個自訂好的指令,呼叫每個想使用的功能讓連雲處理並回傳。

這樣的使用方式,有什麼優點呢?一般採用AT 指令來開發,較難處理複雜的工作,比方說轉址、接收龐大的回傳訊息,接收到的訊息處理與篩選,多半都是仰賴主控板來做後續的步驟。對於較不熟悉的使用者,其難度之大,操作上也較不方便。

Logyun連雲的優點就是收集了大部分使用者會使用到的功能,將其複雜的工作整合到Logyun連雲內部,只要依照指定的命令填入,Logyun連雲就會幫您完成。例如:將感測器參數上傳ThingSpeak,必要時抓取最新的參數下來做比對。

三、內建功能與說明:

目前Logyun連雲有支援四大功能,分別是基礎的聯網功能、資料存取功能、MQTT與特殊功能,如下表所示:

1. 連網功能

2. 資料存取功能

3. MQTT

4. 特殊功能

四、micro:bit 使用方法(MakeCode)

1. 連接與擴充

除了Logyun連雲,首先準備一條「Grove to 杜邦母」的連接線,與一塊能將micro:bit 金手指轉換成排針的「擴展板」。

連接線的Grove 端插在Logyun連雲,杜邦母線連接在擴展板上,連接VCC的紅色線接在擴展板的VCC,連接GND的黑色線接在擴展板的GND,連接RX的黃色線需接在micro:bit支援序列連接的腳位(這邊選擇P1),連接TX的白色線需接在micro:bit支援序列連接的腳位(這邊選擇P2)。

打開MakeCode 並進入擴展畫面,輸入「https://github.com/iCShopMgr/CIRCUS_Pi_Logyun」網址擴充程式積木。

擴展成功即可在程式列表看到「Logyun連雲」。

2. 連接Wi-Fi 程式範例

使用Logyun連雲連接Wi-Fi 相當容易,只要設定連接的腳位,並填入欲連線的Wi-Fi 名稱及密碼即可,腳位的設定直接填入對應的接線位子,例如Logyun連雲的RX 連接在擴展板上面的P1,則程式內於RX 後方的下拉式選單選擇P1。

下方程式示範若Wi-Fi 連線成功,則micro:bit 顯示連接的IP 地址。

程式連結

3. ThingSpeak 上傳與取得資料範例

首先要自行註冊帳號並創建一個Channel,創建完成後可以在名稱下方找到Channel ID,於API Keys 的頁籤能獲得Write API Keys 以及Read API Keys,請先在Channel Settings 頁籤設定要存放資料的Field,相關設定教學將不再此贅述。

ThingSpeak 相關的程式積木有兩個,一個是上傳資料,另一個是讀取資料。

上傳資料相當容易,我們於「當啟動時」區塊內新增連接Wi-Fi 的程式,拉出上傳的程式積木放在「重複無限次」,於API Keys 欄位填入Write API Keys,按下該程式積木下方的「+號」新增想要上傳的資料數量(最多8筆),並於每個Field後方填入要上傳的數值,ThingSpeak 的免費用戶最快上傳時間需間格15秒,所以下圖程式內有插入暫停時間的程式積木。

程式連結

成功上傳即可看到如下圖顯示:

讀取資料上有一個限制,它只允許抓取最新的一筆資料,我們將原本的上傳替換成讀取的程式積木,並將它放在顯示文字內,依序填入Channel ID、Read API Keys 然後選擇想要讀取的Field 即可。

程式連結

4. Google Sheet 上傳與取得資料範例

請先開啟Google 雲端硬碟並新增一個試算表,點選共用並設定權限為編輯者。

請將連結網址中 d/ 後方到 /edit 前方的那串碼複製下來,此碼為該試算表的連結金鑰。

Google Sheet 相關的程式積木有兩個,一個是上傳資料,另一個是讀取資料。

上傳方式與ThingSpeak 類似,將連結金鑰填入位置欄內,按下該程式積木下方的「+號」新增想要上傳的資料數量(最多10筆),並於每個Field後方填入要上傳的數值。

程式連結

成功上傳即可在Google 試算表內看到資料,開頭固定為上傳時間,後方則是上傳的資料,如下圖顯示:

讀取資料的部分是輸入儲存格的位置來讀取內部的資料,例如我想取得F7 的資料,則在儲存格後方填入F7。

程式連結

5. MQTT使用範例

與一般的使用方式一樣,您需要有提供服務的伺服器(推薦HiveMQ,您可以上網搜尋相關說明),程式預設是使用HiveMQ 以及1883 作為連接埠,您也可自行填入習慣使用的MQTT broker 及連接埠。我們可以透過Logyun連雲訂閱主題、發佈訊息與接收訊息。

發佈訊息,首先需要先讓Logyun連雲連接我們指定的伺服器,並填入相關資料,伺服器網址、連接埠、使用者ID (隨意填寫)與訂閱的Topic,若伺服器不需要使用者名稱及密碼可不填。

拉出發佈訊息的程式積木,於後方填入Topic 與要發佈的訊息,如下圖所示:

程式連結

取得訊息的部份只要將發佈訊息的程式積木換成取得的程式積木即可,我們可以取得目前訂閱的Topic 名稱,與發佈的訊息。

程式連結

您可自行關閉MQTT連線,或是重新連線。

MQTT 使用小提醒

為了確保連線正常且穩定,Logyun連雲一旦進入MQTT 連線後,除了MQTT 的相關功能,其餘功能將無法使用,需要使用「關閉MQTT」這個程式積木才能跳出以恢復其他功能。

所以若是有使用過MQTT 功能,但最後卻沒有執行「關閉MQTT」而燒錄其他功能的程式時,建議按下Logyun連雲上面的RESET(按鈕),讓Logyun連雲重新啟動,或是重新啟動總電源,讓Logyun連雲重新開機以跳出MQTT 的功能循環。

6. 取得台灣各地環境感測站的資訊

因著熟識老師們的建議,Logyun連雲有加入取得環境感測站資料的功能,分別是OpenWeatherAirBoxTaiwanAQI。取得資料的方法都一樣,先連接到想查詢的觀測站,再取得資料,範例如下:

(1) OpenWeather

您需要至OpenWeather 註冊並取得API Keys。

將自己的API Keys 填入「查詢天氣資訊」的程式積木欄位內,並於下拉式選單選擇想要取得資料的地區,再透過「取得天氣查詢後[  ]資料」這個程式積木獲得想要的資訊,可取得的資訊有:溫度、最低溫度、最高溫度、氣壓、濕度與風速,範例程式如下圖所示。

程式連結

(2) AirBox

透過零時空汙觀測網,老師可搜尋到自己學校的空氣盒子,我們可以透過ID 來取得該空氣盒子偵測到的資料。

從列表中拉出「連接網路空氣盒子」這個程式積木並填入裝置ID,再透過「取得空氣盒子[  ]資料」這個程式積木獲得想要的資訊,可取得的資訊有:經度、緯度、PM1.0、PM2.5、PM10、溫度與濕度,範例程式如下圖所示。

程式連結

(3) TaiwanAQI

政府資料開放平臺有提供細懸浮微粒資料(PM2.5)可供查詢。

點開網站內的JSON連結可以看到詳細的資料,並可搜尋自己想查詢的地區。

從列表中拉出「連接台灣空氣資訊監測站」這個程式積木並填入地區名稱,再透過「取得監測站[  ]資料」這個程式積木獲得想要的資訊,可取得的資訊有:AQI指標、二氧化硫、一氧化碳、臭氧、風速、PM10、PM2.5、PM10平均值與PM2.5平均值,範例程式如下圖所示。

程式連結

7. 查詢台灣股票資訊

您可以藉由輸入股票編號讓Logyun連雲為您抓取相關資料,使用方法非常簡單,從列表中拉出「網路取得股票資訊」這個程式積木並填入股票代號,再透過「取得股票[  ]資料」這個程式積木獲得想要的資訊,可取得的資訊有:股票編號、開盤價、昨日收盤價、最高價、最低價、成交量、累積成交量、成交價、日期與時間,範例程式如下圖所示。

程式連結

五、Raspberry Pi Pico 使用方法(MicroPython)

想要讓Raspberry Pi Pico 也使用Logyun連雲來收發資料,首先要先知道Pi Pico 的UART位置,我們可以到 Raspberry Pi Pico 的官方網站找到腳位圖,Pi Pico 的UART 有兩組,我們將使用UART1,也就是下圖代表UART1 TX( GP4 ) 與UART1 RX( GP5 )。

圖片擷取來源(https://www.raspberrypi.org/documentation/pico/getting-started/)

1. 連接連雲

連接線的Grove 端照樣插在Logyun連雲,另一端杜邦母線連接在Pi Pico 上,連接RX的黃色線接在Pi Pico 的GP4,連接TX的白色線接在Pi Pico 的GP5,GND的黑色線接在Pi Pico 任一GND,連接VCC的紅色線接在Pi Pico 的3V3(OUT)。如下圖所示:

2. 程式編輯器

有關於 Raspberry Pi Pico 使用MicroPython 的起手式,官方網站有很詳細的教學,請依照教學指示完成環境設定。

編輯器的部份我們使用方便又強大的Thonny,版本是3.3.4 (支援Raspberry Pi Pico)。

軟體連結:https://thonny.org/

圖片擷取來源(https://thonny.org/

下載並安裝完畢後,請將 Raspberry Pi Pico 透過USB 傳輸線接上電腦,並打開 Thonny ,點選上方選單的執行>選擇直譯器,在頁面內選單選取Raspberry Pi Pico 並按下確認,如下圖所示:

看到下圖顯示版本就表示有連上Raspberry Pi Pico,若是出現一堆紅字,有可能是Pi Pico 正在執行內部程式,可以點選Stop 按鈕停止Pi Pico 正在執行的程式。

3. 如何使用MicroPython 與Logyun連雲通訊

我們以下面這張圖來說明:

要使用UART作為通訊,首先我們要導入這項功能,它位在MicroPython 內部程式庫machine 裡面,所以「from machine import UART」指的是從machine 導入UART 進來,以便後續能呼叫使用。

程式運作的過程中,我們也許會需要「等待時間」的程式,在MicroPython 我們可以使用sleep(秒) 這個指令來令程式暫停,它位在MicroPython 內部程式庫time 裡面,所以「from time import sleep」指的是從time 導入sleep 進來。

接著,有了UART 這項功能後,我們必須要設定兩個參數,第一個是您使用的是哪個UART Port,第二個則是傳輸的速率,「uart = UART(1, 115200)」如這行程式碼,我們在括弧內的第一個參數填入1,因為我們將Logyun連雲連接在Pi Pico 的UART1,速率則填入115200,Logyun連雲的傳輸速率是115200,並將設定賦予uart。

這樣就完成了設定,我們將可以使用「uart.write()」來傳輸指令,透過「uart.readline()」接收指令。

4. 指令發送與接收

我們可以透過下表的各項指令與Logyun連雲傳送訊息:

指令是以字串的形式發送,以連接Wi-Fi 這個功能為例「WifiConnect(Wi-Fi名稱,密碼)」,我們依照說明將Wi-Fi名稱與密碼填入,中間以逗號隔開,不能有多餘的空格。

指令最前面與最後面加上"這個符號,表示格式為字串,將其放在「uart.write()」 的括弧內,就能透過uart 發送這條指令給Logyun連雲。如下圖所示:

指令發送後Logyun連雲會回傳訊息,我們可以透過「uart.readline()」 接收回傳回來的一行訊息,藉由print 指令我們能將接收到的訊息印在互動環境(Shell)視窗上。如下圖所示:

使用WifiConnect(Wi-Fi名稱,密碼)這條指令發送後,若連線成功,Logyun連雲會回傳ok,若失敗則回傳error。

如下圖所示,實際執行後,可在互動環境(Shell)視窗上看到結果。

5. 連接Wi-Fi 程式範例

透過發送「WifiConnect(Wi-Fi名稱,密碼)」來連接Wi-Fi 並透過WifiCheck() 確認是否連線,若連線成功返回ok,則透過「WifiLocalIP()」指令查詢IP 位子。

程式連結

小知識

WifiCheck() 的返回值在視窗上顯示的是 b’ok\n’,因為數據返回的資料類型是byte,所以,開頭b表示byte,\n是換行的意思,表示這一行指令的結尾。

舉一反三,所以WifiLocalIP() 的返回值就會類似這樣 b’192.168.43.142\n’,若想讓資料乾淨一點,我們能將數值轉換成字串,並透過分割字串將多餘的符號去掉。

如上圖中的:str(uart.readline())[2:-3]

就可以將 b’192.168.43.142\n’ 轉變成192.168.43.142,詳細說明可以請教Google 大神。

6. ThingSpeak 上傳與取得資料範例

首先要自行註冊帳號並創建一個Channel,創建完成後可以在名稱下方找到Channel ID,於API Keys 的頁籤能獲得Write API Keys 以及Read API Keys,請先在Channel Settings 頁籤設定要存放資料的Field,相關設定教學將不再此贅述。

透過「ThingSpeakWrite(Write API Keys,資料1,資料2,…,資料8)」,能將資料上傳到ThingSpeak,最多傳送8 筆資料,輸入的參數皆以逗號隔開,且不允許多餘的空格。

範例程式

成功上傳即可看到如下圖顯示:

讀取資料上有一個限制,它只允許抓取最新的一筆資料,經由「ThingSpeakRead(Channel ID,Read API,資料表格)」我們能取得回傳的資料。

範例程式

上述程式展示了抓取Field1、Field2、Field3 的資料,透過print 於互動環境(Shell)視窗中顯示出來。

7. Google Sheet 上傳與取得資料範例

請先開啟Google 雲端硬碟並新增一個試算表,點選共用並設定權限為編輯者。

請將連結網址中 d/ 後方到 /edit 前方的那串碼複製下來,此碼為該試算表的連結金鑰。

準備就緒後,我們使用「GoogleSheetWrite(試算表ID,資料1,資料2,…,資料10)」,這能將資料上傳到指定的 Google Sheet ,最多傳送10 筆資料,輸入的參數皆以逗號隔開,且不允許多餘的空格。

範例程式

成功上傳即可在Google 試算表內看到資料,開頭固定為上傳時間,後方則是上傳的資料,如下圖顯示:

我們可以使用「GoogleSheetRead(試算表ID,資料位址)」取得試算表內的資料,讀取資料的部分是輸入儲存格的位置來讀取內部的資料,例如我想取得C3 的資料,則在儲存格後方填入C3。

範例程式

成功連上網路後回傳ok,接著回傳C3 的數值,取得的值是2。

8. MQTT使用範例

與一般的使用方式一樣,您需要有提供服務的伺服器(推薦HiveMQ,您可以上網搜尋相關說明),我們可以透過Logyun連雲訂閱主題、發佈訊息與接收訊息。

不論是發佈訊息還是接收訊息,我們都需要讓Logyun連雲連上提供MQTT 服務的伺服器,並設定自訂的ID 與訂閱的Tpoic。

「MQTTConnect(broker網址,通訊埠,自訂ID,使用者名稱,使用者密碼,訂閱名稱)」這條指令能使我們連上服務器並訂閱主題,若服務端不需要使用者名稱與密碼,可以不填寫但需保留逗號,例如:MQTTConnect(broker.hivemq.com,1883,yisreal,,,yisreal/7697),且不得有多餘空格。

連線後,我們將經由「MQTTPublish(訂閱名稱,發佈訊息)」這條指令,發佈我們想發送的訊息,以下徒程式為例,我們將以3 秒的間隔不停發送0 與1 的訊息。

範例程式

我們可以使用「MQTTReceivedTopic()」與「MQTTReceivedMsg()」取得目前訂閱的Topic 名稱,與發佈的訊息。

範例程式

上述程式以每隔3秒的間隔,從服務器取得訂閱主題的名稱與訊息。

如下圖所示,頭兩個ok 是連上Wi-Fi 與MQTT伺服器成功的回傳值,接下來的兩個代表我們收到的主題名稱與訊息。

MQTT 使用小提醒

為了確保連線正常且穩定,Logyun連雲一旦進入MQTT 連線後,除了MQTT 的相關功能,其餘功能將無法使用,需要使用「MQTTBreak()」這個指令才能跳出以恢復其他功能。

所以若是有使用過MQTT 功能,但最後卻沒有中斷MQTT連線而燒錄其他功能的程式時,建議按下Logyun連雲上面的RESET(按鈕),讓Logyun連雲重新啟動,或是重新啟動總電源,讓Logyun連雲重新開機以跳出MQTT 的功能循環。

9. 取得台灣各地環境感測站的資訊

因應老師們製作過相關專案的回饋與建議,Logyun連雲加入取得環境感測站資料的功能,分別是 OpenWeatherAirBoxTaiwanAQI

接著我們將使用上述的指令帶大家一個一個來操作,範例如下:

(1) OpenWeather

您需要至OpenWeather 註冊並取得API Keys,需要有這個Key 才能使用這項服務。

除了有Key 我們還需要知道想查詢的城市代號,您可以透過以下連結下載到這份可查詢城市代號的Json 檔案。

http://bulk.openweathermap.org/sample/city.list.json.gz

請將id 複製起來。

接著我們就能使用「OpenWeather(城市ID,API Keys)」來取得環境資料,可取得的資訊有:溫度、最低溫度、最高溫度、氣壓、濕度與風速。

因為回傳的不只有一筆資料,所以在程式中我們定義了一個副程式readData,只要輸入想接收幾筆資料,它就能將回傳的資料通通存在一個清單裡,如下圖程式所示:

「OpenWeather(城市ID,API Keys)」會回傳6 筆資料,所以我們readData() 的括弧內填入6。

範例程式

為了增加訊息可讀性,我們在print 裡面加入了一些文字讓它一起顯示出來。

(2) AirBox

透過零時空汙觀測網,老師可搜尋到自己學校的空氣盒子,我們可以透過ID 來取得該空氣盒子偵測到的資料。

搜尋到想擷取資料的空氣盒子ID後,藉由「AirBox(裝置ID)」指令,可取得的資訊有:經度、緯度、PM1.0、PM2.5、PM10、溫度與濕度。

因為回傳的不只有一筆資料,所以在程式中我們定義了一個副程式readData,只要輸入想接收幾筆資料,它就能將回傳的資料通通存在一個清單裡,如下圖程式所示:

「AirBox(裝置ID)」會回傳8 筆資料,所以我們readData() 的括弧內填入8。

範例程式

為了增加訊息可讀性,我們在print 裡面加入了一些文字讓它一起顯示出來。

(3) TaiwanAQI

政府資料開放平臺有提供細懸浮微粒資料(PM2.5)可供查詢。

點開網站內的JSON連結可以看到詳細的資料,並可搜尋自己想查詢的地區。

「TaiwanAQI(區域名稱)」這條指令內的名稱是填入中文字,可取得的資訊有:AQI指標、二氧化硫、一氧化碳、臭氧、風速、PM10、PM2.5、PM10平均值與PM2.5平均值。

因為回傳的不只有一筆資料,所以在程式中我們定義了一個副程式readData,只要輸入想接收幾筆資料,它就能將回傳的資料通通存在一個清單裡,如下圖程式所示:

「TaiwanAQI(區域名稱)」會回傳9 筆資料,所以我們readData() 的括弧內填入9。

範例程式

為了增加訊息可讀性,我們在print 裡面加入了一些文字讓它一起顯示出來。

10. 查詢台灣股票資訊

您可以藉由輸入股票編號讓Logyun連雲為您抓取相關資料,使用方法非常簡單,只要將想要查詢的股票編號填入「TaiwanStock(股票編號)」指令即可,可取得的資訊有:股票編號、開盤價、昨日收盤價、最高價、最低價、成交量、累積成交量、成交價、日期與時間。

因為回傳的不只有一筆資料,所以在程式中我們定義了一個副程式readData,只要輸入想接收幾筆資料,它就能將回傳的資料通通存在一個清單裡,如下圖程式所示:

「TaiwanStock(股票編號)」會回傳10 筆資料,所以我們readData() 的括弧內填入10。

範例程式

為了增加訊息可讀性,我們在print 裡面加入了一些文字讓它一起顯示出來。

六、Arduino UNO 使用方法(C++)

除了Arduino UNO,您也可以使用其他Arduino 系列的主控板或相容板,以下教學我們以最普遍使用的UNO 作為主要的示範。

Logyun連雲是透過UART 傳輸,所以我們需要來尋找UNO 的UART 在哪裡?透過Arduino 官方網站我們找到下圖,圖中有標示TX、RX 字樣的腳位只有一組,分別是D0( RX )、D1( TX )。

圖片擷取來源(https://store.arduino.cc/usa/arduino-uno-rev3)DOCUMENTATION頁籤

因為只有一組UART 所以我們得謹慎的尋找是否有用於其他用途,果然在FAQ的頁籤裡找到以下內容,簡述就是這組UART 也用於USB 傳輸(序列埠監控視窗、燒錄程式)。若是拿去連接Logyun連雲,這樣就無法透過序列埠監控視窗觀察到結果。

圖片擷取來源(https://store.arduino.cc/usa/arduino-uno-rev3)FAQ的頁籤

為了應對主板本身就只有一組UART 的狀況,Arduino 有提供一個程式庫「SoftwareSerial」,可以讓其他腳位模擬UART 傳輸,但因為是模擬出來的…所以多多少少還是有限制。

如下圖所示,模擬的極限速度剛好就是Logyun連雲的115200 bps。在連接一個裝置時,通常需要支援更高的速率,這樣傳輸才會穩定。

圖片擷取來源(https://www.arduino.cc/en/Reference/softwareSerial)

到此,若是想使用序列埠監控視窗觀察結果,用UNO 就得承擔傳輸資料不穩的情形(傳輸內容不正確、漏資料),或是選用有多組實體UART 的Arduino 來使用,例如:Arduino Mega 2560,詳細資訊可到Arduino 官方網站查詢。

實際測試UNO 後,發現確實有時候會掉資料或是資料有誤,但因為不是每次都是這樣,做做實驗還是可以的,以下我們就用模擬的UART 帶大家使用Logyun連雲。

1. 連接Logyun連雲

連接線的Grove 端照樣插在Logyun連雲,另一端杜邦母線連接在Arduino UNO 上,連接RX的黃色線接在UNO 的D11(程式內會設定此腳為TX),連接TX的白色線接在UNO 的D10(程式內會設定此腳為RX),GND的黑色線接在UNO 任一GND,連接VCC的紅色線接在UNO 的5V 或3.3V。

您可以連接在板子上標示的位子,或是如下圖所示,連接在ICSP 的位子,兩邊都是一樣的。

2. 程式編輯器

使用Arduino IDE 來作為這次撰寫程式的編輯器是最方便的,請依照自己的作業系統版本下載對應的Arduino IDE 安裝。

軟體安裝完成後,將Arduino UNO 透過USB 傳輸線連接到電腦,開啟軟體並於上方選單選擇「工具」,並於選單內選擇「開發板:Arduino UNO」,並選擇對應的序列埠,這樣準備工作就完成了。

3. 如何使用方才提到的SoftwareSerial 與Logyun連雲通訊

我們以下面這張圖來說明:

首先我們需要透過「#include <SoftwareSerial.h>」將SoftwareSerial 的功能導入,並設定我們這個模擬的UART 的名稱與對應的連接腳位,「SoftwareSerial logyun(11, 12); 」這行程式碼在SoftwareSerial空格後面的就是我們設定的名稱,您可以取任一名稱,在此統一取名為logyun,括弧內則是腳位編號,第一個欄位要填入您要設定為RX 的腳位,另一個則是TX 的腳位。

UART 的傳輸接線方式是兩個裝置的TX 與RX 對接,在接線上我們將Logyun連雲的RX (黃色線)連接到Arduino UNO 的D12,所以我們要將D12 設定為TX 這樣連線才正確,是不是有點小複雜,若想了解更多可以Google 一下UART。

接著我們要在setup() 裡面啟用我們的SoftwareSerial 與設定傳輸速度,使用這行程式碼「logyun.begin(115200);」,啟用並設定速度為115200。Logyun連雲是採用115200 的速度在傳輸的,若是選取不一樣的速率,則可能接收到一堆亂碼或是什麼也收不到。

另一個「Serial.begin(115200);」是我們實體的UART,用來將接收到的訊息傳至電腦上讓我們觀看用的。

一切準備就序,我們將透過兩行指令分別傳送與接收命令:

傳送命令:logyun.write();

接收命令:logyun.readStringUntil(‘\n’);

4. 指令發送與接收

我們可以透過下表的各項指令與Logyun連雲傳送訊息:

指令是以字串的形式發送,以連接Wi-Fi 這個功能為例「WifiConnect(Wi-Fi名稱,密碼)」,我們依照說明將Wi-Fi名稱與密碼填入,中間以逗號隔開,不能有多餘的空格。

指令最前面與最後面加上"這個符號,表示格式為字串,將其放在「logyun.write();」 的括弧內,就能透過我們設定的模擬UART 發送這條指令給Logyun連雲。如下圖所示:

指令發送後Logyun連雲會回傳訊息,我們可以透過「logyun.readStringUntil(‘\n’);」接收回傳回來的一行文字訊息,藉由「Serial.println();」指令我們能將接收到的訊息透過實體的UART 印在電腦上的序列埠監控視窗上。如下圖所示:

使用WifiConnect(Wi-Fi名稱,密碼)這條指令發送後,若連線成功,Logyun連雲會回傳ok,若失敗則回傳error。

如下圖所示,實際執行後,可在序列埠監控視窗上看到結果。

5. 連接Wi-Fi 程式範例

透過發送「WifiConnect(Wi-Fi名稱,密碼)」來連接Wi-Fi 並透過WifiCheck() 確認是否連線,

若連線成功返回ok,則透過「WifiLocalIP()」指令查詢IP 位子。

範例程式

小知識

使用傳送命令「logyun.write();」傳送後,需等待一段時間才能切換為接收指令,程式內統一延遲100 毫秒。

我們開頭有「String cmd = “”」這行程式碼,這是設定一個名稱為cmd 的變數,在程式運行過程中,用來儲存接收回來的資料,可以讓程式碼可讀性提高。

6. ThingSpeak 上傳與取得資料範例

首先要自行註冊帳號並創建一個Channel,創建完成後可以在名稱下方找到Channel ID,於API Keys 的頁籤能獲得Write API Keys 以及Read API Keys,請先在Channel Settings 頁籤設定要存放資料的Field,相關設定教學將不再此贅述。

透過「ThingSpeakWrite(Write API Keys,資料1,資料2,…,資料8)」,能將資料上傳到ThingSpeak,最多傳送8 筆資料,輸入的參數皆以逗號隔開,且不允許多餘的空格。

範例程式

成功上傳即可看到如下圖顯示:

讀取資料上有一個限制,它只允許抓取最新的一筆資料,經由「ThingSpeakRead(Channel ID,Read API,資料表格)」我們能取得回傳的資料。

範例程式

上述程式展示了抓取Field1、Field2、Field3 的資料,透過序列埠監控視窗中顯示出來。

7. Google Sheet 上傳與取得資料範例

請先開啟Google 雲端硬碟並新增一個試算表,點選共用並設定權限為編輯者。

請將連結網址中 d/ 後方到 /edit 前方的那串碼複製下來,此碼為該試算表的連結金鑰。

準備就緒後,我們使用「GoogleSheetWrite(試算表ID,資料1,資料2,…,資料10)」,這能將資料上傳到指定的 Google Sheet ,最多傳送10 筆資料,輸入的參數皆以逗號隔開,且不允許多餘的空格。

範例程式

成功上傳即可在Google 試算表內看到資料,開頭固定為上傳時間,後方則是上傳的資料,如下圖顯示:

我們可以使用「GoogleSheetRead(試算表ID,資料位址)」取得試算表內的資料,讀取資料的部分是輸入儲存格的位置來讀取內部的資料,例如我想取得C3 的資料,則在儲存格後方填入C3。

範例程式

成功連上網路後回傳ok,接著回傳C3 的數值,取得的值是2。

8. MQTT使用範例

與一般的使用方式一樣,您需要有提供服務的伺服器(推薦HiveMQ,您可以上網搜尋相關說明),我們可以透過 Logyun 連雲訂閱主題、發佈訊息與接收訊息。

不論是發佈訊息還是接收訊息,我們都需要讓 Logyun 連雲連上提供MQTT 服務的伺服器,並設定自訂的ID 與訂閱的Tpoic。

「MQTTConnect(broker網址,通訊埠,自訂ID,使用者名稱,使用者密碼,訂閱名稱)」這條指令能使我們連上服務器並訂閱主題,若服務端不需要使用者名稱與密碼,可以不填寫但需保留逗號,例如:MQTTConnect(broker.hivemq.com,1883,yisreal,,,yisreal/7697),且不得有多餘空格。

連線後,我們將經由「MQTTPublish(訂閱名稱,發佈訊息)」這條指令,發佈我們想發送的訊息,以下徒程式為例,我們將以3 秒的間隔不停發送0 與1 的訊息。

範例程式

我們可以使用「MQTTReceivedTopic()」與「MQTTReceivedMsg()」取得目前訂閱的Topic 名稱,與發佈的訊息。

範例程式

上述程式以每隔3秒的間隔,從服務器取得訂閱主題的名稱與訊息。

如下圖所示,頭兩個ok 是連上Wi-Fi 與MQTT伺服器成功的回傳值,接下來的兩個代表我們收到的主題名稱與訊息。

MQTT 使用小提醒

為了確保連線正常且穩定,連雲一旦進入MQTT 連線後,除了MQTT 的相關功能,其餘功能將無法使用,需要使用「MQTTBreak()」這個指令才能跳出以恢復其他功能。

所以若是有使用過MQTT 功能,但最後卻沒有中斷MQTT連線而燒錄其他功能的程式時,建議按下 Logyun 連雲上面的RESET(按鈕),讓 Logyun 連雲重新啟動,或是重新啟動總電源,讓 Logyun 連雲重新開機以跳出MQTT 的功能循環。

9. 取得台灣各地環境感測站的資訊

因著熟識老師們的建議, Logyun 連雲有加入取得環境感測站資料的功能,分別是 OpenWeatherAirBoxTaiwanAQI

接著我們將使用上述的指令帶大家一個一個來操作,範例如下:

(1) OpenWeather

您需要至OpenWeather 註冊並取得API Keys,需要有這個Key 才能使用這項服務。

除了有Key 我們還需要知道想查詢的城市代號,您可以透過以下連結下載到這份可查詢城市代號的Json 檔案。

http://bulk.openweathermap.org/sample/city.list.json.gz

請將id 複製起來。

接著我們就能使用「OpenWeather(城市ID,API Keys)」來取得環境資料,可取得的資訊有:溫度、最低溫度、最高溫度、氣壓、濕度與風速。

因為回傳的不只有一筆資料,所以在程式中我們定義了一個文字矩陣「String data[6] = {};」,「OpenWeather(城市ID,API Keys)」會回傳6 筆資料,所以我們設定這個文字矩陣的大小為6,並使用「for 迴圈」依序將6 筆資料並存放在文字矩陣data 內,在一次顯示在序列埠監控視窗中,如下圖程式所示:

範例程式

為了增加訊息可讀性,我們在「Serial.print();」程式碼裡面加入了一些文字讓它一起顯示出來。

(2) AirBox

透過零時空汙觀測網,老師可搜尋到自己學校的空氣盒子,我們可以透過ID 來取得該空氣盒子偵測到的資料。

搜尋到想擷取資料的空氣盒子ID後,藉由「AirBox(裝置ID)」指令,可取得的資訊有:經度、緯度、PM1.0、PM2.5、PM10、溫度與濕度。

因為回傳的不只有一筆資料,所以在程式中我們定義了一個文字矩陣「String data[8] = {};」,「AirBox(裝置ID)」會回傳8 筆資料,所以我們設定這個文字矩陣的大小為8,並使用「for 迴圈」依序將8 筆資料並存放在文字矩陣data 內,在一次顯示在序列埠監控視窗中,如下圖程式所示:

範例程式

為了增加訊息可讀性,我們在「Serial.print();」程式碼裡面加入了一些文字讓它一起顯示出來。

(3) TaiwanAQI

政府資料開放平臺有提供細懸浮微粒資料(PM2.5)可供查詢,網址如下:

點開網站內的JSON連結可以看到詳細的資料,並可搜尋自己想查詢的地區。

「TaiwanAQI(區域名稱)」這條指令內的名稱是填入中文字,可取得的資訊有:AQI指標、二氧化硫、一氧化碳、臭氧、風速、PM10、PM2.5、PM10平均值與PM2.5平均值。

因為回傳的不只有一筆資料,所以在程式中我們定義了一個文字矩陣「String data[9] = {};」,「TaiwanAQI(區域名稱)」會回傳9 筆資料,所以我們設定這個文字矩陣的大小為9,並使用「for 迴圈」依序將9 筆資料並存放在文字矩陣data 內,在一次顯示在序列埠監控視窗中,如下圖程式所示:

範例程式

為了增加訊息可讀性,我們在「Serial.print();」程式碼裡面加入了一些文字讓它一起顯示出來。

10. 查詢台灣股票資訊

您可以藉由輸入股票編號讓 Logyun 連雲為您抓取相關資料,使用方法非常簡單,只要將想要查詢的股票編號填入「TaiwanStock(股票編號)」指令即可,可取得的資訊有:股票編號、開盤價、昨日收盤價、最高價、最低價、成交量、累積成交量、成交價、日期與時間。

因為回傳的不只有一筆資料,所以在程式中我們定義了一個文字矩陣「String data[10] = {};」,「TaiwanStock(股票編號)」會回傳10 筆資料,所以我們設定這個文字矩陣的大小為10,並使用「for 迴圈」依序將10 筆資料並存放在文字矩陣data 內,在一次顯示在序列埠監控視窗中,如下圖程式所示:

範例程式

為了增加訊息可讀性,我們在「Serial.print();」程式碼裡面加入了一些文字讓它一起顯示出來。

七、進階使用者燒錄自己程式的方法

倘若內建的功能沒有找到您需要的,您想要自己撰寫功能符合自己的需求。 Logyun 連雲有一個程式燒寫按鈕「PROG」,可以讓使用者連接USB 轉TTL 模組,將自己編寫的程式燒錄到 Logyun 連雲中。

Logyun 連雲的核心是ESP8266,您可以依照您習慣的開發語言或環境來改寫 Logyun 連雲的程式,例如:C++ 或是MicroPython 這兩樣都是大家常用來編寫ESP8266 的語言。接下來的教學會以較多人熟識的C++ 搭配Arduino IDE 來教大家怎麼寫自己的 Logyun 連雲應用。

1. 連接設定

首先您需要準備一個USB 轉TTL 模組,選擇自己常用的即可。

連接線的Grove 端照樣插在 Logyun 連雲,另一端杜邦母線連接在USB 轉TTL 模組上,連接RX的黃色線接在模組的TX,連接TX的白色線接在模組的RX,GND的黑色線接在模組的GND,連接VCC的紅色線接在模組的5V 或3V3。

2. 環境設定

打開Arduino IDE 並點選上方選單的檔案→偏好設定,並於「額外的開發板管理員網址:」後方新增以下網址,並按下確定。

接著點選上方選單的工具>開發板>開發板管理員,就可以看到下圖視窗,在搜尋欄內輸入esp8266 並按下Enter 即可找到esp8266 的套件選項,請點選安裝,安裝完畢即可關閉視窗。

接著選取正確的開發板選項與設定:

 開發板:”NodeMCU 1.0(ESP-12E Module)”

 Upload Speed:”115200”

 CPU Frequency:”80 MHz”

 Flash Size:”4MB (FS:3MB OTA:~512KB)”

 序列埠:電腦對應的COM Port

3. 程式編寫

完成環境設定後,我們直接來看範例學習怎麼編寫,範例太長分成兩部分。

第一部分:

Logyun 連雲是透過UART 接收使用者發送過來的訊息,加以解析並依照訊息作出對應的動作,完成後再回傳訊息給使用者。

以連網功能「WifiConnect(Wi-Fi名稱,密碼)」為例,在範例程式中的「void loop()」裡面,我們透過「if (Serial.available() > 0) 」這個判斷式確認UART 連線是否成立,接著透過「cmd = Serial.readString();」讀取使用者傳送的訊息,並保存在字串變數「cmd」內。

因為訊息可能不止一種,像 Logyun 連雲內建的功能指令就有18 條,所以需要加以判斷,我們透過一個「for 迴圈」將cmd 內的指令取出括號前面的文字並存在字串變數「check_cmd」裡面,藉此check_cmd 比對文字來判斷想要呼叫的功能。

如下圖所示,若是check_cmd 等於WifiConnect,則呼叫對應的功能「Wifi_Connect();」,若比對失敗則馬上回傳錯誤。

第二部分:

若是對應的指令內有參數,就需要與剛剛一樣用「for 迴圈」,將cmd 括弧內的參數一個個擷取出來。「WifiConnect(Wi-Fi名稱,密碼)」裡面有兩個參數,我們採用對字串分割的方法將兩個參數取出。如下圖所示:

成功擷取使用者發送過來的Wi-Fi名稱與密碼後,程式後續就不用多說了,與往常將開發板連上網一樣,確認成功就傳送ok 訊息給使用者,失敗則傳送error,訊息可以依照喜好自訂。

4. 燒寫程式到 Logyun 連雲

首先將USB 轉TTL 模組插上電腦,接著於Arduino IDE上按下上傳按鈕。

看到如上圖訊息欄位出現「Connecting…..」後,接著需要按下 Logyun 連雲上面的按鈕啟動上傳程序,請先按住 Logyun 連雲上面的「PROG按鈕」不放,緊接著再按下 Logyun 連雲上面的「RESET按鈕」後,一起放開兩個按鈕。

若是成功啟動上傳程序,會看到訊息是窗內出現上傳的進度。

看到「上傳完畢。」後,請按下RESET 按鈕重新啟動 Logyun 連雲。

接著我們就能打開序列埠監控視窗,透過輸入指令來模擬使用者發送訊息,進而驗證看看指令編寫是否正常,傳輸速率記得選擇115200。

如下圖我們輸入一串沒有編寫的指令,依照程式的邏輯,因為沒有編寫這段指令,所以 Logyun 連雲返回的訊息是error。

接著我們輸入一串正確的指令,因為該指令有被編寫,經程式比對並取得參數後, Logyun 連雲進入連網的動作,連上網路後回傳ok 給使用者,如下圖所示:

八、恢復或更新原廠功能

若是想恢復原廠功能,或是日後我們修正了錯誤、新增功能,您都可以透過以下教學恢復您的 Logyun 連雲,並將 Logyun 連雲升級到最新的版本。

1. 下載原廠程式及ESP8266更新軟體

透過以下網址取得原廠程式與ESP8266更新軟體:

https://github.com/iCShopMgr/CIRCUS_Pi_Logyun/tree/main/Logyun-Prog

2. 連接設定

首先您需要準備一個USB 轉TTL 模組,選擇自己常用的即可。

連接線的Grove 端照樣插在 Logyun 連雲,另一端杜邦母線連接在 USB 轉TTL 模組 上,連接RX的黃色線接在模組的TX,連接TX的白色線接在模組的RX,GND的黑色線接在模組的GND,連接VCC的紅色線接在模組的5V 或3V3。

3. 更新步驟

點選ESP8266Flasher.exe,開啟這個燒錄程式。

點選Config頁籤,紅框內的選單選取或輸入0x00000,再點選齒輪符號開啟搜尋欄位。

選擇資料夾內欲燒錄的程式檔案logyun_v1.bin,並按下開啟。

點選Advanced頁籤,依照下圖設定各項目。
Baudrate:115200
Flash size:4MByte
Flash speed:80MHz
SPI Mode:DIO

點選Operation頁籤,選取對應的COM Port後,按下Flash按鈕準備進行燒錄。

接著需要按下 Logyun 連雲上面的按鈕啟動上傳程序,先按住 Logyun 連雲上面的「PROG按鈕」不放,緊接著再按下 Logyun 連雲上面的「RESET按鈕」後,一起放開兩個按鈕。

如果燒錄程序啟動成功,進度條會開始跑。

完成後左下角會出現打勾的符號。

這樣就完成恢復或更新 Logyun 連雲囉!

看完本篇關於 Logyun 連雲的介紹與詳細的使用教學後,是不是覺得 Logyun 連雲的的功能通用性與自由度很非常高呢?在未來開發相關的專案時,就讓 Logyun 連雲與您一起製作更多新穎又實用的內容吧!