这几天没事看到我还有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平台就能看到设备已激活
下次等我买些硬件就做消息订阅推送,这就就这样
网友评论