美文网首页IOT
Esp8266 D1 Mini连接阿里云IOT

Esp8266 D1 Mini连接阿里云IOT

作者: 坐在坟头数星星 | 来源:发表于2019-07-14 18:28 被阅读0次

这几天没事看到我还有Esp8266在哪里吃灰,想着马上5G了也得搞搞IOT是吧,然后翻阅些资料自己整理下防止以后忘了哈哈······

这里我主要做了一个连接订阅阿里IOT而已,主要是手上也就一个8266板子然后啥都没有,过几天买些硬件在数据上传和发布数据。

废话不多说先上硬件


这是在某宝上买的(好便宜啊),买来的时候上面已经标注固件已经刷了ModeMcu所以我没刷固件,刷固件教程也不少,推荐哔哩哔哩 哈哈暴露了·····

下来我们先注册阿里IOT根据图示操作

第一次使用的画应该是立即使用好像,这里很简单注册认证就好

下来我们创建一个产品,产品定义通俗的来讲就是一个有许多功能的设备,比如网络摄像机(可能有舵机,摄像头,红外线等等····)

我用的8266所以联网方式是WIFI,有些设备是直接通过网关连接阿里的

然后开始创建设备,设备顾名思义就是一台机器。产品和设备就属于一种一对多关系,一个产品就会有多个运行的设备对吧,这样是不是好理解点。

主要就是选择对应产品;DeviceName如果不想输入会默认生成,DeviceName就是方便你查看设备的状态,比如你有100台设备你想知道某一台设备的情况就需要DeviceName去查询;备注就随意看你自己需求

创建完成后会生成一条设备,可以查看MQTT连接所需要的KEY


上面所指的三个信息也是连接最主要的东西了

接下来阿里还是开发环境好,为我们提供了在线编译器,省去了我们下载IDE配置环境等一些麻烦的操作



怎么样感觉是不是很开森

接下来我们创建项目


这里注意下这个ini文件,这个文件就是配置项目依赖的配置文件

打开ini配置些依赖,

是不是想问依赖怎么加的?



然后在页面下方有个build选项点击会加载所需要的库


加载完后需要改些参数,这个很重要哦,不然会运行失败的。

接下来开始编写代码,也就是官方提供的实例代码很简单没什么太多改动。

创建main.ino文件,名字自己随意没啥区别,粘贴下面代码填入自己对应的参数

#include <ESP8266WiFi.h>
#include <ArduinoJson.h>
#include <aliyun_mqtt.h>

// Wifi名称和密码,你WemosD1Mini上网时需要接入的Wifi账号和密码
#define WIFI_SSID "自家WIFI账号"
#define WIFI_PASSWD "自家WIFI密码"

// LP的设备三元组(PK/DN/DS)根据你云端创建的设备三码进行更改
#define PRODUCT_KEY "阿里云ProductKey"
#define DEVICE_NAME "阿里云DeviceName"
#define DEVICE_SECRET "阿里云DeviceSecret"

// Alink协议格式和Topic定义 这个部分是固定格式不用进行修改
#define ALINK_BODY_FORMAT "{\"id\":\"123\",\"version\":\"1.0\",\"method\":\"%s\",\"params\":%s}"
#define ALINK_TOPIC_PROP_POST "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/event/property/post"
#define ALINK_TOPIC_PROP_POSTRSP "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/event/property/post_reply"
#define ALINK_TOPIC_PROP_SET "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/service/property/set"
#define ALINK_METHOD_PROP_POST "thing.event.property.post"

// 创建WiFiClient实例
WiFiClient espClient;

//创建MqttClient实例
PubSubClient mqttClient(espClient);

//连接Wifi
void initWifi(const char *ssid, const char *password)
{
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED)
  {
    Serial.println("WiFi does not connect, try again ...");
    delay(3000);
  }

  Serial.println("Wifi is connected.");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}


 //监听云端下发的指令
void callback(char *topic, byte *payload, unsigned int length)
{
    Serial.print("Message arrived [");
    Serial.print(topic);
    Serial.print("] ");
    payload[length] = '\0';
    Serial.println((char *)payload);

    if (strstr(topic, ALINK_TOPIC_PROP_SET))
    {
        StaticJsonBuffer<200> jsonBuffer;
        JsonObject &root = jsonBuffer.parseObject(payload);
        if (!root.success())
        {
            Serial.println("parseObject() failed");
        } else {
            Serial.println("parseObject() success");
            //下一步对收到的云端指令进行处理
        }
    }
}

//连接Mqtt
void mqttCheckConnect()
{
    bool connected = connectAliyunMQTT(mqttClient, PRODUCT_KEY, DEVICE_NAME, DEVICE_SECRET);
    if (connected) {
        Serial.println("MQTT connect succeed!");
        // client.subscribe(ALINK_TOPIC_PROP_POSTRSP);
        mqttClient.subscribe(ALINK_TOPIC_PROP_SET); // 订阅属性设置Topic
        Serial.println("subscribe done");
    }
}

void setup() {
    Serial.begin(115200);

    initWifi(WIFI_SSID, WIFI_PASSWD); // 连接Wifi

    mqttClient.setCallback(callback); // 设置回调监听云端下发的指令
}

void loop() {
    mqttCheckConnect(); // MQTT上云
    mqttClient.loop();

    delay(3000); // 每1秒连接一次
}

再次运行Build看下有没有异常,应该是没有,有的话检查下依赖是不是正确,最好和我上面依赖相同,之前发现阿里有的官方代码是不支持Json v6只能用v5,看下异常log就知道

没问题的话还需要在下载设备驱动,用于我们联机刷程序进去

下载完后解压就好

在刷系统前先看下串口驱动是否正常,CH340就是8266,如果没有的小伙伴需要去下载驱动

没问题后打开我们解压出来的run-win.bat

可不要吧这个关了,不然网页编辑器识别不到设备

接着打开在网页中点击run选择自己的设备串口就等待烧录成功咯


然后打开阿里云IOT平台就能看到设备已激活

下次等我买些硬件就做消息订阅推送,这就就这样

相关文章

网友评论

    本文标题:Esp8266 D1 Mini连接阿里云IOT

    本文链接:https://www.haomeiwen.com/subject/ygxikctx.html