Wio Terminal和Wappsto IoT入门指南
概述
Wio Terminal 是一款基于SAMD51的微控制器,配备 Realtek RTL8720DN 无线连接功能,与Arduino和MicroPython兼容。目前,仅支持Arduino的无线连接功能。它运行在 120MHz 最高可提升至200MHz),具有 4MB 外部闪存和 192KB RAM。它支持蓝牙和Wi-Fi,为物联网项目提供支持。Wio Terminal本身配备了 2.4英寸LCD屏幕, 内置IMU(LIS3DHTR), 麦克风, 蜂鸣器, microSD卡插槽, 光传感器和红外发射器(IR 940nm) 此外,它还具有两个多功能的Grove端口,用于 Grove Ecosystem 。
Wappsto是一个强大而智能的应用程序,可以轻松设置自动从各种来源获取数据。它具有集成的标准仪表板,用于监视和分析数据。
Wappsto是一个强大而智能的应用程序,可以轻松设置自动从各种来源获取数据。它具有集成的标准仪表板,用于监视和分析数据。
Wappsto by Seluxit是一个功能强大的物联网平台,具有易于定制的仪表板,可以轻松可视化实时或历史数据,以及许多其他功能,包括云自动化。
Wappsto的iOS和Android应用程序还可以让您即时查看和控制设备。
Wappsto 功能
在连接Wappsto时,您可以执行以下功能。有关更多信息,请在 此处了解如何更好地使用您的数据。
仪表板功能
仪表板类型
- 空白仪表板 - 静态干净的画布,可混合和匹配小部件
- 车队管理 - 动态干净的画布,可混合和匹配小部件 - 可轻松在设备之间切换,以获取可能的异常值概览。
- 地理位置仪表板 - 设备的地图概览,可以根据设备警报进行过滤。
- 使用筛选列表过滤器的地理位置定位:
空白和车队管理仪表盘小部件
过滤列表 - 在地理位置仪表板中配置设备值限制,触发警报和视觉提示。
历史位置小部件 - 基于配置的时间范围内设备位置在地图上绘制(每分钟最多1个标记,标记之间最小距离为50米)。
图表小部件 - 选择和配置多个数据源、时间范围、图表样式和聚合方法。也可以切换为显示实时数据。
实时数据示例:
值列表小部件 - 在框中显示实时数据和控制/期望状态值。
指南针小部件 - 显示单个设备的角度和实时数据。
液态图表小部件 - 显示单个设备的相对水平和实时数据。
仪表盘小部件 - 在仪表盘中显示单个值的实时数据,可配置的颜色方案和限制。
当前位置小部件 - 在其他小部件旁边显示一个或多个设备的当前位置。
日志列表小部件 - 显示一个或多个设备或值的日志,与其他小部件一起显示。
云自动化和Web应用程序
- Twitter 集成
- Hue 集成
- Shelly 集成
- 天气预报集成(yr.no)
- Blocks - 云自动化
- Blockly NoCode 编程
- Blockly javascript 编程
- 设置在Wappsto上连接的所有设备和服务之间的自动化和交互
- Twitter 和 Wappsto:交叉自动化示例: https://bit.wappsto.com/project/wappsto-blocks/
Wappsto的常被忽视的功能
- 分布式云服务,具有多个备份
- 设备共享
- 端到端加密(传输加密)
- 设备安全性(唯一设备和网络密钥)
- 数据转发
- 数据提取(CSV)
- 跨平台智能登录(电子邮件、谷歌、Facebook、Apple登录)
- 多平台:网站+智能手机应用程序
入门指南
所需硬件
- Wio Terminal x 1
- 计算机 x 1
- USB Type-C 数据线 x 1
所需软件
请检查此 连接。
更新 Wio Terminal WiFi 固件
请检查此 连接。
Wappsto 先决条件
Wappsto 帐户
假设您已在 Wappsto上创建了帐户,如果没有,请先创建一个。
在电脑上安装Arduino IDE
如果您没有安装,请参阅 https://www.arduino.cc/en/Guide
安装 ArduinoJson 库
从库管理器中安装 ArduinoJson 库-详细信息请参阅 https://arduinojson.org/v6/doc/installation/ 。
安装此 Wappsto 库
要在 Arduino IDE 中安装此库,请将此项目下载为 zip 文件,点击 "Code",然后选择 "Download ZIP"。 然后选择 "Sketch"->"Include Library"->"Add .Zip Library...",详细信息请参阅 https://docs.arduino.cc/software/ide-v1/tutorials/installing-libraries 。
生成设备的证书和 ID
为了使您的物理设备向 Wappsto 标识自己,它需要一个网络 ID、服务器 CA 证书和客户端证书/密钥-所有这些都需要在 Wappsto.com 上生成,并放置在(如果与示例匹配)名为 wappsto_config.h 的文件中。
wappsto_config.h
为了帮助生成此文件,您可以使用此存储库中的 Python Script 位于 generate_config_header 文件夹中。 首次运行时,您可能需要安装所需的库。
cd <path to downloaded arduino_wappstoiot>
cd generate_config_header
pip install -r requirements.txt
要生成一个头文件:
- 进入
generate_config_header
文件夹:
cd generate_config_header
- 使用以下命令:
python main.py --type arduino
然后您将被要求使用Wappsto上您的用户的电子邮件和密码进行登录。
将新生成的文件
wappsto_config.h
复制到您的Arduino示例文件夹中。请注意,如果生成正确,它应该有一个有效的UUID (类似但不同于"d7fafe76-b020-4594-8f2a-aae11c6b6589"
的字符串) ,定义为const char* network_uuid =
行。
请注意,如果您同时安装了Python 2和Python 3,您可能需要使用以下命令:
pip3 install -r requirements.txt
python3 main.py --type arduino
如果您遇到以下错误:
ImportError: cannot import name 'soft_unicode' from 'markupsafe'
这是由于另一个库的依赖关系发生了变化,可以使用此命令修复。
pip install -U MarkupSafe==0.20
认领和所有权-不允许访问值
如果您创建的设备出现“不允许访问”值的错误,这是因为您要么还没有认领它,要么所有权已被重置。
由于您将成为制造商,您仍然可以在网络列表中看到设备,您可以看到它在线,但是您将无法查看值或控制设备。
要认领设备,请转到 https://wappsto.com/devices 上的"IoT Devices"选项卡,点击右上角的"+ Add an IoT device"按钮,然后在框中输入网络UUID。
如果您点击网络的删除按钮,将会取消设备的所有权,以便其他用户可以认领它。一旦设备被认领,其他用户将无法再次认领它。
Wappsto库
所需结构
网络ID由 Wappsto 生成,并与证书关联。
├── "Network Name"
│ └── "Device 1 name"
│ | └── "Value 1 name"
│ | └── "Value 2 name"
| | ...
│ └── "Device 2 name"
│ └── "Value 1 name"
│ └── "Value 2 name"
...
请注意 "name" 具有额外的功能和规则。
- 网络中不能有具有相同名称的设备。
- 单个设备不能具有相同名称的值。(如上面的示例,可以在不同设备下使用相同的名称。)
在创建之前,库将向 Wappsto 查询是否存在具有该名称的设备/值,因此它将链接到正确的值。如果没有名称匹配的项,将创建一个新的。如果父级具有具有相同名称的多个子级,库将选择第一个可用的。
如果更改名称,将创建一个新的,但旧的不会被删除。您需要自己处理这个问题,例如使用 https://wappsto.com/devices
初始化 Wappsto
在创建 Wappsto 对象时,需要一个 WiFiClientSecure 的引用,示例代码如下:
WiFiClientSecure client;
Wappsto wappsto(&client);
设置配置并连接
#include "wappsto_config.h"
...
wappsto.config(network_uuid, ca, client_crt, client_key);
if(wappsto.connect()) {
// Connected
} else {
// Failed to connect
}
可选的配置参数、日志和 ping
除了必需的命令之外,您还可以设置 ping 间隔和日志级别:
wappsto.config(network_uuid, ca, client_crt, client_key, ping interval in minutes, log level);
- ping 间隔将从设备发送一个短数据包到 Wappsto,以保持连接活动。如果您的设备很少发送数据,添加此功能可能是一个好主意,以避免连接超时。
- ping 间隔将从设备发送一个短数据包到 Wappsto,以保持连接活动。如果您的设备很少发送数据,添加此功能可能是一个好主意,以避免连接超时。
VERBOSE
INFO
WARNING
ERROR
NO_LOGS <- Default
创建您的网络
myNetwork = wappsto.createNetwork("Network Name");
创建设备
DeviceDescription_t myDeviceDescription = {
.name = "Device name",
.product = "Product name",
.manufacturer = "Company name",
.description = "Description of the product",
.version = "1.0",
.serial = "00001",
.protocol = "Json-RPC",
.communication = "WiFi",
};
myDevice = myNetwork->createDevice("Device Name", &myDeviceDescription);
值
值可能是您最感兴趣的内容之一,可以是以下之一:
- 数字 - 整数或小数,这些将被记录并显示为图表。
- 字符串 - 人类可读的字符串(UTF-8)
- Blob - 数据,例如 base64 编码的图像、十六进制值等。
- Xml - 完整的 XML 文档
读写数据
每个值可以有一个或两个数据点:
- 每个值可以有一个或两个数据点: [读取]
- 控制:从服务器发送到设备以控制设备的数据 [写入]
您的值可能是其中之一或两者都是。
值参数
为了解释这些参数,我们将使用一个放置在客厅中的温度值作为示例。
- name:值的名称,在这里是 "Living room"
- type:对于 UI 来找到正确类型的值,这里是 "temperature"
- The PERMISSION_e 参数告诉库是否应为此值创建报告和/或控制。
- 读取 -> 报告状态
- 写入 -> 控制状态
- 读写 -> 报告和控制状态
- min: (仅适用于数字)最低值(由 UI 使用)
- max: 对于数字,是最大数字;对于字符串/ Blob,是最大长度
- step: (仅适用于数字)数字的步长,例如整数为 1,小数为 0.1
- unit: (仅适用于数字)该数字是否有单位,在温度示例中是 °C
第一次创建值时,数字值将为 NA,字符串/ Blob 将为空,报告和控制均如此。
如果值已经存在,则值的数据不会更改。如果您希望在设备重新启动时更新值,则必须调用报告/控制。
创建数字值
ValueNumber_t myNumberValueParameters = { .name = "Living room",
.type = "temperature", // value type
.permission = READ_WRITE,
.min = -20,
.max = 100,
.step = 0.1,
.unit = "°C",
.si_conversion = ""};
myNumberValue = myDevice->createValueNumber(&myNumberValueParameters);
创建字符串值
ValueString_t myStringValueParameters = { .name = "Value String Name",
.type = "value type",
.permission = READ_WRITE,
.max = 200,
.encoding = ""};
myStringValue = myDevice->createValueString("Value String Name", "value type", READ_WRITE, &myStringValueParameters);
创建 Blob 值
ValueBlob_t myBlobValueParameters = { .name = "Value Blob Name",
.type = "value type",
.permission = READ_WRITE,
.max = 200,
.encoding = ""};
myBlobValue = myDevice->createValueBlob(&myBlobValueParameters);
创建 XML 值
ValueXml_t myXmlValueParameters = { .name = "Value Xml Name",
.type = "value type",
.permission = READ_WRITE,
.xsd = "test",
.namespace = "test"};
myXmlValue = myDevice->createValueXml(&myXmlValueParameters);
发送值报告
int myInt = 123;
double myDouble = 42.7;
myNumberValue.report("987"); // You can send numbers as a string you format
myNumberValue.report(myInt); // Report the number as an int
myNumberValue.report(myDouble); // Report the number as a double
myStringValue.report("Example string");
myBlobValue.report("A5FF2C");
设置控制值
通常,控制值只会从 wappsto.com 更新,但在启动或其他情况下,您可能需要设置当前值。 设置方法与报告类似:
int myInt = 123;
double myDouble = 42.7;
myNumberValue.control("987"); // You can send numbers as a string you format
myNumberValue.control(myInt); // Set control as an int
myNumberValue.control(myDouble); // Set control as a double
myStringValue.control("Example string");
myBlobValue.control("A5FF2C");
在您的循环函数中添加 Wappsto
为了使 Wappsto 能够接收数据(控制、刷新和 ping),它必须包含在您的 Arduino 循环函数中-如果没有,您将永远不会收到任何带有数据的回调,而且连接可能会超时。
同时建议不要在循环中阻塞较长时间。
wappsto.dataAvailable();
接收值控制请求
您可以选择将控制数据转换为双精度浮点数,或者直接使用字符串。
// Receive control with a number (double)
void controlNumberCallback(Value *value, double data, String timestamp)
{
// handle control request
}
// Receive control with a string
void controlStringCallback(Value *value, String data, String timestamp)
{
// handle control request
}
...
myNumberValue->onControl(&controlNumberCallback);
myStringValue->onControl(&controlStringCallback);
接收值刷新请求(仅报告值)
void refreshNumberCallback(Value *value)
{
// handle refresh request
}
...
myNumberValue->onRefresh(&refreshNumberCallback);
获取值的最新数据和时间戳
您可以通过使用以下函数访问最后接收/发送的数据和时间戳。 例如,在重新启动后,将检索在 Wappsto.com 中设置的最后一个控制状态,以便您的程序可以从该状态开始。
注 从空值中检索 numberData 将返回 0;
String ctrlData = myNumberValue.getControlData();
double ctrlDataNumber = myNumberValue.getControlNumberData();
String ctrlTime = myNumberValue.getControlTimestamp();
String reportData = myNumberValue.getReportData();
double reportDataNumber = myNumberValue.getReportNumberData();
String reportTime = myNumberValue.getReportTimestamp();
更多示例,请参阅示例文件夹中的代码,或在 Arduino IDE 中选择 'File -> Examples -> Wappsto'。
温度检测演示
在这里,我们将使用提供的温度示例,并在 Wappsto 上显示如下:
- 步骤 1. 上传代码后,您可以在 Wappsto 网站的 "IoT Devices" 中看到连接成功的显示。
- 步骤 2. 在左侧单击 "Dashboards" 列,并选择 "Add widget"。
- 步骤 3. 这些提供的模块可以以多种方式显示数据,这里我们选择 "Chart"。
- 步骤 4. 选择之前上传的 "Temperature Example",然后点击 "Next"。
- 步骤 5. 配置显示的数据。这里我们将数据设置为 "Line"。
- 步骤 6. 设置完成后,我们就可以在仪表板上看到输出的数据了。