2017年10月7日 星期六

*0*Cayenne*0* 初遇 Cayenne - 建立 ESP8266 與 Cayenne 的物聯網連線與上傳資料

網頁最後修改時間:2017/10/07

Cayenne – the world’s first drag-and drop IoT project builder. 第一個使用拖拉方式建立物聯網 (Iot, Internet of Thing) 專案的建構者。藉由 Cayenne,工程師、創客、網路營運商和系統整合業者能夠快速且容易的的開發與部署各行業間的物聯網解結方案。

在本篇網頁中,將會介紹 Cayenne 的專案建立與使用 ESP8266 與其連線的方法,並且在最後以 DHT11 為範例,說明如何上傳溫溼度值到 Cayenne 上,建立可供觀看操作的 Dashboard。

從安裝在 Arduino IDE 的 Cayenne 函式庫目錄中,可以發現到 Blynk 資料夾;而開始撰寫程式碼後會發現,其實 Cayenne 函式與 Blynk 相似度很高,可以說 Cayenne 是 Blynk 的二次開發。

前一段時間所撰寫關於 nRF24L01+ 一系列的文章,最終的目的是要建立一個多節點的 nRF24L01+ 溫溼度感測網路。建置的過程中,原本的設定是要使用 Blynk 來做,但是因為每個感測器至少有兩個數據點,加上整個網路包含主節點有 11 個,所以至少需要 4400 點的 Blynk Energy 才能在 Blynk APP 建構介面。因此,基於不花錢的考量,以及之前已經了解過 Blynk 的情況之下,經過一番搜尋與確認之後,選擇以 Blynk 二次開發並加強其功能的 Cayenne 作為最終無線溫溼度感測網路的 IoT 平台再適合不過。

要完成上面所說的事情,有三件事是要先做的:
  • 硬體接線完成
  • 申請 Cayenne 帳號
  • 安裝 Cayenne Arduino 函式庫
完成上面三件事之後,接著就必須登入 Cayenne 建立一個新的裝置。Cayenne 會提供每一個建立的裝置,可修改的 Device NameDevice Icon,以及不可修改但連線需要的 MQTT UsernameMQTT PasswordClient ID 的資料。

新建立之後的裝置,在未與實際裝置連線成功之前都是處於等待連線的狀態。也就是,只有真正連線成功之後才能在離線的情況之下建置 Dashboard,建置好的 Dashboard 就能同步顯示在手機以及 PC 上。

電路圖:
同樣的程式適用於 ESP8266 模組與開發板,因此正確燒錄之後就直接可以使用。

若使用 ESP-01S 線路,就依下面線路圖接線。

/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
ESP-01 與 ESP-01S 的不同之處可以看這篇網頁:
有一點要注意,部落格上的 ESP-01 的接線圖可以完全適用於 ESP-01S;但相反就不行!

ESP8266 使用 Arduino IDE 上傳程式方法與說明可參考下面這兩篇部落格網頁:

/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
ESP-01S 接線圖
ESP-01S,  實際接線圖
若使用的是 ESP8266 開發板,則接線類似下面接法。只要程式燒錄進去 ESP8266 開發板之後,連接 DHT11 <DATA> 接腳到 ESP8266 <GPIO2> 接腳,不管哪一種 ESP8266 開發板都可以動作。

這邊說的 <GPIO2> 就是下面電路圖中的 <D4>,而電路圖中所使用的開發板 (也可說現在大多數的 ESP8266 開發板),大多遵循 NodeMCU 的硬體接腳規劃,所以照著接就可以;否則就是使用 ESP8266 晶片的接腳對照下去接就對了!
ESP8266 開發板接線圖
ESP8266 開發板接線圖
*********************************************************************************
需要的料件可至下面購買:
*********************************************************************************

/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
如果不懂 ESP8266、ESP8266 模組與 ESP8266 開發板的界定,可看下面這篇網頁中的說明:
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*

電路準備好之後,接著來看看怎麼與 Cayenne 連線!

建立 ESP8266 與 Cayenne 的連線

/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* 申請 Cayenne 帳號:
進入 Cayenne 的帳號申請網址,輸入申請帳號所需要的資料在欄位中,勾選 I AGREE TO MYDEVICES TERMS 後按下 "NEXT" 按鈕
Cayenne 帳號申請頁面
 進入到下一個頁面後,就可以開始設定專案。首先,由於使用的連線裝置 ESP8266 沒有在頁面上,所以選擇 "All Devices"
選擇專案使用的裝置 -01
 點選 "Generic ESP8266"
選擇專案使用的裝置 -01
進入頁面之後,右邊出現的 MQTT USERNAMEMQTT PASSWORDCLIENT ID 這三個欄位值,就是連線所需要的資料,要將這三個資料填進程式中。
裝置連線資料
在上面的畫面中,在未實際使用裝置連線上 Cayenne 之前,不會進入到下一個 Dashboard 設定的畫面,所以接下來先來連線吧!

/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* 安裝 Cayenne 連線所需的函式庫:
使用 Arduino IDE 撰寫 ESP8266 與 Cayenne 連線的程式,需要先安裝幾個函式庫。

首先,先到 Cayenne 的 Arduino 設定網頁,照著裡面的說明,安裝所需要的兩個 Arduino 函式庫。
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
注意,動作只有使用 Library Manager 安裝 Cayenne 和 CayenneMQTT 這兩個函式庫的小節要看,其他的部分就不用了。
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*

接著,下載 Cayenne 的 ESP8266 函式庫,然後安裝。
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
注意,ESP8266 與 Cayenne 的連線方式是使用 MQTT。
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*

最後,若要使用與網頁相同的感測器,則下載這個函式庫進行安裝。

/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* 完成 Cayenne 專案的啟用:
專案檔啟用之前還不能設定任何東西。而啟用很容易,就是直接使用實際的裝置與其連線就能啟用;簡單說,就是一定要實際使用裝置連線到 Cayenne 之後,這個專案檔才能開始加入一些顯示數值與趨勢圖的 widget 顯示元件。

如果已經對於 Blynk 有點熟悉的話,那麼撰寫 Cayenne 傳送資料的程式碼那就不困難,大多類似!不熟悉的話,看一下這篇網頁前面提供的連結。

首次啟用的同時,由於專案並未設定任何的 widget 元件,因此若是沒有上傳任何數據的話,Dashboard 上現時候是不會有任何東西的;當然,因為是分解步驟的關係,所以下面的啟用程式碼沒有加上任何要上傳的數據。

開啟 Arduino IDE,載入 "File/Examples/Cayenne-MQTT-ESP8266/ESP8266",移除掉不需要的部分以及補上 line8 ~ line15 上所需要的資料,就可以上傳程式到 ESP8266
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// This example shows how to connect to Cayenne using an ESP8266 and send/receive sample data.
// Make sure you install the ESP8266 Board Package via the Arduino IDE Board Manager and select the correct ESP8266 board before compiling. 

#define CAYENNE_DEBUG
#define CAYENNE_PRINT Serial
#include <CayenneMQTTESP8266.h>

// WiFi network info.
char ssid[] = "ssid";
char wifiPassword[] = "wifiPassword";

// Cayenne authentication info. This should be obtained from the Cayenne Dashboard.
char username[] = "MQTT_USERNAME";
char password[] = "MQTT_PASSWORD";
char clientID[] = "CLIENT_ID";

void setup() {
 Serial.begin(9600);
 Cayenne.begin(username, password, clientID, ssid, wifiPassword);
}

void loop() {
 Cayenne.loop();
}

若設定正確,一但 ESP8266 與 Cayenne 連線之後,之前等待連線的畫面就會切換到下一個網頁;也就是 Dashboard,只不過現在沒有任何東西在裡面。
Dashboard 畫面 - online
連線完成之後,就可以關掉 ESP8266 電源,然後離線設置 Dashboard
Dashboard 畫面 - offline
/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* 添加 widget 元件:
添加 widget 元件進 Dashboard 有兩個方法:
  1. 手動填加
  2. 程式自動添加
手動添加就是啟用之後自行添加 widget 元件;而程式自動添加,則是不先在 Dashboard 設定,而是由 Cayenne 接收到 ESP8266 上傳的資料之後自行添加暫時的 widget 元件,讓使用者自己決定要不要添加;程式自動添加的方式,對於測試階段非常的方便,不用每次添加或是刪除。

下面分別以自動與手動添加 widget 元件做個展示。

首先,在一個空白的 Dashboard,上傳 DHT11 溫濕度資料到 Cayenne 上去,再把 Cayenne 暫時新增的 widgets 變更為實際的 Dashboard 元件
自動添加 widget 元件
添加完兩個顯示溫濕度值的 widget 元件之後,接著再手動新增一個 Line Chart 元件
手動添加 widget 元件 - Line Chart
大概自動與手動添加的方式就是這樣;更詳細的說明,請看 Virtual Pins
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
要從頭看 GIF 動畫,最簡單的方法就是在圖片上方點擊滑鼠右鍵開新視窗。
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*

/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* 安裝 Cayenne 手機程式:
如果想在手機看到或是手動建立與 PC 端相同的 Dashboard,可以由下面的連結安裝手機端的 APP 程式
     

手機上的 widget 元件會與 PC 上面的一樣,但排列不一定一樣;也可以直接在手機端新增或是移除 widget 元件,動作之後也會在 PC 端同步。
範例在手機的畫面
/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* 展示的程式碼:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
// This example shows how to connect to Cayenne using an ESP8266 and send/receive sample data.
// Make sure you install the ESP8266 Board Package via the Arduino IDE Board Manager and select the correct ESP8266 board before compiling. 

#define CAYENNE_DEBUG
#define CAYENNE_PRINT Serial
#include <CayenneMQTTESP8266.h>
// DHT11
#include <DHT.h>            // by Mark Ruys
const uint8_t DHTPIN = 2;   // ESP8266, GPIO2
DHT dht11;

// WiFi network info.
char ssid[] = "ssid";
char wifiPassword[] = "wifipassword";

// Cayenne authentication info. This should be obtained from the Cayenne Dashboard.
char username[] = "MQTT_USERNAME";
char password[] = "MQTT_PASSWORD";
char clientID[] = "CLIENT_ID";

unsigned long lastMillis = 0;

void setup() {
    Serial.begin(9600);
    Cayenne.begin(username, password, clientID, ssid, wifiPassword);

    // DHT11
    dht11.setup( DHTPIN );
}

void loop() {
    Cayenne.loop();

    //Publish data every 10 seconds (10000 milliseconds). Change this value to publish at a different interval.
    if (millis() - lastMillis > 10000) {
        lastMillis = millis();

        //** Write data to Cayenne here. ----------*-
        float T, RH;
        RH = dht11.getHumidity();
        T = dht11.getTemperature();
        // check if the data are valid ?
        if( strcmp( dht11.getStatusString(), "OK" ) == 0 ) {
            Serial.print( "Temp: ");
            Serial.println( T );
            Serial.print( " C, RH: ");
            Serial.print( RH );
            Serial.println( " %" );
            Cayenne.virtualWrite( 0, dht11.getTemperature() );
            Cayenne.virtualWrite( 1, dht11.getHumidity() );
        }
        //-----------------------------------------*-
    }
}

上面的程式碼,執行的結果都在前面展示過了。

整個程式碼很簡短,為了適用於其他 ESP8266 模組或開發板,line 9 選擇了 DHT11 通訊接腳為 <GPIO2>。取得無線網路連線的帳號與密碼,修改 line 13 line 14 的 ssid 和 wifipassword;最後將剛剛專案裡的 MQTT_USERNAMEMQTT_PASSWORD CLIENTID 取代程式碼中的 line 17 ~ line 19;其他的就不需要再做任何修改。

程式執行時會先與 Cayenne Cloud 連線。成功連線之後,每隔 10 秒鐘取得一次溫溼度值。溫度值傳送到 Cannnel 0,濕度值傳送到 Channel 1。第一次傳送溫溼度值到 Cayenne 上後,會暫時出現兩個顯示數值的 widget 元件,可以新增或是移除它再自行新增其他 widget 元件;這在上面小節已經有提及過。

如下,新增兩個 Line Chart 和兩個 Value 的 widget 元件。名稱 Channel 0 和 Temperature 的 widget 元件都連接到 Channel 0,名稱 Channel 1 和 Humidity 的 widget 元件都連接到 Channel 1,完成之後如下所示
Started Cayenne IoT with ESP8266 Dashboard 畫面
讓程式執行一段時間 ( 10 分鐘或是 30 分鐘以上),如果設定與步驟沒有問題的話,那麼 Line Chart 就會出現資料;要不然,可能要更久的等待時間,Line Chart 才會有資料。

運行一段時間之後,正常執行的 Dashboard 就如下面所示
Started Cayenne IoT with ESP8266 Dashboard 運作畫面

結論:
經過前面一番的講解,想必對於使用 ESP8266 與 Cayenne 連線已有了初步的了解。ESP8266 與 Cayenne 使用 MQTT 方式連接 (這部分由 Cayenne 的函式庫自己搞定),而使用的時候只需要處理好要上傳的資料以及這些資料要怎麼在 Dashboard 上呈現即可,構建上相當方便也很容易!

接下來,將利用這一篇所學的來建立nRF24L01+ 系列文章要建置的多節點溫濕度感測器網路,將各子節點發送過來的無線數據,全部匯集到主節點再經 (無線) 寬頻網路傳至 Cayenne 進行監控,如下所示為其 Dashboard,敬請期待 !
nRF24 Sensor Network - Cayenne Dashboard

沒有留言:

張貼留言