ESP-8266接入阿里云开关LED

ESP-8266接入阿里云开关LED

我们通过esp8266连接到阿里云,再通过阿里云绑定修改led属性,esp8266接收到mqtt协议报文处理我们的开关灯函数

阿里云控制台添加设备,esp8266程序环境搭建,esp8266程序烧录

个人开发测试阿里云是免费的


操作步骤

1.阿里云添加设备

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
到这里我们就有了一个设备了。当前现在还没有在线。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
查看复制设备证书!等会要把这些放到代码中
在这里插入图片描述

2.Arduino引入库

Arduino需要安装 ArduinoJson,Crypto,PubSubClient库
Esp8266 需要在Arduino中安装 ESP8266库

① 搜索安装mqtt

在这里插入图片描述

② 搜索安装ArduinoJson

在这里插入图片描述

③ 搜索安装Crypto在这里插入图片描述
④ 搜索安装PubSubClient在这里插入图片描述

3 修改PubSubClient.h两个参数

如果不修改的话,会提示-2的错误
我的文件夹地址 C:\Users\Administrator\Documents\Arduino\libraries\PubSubClient\src
在这里插入图片描述

4 编写点灯代码变更自己的wifi和产品信息
// 引入 wifi 模块,并实例化,不同的芯片这里的依赖可能不同
#include <ESP8266WiFi.h>
static WiFiClient espClient;

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

// 设置产品和设备的信息,从阿里云设备信息里查看
#define PRODUCT_KEY "a14xxxxxfXtk"
#define DEVICE_NAME "LED_1"
#define DEVICE_SECRET "504a83a60bxxxxxxxxxxxxxxx18ed6"
#define REGION_ID "cn-shanghai"

// 设置 wifi 信息
#define WIFI_SSID "0"
#define WIFI_PASSWD "12345678"

void setup()
{
    // set the digital pin as output:
    pinMode(LED_BUILTIN, OUTPUT);
    digitalWrite(LED_BUILTIN, HIGH);
    
    Serial.begin(115200);
    
    // 初始化 wifi
    wifiInit(WIFI_SSID, WIFI_PASSWD);
    
    // 初始化 iot,需传入 wifi 的 client,和设备产品信息
    AliyunIoTSDK::begin(espClient, PRODUCT_KEY, DEVICE_NAME, DEVICE_SECRET, REGION_ID);
    
    // 绑定一个设备属性回调,当远程修改此属性,会触发 ledSwitchCallback
    // PowerSwitch 是在设备产品中定义的物联网模型的 id
    AliyunIoTSDK::bindData("LEDSwitch", ledSwitchCallback);
}

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

// LED状态修改的回调函数
void ledSwitchCallback(JsonVariant p)
{
    int LEDSwitch = p["LEDSwitch"];
    // 变更LED状态
    digitalWrite(LED_BUILTIN, LEDSwitch);
}

最后

Arduino烧录到esp8266
在这里插入图片描述
打开串口调试
在这里插入图片描述
在这里插入图片描述

  • 4
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
接入阿里云物联网平台之前,您需要先了解以下概念: 1. 阿里云物联网平台:提供物联网设备连接和管理、数据存储、消息通信等服务的云平台。 2. 设备影子:用于描述物联网设备在阿里云物联网平台上的虚拟影子,包括设备属性、设备状态和设备控制等信息。 3. MQTT协议:一种基于发布/订阅模式的通信协议,是物联网设备与云端之间常用的通信协议之一。 以下是ESP8266接入阿里云物联网平台的代码示例: ```c #include <ESP8266WiFi.h> #include <PubSubClient.h> #include <ArduinoJson.h> // WiFi网络名称和密码 const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; // 阿里云物联网平台参数 const char* mqttServer = "your_MQTT_SERVER"; const int mqttPort = 1883; const char* mqttUsername = "your_MQTT_USERNAME"; const char* mqttPassword = "your_MQTT_PASSWORD"; const char* clientId = "your_CLIENT_ID"; const char* deviceName = "your_DEVICE_NAME"; const char* productKey = "your_PRODUCT_KEY"; // MQTT客户端对象 WiFiClient wifiClient; PubSubClient mqttClient(wifiClient); // 连接WiFi网络 void connectWiFi() { Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } // MQTT回调函数 void mqttCallback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived in topic: "); Serial.println(topic); Serial.print("Message:"); for (int i = 0; i < length; i++) { Serial.print((char)payload[i]); } Serial.println(); } // 连接阿里云物联网平台 void connectAliyunIoTPlatform() { mqttClient.setServer(mqttServer, mqttPort); while (!mqttClient.connected()) { Serial.println("Connecting to MQTT server..."); if (mqttClient.connect(clientId, mqttUsername, mqttPassword)) { Serial.println("MQTT client connected"); // 订阅设备控制主题 char controlTopic[100]; sprintf(controlTopic, "/%s/%s/user/control", productKey, deviceName); mqttClient.subscribe(controlTopic); Serial.print("Subscribed to: "); Serial.println(controlTopic); // 更新设备影子 char updateTopic[100]; sprintf(updateTopic, "/sys/%s/%s/thing/shadow/update", productKey, deviceName); StaticJsonDocument<200> jsonDoc; JsonObject shadowObj = jsonDoc.createNestedObject("state").createNestedObject("reported"); shadowObj["power"] = true; shadowObj["temperature"] = 25; String updatePayload; serializeJson(jsonDoc, updatePayload); mqttClient.publish(updateTopic, updatePayload.c_str()); Serial.print("Update shadow: "); Serial.println(updatePayload); } else { Serial.print("MQTT connection failed with state "); Serial.print(mqttClient.state()); delay(2000); } } } void setup() { Serial.begin(115200); connectWiFi(); } void loop() { if (!mqttClient.connected()) { connectAliyunIoTPlatform(); } mqttClient.loop(); } ``` 相关问题: 1. 如何在阿里云物联网平台上创建设备? 2. 如何设置设备影子? 3. 如何通过MQTT协议向阿里云物联网平台发送数据? 4. 如何从阿里云物联网平台接收数据?

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值