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

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);
    
    // 初始化 wifi
    wifiInit(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);
    }
}

在这里插入图片描述

  • 5
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
arduino是一种电子积木,适合入门硬件开发。arduino的编程简单,IDE功能强大,支持的开发板和功能文件丰富,还有全球无数的贡献者不停地完善整个软硬件生态,所以吸引了许多国家无数的开发群体。arduino能开发物联网吗?答案是“相当能”。本课程就以arduino体系中支持的一款价格便宜、开发简便的开发板---wemos d1为硬件平台,带您一步步入门物联网开发。物联网开发肯定需要一个云平台,本课程推荐您用阿里云物联网平台,它运行可靠,功能丰富,开发简便,非常适合物联网知识的学习。有许多同学愿意使用“一键式”“无代码式”的开发平台,在此本课程并不推荐,因为学习的知识越多,对大家应对未来挑战的能力越有帮助。从入门角度而言,以arduino的编程方式,链接高大上的阿里云物联网平台,就成为了一种有易学、有趣、专业的组合。通过本课程的学习,您将学习到arduino的基本操作、硬件资源介绍、阿里云物联网平台使用基础、mqtt通信基础、阿里云物联网平台文件介绍、一个物联网小灯实例、以及IoT Studio的基本知识。学完本课程之后,您将学会使用ESP8266开发简单的物联网硬件。  而开发方式是非常简单的arduino方式,这种方式相比esp-idf等命令行方式要易学不少,但是对物联网学习的深刻程度比esp-idf一点不次。     本视频使用到的零件与淘宝上大致价格:   wemos d1开发板,大约20元或者esp8266小黑板  大约20元 
### 回答1: ESP32连接阿里云MQTT物联网平台Arduino支持是一种便捷的物联网连接方式,可以实时获取设备数据并作出相应的控制。以下是步骤: 1. 下载阿里云Arduino支持,安装到Arduino IDE开发环境; 2. 获取阿里云MQTT物联网平台(IoT Platform)的密钥信息,包括:设备证书、密钥等; 3. 编写代码,包括:WiFi连接、MQTT连接、数据监听、数据上传、控制响应等,上传到ESP32开发板上; 4. 在阿里云控制台创建对应设备,定义设备的物模型、功能、属性等; 5. 将ESP32连接WiFi并连接阿里云MQTT物联网平台后,即可实现设备控制与数据获取等功能。 需要注意的是,在使用ESP32连接阿里云MQTT物联网平台过程中,应注意设备的网络稳定性、MQTT协议的消息确认机制等方面的问题。合理使用阿里云提供的服务和开发工具,能够更好地实现IoT物联网应用场景。 ### 回答2: ESP32是一款功能强大的微控制器,可以与阿里云MQTT物联网平台进行连接。为了实现这一目标,我们需要使用适用于ArduinoESP32连接阿里云MQTT物联网平台。 这个可以在Arduino ID中下载,它允许ESP32阿里云MQTT物联网平台实现关联和同步。我们只需要在Arduino IDE中添加并编写所需的代码,就可以建立连接。 在详细说明之前,需要先确定在阿里云MQTT物联网平台中已创建AWS IoT设备,并获取设备证书、设备密钥和CA证书。这些证书将用于连接阿里云服务。 接下来,在Arduino IDE中添加并开始编写代码。代码确认设备连接信息并建立MQTT连接。代码还包括订阅主题、发布消息和处理回传消息等功能。 在使用连接ESP32阿里云MQTT物联网平台时,需要记住以下几点: 1.确认ESP32的设备IP地址并相应地更改代码。 2.在阿里云MQTT物联网平台上添加主题和订阅者。 3.正确配置阿里云MQTT物联网平台的策略和权限,确保ESP32可以正确访问。 一旦连接成功,ESP32就可以通过阿里云MQTT物联网平台与其他设备进行数据交换,实现智能家居、传感器应用和其他物联网应用。 ### 回答3: ESP32是一款广泛应用于物联网设备的微型控制器,它具有高度集成的蓝牙和Wi-Fi模块,可用于快速构建和部署智能设备和系统。阿里云MQTT物联网平台是一个领先的云端服务平台,提供了可靠、高效的通信,帮助开发人员更好地管理和控制物联网设备。在这种情况下,合并ESP32阿里云平台的连接可以极大地提高物联网设备的运行效率和控制能力。为实现这种连接,实用的方法是使用arduino支持。 与其他加密、配对和通信协议不同,MQTT是一个极为开放的协议,并可以广泛用于不同的设备和应用。阿里云MQTT物联网平台支持MQTT协议,为开发人员创建更加智能化的物联网设备提供了全面的解决方案。 开发人员可以使用esp32连接阿里云mqtt物联网平台arduino支持。该包含了所有用于连接和操作MQTT服务的必备组件,如mqtt客户端、设备管理、云消息代理等。您可以在阿里云物联网控制台上获取所有必要的信息和证书,以便在ESP32上运行。 在运行这些组件之前,您需要为设备创建一些认证凭据和配置参数,例如设备ID、秘钥,以及所属分组信息等,这些信息可以通过阿里云物联网平台进行设置。一旦您设置好了所有的认证和配置信息,您就可以使用支持中的命令来连接到MQTT服务,并快速部署和控制自己的物联网设备。 总之,使用arduino支持,您可以快速连接阿里云MQTT物联网平台,不需要复杂复制粘贴代码,专注于实现您的物联网设备的逻辑、控制和应用。它不仅方便易用,而且可以大大提高你的开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小明n.n

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值