將你的物聯網設備連接到雲端 - Wio Terminal
在本課程的這一部分,你將把你的 Wio Terminal 連接到你的物聯網中心,以發送遙測數據並接收命令。
將你的設備連接到物聯網中心
下一步是將你的設備連接到物聯網中心。
任務 - 連接到物聯網中心
-
在 VS Code 中打開
soil-moisture-sensor
項目 -
打開
platformio.ini
文件。移除knolleary/PubSubClient
庫依賴。這個庫是用來連接到公共 MQTT 代理的,連接到物聯網中心不需要它。 -
添加以下庫依賴:
seeed-studio/Seeed Arduino RTC @ 2.0.0
arduino-libraries/AzureIoTHub @ 1.6.0
azure/AzureIoTUtility @ 1.6.1
azure/AzureIoTProtocol_MQTT @ 1.6.0
azure/AzureIoTProtocol_HTTP @ 1.6.0
azure/AzureIoTSocket_WiFi @ 1.0.2Seeed Arduino RTC
庫 提供了與 Wio Terminal 中的實時時鐘交互的代碼,用於跟踪時間。其餘的庫允許你的物聯網設備連接到物聯網中心。 -
在
platformio.ini
文件的底部添加以下內容:build_flags =
-DDONT_USE_UPLOADTOBLOB這設置了一個編譯器標誌,在編譯 Arduino 物聯網中心代碼時需要。
-
打開
config.h
頭文件。移除所有的 MQTT 設置,並添加以下設備連接字符串的常量:// 物聯網中心設置
const char *CONNECTION_STRING = "<connection string>";將
<connection string>
替換為你之前複製的設備連接字符串。 -
連接到物聯網中心使用基於時間的令牌。這意味著物聯網設備需要知道當前時間。與 Windows、macOS 或 Linux 等操作系統不同,微控制器不會自動通過互聯網同步當前時間。這意味著你需要添加代碼從 NTP 服務器獲取當前時間。一旦獲取了時間,它可以存儲在 Wio Terminal 的實時時鐘中,允許在以後請求正確的時間,假設設備沒有斷電。添加一個名為
ntp.h
的新文件,代碼如下:#pragma once
#include "DateTime.h"
#include <time.h>
#include "samd/NTPClientAz.h"
#include <sys/time.h>
static void initTime()
{
WiFiUDP _udp;
time_t epochTime = (time_t)-1;
NTPClientAz ntpClient;
ntpClient.begin();
while (true)
{
epochTime = ntpClient.getEpochTime("0.pool.ntp.org");
if (epochTime == (time_t)-1)
{
Serial.println("Fetching NTP epoch time failed! Waiting 2 seconds to retry.");
delay(2000);
}
else
{
Serial.print("Fetched NTP epoch time is: ");
char buff[32];
sprintf(buff, "%.f", difftime(epochTime, (time_t)0));
Serial.println(buff);
break;
}
}
ntpClient.end();
struct timeval tv;
tv.tv_sec = epochTime;
tv.tv_usec = 0;
settimeofday(&tv, NULL);
}