基于 arduino IDE使用AliyunIoTSDK库接入阿里云

Arduino教程传送门🧭🏔🌋🛤🏞🏜

文中提到的 AliyunIoTSDK 这个 arduino 库,可以在 arduino 库商店里搜索到(搜索 AliyunIoTSDK),但是版本可能不一定是最新的,也可以手动把 github 上的项目 clone 下来,放到 arduino 的 library 库下,保证功能是最新的。

github 地址:https://github.com/xinyu198736/arduino-aliyun-iot-sdk

有问题,欢迎提 issues 或 PR 共建,我对 c++ 不是特别熟悉,写出来的代码可能不一定是最合理的。

阿里云物联网平台简介

阿里云物联网平台提供接入物联网场景的一整套基础设施,强大的在线配置能力,基本可以实现无代码开发接入各类应用,实现大规模的物联网应用场景。

核心能力模块包括:

  • 产品&设备创建和管理
  • 服务可视化开发
  • 控制界面可视化开发
  • 数据分析和监控运维等辅助设施

基于以上功能模块,可以快速在阿里云定义设备模型和事件等信息,然后快速创建和接入设备,再利用可视化的开发平台,可以零代码实现非常强大的功能。

不过,今天我们要介绍一个比较特殊的接入场景,使用嵌入式系统快速接入阿里云物联网平台,这里以 esp8266 为例。

esp8266 是一款集成网络模块的嵌入式芯片,自带 32 位处理器,各种外设接口,wifi 模块等,可以使用 arduino 平台进行编程,兼容大量 arduino 库。

本文就是以 arduino 编程方式,使用的 esp8266 开发板为 NodeMCU 1.0 ,淘宝成本仅为 8~10 元。

场景

本次我们想利用 ESP8266 芯片实现一个简单的可远程控制的空调控制器,具备以下功能:

  • 批量部署,可通过云平台集中管理和远程控制空调开关、温度、模式等
  • 芯片可感知环境温度、亮度,并上报物联网平台
  • 芯片可远程触发事件,上报物联网平台
  • 成本尽量低,不超过 30 元

首先,我们进行硬件选型,经过功能评估,选用以下硬件:

  • nodemcu 核心板(基于 esp8266) 10.89元/个
  • DS18B20模块 温度传感 3.18元/个
  • GY-30 光照传感 4.38元/个
  • 红外发射板 3.5元/个
  • 杜邦线母对母 1.45元/串
  • 电源插头 1.4元/个
  • 数据线 1.8元/个
  • 按钮开关 0.75元/个

开始接入

具体的连线,我们这里不展开,我们主要探讨如何使用 arduino 快速接入物联网平台。

第一步,在物联网创建产品,建立物模型,并创建设备,获取设备配置信息。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SRY7R9SG-1637586653330)(https://blog.souche.com/content/images/2019/09/1568620395927-b7090d59-5958-4050-a0e7-7205faafb455.png)]
创建产品,并定义物模型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8THP2s4T-1637586653332)(https://blog.souche.com/content/images/2019/09/1568620350930-270bbfa3-22b8-4711-b6b8-ff6f38a8d49a.png)]
创建设备,与产品绑定,获取设备鉴权信息


第二步,用 arduino 连接 nodemcu 开发板,开始硬件端的开发。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vsx6uQGS-1637586653334)(https://blog.souche.com/content/images/2019/09/1568642438839-a595c156-3afb-4ef8-8213-d67433be474a.jpeg)]
具体接线可以自己研究,这里只是个展示,哈哈

硬件端开发

这里不讨论如何使用 arduino 进行 esp8266 芯片开发,直接进入代码环节,相关基础知识可以百度一下。

首先,亮相一个我自己封装的 aliyun iot 上层 SDK( arduino-aliyun-iot-sdk ),底层连接基于 PubSubClient 库,并且对模型操作做了一些上层封装,可以方便的发送数据和订阅远程指令。

// 引入 wifi 模块,并实例化,不同的芯片这里的依赖可能不同
#include <ESP8266WiFi.h>
static WiFiClient espClient;

// 引入阿里云 IoT SDK
#include <AliyunIoTSDK.h>

// 设置产品和设备的信息,从阿里云设备信息里查看
#define PRODUCT_KEY "xxx"
#define DEVICE_NAME "Device_D"
#define DEVICE_SECRET "xxxxxxxxxxxxxx"
#define REGION_ID "cn-shanghai"

// 设置 wifi 信息
#define WIFI_SSID "xxxxx"
#define WIFI_PASSWD "xxxxx"

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("LightLuminance", 100);
}

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)
    {
        // 启动设备
    } 
}

核心代码只有三句:

// 初始化 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("LightLuminance", 100);

注意这里的数据绑定和数据发送,是非常有用和方便的,不需要自己去写做匹配的代码,也不需要自己组装数据,并且会自动合并数据,节约上报的频率。

将设备配置信息配置进代码,烧录到板子,运行即可,是不是炒鸡方便呢。

注意事项:

  • 阿里云对客户端的链接参数有一些限制,需要修改 PubSubClient 的连接参数,否则无法使用
    • PubSubClient 中的 MQTT_MAX_PACKET_SIZE 修改为 1024
    • PubSubClient 中的 MQTT_KEEPALIVE 修改为 60
  • 默认 5000ms 检测一次连接状态,可以通过 AliyunIoTSDK.cpp 中的 CHECK_INTERVAL 修改此值
  • 掉线后会一直尝试重新连接,可能会触发阿里云的一些限流规则(已经做了规避),并且会导致挤掉其他同设备 ID 的设备

资源

目前 AliyunIoTSDK 这个 arduino 库,可以在 arduino 库商店里搜索到(搜索 AliyunIoTSDK),但是版本可能不一定是最新的,可以手动把 github 上的项目 clone 下来,放到 arduino 的 library 库下,保证功能是最新的。

github 地址:https://github.com/xinyu198736/arduino-aliyun-iot-sdk

有问题,欢迎提 issues 或 PR 共建,我对 c++ 不是特别熟悉,写出来的代码可能不一定是最合理的。

可视化开发界面和服务

完成了设备的连接之后,已经迈出了第一步,如果你想要自己开发一个界面,可视化的控制空调,或者想利用一些远程设备的数据触发一些自定义的规则和逻辑(例如如果某个数据超标,报警到钉钉群等),用阿里云的物联网平台的话,这些都不需要自己去开发,直接使用物联网平台的“开发服务”拖拖拽拽即可完成。

界面开发

界面开发的核心是 拖动布局、数据源绑定、交互绑定、自定义变量等。


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9V2yAH5O-1637586653337)(https://blog.souche.com/content/images/2019/09/1568630094545-d440e173-23f0-4d63-81e7-00d6b6ce8811.png)]
布局界面,右侧可以设置各种控件属性


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WBWsCNE5-1637586653339)(https://blog.souche.com/content/images/2019/09/1568630244900-18ee8b99-1e80-409a-8482-981fd596d095.png)]
数据源绑定,可以方便的和产品模型数据绑定


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cKvctbZS-1637586653340)(https://blog.souche.com/content/images/2019/09/1568630294665-d5cf7a85-ad06-491c-a7bf-65f6439450f8.png)]
交互绑定,可以与服务进行绑定,触发某个服务,并传入设备属性



[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c9QNjXy8-1637586653341)(https://blog.souche.com/content/images/2019/09/1568642695402-cc25fedc-8c3f-4e32-90a9-89c0eec2f712.png)]
控件可以给自定义变量赋值,其他组件可以与变量绑定

使用上述的功能,加上各种设备绑定功能,基本可以完成一个很复杂的界面的开发,但是如果你需要通过交互触发远程指令,或者监听远程的数据做一些判断逻辑,光有界面是不够的。

服务开发

上面提到的逻辑开发,就需要使用“服务开发”了,服务开发的触发点主要是两类:设备触发、界面交互触发。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mWxay0Xt-1637586653342)(https://blog.souche.com/content/images/2019/09/1568643025480-f10c038d-8a9b-44a1-b270-51625b56a137.png)]
设备触发的服务,中间的路径选择是用来做条件判断分流的,最右侧是触发通知逻辑节点



[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XgZzrkh1-1637586653343)(https://blog.souche.com/content/images/2019/09/1568643229960-62754bc2-4ddf-4724-ba99-ed81459f9bc2.png)]
一个温度控制服务,通过界面控件触发,最终生成设备控制逻辑

结语

本文不是 arduino 教学,也不是 esp8266 教学,更不是硬件教学,所以没有展开细节,需要读者具备一定的基础,请各位谅解,如果对 arduino 开发感兴趣,可以加我微信交流(微信号:mier963,注明 arduino)。

最后展示一下成果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y7L3bKDj-1637586653344)(https://blog.souche.com/content/images/2019/09/1568643588452-48f528a4-29e2-41f9-99bb-0a004600bd8a.jpeg)]
一个成品,包含四个传感器模块,包括一个硬件按钮



[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UogmyJR5-1637586653345)(https://blog.souche.com/content/images/2019/09/1568643652167-2f7d14b9-77d4-4a36-8172-ad7e9b9bc2ae.png)]
空调远程控制界面


另外,还可以给这个控制器加入一些很有意思的功能,例如定点关闭所有设备,根据环境亮度开关空调等。

  • 4
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
Arduino平台NodeMCU(esp8266)接入阿里云IoT物联网平台,使用DHT11采集环境数据 Arduino平台NodeMCU(esp8266)接入阿里云IoT物联网平台,使用DHT11采集环境数据 Arduino平台NodeMCU(esp8266)接入阿里云IoT物联网平台,使用DHT11采集环境数据 Arduino平台NodeMCU(esp8266)接入阿里云IoT物联网平台,使用DHT11采集环境数据 Arduino平台NodeMCU(esp8266)接入阿里云IoT物联网平台,使用DHT11采集环境数据 Arduino平台NodeMCU(esp8266)接入阿里云IoT物联网平台,使用DHT11采集环境数据 Arduino平台NodeMCU(esp8266)接入阿里云IoT物联网平台,使用DHT11采集环境数据 Arduino平台NodeMCU(esp8266)接入阿里云IoT物联网平台,使用DHT11采集环境数据 Arduino平台NodeMCU(esp8266)接入阿里云IoT物联网平台,使用DHT11采集环境数据 Arduino平台NodeMCU(esp8266)接入阿里云IoT物联网平台,使用DHT11采集环境数据 Arduino平台NodeMCU(esp8266)接入阿里云IoT物联网平台,使用DHT11采集环境数据 Arduino平台NodeMCU(esp8266)接入阿里云IoT物联网平台,使用DHT11采集环境数据 Arduino平台NodeMCU(esp8266)接入阿里云IoT物联网平台,使用DHT11采集环境数据 Arduino平台NodeMCU(esp8266)接入阿里云IoT物联网平台,使用DHT11采集环境数据 Arduino平台NodeMCU(esp8266)接入阿里云IoT物联网平台,使用DHT11采集环境数据 Arduino平台NodeMCU(esp8266)接入阿里云IoT物联网平台,使用DHT11采集环境数据 Arduino平台NodeMCU(esp8266)接入阿里云IoT物联网平台,使用DHT11采集环境数据 Arduino平台NodeMCU(esp8266)接入阿里云IoT物联网平台,使用DHT11采集环境数据 Arduino平台NodeMCU(esp8266)接入阿里云IoT物联网平台,使用DHT11采集环境数据 Arduino平台NodeMCU(esp8266)接入阿里云IoT物联网平台,使用DHT11采集环境数据 Arduino平台NodeMCU(esp8266)接入阿里云IoT物联网平台,使用DHT11采集环境数据 Arduino平台NodeMCU(esp8266)接入阿里云IoT物联网平台,使用DHT11采集环境数据 Arduino平台NodeMCU(esp8266)接入阿里云IoT物联网平台,使用DHT11采集环境数据 Arduino平台NodeMCU(esp8266)接入阿里云IoT物联网平台,使用DHT11采集环境数据 Arduino平台NodeMCU(esp8266)接入阿里云IoT物联网平台,使用DHT11采集环境数据 Arduino平台NodeMCU(esp8266)接入阿里云IoT物联网平台,使用DHT11采集环境数据 Arduino平台NodeMCU(esp8266)接入阿里云IoT物联网平台,使用DHT11采集环境数据 Arduino平台NodeMCU(esp8266)接入阿里云IoT物联网平台,使用DHT11采集环境数据 Arduino平台NodeMCU(esp8266)接入阿里云IoT物联网平台,使用DHT11采集环境数据 Arduino平台NodeMCU(esp8266)接入阿里云IoT物联网平台,使用DHT11采集环境数据 Arduino平台NodeMCU(esp8266)接入阿里云IoT物联网平台,使用DHT11采集环境数据 Arduino平台NodeMCU(esp8266)接入阿里云IoT物联网平台,使用DHT11采集环境数据 Arduino平台NodeMCU(esp8266)接入阿里云IoT物联网平台,使用DHT11采集环境数据 Arduino平台NodeMCU(esp8266)接入阿里云IoT物联网平台,使用DHT11采集环境数据 Arduino平台NodeMCU(esp8266)接入阿里云IoT物联网平台,使用DHT11采集环境数据 Arduino平台NodeMCU(esp8266)接入阿里云IoT物联网平台,使用DHT11采集环境数据 Arduino平台NodeMCU(esp8266)接入阿里云IoT物联网平台,使用DHT11采集环境数据
### 回答1: 要将Arduino Uno接入阿里云,需要进行以下步骤: 1. 准备工作:需要一个Arduino Uno板和与之兼容的无线模块(例如ESP8266)。 2. 配置Arduino Uno:将无线模块连接到Arduino Uno的串行通信口(例如使用软串口或硬串口方式连接)。 3. 安装Arduino IDE:在电脑上下载和安装Arduino IDE软件,以便进行编程和上传固件。 4. 设置阿里云账号:在阿里云官网上注册一个账号,并创建一个物联网平台实例。 5. 下载Arduino SDK:从阿里云物联网平台竞品首页下载Arduino SDK,并解压缩到Arduino IDE文件夹。 6. 编写代码:在Arduino IDE中打开示例代码,将其中的阿里云设备信息(如产品Key、设备名、设备密钥等)替换为创建的物联网平台实例中的对应信息。 7. 编译和上传:将代码编译并上传到Arduino Uno板,确保无线模块可以正常连接到阿里云物联网平台。 8. 监测数据:在阿里云物联网平台控制台上查看设备状态和监测数据,确保设备和阿里云的连接正常。 通过以上步骤,我们就可以成功将Arduino Uno接入阿里云,并实现与云平台的数据交互和远程控制。这样,我们可以通过阿里云的平台来实现对Arduino Uno的远程监控和操作。 ### 回答2: 接入Arduino Uno到阿里云分为以下几个步骤: 1. 连接硬件:首先,将Arduino Uno通过USB线连接到计算机上。确保使用正版Arduino Uno板,并且正确安装了Arduino开发环境。 2. 设置Arduino开发环境:下载并安装Arduino IDE,并通过适当的驱动程序安装Arduino Uno板的USB串行驱动程序。然后在IDE中选择正确的Arduino Uno板和串口。 3. 配置阿里云:在阿里云控制台上创建一个物联网平台实例。在实例中创建一个设备,获取对应的设备证书。然后,在阿里云控制台上创建一个Topic,并配置相应的发布和订阅权限。 4. 编写代码:使用Arduino IDE编写一个Arduino程序,该程序将连接到阿里云物联网平台,并利用阿里云物联网平台SDK发送和接收消息。在代码中,使用设备证书设置设备的认证信息,并连接到阿里云物联网平台MQTT服务器。然后,通过阿里云物联网平台SDK提供的API发送和接收消息。 5. 编译和上传:编译代码并将其上传到Arduino Uno板。确保板子与计算机保持连接,并且选择正确的串口和板子。 6. 测试:验证Arduino Uno是否已成功连接到阿里云。在阿里云控制台上订阅设备所在Topic,并通过阿里云控制台向设备发送消息。如果一切正常,设备应该能够接收并处理这些消息。 通过以上步骤,您可以将Arduino Uno接入阿里云,并实现与阿里云物联网平台的通信。 ### 回答3: Arduino Uno是一款开源的微控制器开发板,可以用于实现各种电子项目。要将Arduino Uno接入阿里云,需要进行以下步骤: 1. 准备硬件设备:除了Arduino Uno主板外,还需要一个ESP8266或者ESP32无线模块,用于连接到Wi-Fi网络。 2. 配置软件环境:首先,需要在Arduino IDE中安装与Arduino Uno兼容的ESP8266或ESP32开发板支持。然后,在阿里云物联网平台注册账号,创建一个设备,获取到设备的三元组信息(即设备的物联网平台的ProductKey、DeviceName和DeviceSecret)。 3. 编写程序:使用Arduino IDE,编写程序将Arduino Uno与ESP8266或ESP32进行通信,并将设备连接到阿里云物联网平台。在代码中,需要引入ESP8266WiFi或者WiFiNINA,以及阿里云物联网平台的PubSubClient,用于实现Wi-Fi连接和MQTT通信。 4. 配置程序:在程序中,需要填入Wi-Fi网络的名称和密码,以及设备的三元组信息。然后,将程序上传到Arduino Uno主板上。 5. 测试连接:重新启动Arduino Uno主板,等待设备连接到Wi-Fi网络和阿里云物联网平台。然后,通过物联网平台的控制台进行设备的监控和控制。 通过以上步骤,就可以将Arduino Uno成功接入阿里云接入后,可以实现与阿里云物联网平台的双向通信,实现数据的上传、读取和控制。这样,就可以通过阿里云提供的平台功能,对接入Arduino Uno的设备进行监控和控制,实现智能化的应用场景。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值