65.9K
CodeProject 正在变化。 阅读更多。
Home

在 UP Squared 板上使用 Thinger.io 服务器

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2018年10月24日

CPOL
viewsIcon

8645

本文将演示如何在运行 Ubuntu 操作系统的 UP Squared 板上使用 Thinger.io。

引言

Thinger.io* 是一个面向物联网 (IoT) 的在线云平台,可让许多设备与 Thinger.io 云集成。它提供实时数据处理和显示。有关详细信息,请访问 Thinger.io 网站。本文将演示如何在运行 Ubuntu* 操作系统的 UP Squared* 板上使用 Thinger.io。它将读取实时光线传感器值并在时间序列图表中显示。如果光线传感器指示天色渐暗,它将发送电子邮件通知。UP Squared 板是一款低功耗、高性能的平台,非常适合 IoT 应用。UP Squared 板基于 Intel® Celeron® 处理器 (N3350) 或 Pentium® 处理器 (N4200)。有关更多信息,请访问 UP Squared 主页

硬件要求

此项目中使用的硬件组件如下所示

图 1:带光线传感器的 UP Squared 板

软件要求

本项目使用的软件要求列在下面

安装 Ubuntu* 内核

Ubuntu Core 中的默认内核不允许访问 GPIO 引脚。安装下面的必需内核以获得对 GPIO 引脚的访问权限。

  1. 在更新内核之前,请使用以下命令检查您是否拥有适用于 UP Squared 的正确内核。
    uname -srv
  2. UP Squared 的内核应如下所示
    Linux 4.10.0-42-generic #5000~upboard9-Ubuntu SMP Tue Dec 12 11:46:16 UTC 2017
  3. 添加存储库
    sudo add-apt-repository ppa:ubilinux/up
  4. 更新存储库列表
    sudo apt update
  5. 删除所有已安装的通用内核
    sudo apt-get autoremove -purge ‘linux-.*generic’
  6. 安装 UP Squared 的内核
    sudo apt-get install linux-image-generic-hwe-16.04-upboard
  7. 重启
    sudo reboot
  8. 验证内核是否已安装
    uname -srv

在 UP Squared* 上设置 Thinger.io*

升级系统

sudo apt-get update
sudo apt-get upgrade

下载最新版本的 Thinger.io Linux 客户端并进行构建和运行

git clone https://github.com/thinger-io/Linux-Client.git
cd Linux-Client/src
chmod +x run.sh
./run.sh

下载并构建 MRAA 和 UPM 库

UPM 是一个允许您与传感器和执行器进行接口的库。MRAA 是一个 GPIO 库,可轻松连接到 Linux 上 UP Squared 和其他板的 IO 引脚。

MRAA 库

git clone https://github.com/intel-iot-devkit/mraa.git
mkdir mraa/build
cd mraa/build
cmake .. -DBUILDSWIGNODE=OFF
make
make install

UPM 库

git clone https://github.com/intel-iot-devkit/upm.git
mkdir upm/build
cd upm/build
cmake .. -DCMAKE-INSTALL_PREFIX:PATH=/usr -DBUILDEXAMPLES=ON -DBUILDSQIGPYTHON=OFF -DBUILDSWIGNODE=OFF
make
sudo make install

默认情况下,MRAA 和 UPM 库及包含文件将安装在 /usr/local。如果您希望将它们安装在不同的目录中,例如 /usr,则可以使用 cmake 的选项 -DCMAKE-INSTALL_PREFIX:PATH=/usr,如下所示。本示例将使用默认目录 /usr/local

cmake .. -DCMAKE-INSTALL_PREFIX:PATH=/usr -DBUILDEXAMPLES=ON -DBUILDSQIGPYTHON=OFF -DBUILDSWIGNODE=OFF

创建新的 Thinger.io* 设备

Thinger.io 允许多个设备连接到 Thinger.io 云。如果您还没有账户,请访问 thinger.io 控制台创建一个免费账户。然后,在 Thinger.io 控制台的左侧面板中导航到“设备”以添加新设备。

图 2:添加新设备

填写设备 ID 和设备描述。对于凭据字段,可以填写一个值,或者单击“生成随机凭据”以获取随机凭据值。记下凭据值,以便稍后在代码示例 3:Thinger.io 实例中连接设备到 Thinger.io 服务器时使用。然后,单击“添加设备”按钮添加新设备。

一旦您的第一个设备成功添加到 Thinger.io,它应该显示 1/2 个设备,如下所示。免费账户最多支持两个设备。

图 3:添加设备窗口

一旦您的第一个设备成功添加到 Thinger.io,它应该显示 **1/2** 个设备,如下所示。免费账户最多支持两个设备。

图 4:云统计

设置 Thinger.io 端点

端点是设备用于向消费您设备数据的服务发送电子邮件、SMS 或其他信息的预定义通道。导航到左侧面板中的 **端点**,然后单击 **添加端点** 以添加新端点。

图 5:添加新端点

填写所有必需字段以定义端点。下面是一个光线传感器端点的示例。然后单击 **添加端点** 窗口底部的“添加端点”以注册端点。

图 6:添加新端点窗口

更新 main.cpp 以与 Grove* 传感器接口

编辑 main.cpp 以与光线传感器进行接口。如果光线传感器指示天色渐暗,它将发送电子邮件进行通知。

cd src
vi main.cpp

将此行添加到 main.cpp 中以与 Grove 保护板进行接口。

mraa.addSubplatform(mraa.GROVEPI, "0 ")
代码示例 1:与 Grove 保护板接口

将光线传感器连接到模拟引脚 A1。

// Light sensor is connected to the analog A1
#define OFFSET 512
Light *light_sensor = new Light(OFFSET + 1);
代码示例 2:光线传感器对象

使用 UP Squared 设备信息初始化 Thinger.io 实例。

#define USER_ID          		"your_thinger.io_user_id"
#define DEVICE_ID       		"your_upsquared_device_id"
#define DEVICE_CREDENTIAL	"your_thinger.io_credential" // From Figure 3: Add device window above

// Initialize Thinger.io instance for UP Squared
Thinger_device thing(USER_ID, DEVICE_ID, DEVICE_CREDENTIAL);
代码示例 3:Thinger.io 实例

注册端点后,设备可以调用 call_endpoint() 并传入端点标识符,将电子邮件发送到上面图 5:添加新端点窗口中定义的电子邮件地址。

thing.call_endpoint("light_is_dim");
代码示例 4:端点

pson 内联函数会将光线传感器值分配给 light 私有变量,并且其值将在 api 窗口中显示,如图 8:UP Squared API 窗口所示。

thing["light"] >> [](pson& out) {
    out = light_value;
    };
代码示例 5:pson 内联

从模拟引脚 A1 读取光线传感器值,并将其流式传输到 Thinger.io 服务器。如果光线指示天色渐暗,则调用端点发送电子邮件。

int light_value = 0;  // global variable for the pson inline below
while(1) {
    thing.handle();
    light_value = light_sensor->value();
    thing["light"] >> [](pson& out) {
    out = light_value;
    };

    // It is getting dark, send email
    if (light_value < 10) {
        thing.call_endpoint("light_is_dim");
    }
    std::cout << "light_sensor = " << light_sensor->value() << endl;
    thing.stream(thing["light"]);
}
代码示例 6:读取和分析传感器值

当光线传感器指示天色渐暗时,您应该会收到一封来自 no-reply@thinger.io 的电子邮件,其中包含预定义的邮件主题和正文。

编译和执行

编辑 Makefile 以包含依赖库

cd Linux-Client
cd build/CMakefiles/thinger.dir
vi flags.make

I/usr/local/include/upm -I/usr/local/include -I/usr/local/include/upm -L/usr/local/lib -lupm-light -lupmc-light -lmraa -lupm-utilities -lupmc-utilities 添加到 CXX_FLAGS。更新后的 flags.make 应如下所示

# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.5

# compile CXX with /usr/bin/c++
CXX_FLAGS =  -std=c++11 -I/usr/local/include/upm -I/usr/local/include -I/usr/local/include/upm -L/usr/local/lib -lupm-light -lupmc-light -lmraa -lupm-utilities -lupmc-utilities -O3 -DNDEBUG  

CXX_DEFINES = -DDAEMON=0 -DOPEN_SSL=1

CXX_INCLUDES = 

重新编译更新的 main.cpp

cd ~/Linux-Client/build
make thinger

执行更新后的 Thinger.io。请注意,您需要是 root 用户才能访问 GPIO,因此请务必包含“sudo”。要运行更新后的 main.cpp,请在终端中键入以下命令

sudo ./thinger

查看传感器实时值

在 Thinger.io 控制台中,导航到左侧面板中的“设备”,选择 UpSquared 设备,然后单击“查看 API”。

图 7:UP Squared 仪表板窗口

然后,单击 **查看 API**。实时光线传感器将显示在 **UpSquared API** 窗口中。要刷新实时光线传感器值,请单击 **运行**。

图 8:UP Squared API 窗口

时间序列图

要查看时间序列图中的实时光线传感器值,请导航到左侧的面板,然后单击 **仪表板**。然后单击 **添加仪表板**,填写所有字段,然后单击以创建新仪表板。

图 9:添加仪表板窗口

成功创建新仪表板后,再次单击左侧面板中的 **仪表板** 以查看新添加的仪表板,然后单击它。

图 10:仪表板视图

将右上角的按钮向右滑动,然后单击 **添加小部件** 按钮。

图 11:添加小部件

选择 **时间序列图**。

图 12:添加小部件选项

填写所有必需字段,然后单击 **保存** 按钮。

图 13:添加小部件窗口

实时光线传感器时间序列图将如下所示。

图 14:时间序列图

示例草图

#include "mraa.hpp"
#include "upm/light.hpp"
#include "thinger/thinger.h"
#include "upm_utilities.h"
#include 

#define USER_ID             		"nnle"
#define DEVICE_ID          	 	"UpSquared"
#define DEVICE_CREDENTIAL   	"tJU5a1VBBYBG"
#define OFFSET              		512

using namespace mraa;
using namespace upm;
using namespace std;

// Global variable for pson inline below
int light_value = 0;

int main(int argc, char *argv[])
{
    unsigned int aPinLight;
    Platform platform = getPlatformType();
    if(platform == INTEL_UP2) {
aPinLight = 1 + OFFSET;  // A1
    }
    else {
cout << "Error: Unrecognize board.\n";
	return 1;
    }

    // Interface with Grove shield
    addSubplatform(GROVEPI, "0");

    // Light sensor is connected to the analog pin A1
    Light *light_sensor = new Light(aPinLight);

    // Initialize Thinger.io instance for UP Squared
    thinger_device thing(USER_ID, DEVICE_ID, DEVICE_CREDENTIAL);

    while(1) {
    	thing.handle();
 	light_value = light_sensor->value();
    	thing["light"] >> [](pson& out) {
 	out = light_value;
         	};

	if (light_value < 10) {
    	    thing.call_endpoint("light_is_dim");
    	}
        	cout << "light_sensor = " << light_sensor->value() << endl;
 	thing.stream(thing["light"]);
    }

    thing.start();
    return 0;
}
代码示例 7:示例草图

摘要

Thinger.io 提供用于构建 IoT 应用程序的服务。它允许您连接和管理设备,并实时可视化传感器数据。您还可以通过多个传感器、多个 IoT 设备扩展您的项目,并实现设备之间的通信。

主要参考资料

UP Squared 板

关于作者

Nancy Le 是 Intel Corporation Core & Visual Computing Group 的一名软件工程师,致力于 Intel Atom® 处理器在 Intel® IoT 项目中的赋能工作。
在 UP Squared 板上使用 Thinger.io 服务器 - CodeProject - 代码之家
© . All rights reserved.