使用ESP8266(基于官方SDK)接入阿里云物联网平台

引言

作为物联网开发者,ESP8266应该一点都不陌生了。只需十几块钱淘宝一个小开发板,就可以连上Wi-Fi接入互联网,尽情享受从手机端或Web端控制设备的乐趣。ESP8266接入Wi-Fi是没问题,但是用户端不能直接设计成与ESP8266通信,还是需要一个中心服务器作为用户端和设备端的代理。一种方案是自己搭建设计这么一个中心服务器,只是费时费力;另一种方案,就是直接使用大厂提供的物联网平台服务,使设计方案PaaS化。

上网搜寻物联网平台方案,百度、阿里、腾讯早就推出了自己的物联网平台了,同时也收集了一点其他公司的平台。之后我就对这三大平台以及一些常见的平台简单评估了一下。最后还是选择了阿里云物联网平台(以下简称阿里云IoT hub)深入了解。

那么,关于ESP8266和阿里云IoT hub,首先要告诉大家,乐鑫官方github上已经有了「ESP8266 对接阿里云」的repository了,github:https://github.com/espressif/esp8266-aliyun-demo

但是!当我下载下来并经过一阵焦头烂额的编译测试后,依旧没法成功编译!最最最关键的是,不支持安信可ESP8266 IDE,似乎是因为修改了顶层Makfile文件。

一气之下!我根据阿里云IoT hub提供的文档,首先使用Python脚本模拟设备对接阿里云IoT Hub,然后使用ESP8266尝试连接MQTT Broker,最后使用ESP8266基于官方SDK,自己弄了一个esp8266 app,接入了阿里云物联网平台。github:https://github.com/AngelLiang/esp8266_aliyun_mqtt_app

适合读者

本文适合有ESP8266开发经验的读者阅读,如果熟悉安信可ESP8266 IDE更佳。熟悉阿里云IoT hub和开发环境的读者可以直接跳到「四、下载aliyun_mqtt_app并导入」小节。

一、获取阿里云IoT设备认证三元组

本小节主要讲如何获取阿里云IoT hub设备认证三元组,熟悉的读者可以跳过了。

第一步:开通平台

首先,需要进入阿里云IoT hub控制台进行操作,如果没有开通直接开通即可,免费。控制台连接:https://www.aliyun.com/product/iot

物联网平台

第二步:创建产品

开通后我们首先需要创建产品,产品名称随便输入即可,其他默认。

创建产品

第三步:创建设备

然后是创建设备,随便输入一个DeviceName即可。

创建设备

第四步:获取认证三元组

最后就得到了设备认证三元组:ProductKeyDeviceNameDeviceSecret

获取认证三元组

二、安信可ESP8266 IDE

下面是如何搭建安信可ESP8266 IDE环境的文档,熟悉的读者可以直接跳过了:

三、ESP8266官方SDK

最后是如何下载ESP8266官方SDK,可以到乐鑫官网或github或者下载。熟悉的读者也可以直接跳过。本人开发所使用的SDK是目前最新的版本:ESP8266_NONOS_SDK-2.2.1,aliyun_mqtt_app理论上支持SDK 2.0+。

下载官方SDK后,把driver_libexamplesthird_party三个文件夹压缩备份再删除,以免编译的时候出现干扰信息。

导入工程

四、下载aliyun_mqtt_app并导入

下载aliyun_mqtt_app(github:https://github.com/AngelLiang/esp8266_aliyun_mqtt_app)并拷贝aliyun_mqtt_app文件夹过去。

编辑app/include/user_config.h文件,修改下面信息,然后编译下载并重启ESP8266,最后应该就能在控制台看到设备上线了。

#define PRODUCT_KEY     "PRODUCT_KEY"
#define DEVICE_NAME     "DEVICE_NAME"
#define DEVICE_SECRET   "DEVICE_SECRET"

#define WIFI_SSID       "WIFI_SSID"
#define WIFI_PASS       "WIFI_PASS"

五、接入成功

编译、下载、重启,观察串口打印的信息,感觉没有异常后在看看控制台,可以看到设备已经接入成功了!

接入成功

然后到设备的topic列表,可以看到 update topic 消息数加1了,那是因为我在代码里面写了只要连接成功就发布一条「hello」消息。

接收到设备消息

然后尝试一下对get topic发布消息!

发布消息到设备

可以看到串口打印如下:

TCP: data received 45 bytes
Receive topic: /PRODUCT_KEY/esp8266_test/get, data: hello wolrd! 

此时说明「设备主动上报数据到平台」和「平台下发指令到设备」这两个功能均测试成功!

六、关于阿里云IoT hub

接入方式

根据文档,阿里云IoT hub至少支持三种设备接入方式:

  1. MQTT方式,包括基于TCP的MQTT和基于WebSocket的MQTT
  2. CoAP
  3. HTTP

其中对于ESP8266来说,最方便的还是基于MQTT-TCP方式。当然,阿里云IoT hub除了支持单一设备接入方式,也支持网关设备的接入

计费方面

目前开通平台是免费。收费方法是按消息数量收费,不过每月前100万条消息免费,对于我这种物联网爱好者随便玩玩足够了。

基础版和高级版

实际上,阿里云IoT hub分为两个版本:基础版和高级版。高级版在基础版所有功能的基础上,还多了一些实用功能,当然,高级版也是免费开通的,收费方面高级版则多了一个设备日活费用,0.01元/每日活设备/天,目前每个帐号有10个设备的免费额度。

高级版令我关注的有一点:设备的数据存储和查询功能。设备端只要根据阿里云IoT hub高级版的物模型和Alink协议上传数据,阿里云IoT hub就会存储相关数据,同时还可以通过云端API获取历史数据。

相关术语:

  • 物模型:阿里云IoT hub对设备在云端的功能描述,包括设备的属性、服务和事件。
  • Alink协议:阿里云定义的设备与云端之间的通信协议。
高级版示例

那么有关阿里云IoT hub的介绍就到这里,下面是简单说下我写的aliyun_mqtt_app。

七、关于aliyun_mqtt_app

自然,我在引言已经提到弄出这么一个app工程的原因了。下面是对这个app简单介绍一下。

由于ESP8266官方SDK中已经有了MQTT示例工程,所以我是在此工程的基础上补充了一点自己的代码。其中最麻烦的是阿里云IoT hub设备认证问题,直接使用MQTT示例工程填写有关MQTT的配置信息也可以,只是mqtt password要先在电脑生成好才行,直接拼接设备认证三元组还做不到。那就干脆一点,我直接让ESP8266能生成阿里云的mqtt password就可以了,也就是一个hmacmd5签名。

mqtt password生成的核心代码在 user/aliyun_mqtt.c/gen_mqtt_password() 函数里。

之后,就是加了点辅助功能,比如可以使用smartconfig配置Wi-Fi,这样就可以不用把Wi-Fi信息写死到代码了。同时,阿里云IoT hub大多是使用JSON格式传输数据,给app上cJSON解析的工作以后有空就考虑考虑(ESP8266使用cJSON解析器已经有了,在我的ESP8266工程示例集合仓库里)。

八、结语

自此,洋洋洒洒长篇大论有话没话写了那么多,本文简而言之就介绍了如何使用ESP8266接入阿里云IoT hub,至于能玩出什么花样就要靠开发者的想象力了。话说,某平台是不是应该给我点软文费呢~?

相关资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容