您的位置:首页 > 大数据 > 云计算

将ESP8266连接至SAP HANA云平台

2015-09-17 11:03 525 查看
在一个下雨的星期天下午,一个经验丰富的嵌入式开发者给圣诞老人写了个愿望单,他特别想了解一下未来的单片机到底是什么样子。然而,这个愿望单并没有被送到拉普兰(斯堪的纳维亚半岛的最北端地区),而是被送到了中国,Espressif的高手们已经帮他实现了这个愿望,他们设计了一个非常好的基于ARM的控制器,它的时钟频率为80Mhz,可超频至160Mhz(Arduino的时钟频率为16Mhz),其中有嵌入式WiFi、64KB的指令内存、96KB的数据内存、64KB的启动ROM和用于储存代码的Winbond W25Q40BVNIG SPI存储器。此外,ESP芯片还涉及许多很不错的缩略词,包括GPIO、I2C、ADC、SPI和 PWM。其中它最大的优势就是超级便宜。ESP芯片的价格仅为4美金,应用到哪里都是超级便宜的。



不过这需要芯片可以进行HTTPS的消息读写,SSL正是它的不足之处。我想这也是为什么Prashantha H J 在他的一篇博文“ ESP8266 and HCP Internet Of Things Services (BETA) - Part 2” 中提到通过利用PHP桥配置来克服ESP8266芯片的局限性。

在 Espressif公司Faye 和 John Lee以及Hybris Labs Georg Kreimer 的帮助下, 我可以在Martin d’Allens的esphttpclient 中使用SSL。接下来让我们看一下在这个3美金的芯片是不是企业级产品。

电路元件

为将ESP8266连接到 HANA云平台,最好在连接前先把一些数据传送到云平台上。为此我还把ESP8266-12(也可以是ESP8266的其他版本)与一个DHT22 温湿度传感器连接起来。这种传感器在eBay、AliExpress和Banggood都很.jpg]容易买到。DHT22传感器比较好的一点就是不需要连接上拉电阻或其他电路元件就可以让芯片运行,数据引脚可直接连接到ESP8266。DHT22工作电压为5V,不过电压3.3V(ESP8266连接的电压)也是可以的。我用的是3.3V/5V的模拟电源,所以可以连接使用5V电压。请看下图。



为了将固件烧录到ESP8266中,最好有一个串口或USB接口。图中的虚线可以表明这些管脚是怎样连接的。正如下图所示,我用基于CH340的转换器把ESP8266连接到电脑上,这样我就可以烧录固件了。eBay、AliExpress和Banggood上很容易买到这种转换器。



一切都连接好之后就可以烧录固件了,固件可读取 DHT22的数据,并把它发送到云平台。 为了让ESP8266芯片进入烧录模式,启动时必须要GPIO0管脚连接到地面。

SAP HANA云平台

Prashantha H J在他的博文中ESP8266 and HCP Internet Of Things Services (BETA) - Part 1详细而又全面地描述了如何设置SAP Hana 物联网设备。为了让固件运作起来,我采用同样的方法,把ESP8266 配置为设备模式(如截图1所示),它可以发送数据,还有信息模式下的“Environment” (如截图2所示)。我还创建了一个设备ESP8266-01,并把它连接到ESP8266的设备类型(如截图3所示)。









要注意下次设置固件时,需要一个设备ID,同时也要给它提供访问令牌。可以按设备的“Authorization” 键生成一个访问令牌(如截图3所示)。

固件

现在有个http客户端可以进行SSL的消息读写,SDK也支持SSL(从SDK1.1.1版本之后都可以支持),所以固件就可以编写得相对简单一些。我做了个很小的示例应用程序,可以点击https://github.com/jpenninkhof/esp_hcp_temperature下载。

检测时可以用“git clone”:

git clone https://github.com/jpenninkhof/esp_hcp_temperature.git
网页客户端、HCP客户端、DHT22和UART转换器连接到这一项目当中,作为lib目录的模组。即便克隆了这一项目,lib目录也还是空的。为了把这些模组拉进lib目录,需要从项目目录中执行两个以上git指令。

cd esp_hcp_temperature

git submodule init

git submodule update

第一条指令初始化本地配置文件,第二条指令可以下载本项目所需的模组。

本项目中的默认生成文件是为了编译Eclipse固件(若想获得更多信息,请点击这里)的。如果要编译linux的SDK(如这里所描述的那样),需要将Makefile.linux重新命名为Makefile。

固件中可更新的主逻辑在user_main.c当中:

r = DHTRead();

if(r->success)

{

int temp = (int)(r->temperature * 10);

int hum = (int)(r->humidity * 10);

os_sprintf(temp_str, "%d.%d",(int)(temp / 10), temp - ((int)(temp / 10)) * 10);

os_sprintf(hum_str, "%d.%d",(int)(hum / 10), hum - ((int)(hum / 10)) * 10);

os_printf("Temperature: %s *C, Humidity: %s %%\r\n", temp_str, hum_str);

if (lastTemp != temp || lastHum != hum)

{

lastTemp = temp;

lastHum = hum;

wifi_get_ip_info(STATION_IF, &ipConfig);

os_sprintf(data,

"{\"mode\":\"sync\",\"messageType\":\"%s\",\"messages\":[{"

"\"Humidity\": %s,"

"\"Temperature\": %s"

"}]}",

HCP_MESSAGETYPE, hum_str, temp_str);

hcp_send(HCP_ACCOUNT, HCP_LANDSCAPEHOST, HCP_DEVICEID, HCP_DEVICETOKEN, data, hcp_callback);

} else {

os_printf("No changes since last reading.\r\n");

}

} else {

os_printf("Error reading temperature and humidity.\r\n");

}

这个代码试图读取DHT22温度计的温度,温度发生变化时,温湿度数据就会被送到HANA 云平台 。 代码第15行编写了信息类型。我已经配置了HANA云平台的信息类型,包括温湿度参数,所以信息会包含两个变量。代码第21行将数据发送到HANA云平台。

为了把IoT数据发送到HANA云平台,需要创建一个账户、landscape host、设备ID和设备的访问指令。从第21行可以看出这些变量不是硬编码的。这些参数在/user_config.h等配置文件中是与WiFi设置一起配置的。

演示时间

最左边是DHT22传感器,中间是ESP8266,右边是试验电路板电模组。要注意我除了在“电路元件”那一块加了一些连接之外,我还把它连接到电脑的USB接口。

接通电源后你就会发现ESP8266的蓝灯亮起来,这说明它在连接WiFi。连接成功之后,ESP8266芯片就会测量温度,然后把数据发到SAP HANA云平台。测量温度之后,它也会通过https发送数据,SAP HANA云平台的回应也会显示出来。

实现可视化

SAP 提供了IoT 物联网入门套件,其中有一些示例/模板教你如何快速入门IoT设备。为了显示ESP8266的数据,我用入门套件来读取IoT服务台读取数据,同时查看折线图中的数据。

为实现可视化应用,可以利用以下存储库来克隆官方的入门套件Git 存储库:

git clone https://github.com/SAP/iot-starterkit.git
克隆完之后,最好把它导入Eclipse中。用于可视化的 Java/SAPUI5 应用可以在目录iot-starterkit/src/apps/java/consumption/com.sap.iot.starterkit.ui中找到。在这个目录当中,你会发现src/main/webapp/index.html需要修改一下,这样就可以显示出你的设备和数值了。

需要用你的设备ID来替换目前这个设备ID:

oSettingsModel.setData({

"deviceId" : "51a6bc16-79ba-497e-9632-f976067360da",

"deviceTypeId" : "2a877eada3d2c8557f07",

"fromDeviceMessageTypeId" : "1",

"toDeviceMessageTypeId" : "2",

});

替换结束之后需要将调整“graph” 设置,以匹配我们的信息类型数值和数据值,把Slider Value 改为Temperature。

function createMeasureFeed() {

return new sap.viz.ui5.controls.common.feeds.FeedItem({

"uid" : "primaryValues",

"type" : "Measure",

"values" : [ "Temperature" ]

});

}

以及:

function createDataSet() {

return new sap.viz.ui5.data.FlattenedDataset({

dimensions : [ {

name : "Timestamp",

value : "{sensor>G_CREATED}"

} ],

measures : [ {

name : "Temperature",

value : "{sensor>C_TEMPERATURE}"

} ],

data : {

path : "sensor>/"

}

});

}

做完这些修改之后,在项目浏览器中点击项目名称com.sap.iot.starterkit.ui,然后再点击Run As Maven Build。Eclipse会弹出一个对话框,你可以在里面输入Goals。为了创建这一应用,必须在”Goals”输入“clean install”,这样就会在目标目录中产生一个WAR文件。

可以通过 Account Cockpit,从菜单中选几个 “Java Applications” ,然后点击 “Java Applications” 中的“Deploy Application”,在SAP HANA云平台部署上一个WAR文件。上传WAR文件时,不需要开始运行“Deploy Application”,因为它需要被绑定到IoT设备收集的数据集上。

为了将这个应用绑定到IoT 数据集上,要先选这个应用,然后在导航菜单中选中“Data Source Bindings”。如果有其他Bindings,先把它们删掉。然后点击“New Bing”创建一个到IoT数据集的新绑定。数据源应为“Default”模式,也就是说这是来自app的默认数据源。“Schema ID”必须是IoT设备的模式。我这边用的是“p508741trial.iotmms.web”。

数据源绑定到IoT 设备上之后,应用就开始在浏览器中运行起来了。如果 ESP8266运行了一段时间,结果就如下图一样:



厚着脸皮做广告

我已经写过好几篇介绍ESP8266的文章,其中详细介绍了如何在Linux和Windows设置一个工具链;如何将ESP8266与 MQTT连接起来,实现家庭自动化。如果你对此感兴趣,可以点击阅览以下博文:

· Getting started with the ESP8266

· ESP8266 Open SDK

· How to program an ESP8266

· Linking the ESP8266 to a Raspberry Pi through MQTT

· ESP8266 programming from Eclipse

· Why you should use MQTT in IoT projects and why SAP should support it

版权声明:

本译文仅用于学习和交流目的。非商业转载请注明译者、出处,并保留文章在译言的完整链接。

原文来源:http://scn.sap.com/

原文标题:Connecting an ESP8266 to the SAP HANA Cloud Platform

原文地址:http://scn.sap.com/community/cloud-platform/blog/2015/08/01/connecting-an-esp8266-to-the-sap-hana-cloud-platform
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: