Arduino ESP8266使用AliyunIoTSDK.h连接阿里云物联网平台

文章目录

  • 1、AliyunIoTSDK简介
  • 2、相关库安装
  • 3、阿里云创建产品,订阅发布
  • 4、对开源的Arduino ESP8266源代码修改
  • 5、使用阿里云点亮一个LED灯
  • 6、设备向阿里云上传温度数据
  • 7、项目源码

1、AliyunIoTSDK简介

AliyunIoTSDK是arduino的一个库,可以在arduino的应用商店中搜索到这个库,当时版本不一定是最新的,而且下载的地址在国外,下载会比较久,有时还不能下载成功,我之前就在下载他的库的时候花费了大量的时间。
我这里提供基于AliyunIoTSDK库的开源项目地址:
https://github.com/xinyu198736/arduino-aliyun-iot-sdk
如果网站无法打开,可以使用我已经下载好的项目包:
链接:https://share.weiyun.com/urYMY5tN 密码:yr6d78

2、相关库安装

Arduino有非常多的已经写好库,我们使用Arduino开发ESP8266的时间只需了解库的使用即可,学过面向对象的语言如java、Python应该能很好的理解。其实,Arduino是基于C++语言开发的。

Arduino需要下载安装ArduinoJson, Crypto, PubSubClient, ESP8266库,这些库文件可以在ArduinoIDE上下载,这里不在展开。

我AliyunIoTSDK使用的是离线的安装方式,可以直接将下载好的项目负责到Arduino的项目文件保存地址。
在这里插入图片描述
在这里插入图片描述
根据开源项目的安装教程,安装PubSubClient成功后,有一个地方需要修改。
在这里插入图片描述
文件的地址同样在Arduino的项目文件夹下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、阿里云创建产品,订阅发布

需要连接阿里云,首先应该在阿里云物联网平台上创建产品
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
像上图所示,我们在阿里云物联网平台上创建了一个产品,在产品里定义了一个led开关的功能,接下来我们只需发布上线,设备就可以连接上物联网平台了。

4、对开源的Arduino ESP8266源代码修改

阿里云平台搭建好后,只需将文章开头的AliyunIoTSDK库开源项目的代码复制过来进行一个简单的修改,项目的有详细的使用说明。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里连接WiFi的时候,我选择的是手机的热点。

之前遇到有人问过我,“明明WiFi的名称和密码都正确,但是ESP8266无法连接WiFi。是什么原因呢?”
这时需要检查一下手机热点信息设置是否正确,WiFi名称需要以中文命名,手机热点AP频段选择2.4GHZ,设备标识默认、隐藏热点关闭。
我把我手机的热点信息附上。
请添加图片描述
如果是使用路由器无法连接的话,也重新检查一下路由器的设置,多到网上找找教程,我还没有使用路由器连接过WiFi,不管跟手机热点的设置是一样的。

当ESP8266成功连接上WiFi后,我们在阿里云物联网平台上重新刷新一下,便会发现平台提示连接成功。
在这里插入图片描述

5、使用阿里云点亮一个LED灯

使用阿里云物联网平台点灯需要在ESP8266绑定一个属性回调,名称要与设备功能一致。
还需要初始化LED,我之前走过一个坑,绑定LED后,没有初始化LED导致一直没有实现这个功能找了很久的bug,这里也将这个问题记录下。
善于运用串口调试可以快速并定位找到这种bug,作为开发者,快速解决bug的能力也是很重要的。我当时解决这个bug的时候就是使用串口调速,我将会把源代码在下面附上。
在这里插入图片描述
绑定属性回调后,需要根据需求编写回调的函数,其实,只要将开源项目的电源属性修改的回调函数修改一下即可,我修改后如下:

// 电源属性修改的回调函数
void powerCallback(JsonVariant p)
{int PowerSwitch = p["LEDSwitch"];if (PowerSwitch == 1){//开灯Serial.println("LED_ON");digitalWrite(LED_BUILTIN, LOW);}if (PowerSwitch == 0){//关灯Serial.println("LED_OFF");digitalWrite(LED_BUILTIN, HIGH);}
}

下面,我们使用阿里云开始点灯
在这里插入图片描述
在这里插入图片描述

6、设备向阿里云上传温度数据

我们要上传数据到阿里云,首先阿里云上的设备先要定义好温度这个功能,然后我们修改如下函数即可。
在这里插入图片描述
将修改好的程序下载到开发板上,我们就可以在阿里云查看设备上传的数据了。
在这里插入图片描述

7、项目源码

// 引入 wifi 模块,并实例化,不同的芯片这里的依赖可能不同
#include <ESP8266WiFi.h>
static WiFiClient espClient;// 引入阿里云 IoT SDK
#include <AliyunIoTSDK.h>// 设置产品和设备的信息,从阿里云设备信息里查看
#define PRODUCT_KEY "xxxxxxxxxx"
#define DEVICE_NAME "xxxxxxx"
#define DEVICE_SECRET "xxxxxxx"
#define REGION_ID "cn-shanghai"// 设置 wifi 信息
#define WIFI_SSID "xxxxxxx"
#define WIFI_PASSWD "xxxxxxx"// 温度
float f_temperature = 25.1;void setup()
{Serial.begin(9600);// 初始化 wifiwifiInit(WIFI_SSID, WIFI_PASSWD);// 初始化 iot,需传入 wifi 的 client,和设备产品信息AliyunIoTSDK::begin(espClient, PRODUCT_KEY, DEVICE_NAME, DEVICE_SECRET, REGION_ID);// initialize digital pin LED_BUILTIN as an output.pinMode(LED_BUILTIN, OUTPUT);// 绑定一个设备属性回调,当远程修改此属性,会触发 powerCallback// AliyunIoTSDK::bindData("设备功能标识符", powerCallback);AliyunIoTSDK::bindData("LEDSwitch", powerCallback);
}void loop()
{AliyunIoTSDK::loop();//每隔1秒发送一次数据delay(1000);// 发送一个数据到云平台,AliyunIoTSDK::send("设备标识符", 要发送的数据);AliyunIoTSDK::send("temperature", f_temperature);
}// 初始化 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["LEDSwitch"];if (PowerSwitch == 1){//开灯Serial.println("LED_ON");digitalWrite(LED_BUILTIN, LOW);}if (PowerSwitch == 0){//关灯Serial.println("LED_OFF");digitalWrite(LED_BUILTIN, HIGH);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/173904.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

并发安全问题之--事物失效问题

并发安全问题之–事物失效问题 事物失效常见的6种原因&#xff1a; 1、事物方法非public修饰 2、非事物方法调用事物方法 3、事物方法抛出的异常被捕获了 4、事物方法抛出的异常类型不对 5、事物传播行为不对&#xff08;事物发生嵌套时有事物传播&#xff09; 6、事物锁属类没…

汽车一键启动智能系统功能作用

在现代科技的推动下&#xff0c;我们的生活每天都在发生着变化。其中&#xff0c;汽车智能一键启动系统就是科技改变生活的最好例子之一。 首先&#xff0c;我们来简单了解一下汽车智能一键启动系统。它是一种利用先进的电子技术和无线通信技术&#xff0c;实现无需钥匙即可启…

关于ruoyi(若依)框架的介绍,若依项目的入门,ruoyi(若依)框架的优缺点

一&#xff0c;关于ruoyi&#xff08;若依&#xff09;框架的介绍 若依&#xff08;Ruoyi&#xff09;框架是一款基于 Spring Boot 2.5.5、Spring Cloud 2020.0、OAuth2 与 JWT 鉴权等核心技术&#xff0c;同时也支持Spring Security、Apache Shiro 等多种安全框架&#xff0c;…

【论文】利用移动性的比例公平蜂窝调度测量和算法

&#xff08;一支笔一包烟&#xff0c;一节论文看一天 &#xff09;&#xff08;一张纸一瓶酒&#xff0c;一道公式推一宿&#xff09; 摘要1. 引言2. 相关工作3. 模型和问题公式4. 预测FPF调度 &#xff08; P F &#xff09; 2 S &#xff08;PF&#xff09;^2S &#xff08;…

【数据仓库】数仓分层方法详解与层次调用规范

文章目录 一. 数仓分层的意义1. 清晰数据结构。2. 减少重复开发3. 方便数据血缘追踪4. 把复杂问题简单化5. 屏蔽原始数据的异常6. 数据仓库的可维护性 二. 如何进行数仓分层&#xff1f;1. ODS层2. DW层2.1. DW层分类2.2. DWD层2.3. DWS 3. ADS层 4、层次调用规范 一. 数仓分层…

【机器学习基础】机器学习入门(2)

&#x1f680;个人主页&#xff1a;为梦而生~ 关注我一起学习吧&#xff01; &#x1f4a1;专栏&#xff1a;机器学习 欢迎订阅&#xff01;后面的内容会越来越有意思~ &#x1f4a1;往期推荐&#xff1a;【机器学习基础】机器学习入门&#xff08;1&#xff09; &#x1f4a1;…

Linux应用层点亮硬件的LED灯

一 应用层操作硬件的两种方法 应用层想要对底层硬件进行操控&#xff0c;通常可以通过两种方式&#xff1a; /dev/目录下的设备文件&#xff08;设备节点&#xff09;&#xff1b;/sys/目录下设备的属性文件。 具体使用哪种方式需要根据不同功能类型设备进行选择&#xff0c;通…

算法——图——bsf 广度优先搜索算法 (Breadth First Search)

图遍历算法——bsf 广度优先搜索算法 &#xff08;Breadth First Search&#xff09; 算法 概述算法过程步骤一&#xff1a;初始化原点到队列步骤二&#xff1a;将队列的头顶点放入到已完成集合步骤三&#xff1a;将订单的关联顶点放入到队列中步骤四&#xff1a;将u顶点设置为…

学习samba

文章目录 一、samba介绍二、samba的主要进程三、配置文件四、例子 一、samba介绍 1、SMB&#xff08;Server Message Block&#xff09;协议实现文件共享&#xff0c;也称为CIFS&#xff08;Common Internet File System&#xff09;。 2、是Windows和类Unix系统之间共享文件的…

主题讲座:全球增材制造现状与未来(暨香港科技大学广州|智能制造学域2024博士学位全额奖学金项目)

时间&#xff1a;2023 年11月16日&#xff08;星期四&#xff09;14:30 地点&#xff1a;合肥工业大学 学术会议中心三楼报告厅 主讲嘉宾&#xff1a;陈模军 助理教授 https://facultyprofiles.hkust-gz.edu.cn/faculty-personal-page/CHEN-Mojun/mjchen 报名表直达&#xff1…

Ubuntu 和 Windows 文件互传

FTP 服务 FTP 采用 Internet 标准文件传输协议 FTP 的用户界面&#xff0c; 向用户提供了一组用来管理计算机之间文件传输的应用程序。在开发的过程中会频繁的在 Windows 和 Ubuntu 下进行文件传输&#xff0c;比如在 Windwos 下进行代码编写&#xff0c;然后将编写好的代码拿到…

C语言--每日五道选择题--Day9

第一题 1、如下程序的运行结果是&#xff08; &#xff09; char c[5]{a, b, \0, c, \0}; printf("%s", c); A: a b B: ab\0c\0 C: ab c D: ab 答案及解析 D 首先这是一个字符数组&#xff0c;我们要知道无论是字符串还是字符数组&#xff0c;它们遇到ASCII值为0就…