今天,我将引导您使用廉价的 现成的 ESP8266 板 创建一个简单的Web 物体。
Web 物体的强大功能来自它们连接网页数字世界与物体物理世界的能力。我们最近发布了 Things 框架,这是一个旨在简化创建新 Web 物体过程的软件集合。此示例中相关的库是 webthing-esp8266 库,它使 Arduino 编程的 ESP8266 板连接到 Web of Things 变得轻而易举。我们希望这能够降低创建使用我们的网关和 Web Thing API 的引人入胜的体验的门槛。
我们旅程的第一步是安装 Arduino IDE 及其 ESP8266 板支持。访问 Adafruit 的 ESP8266 文档,其中包含有关设置的非常详细的演练。在设置结束时,您应该安装了 Arduino IDE,它提供了 ESP8266WiFi、ESP8266mDNS 和 ESP8266WebServer 库。
接下来,让我们安装 ArduinoJson 和 webthing-esp8266 库。要安装 ArduinoJson,请转到草图 > 包含库 > 管理库,搜索 ArduinoJson,然后单击安装按钮。
下载 webthing-esp8266 的过程稍微复杂一些。从 GitHub 发布页面 下载库的 zip 文件,然后使用 Arduino IDE 的草图 > 包含库 > 添加 ZIP 库选项添加它。
如果您更喜欢使用 PlatformIO 而不是 Arduino IDE,则可以从 PlatformIO 注册表 安装 webthing-esp8266。
现在我们已经完成了所有先决条件,让我们开始有趣的部分。webthing-esp8266 库的工作原理是组装一组组件,这些组件协同工作以公开 Web Thing API。主要协调器是 WebThingAdapter,它跟踪 ThingDevice,而 ThingDevice 又包含各种 ThingProperties。
WebThingAdapter 知道如何与我们的网关进行 Web of Things API 通信,并处理网关发现和与 ThingDevice 交互所需的所有转换。ThingDevice 代表我们要放在网络上的物理对象。在一个简单的案例中,这可能是一些 LED。一旦我们变得更加复杂,这可能是一架四旋翼飞行器、一个 OLED 显示器,甚至是一个特斯拉线圈。在我们深入研究之前,让我们逐步了解一个基本示例,它公开 ESP8266 的内置 LED。
首先,在 Arduino IDE 中创建一个新的草图。现在我们有了编写代码的地方,我们需要包含此草图使用的所有库。这些库是 ESP8266WiFi 和 WiFiClient(用于连接到我们的 WiFi 网络)、Thing(用于创建兼容 Web of Things 的对象)以及 WebThingAdapter(用于将这些对象转换为 Web 服务器)。
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <Thing.h>
#include <WebThingAdapter.h>
下一步是配置我们使用的常量。这些常量是 ssid(用于我们的 WiFi 网络名称)、password(用于其密码)和 lampPin(用于我们要控制的 LED 的引脚)。
const char* ssid = "......";
const char* password = "..........";
const int lampPin = LED_BUILTIN;
现在,我们要指定我们要创建的 Web 物体的类型。首先,我们创建适配器,它设置板的名称。如果您希望在同一网络上拥有多个 ESP8266 板,则需要确保它们的名称是唯一的。
WebThingAdapter adapter("esp8266");
然后,我们需要指定要在网关上拥有的 ThingDevice。在本例中,我们要将 LED 作为 dimmableLight 公开,称为“我的灯”,这将允许我们从网关打开和控制其亮度。
ThingDevice lamp("lamp", "My Lamp", "dimmableLight");
接下来,我们定义了我们希望 ThingDevice 拥有的属性。一个 dimmableLight 需要两个属性:“on”和“level”。
ThingProperty lampOn("on", "Whether the lamp is turned on", BOOLEAN);
ThingProperty lampLevel("level", "The level of light from 0-100", NUMBER);
在设置函数的开头,我们初始化 LED,连接到我们的 WiFi 网络,并打开串行端口以进行调试。
void setup() {
pinMode(lampPin, OUTPUT);
digitalWrite(lampPin, HIGH);
analogWriteRange(255);
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.println("");
// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
完成这些样板代码后,我们可以将 ThingProperties、ThingDevice 和 WebThingAdapter 绑定在一起。灯需要知道它拥有 lampOn 和 lampLevel 属性,而适配器需要知道灯的存在。
lamp.addProperty(&lampOn);
lamp.addProperty(&lampLevel);
adapter.addDevice(&lamp);
adapter.begin();
Serial.println("HTTP server started");
}
在我们的持续运行的 loop 函数中,我们首先更新适配器,以便它可以处理与网关或任何其他 Web of Things 客户端的通信。接下来,我们根据属性值更新灯光。请注意,我们将 0-100 的亮度级别从 255-0 映射,因为 ESP8266 内置 LED 的亮度是反转的。
void loop() {
adapter.update();
if (lampOn.getValue().boolean) {
int level = map(lampLevel.getValue().number, 0, 100, 255, 0);
analogWrite(lampPin, level);
} else {
analogWrite(lampPin, 255);
}
}
我们的草图完成了!如果您将其上传到您的 ESP8266,您应该能够在网关的“添加物体”列表中看到“我的灯”物体。然后,您可以单击打开和关闭 LED,或单击“splat”图标来控制其亮度级别。
您还可以通过向http://esp8266.local/发出 HTTP 请求来直接控制您的 Web 物体。例如,您可以使用此 curl 命令从终端打开 LED。
curl -X PUT http://esp8266.local/things/lamp/properties/on -H 'Content-Type: application/json' -d '{"on":true}'
这仅仅是您可以使用 Web Thing API 做到的起步。如果您更喜欢在更高级的语言中工作,请查看我们的 其他 Web 物体示例。如果您认为开/关和级别本身不够酷,我们还支持 字符串属性!
关于 James Hobin
致力于使物联网保持自由和开放的 25 级计算机向导。







3 则评论