aREST 框架可以为一些常见的嵌入式开发板提供 RESTful 接口,支持通过串口、Wi-Fi、以太网、蓝牙等硬件发送命令至开发板,激发特定的操作,并将数据以 JSON 的格式返回给控制端用户。
在使用前首先要安装 aREST(by Macro Schwartz)这个库。
使用 aREST 框架既可以在本地网络环境中控制联网设备,也可以借助云端平台进行远程操作或监控。
结合之前的DHT11温湿度程序,可以将连接 Wi-Fi 后的 NodeMcu 开发板作为一个实现了 REST API 的本地服务器,通过访问其 IP 地址来获取相应的温湿度数据(JSON 格式)。
代码如下:
// Import required libraries
#include "ESP8266WiFi.h"
#include <aREST.h>
#include "DHT.h"
// DHT11 sensor pins
#define DHTPIN 5
#define DHTTYPE DHT11
// Create aREST instance
aREST rest = aREST();
// Initialize DHT sensor
DHT dht(DHTPIN, DHTTYPE, 15);
// WiFi parameters
const char* ssid = "wifi-name";
const char* password = "wifi-pass";
// The port to listen for incoming TCP connections
#define LISTEN_PORT 80
// Create an instance of the server
WiFiServer server(LISTEN_PORT);
// Variables to be exposed to the API
float temperature;
float humidity;
void setup(void)
{
// Start Serial
Serial.begin(115200);
// Init DHT
dht.begin();
// Init variables and expose them to REST API
rest.variable("temperature",&temperature);
rest.variable("humidity",&humidity);
// Give name and ID to device
rest.set_id("1");
rest.set_name("esp8266");
// Connect to WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
// Start the server
server.begin();
Serial.println("Server started");
// Print the IP address
Serial.println(WiFi.localIP());
}
void loop() {
// Reading temperature and humidity
humidity = dht.readHumidity();
temperature = dht.readTemperature();
// Handle REST calls
WiFiClient client = server.available();
if (!client) {
return;
}
while(!client.available()){
delay(1);
}
rest.handle(client);
}
编译运行,在开发板连接上wifi后就可以使用浏览器或curl访问{your-board-ip}/temperature及 {your-board-ip}/humidity来获取json格式的温湿度数据。