电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
文章
ESP8266连接阿里云物联网平台(Arduino方式)
分 享
扫描二维码分享
ESP8266连接阿里云物联网平台(Arduino方式)
esp8266
arduino
阿里云
嵌入式从0到1
关注
发布时间: 2020-07-23
丨
阅读: 4545
我们之前网文已经介绍了mini D1 WiFi模块,具体参见下面链接: [mini D1 WiFi模块Arduino开发简介](https://mp.weixin.qq.com/s/fpPoMca08FKZzOM44Fh2Og) 下面网文介绍了如何在阿里云生活物联网平台创建一个智能设备: [七步快速开启产品智能化](https://mp.weixin.qq.com/s/WJGq4D8FDm08MTaZvMu_Eg) 本文我们利用之前创建的测试设备的三元组信息: > "product_key": "a1xHkDRtfRl", > "device_name": "ZNFS0001", > "device_secret": "xnOe5VcOkvXFTBAZaik4hz7y67t7IUhI" 使用Arduino的方式快速连接阿里云物联网平台。 文中提到的 AliyunIoTSDK 这个 Arduino 库,可以在 Arduino 库商店里搜索到(搜索 AliyunIoTSDK) ![](https://cf02.ickimg.com/bbsimages/202008/cbce511b6c8b9e96debc1860911801bc.png) ![](https://cf02.ickimg.com/bbsimages/202008/886067be9aba4b334f98bae92ae47135.png) AliyunIoTSDK 可以帮助你快速连接阿里云 IoT 平台,通过和阿里云物联网开发平台配合,可快速实现各种硬件应用,包括了很上层的封装,无需自己解析数据体,绑定事件即可,在 ESP8266 平台充分测试(NodeMCU 1.0) AliyunIoTSDK库,底层联接依据 PubSubClient 库,除了上面在Arduino库商店里直接搜索外,还可以手动把 github 上的项目 clone 下来,放到 Arduino 的 library 库下。 github 地址:[https://github.com/xinyu198736/arduino-aliyun-iot-sdk](https://github.com/xinyu198736/arduino-aliyun-iot-sdk) 拷贝上面网址上的测试代码:Usage使用示例 ![](https://cf02.ickimg.com/bbsimages/202008/79e1a91357e4ff7b6632079f4c8aae5f.png) 随意命名文件名,保存代码文件: ![](https://cf02.ickimg.com/bbsimages/202008/47cde6d2e2487bd897c49151c9856078.png) 设备管理器中查看当前ESP8266 WiFi所占用的串口号: ![](https://cf02.ickimg.com/bbsimages/202008/84b9c055141ad9ac4eed89aa367e8658.png) Arduino中选择对应的串口号: ![](https://cf02.ickimg.com/bbsimages/202008/0eee7e2fbb27706cf63ce3f6ea5195a7.png) 填写三元组和WiFi信息: ![](https://cf02.ickimg.com/bbsimages/202008/ef6f4e57c542a5d163a0b0d55643b757.png) 点击“√”对号对工程进行编译: ![](https://cf02.ickimg.com/bbsimages/202008/14cbdc32c58b9317a0d28b69bc63100e.png) 编译后出错: ![](https://cf02.ickimg.com/bbsimages/202008/ca9381e2e257d72aaf96500c396b5b5c.png) 添加:ArduinoJson库 ![](https://cf02.ickimg.com/bbsimages/202008/60d1816b554d11b782083ceb36880c8d.png) 再次编译仍旧报错: ![](https://cf02.ickimg.com/bbsimages/202008/fabc7cb5e28bf4e6d60176c2c2f2677e.png) 错误信息如下所示: ```C Arduino:1.8.8 (Windows 10), 开发板:"WeMos D1 R1, 80 MHz, Flash, Legacy (new can return nullptr), All SSL ciphers (most compatible), 4MB (FS:2MB OTA:~1019KB), v2 Lower Memory, Disabled, None, Only Sketch, 115200" 构建选项已变更,全部重新构建 C:\Users\juban\Documents\Arduino\libraries\AliyunIoTSDK\src\AliyunIoTSDK.cpp:3:26: fatal error: PubSubClient.h: No such file or directory #include
^ compilation terminated. exit status 1 为开发板 WeMos D1 R1 编译时出错。 在文件 -> 首选项开启 “编译过程中显示详细输出”选项 这份报告会包含更多信息。 ``` 因为AliyunIoTSDK库,底层联接依据 PubSubClient 库,所以继续安装:PubSubClient库。 ![](https://cf02.ickimg.com/bbsimages/202008/35410d035b059ed3322d60987900fab4.png) 缺少:SHA256库,继续安装:SHA256库 ![](https://cf02.ickimg.com/bbsimages/202008/d5cb33a2db3ceaf83d0316f213abd9d9.png) “ AWS-SDK-ESP8266”-通过库管理器可用还有其他一些不是ESP8266专用的。 比如:一个通过简单的搜索“ sha256.h esp8266”或“ sha256.h arduino”就会找到它们。 ![](https://cf02.ickimg.com/bbsimages/202008/39dfe77bf399fbd88478277c8df307d1.png) ![](https://cf02.ickimg.com/bbsimages/202008/93c6e664be20852072660e6e5b62f3a9.png) 再次编译,成功。 ![](https://cf02.ickimg.com/bbsimages/202008/caef2a4b137460941ce7ecea17a4b5a5.png) 编译并下载程序,上传固件至mini D1WiFi模块。 ![](https://cf02.ickimg.com/bbsimages/202008/0ec4820fb89fd6ac01114a8931c68f3c.png) 上传成功之后显示如下: ![](https://cf02.ickimg.com/bbsimages/202008/e5fa25d664a8958556c140e05558dd08.png) arduino上阿里云所需要用到的四个库文件.PubSubClient,ArduinoJson,AliyunIoTSDK,Crypto(SHA256)。 PubSubClient.h,是发布/订阅功能的头文件; SHA256.h,是加密功能的头文件(Crypto里面已有包含这个了);ArduinoJson.h,是支持Json数据格式的头文件; AliyunIoTSDK.h,是阿里云SDK的头文件。 ![](https://cf02.ickimg.com/bbsimages/202008/9015235898f4b52956931757842f6e0f.png) 下面是在PubSubClient.h文件中关于错误类型的定义 ![](https://cf02.ickimg.com/bbsimages/202008/32818c5a9609e691e0110c9620b3f8c3.png) 报错MQTT Connect err : -2,说明MQTT没有连接。 解决方法是更改PubSubClient.h文件中的两个宏MQTT_MAX_PACKET_SIZE和MQTT_KEEPALIVE,将其改大点,比如改成1024和60。 ![](https://cf02.ickimg.com/bbsimages/202008/1bbff416f16a837878a5aa56abccf9c5.png) ![](https://cf02.ickimg.com/bbsimages/202008/a6a92afb89331b470b1a6f50815380c5.png) 修改后,重新下载程序,然后看到可以正常上传数据了。 ![](https://cf02.ickimg.com/bbsimages/202008/13ac759822f88e125c4ca335d6ab2078.png) 登录生活物联网平台--飞燕平台 [生活物联网平台](https://living.aliyun.com/#/) 查看飞燕平台,正常应该可以看到设备上线了。 ![](https://cf02.ickimg.com/bbsimages/202008/97241fa89c1a318f02c37f0d6e3f4b53.png) 点击上图中设备右边的“查看”,然后进入下面的运行状态页面,可以看到我们上传的当前温度:26℃,已经成功。 ![](https://cf02.ickimg.com/bbsimages/202008/421b07a7fb35afa8a061a1948ccbdc04.png) 在“设备调试”页面,我们选择调试设备为“ZNFS0001”,然后选择一个调试功能,然后选择方法,然后点击发送指令,我们可以在实时日志中查看到下发数据的日志,说明下发数据成功。 ![](https://cf02.ickimg.com/bbsimages/202008/61ae31fdb59f9269fbf8200858bf557b.png) 此时查看WiFi模块的打印信息,可以看到模块收到了服务器下发的数据包。 ```C {"method":"thing.service.property.set","id":"2028064192","params":{"PowerSwitch":0},"version":"1.0.0"} ``` ![](https://cf02.ickimg.com/bbsimages/202008/244f26483e2354bef70678073e27a7ee.png) 我们只需要能够正确解析上面的数据包内容,解析出{"PowerSwitch":0},然后单片机就可以针对此内容做相应的动作。 上面“设备调试”中下发的数据,其实过程跟手机App中点击某个的按钮的动作逻辑是一样的,至此走通了设备属性的上传及设备的无线控制。 下面,我们针对“智能风扇”的具体设计,实现STM32+ESP8266整体与阿里云进行数据交互。 完整代码如下: ```C // 引入 wifi 模块,并实例化,不同的芯片这里的依赖可能不同 #include
static WiFiClient espClient; // 引入阿里云 IoT SDK #include
// 设置产品和设备的信息,从阿里云设备信息里查看 #define PRODUCT_KEY "a1xHkDRtfRl" #define DEVICE_NAME "ZNFS0001" #define DEVICE_SECRET "xnOe5VcOkvXFTBAZaik4hz7y67t7IUhI" #define REGION_ID "cn-shanghai" // 设置 wifi 信息 #define WIFI_SSID "XXXXXX" #define WIFI_PASSWD "XXXXXXXX" void setup() { Serial.begin(115200); // 初始化 wifi wifiInit(WIFI_SSID, WIFI_PASSWD); // 初始化 iot,需传入 wifi 的 client,和设备产品信息 AliyunIoTSDK::begin(espClient, PRODUCT_KEY, DEVICE_NAME, DEVICE_SECRET, REGION_ID); // 绑定一个设备属性回调,当远程修改此属性,会触发 powerCallback // PowerSwitch 是在设备产品中定义的物联网模型的 id AliyunIoTSDK::bindData("PowerSwitch", powerCallback); // 发送一个数据到云平台,LightLuminance 是在设备产品中定义的物联网模型的 id AliyunIoTSDK::send("CurrentTemperature", 26); } void loop() { AliyunIoTSDK::loop(); } // 初始化 wifi 连接 void wifiInit(const char *ssid, const char *passphrase) { WiFi.mode(WIFI_STA); WiFi.begin(ssid, passphrase); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("WiFi not Connect"); } Serial.println("Connected to AP"); } // 电源属性修改的回调函数 void powerCallback(JsonVariant p) { int PowerSwitch = p["PowerSwitch"]; if (PowerSwitch == 1) { // 启动设备 } } ``` ---- 文章首发于公众号:【嵌入式从0到1】 公众号内容面向大学生,电子爱好者,每个月会做一个毕业设计难度的DIY内容,下学期大四的朋友可以关注一下,到时做毕设就不用找人啦,欢迎学弟学妹来关注哈。 有要学习单片机,嵌入式,物联网知识的可以关注一下,我们一起学习一起进步。 加号主微信号:chengxuyuanxiaoha(程序员小哈),可以拉你进技术交流群,当然也可以私聊号主免费咨询。
原创作品,未经权利人授权禁止转载。详情见
转载须知
。
举报文章
点赞
(
1
)
嵌入式从0到1
关注
评论
(0)
登录后可评论,请
登录
或
注册
相关文章推荐
MK-米客方德推出工业级存储卡
Beetle ESP32 C3 蓝牙数据收发
Beetle ESP32 C3 wifi联网获取实时天气信息
开箱测评Beetle ESP32-C3 (RISC-V芯片)模块
正点原子数控电源DP100测评
DP100试用评测-----开箱+初体验
Beetle ESP32 C3环境搭建
【花雕体验】16 使用Beetle ESP32 C3控制8X32位WS2812硬屏之二
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回
我要举报该内容理由
×
广告及垃圾信息
抄袭或未经授权
其它举报理由
请输入您举报的理由(50字以内)
取消
提交