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);}
}
相关文章:
Arduino ESP8266使用AliyunIoTSDK.h连接阿里云物联网平台
文章目录 1、AliyunIoTSDK简介2、相关库安装3、阿里云创建产品,订阅发布4、对开源的Arduino ESP8266源代码修改5、使用阿里云点亮一个LED灯6、设备向阿里云上传温度数据7、项目源码 1、AliyunIoTSDK简介 AliyunIoTSDK是arduino的一个库,可以在arduino的…...
【车载开发系列】AutoSar中的CANTP
【车载开发系列】AutoSar中的CANTP 【车载开发系列】AutoSar中的CANTP 【车载开发系列】AutoSar中的CANTP一. CANTP相关术语二. CANTP相关概念1)单帧:SF(Single Frame)2)首帧:FF(First Frame)3)连续帧CF(Consecutive F…...
JUL日志
文章目录 JUL日志JUL日志讲解Properties配置文件编写日志配置文件Lombok快速开启日志Mybatis日志系统 JUL日志 如果使用System.out.println来打印信息,项目中存在大量的控制台输出语句,会显得很凌乱,而且日志的粒度是不够细的,假…...
ZZ308 物联网应用与服务赛题第G套
2023年全国职业院校技能大赛 中职组 物联网应用与服务 任 务 书 (G卷) 赛位号:______________ 竞赛须知 一、注意事项 1.检查硬件设备、电脑设备是否正常。检查竞赛所需的各项设备、软件和竞赛材料等; 2.竞赛任务中所使用…...
如何使用 vcpkg 编译Google-V8脚本引擎(ECMA/JavaScript)?
WIN32K下一键杀死所有同名进程命令行:taskkill /F /IM chrome.exe ############################## 1、准备 Visual Studio 2019 2、准备 Visual Studio 2022 3、安装 VC、MSBuild 编译集成环境 4、安装 Python 3.x,早期V8发行版本编译安装 2.x 5、…...
系列二十二、idea Live Templates
一、idea Live Templates 1.1、Java Group 1.1.1、fast fast 快速在类上添加注解Data AllArgsConstructor NoArgsConstructor Accessors(chain true) ToString(callSuper true) 1.1.2、getThreadName getThreadName快速获取当前线程的名字Thread.currentThread().getName…...
电脑本地安装宝塔/docker 安装宝塔
一、先去docker官网(http://docker.com)下载软件并进行安装,网站打不开多试几次或者找梯子。 二、macos系统里按“command 空格”搜索“终端”回车,启动终端程序。 三、执行下面命令,拉取docker镜像。 docker pull pch18/baota:clear pch…...
Java Lambda 表达式笔记
文章目录 Java Lambda 表达式语法Lambda 表达式实例Lambda表达式与函数式接口方法引用处理lambda表达式的接口 Java Lambda 表达式语法Lambda 表达式实例Lambda表达式与函数式接口方法引用处理lambda表达式的接口 Java Lambda 表达式 Lambda 表达式,也可称为闭包. …...
Flutter笔记:状态提升、控制器模式、GetX控制器和服务
Flutter笔记 状态提升、控制器模式、GetX控制器和服务 作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/qq_28550263/article/details/1…...
9.spark自适应查询-AQE之动态调整Join策略
目录 概述动态调整Join策略原理实战 动态优化倾斜的 Join原理实战 概述 broadcast hash join 类似于 Spark 共享变量中的广播变量,Spark join 如果能采取这种策略,那join 的性能是最好的 自适应查询AQE(Adaptive Query Execution) 动态调整Join策略 原…...
CentOs7 NAT模式连接网络
1.配置动态网络 1.1 检查主机网卡配置 检查主机的网络设置 进入控制面板,找到网络共享中心 查看适配器是否都已经开启 1.2 设置虚拟机的网络配置 打开虚拟机网络配置设置,对网卡VMnet8 进行设置 记住网关 全部选择应用,确定 1.3 设置…...
linux安装git
目录 声明 前言 正文 (1)下载git压缩包 (2)git压缩包解压 (3)解压完成后需要进行源码的编译操作 a.首先进去到解压后的文件目录中: b.执行: 编译的过程中可能遇到的问题&am…...
thinkphp6 起步
1、安装 composer create-project topthink/think6.0 tp62、使用多应用模式,你需要安装多应用模式扩展think-multi-app composer require topthink/think-multi-app3、config/app.php中,将 ‘auto_multi_app’ > flase, 改为true; 需要自…...
会员题-力扣408-有效单词缩写
有效单词缩写 字符串可以用 缩写 进行表示,缩写 的方法是将任意数量的 不相邻 的子字符串替换为相应子串的长度。例如,字符串 “substitution” 可以缩写为(不止这几种方法): “s10n” (“s ubstitutio n”) “sub4…...
spring-cloud-stream
系列文章目录 第一章 Java线程池技术应用 第二章 CountDownLatch和Semaphone的应用 第三章 Spring Cloud 简介 第四章 Spring Cloud Netflix 之 Eureka 第五章 Spring Cloud Netflix 之 Ribbon 第六章 Spring Cloud 之 OpenFeign 第七章 Spring Cloud 之 GateWay 第八章 Sprin…...
2.0 熟悉CheatEngine修改器
Cheat Engine 一般简称为CE,它是一款功能强大的开源内存修改工具,其主要功能包括、内存扫描、十六进制编辑器、动态调试功能于一体,且该工具自身附带了脚本工具,可以用它很方便的生成自己的脚本窗体,CE工具可以帮助用户…...
微信小程序数据交互和缓存
目录 前言: 数据交互 1. 发起网络请求 2. WebSocket 2.1实时数据库 3. 微信支付 数据缓存 1. 页面级缓存 2. 内存级缓存 3. 数据缓存策略 优化用户体验 总结 前言: 在开发微信小程序时,数据交互和缓存是非常重要的方面。本文将介…...
kubernetes集群编排——k8s认证授权
pod绑定sa [rootk8s2 ~]# kubectl create sa admin [rootk8s2 secret]# vim pod5.yaml apiVersion: v1 kind: Pod metadata:name: mypod spec:serviceAccountName: admincontainers:- name: nginximage: nginxkubectl apply -f pod5.yamlkubectl get pod -o yaml 认证 [rootk8s…...
rabbitmq下载安装教程
1.首先需要下载erlang和rabbitmq安装包: 官网下载比较慢,通过网盘下载: 链接:https://pan.baidu.com/s/1fM2BrJqefyzUDZD4tfZLIg 提取码:5hsu 2.安装,傻瓜式安装就可以,可以自定义自己要安装的目…...
数据分析实战 | SVM算法——病例自动诊断分析
目录 一、数据分析及对象 二、目的及分析任务 三、方法及工具 四、数据读入 五、数据理解 六、数据准备 七、模型训练 八、模型应用及评价 一、数据分析及对象 CSV文件——“bc_data.csv” 数据集链接:https://download.csdn.net/download/m0_70452407/88…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
