esp32 +阿里云+Arduino 实现上传和下发信息实例 示例:通过PC端wifi通信实现用阿里云SetDeviceProperty API 控制蜂鸣器响

1.vscode 创建.js项目 ,导入如下代码  注意你要下载 rhea 和crypto这两个库

const container = require('rhea');
const crypto = require('crypto');

//创建Connection。
var connection = container.connect({
    //接入域名,请参见AMQP客户端接入说明文档。
    'host': '${YourHost}',
    'port': 5671,
    'transport':'tls',
    'reconnect':true,
    'idle_time_out':60000,
    //userName组装方法,请参见AMQP客户端接入说明文档。
    'username':'${YourClientId}|authMode=aksign,signMethod=hmacsha1,timestamp=1573489088171,authId=${YourAccessKeyId},iotInstanceId=${YourIotInstanceId},consumerGroupId=${YourConsumerGroupId}|', 
    //计算签名,password组装方法,请参见AMQP客户端接入说明文档。
    'password': hmacSha1('${YourAccessKeySecret}', 'authId=${YourAccessKeyId}&timestamp=1573489088171'),
});

//创建Receiver Link。
var receiver = connection.open_receiver();

//接收云端推送消息的回调函数。
container.on('message', function (context) {
    var msg = context.message;
    var messageId = msg.message_id;
    var topic = msg.application_properties.topic;
    var content = Buffer.from(msg.body.content).toString();

    // 输出内容。
    console.log(content);

    //发送ACK,注意不要在回调函数有耗时逻辑。
    context.delivery.accept();
});

//计算password签名。
function hmacSha1(key, context) {
    return Buffer.from(crypto.createHmac('sha1', key).update(context).digest())
        .toString('base64');
}

2.根据阿里云官方文档修改这部分内容,填写自己的信息  官方文档连接: Node.js SDK接入示例 (aliyun.com)

 3.Arduino上 编写如下代码


// 引入 wifi 模块,并实例化,不同的芯片这里的依赖可能不同
#include <WiFi.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"


#define BUZZER_PIN 13     //定义蜂鸣器引脚为13
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("RunningState", powerCallback);
    
    // 发送一个数据到云平台,LightLuminance 是在设备产品中定义的物联网模型的 id

      pinMode(BUZZER_PIN, OUTPUT); //将蜂鸣器引脚设为输出
  digitalWrite(BUZZER_PIN, HIGH); //初始化为高电平,使蜂鸣器停止响

}

void loop()
{
    AliyunIoTSDK::loop();
        // AliyunIoTSDK::send("RunningState", 100);
        delay(1000);
}

// 初始化 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["RunningState"];
   
        // 启动设备
         if(PowerSwitch==999){
           digitalWrite(BUZZER_PIN, LOW);  //将蜂鸣器引脚设为低电平,使蜂鸣器响起
           delay(500);                    //等待500毫秒
  digitalWrite(BUZZER_PIN, HIGH); //将蜂鸣器引脚设为高电平,使蜂鸣器停止响
  delay(500);                    //等待500毫秒
         }
        Serial.println(PowerSwitch);

    
}

蜂鸣器插13号引脚

注意这部分填写你自己的信息,PRODUCT_KEY这些东西阿里云上的,你刚刚也填过 

然后上传

4. 然后打开串口工具 按esp32左边的EN重启  注意打开手机热点  iPhone用户要开启 最大兼容性

 5.vscod这边 node test2.js

 成功的话出现如下信息

 同时阿里云上面的实例也会显示在线了

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>