介紹
HTTP(超文本傳輸協議)是一種標準的應用程序協議,用作客戶端和服務器之間的請求-響應協議。
HTTP 客戶端幫助發送 HTTP 請求和接收來自 HTTP 服務器的 HTTP 響應。
它廣泛用於基於物聯網的嵌入式應用,如家庭自動化、車輛發動機參數遠程監控以進行分析等。
NodeMCU 是一個開源的物聯網平台。它是在 Espressif Systems 的 ESP8266 Wi-Fi SoC 上運行的固件。它具有板載 wi-fi,通過它可以輕鬆構建 IoT 應用程序。
例子
讓我們為 NodeMCU 編寫一個基於 C/C++ 的 Arduino 草圖作為 HTTP 客戶端,並將數據從 Thingspeak 服務器獲取/發布。
在這裡,我們將 Thingspeak 服務器用於 HTTP 客戶端演示目的。
Thingspeak是一個開放的物聯網平台,任何人都可以在其中可視化和分析來自其傳感器設備的實時數據。此外,我們可以使用 Thingspeak 中的 Matlab 代碼對遠程設備發布的數據進行數據分析。要了解有關 Thingspeak 的更多信息,請參閱鏈接
https://thingspeak.com/pages/learn_more
只需註冊並創建一個頻道。我們在 Thingspeak 上有通道和寫入鍵,用於數據發送和接收。
- 頻道 ID = 309236
- 寫入密鑰 = 1EYZIS5OCRJSKZHG
注意: 不要忘記在 Thingspeak 頻道的頻道設置選項中勾選 Make Public 字段。
用於 HTTP 客戶端獲取的 Arduino 草圖
#include <ESP8266WiFi.h>
/*Put your SSID & Password*/
const char* ssid = "ssid"; // Enter SSID here
const char* password = "password"; //Enter Password here
const char* server = "api.thingspeak.com";
/* Set GET link with channel ID */
const char* _getLink = "http://api.thingspeak.com/channels/309236/feeds/last.txt";
WiFiClient client;
void setup() {
Serial.begin(9600);
delay(1000);
Serial.println("Connecting to ");
Serial.println(ssid);
//connect to your local wi-fi network
WiFi.begin(ssid, password);
//check wi-fi is connected to wi-fi network
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
}
void loop()
{
if (client.connect(server,80)) // "184.106.153.149" or api.thingspeak.com
{
String getStr = _getLink;
client.print("GET "+getStr+"\n");
client.print("HTTP/1.1\n");
client.print("Host: api.thingspeak.com\n");
client.print("Connection: close\n\n\n");
while(client.available()){
char c = client.read();
Serial.print(c);
}
Serial.println("");
}
client.stop();
Serial.println("Waiting…");
delay(10000);
}
HTTP Get 的輸出窗口
下面是 Arduino 串行監視器窗口,它顯示了從 Thingspeak 服務器接收到的最後更新數據。
用於 HTTP 客戶端帖子的 Arduino 草圖
#include <ESP8266WiFi.h>
String apiKey = "1EYZIS5OCRJSKZHG"; // replace with your channel’s thingspeak API key,
/*Put your SSID & Password*/
const char* ssid = "ssid"; // Enter SSID here
const char* password = "password"; // Enter Password here
const char* server = "api.thingspeak.com";
int Sample;
WiFiClient client;
void setup() {
Serial.begin(9600);
delay(1000);
Serial.println("Connecting to ");
Serial.println(ssid);
//connect to your local wi-fi network
WiFi.begin(ssid, password);
//check wi-fi is connected to wi-fi network
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
}
void loop()
{
if (client.connect(server,80)) // "184.106.153.149" or api.thingspeak.com
{
String postStr = apiKey;
postStr +="&field1=";
postStr += String(Sample++);
postStr += "\r\n\r\n";
client.print("POST /update HTTP/1.1\n");
client.print("Host: api.thingspeak.com\n");
client.print("Connection: close\n");
client.print("X-THINGSPEAKAPIKEY: "+apiKey+"\n");
client.print("Content-Type: application/x-www-form-urlencoded\n");
client.print("Content-Length: ");
client.print(postStr.length());
client.print("\n\n");
client.print(postStr);
}
client.stop();
Serial.println("Waiting…"); // thingspeak needs minimum 15 sec delay between updates
delay(20000);
}
HTTP Post 的輸出窗口
下面是 Thingspeak 服務器的計數輸出窗口。
資料來源:https://www.electronicwings.com/nodemcu/http-client-on-nodemcu-with-arduino-ide
沒有留言:
張貼留言