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

本文主要是介绍Arduino ESP8266ESP32使用AliyunIoTSDK.h连接阿里云物联网平台,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

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

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);}
}

8、ESP32连接阿里云

ESP32是ESP8266的升级版本,拥有更加更加丰富的功能,更加多的IO接口,主频也随之增加。性能的增强的同时,价格也在增加,ESP32比ESP8266贵那么几十块钱。
我在做毕业设计的时候,遇到一个坑:使用ESP8266做主控,使用Arduino语言编程,代码量一旦大起来就会造成效率低下,而且运行时会出现比较多的bug,所以我果断放弃了ESP8266选择ESP32。现在回想起来,也许ESP8266只是一个WiFi模块,需要搭载一个MCU做IT指令收发即可,用来当一个独立的MCU还是有些过载了。

(1)核心代码——WiFi连接

AliyunIoTSDK因为是ESP8266的例程,所以在连接WiFi上需要使用ESP32的方式连接WiFi,其它则没有太大的变动。

#include <Arduino.h>
#include <WiFi.h>
static WiFiClient espClient;
const char* ssid     = "xxxx";         // Change this to your WiFi SSID
const char* password = "xxxxxxx";    // Change this to your WiFi password

(2)参考例程

由于时间比较紧迫,我把我毕业设计的部分代码修改后做连接的参考例程:

/*
需要发送的json数据
{"A":25.5,"B":26.3,"C":11.2,"D":0.9,"E":11.1,"F":0.8,"G":11.1}
*/#include <Arduino.h>
#include <WiFi.h>
static WiFiClient espClient;
const char* ssid     = "xxxxxxxxx";         // Change this to your WiFi SSID
const char* password = "xxxxxxxxxxxx";    // Change this to your WiFi password// 引入阿里云 IoT SDK
#include <AliyunIoTSDK.h>
//设置产品和设备的信息,从阿里云设备信息里查看
//阿里云LED设备信息
#define PRODUCT_KEY "xxxxxxxxx"
#define DEVICE_NAME "xxxxxxxxx"
#define DEVICE_SECRET "xxxxxxxxxxx"
#define REGION_ID "cn-shanghai"//引入json库
#include <ArduinoJson.h>
//定义数据变量
float temperature;
float humidity;
float solar_V;
float solar_A;
float batteryInt_V;
float batteryInt_A;
float light;void setup() {//初始化串口0,设置波特率Serial.begin(9600);//连接网络WiFi.begin(ssid, password);while (WiFi.status() != WL_CONNECTED);// 初始化 iot,需传入 wifi 的 client,和设备产品信息AliyunIoTSDK::begin(espClient, PRODUCT_KEY, DEVICE_NAME, DEVICE_SECRET, REGION_ID);//这段代码测试WiFi连接情况使用
//  while (WiFi.status() != WL_CONNECTED) {
//        delay(500);
//        printf(".");
//    }
//  printf("\n");
//  Serial.print("Ip: ");
//  Serial.println(WiFi.localIP().toString());
//  Serial.print("mac: ");
//  Serial.println(WiFi.macAddress());
}void loop() {// 检测串口缓冲区中是否有数据装入if (Serial.available()){StaticJsonDocument<200> doc;                    // 创建一个JSON文档对象char buffer[200];                               // 创建一个缓冲区来存储串口数据int length = Serial.readBytes(buffer, 200);     // 读取串口数据并将其存储到缓冲区中buffer[length] = '\0';                          // 添加字符串结束符deserializeJson(doc, buffer);                   // 解析JSON数据//获取json数据temperature   = doc["A"];humidity      = doc["B"];solar_V       = doc["C"];solar_A       = doc["D"];batteryInt_V  = doc["E"];batteryInt_A  = doc["F"];light         = doc["G"];//测试用,请勿删除
//    Serial.print("温度:");
//    Serial.println(temperature);
//    Serial.print("湿度:");
//    Serial.println(humidity);
//    Serial.print("太阳能电池板电压:");
//    Serial.println(solar_V);
//    Serial.print("太阳能电池板电流:");
//    Serial.println(solar_A);
//    Serial.print("电池电压:");
//    Serial.println(batteryInt_V);
//    Serial.print("电池电流:");
//    Serial.println(batteryInt_A);
//    Serial.print("光照值:");
//    Serial.println(light);AliyunIoTSDK::send("temperature",temperature);AliyunIoTSDK::send("humidity",humidity);AliyunIoTSDK::send("solar_V",solar_V);AliyunIoTSDK::send("solar_A",solar_A);AliyunIoTSDK::send("batteryInt_V",batteryInt_V);AliyunIoTSDK::send("batteryInt_A",batteryInt_A);AliyunIoTSDK::send("light",light);}
}

在这里插入图片描述

这篇关于Arduino ESP8266ESP32使用AliyunIoTSDK.h连接阿里云物联网平台的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/782552

相关文章

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

W外链微信推广短连接怎么做?

制作微信推广链接的难点分析 一、内容创作难度 制作微信推广链接时,首先需要创作有吸引力的内容。这不仅要求内容本身有趣、有价值,还要能够激起人们的分享欲望。对于许多企业和个人来说,尤其是那些缺乏创意和写作能力的人来说,这是制作微信推广链接的一大难点。 二、精准定位难度 微信用户群体庞大,不同用户的需求和兴趣各异。因此,制作推广链接时需要精准定位目标受众,以便更有效地吸引他们点击并分享链接

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推