当前位置:   article > 正文

【智能家居控制系统保姆级教程】ESP8266连接阿里云物联网平台_esp8266 阿里云

esp8266 阿里云

初衷:现在在做一个智能家居教程,手把手带你做智能家居,一是自己也是学习并且做出了实物不久,现在印象深刻,写下来可以作为笔记观看。另一方面,是在做的过程中发现现在网上的一些智能家居项目都很古老了,一些云平台已经更新了很多,网上大部分教程的代码已经不适用了。所以想做一个新版智能家居的教程,帮助大家更好的学习。

实现功能:本系统使用 ESP8266开发板作为主控器,采用 WiFi 作为无线传输方式,先将连接的环境采集传感器(温度、湿度、烟雾、人体红外)进行存储和分析,之后将处理好的数据编入 JSON 格式中上传到阿里云平台。使用 uni-app 开发设计手机端 APP,手机 APP 也使用 MQTT 协议接入阿里云物联网平台,让平台数据可以在 APP 端显示,并且 APP 端可以向平台发送指令,远程控制ESP8266端电器设备(空调、热水器、电灯)。可以根据自己的设计想法在框架上进行拓展,拓展很简单因为框架已经写好了。

目录

1 MQTT协议

2 阿里云平台创建设备

2.1 创建产品

2.2 创建设备

3 ESP8266接入阿里云

3.1 ESP8266连接WiFi

3.2 ESP8266连接阿里云


1 MQTT协议

我们选择MQTT协议进行连接, MQTT协议是一种发布/订阅的物联网模式,设备可以通过订阅主题来接收数据,也可以向主题内发布数据,让其它设备订阅,以此达到数据通信的目的。操作模式简单,对网络性能需求低,可以在网络信号不佳的情况下运行,非常适合远程物联网系统设计。在发布/订阅模式下,ESP8266端和手机APP都可以作为订阅者和发布者,实现消息互传,ESP8266传给手机APP传感器数据,手机APP发布远程控制电器设备指令。

2 阿里云平台创建设备

设备连接阿里云平台,需要先在阿里云平台创建设备,才能进行认证连接。打开阿里云-计算,为了无法计算的价值阿里云官网,

按步骤进入阿里云物联网平台,

点击管理控制台,进入注册,注册登录后,开通公共实例,公共实例是免费使用的,除此之外还有企业版实例。

2.1 创建产品

//创建产品其实我最开始理解错误了,我一开始觉得,每个传感器都自己作为一个产品,所以创建了很多个,其实不是这样。其实这些都可以放在一个产品下面,比如这次设计中的esp8266,手机app等。虽然传感器和电器设备很多,但是终究是ESP8266发送这些数据,或者控制这些设备,所以这个整体算是一个设备。手机APP也算一个设备,为什么手机APP不和ESP8266只用一个设备呢,后面会进行讲解。

点击创建产品,输入产品名称(这个无所谓),选择自定义类型,直连设备,Wi-Fi联网方式,JSON数据格式。


2.2 创建设备

创建产品后,点击管理设备去添加设备,输入设备名称和备注,这里的设备名称是阿里云连接三要素之一(ProductKey、DeviceName、DeviceSecret),所以要认真填写。这里填写如下图所示

查看刚创建好的设备连接参数,就是它的设备证书如下图所示,把三要素复制下来备用。

3 ESP8266接入阿里云

3.1 ESP8266连接WiFi

用Arduino IDE开发esp8266需要先导入esp8266开发板,因为Arduino IDE默认是给Arduino开发板用的,默认只有Arduino开发板的相关开发资源。要想在在Arduino IDE中使用ESP8266,需要额外安装ESP8266的开发板资源。安装方式有两种,一种是在线安装,一种是使用离线包安装。

打开Arduino IDE,依次打开 文件 -> 首选项,在“附加开发板管理器网址”一栏添加以下网址。

http://arduino.esp8266.com/stable/package_esp8266com_index.json然后重启Arduino IDE,再如下图步骤打开开发板管理器,在管理器中搜索esp8266进行安装下载。

问什么知道要在首选项中开发板管理器地址中输入上述网址呢,是在Arduino官网中知道的。

如何跳转相应的github呢,可以现在首选项中输入开发板管理器网址,然后在库管理中搜索esp8266可以出现更过信息,点击即可进入。也可直接搜这个链接 "https://github.com/esp8266/Arduino",)

这种方式下载速度极慢,等就行。下载好之后,如果你使用的是ESP8266 NodeMCU或者ESP-12F开发板,就在Arduino IDE中选择NodeMCU ESP-12E就行,如下图所示

使用Arduino IDE进行编程设计,如果要测试手机热点进行连接的话,把热点名称改成全英文的名,同时注意与手机热点连接时,要将将手机热点设置成2.4G频段,不然ESP8266搜索不到,串口频率更改成ESP8266开发板背面标记的频率,我手头的是115200。代码如下:

  1. #include <ESP8266WiFi.h>
  2. const char* ssid = "zhinengjiaju";
  3. const char* password = "77777777";
  4. void setup() {
  5. // put your setup code here, to run once:
  6. Serial.begin(115200);
  7. WiFi.begin(ssid,password);
  8. Serial.println("connecting...");
  9. while (WiFi.status() != WL_CONNECTED)
  10. {
  11. delay(500);
  12. Serial.print(".");
  13. }
  14. Serial.println("connected successfully!");
  15. Serial.print("ESP8266 IP:");
  16. Serial.println(WiFi.localIP());
  17. }
  18. void loop() {
  19. }

上传程序建议使用数据线,直接连接选好端口和开发板进行编译上传。如果要使用USB转ttl,在下载之前的时候先按住flash别松手,再按下rst。之后再点击上传,这样利用USB转ttl才能上传成功,同时,要注意的是USB转ttl的3V3可能电源电压不够,这样虽然程序可以烧进去,但是并不能运行。

连接WiFi成功如下图所示

3.2 ESP8266连接阿里云

连接好WiFi后就可以通过MQTT协议连接阿里云平台了,需要2个库函数分别是ESP8266WiFi.h和PubSubClient.h,在库管理中安装好PubSubClient.h库,这个库用来订阅主题和向主题内发送消息,就是用这个库来连接的设备,ESP8266WiFi.h库在前几步安装好esp8266开发板库之后,就附带安装了,所以不需要再次安装(也搜索不到),直接include就行。

注意安装好PubSubClient.h之后,要对库文件里面的最大报文限制和心跳值进行修改,不然连接不上阿里云。找到Arduino的库文件,不知道在哪,就从IDE打开首选项,查看项目文件夹地址。

然后去找到它,打开找到libraries文件夹,打开找到PubSubClient.h,

将这两处地方,修改数值为1024和60。

ESP8266连接云平台设备,需要设备的MQTT连接参数。在阿里云平台设备信息里面查看连接参数如下图所示。

根据这些参数将代码内的相应部分进行替换。

  1. #include <ESP8266WiFi.h>
  2. #include <PubSubClient.h>
  3. // 板载LED用于指示esp8266连接状态,注意esp8266是低电平亮,高电平灭
  4. const int MCU_LED = 2;
  5. /* 连接您的WIFI SSID和密码 */
  6. const char *WIFI_SSID = "zhinengjiaju";
  7. const char *WIFI_PASSWD = "77777777";
  8. /* 阿里云产品设备的MQTT连接参数 ,在阿里云设备MQTT连接参数中查看,把五个参数替换成自己的*/
  9. const char *MQTT_SERVER = "iot-06z00f9d1mq28js.mqtt.iothub.aliyuncs.com";
  10. const int MQTT_PORT = 1883;
  11. const char *MQTT_USRNAME = "NodeMCU&k17gx3Z9Ifb";
  12. const char *CLIENT_ID = "k17gx3Z9Ifb.NodeMCU|securemode=2,signmethod=hmacsha256,timestamp=1716971834105|";
  13. const char *MQTT_PASSWD = "63c0ae71534a918013a4845516959c369604dc10befdcd8d208d1fd9a3e3b03c";
  14. unsigned long lastMs = 0;//用于定时
  15. WiFiClient espClient;
  16. PubSubClient client(espClient);
  17. void wifiInit()
  18. {
  19. WiFi.mode(WIFI_STA);
  20. WiFi.begin(WIFI_SSID, WIFI_PASSWD); //连接WiFi
  21. while (WiFi.status() != WL_CONNECTED)
  22. {
  23. delay(1000); //这个延迟函数一定要有,不然连接不上
  24. digitalWrite(MCU_LED,LOW);
  25. }
  26. delay(30);
  27. digitalWrite(MCU_LED,HIGH);
  28. client.setServer(MQTT_SERVER, MQTT_PORT); /* 连接WiFi之后,连接MQTT服务器 */
  29. }
  30. void mqttCheckConnect()
  31. {
  32. while (!client.connected())
  33. {
  34. Serial.println("Connecting to MQTT Server ...");
  35. if (client.connect(CLIENT_ID, MQTT_USRNAME, MQTT_PASSWD))
  36. {
  37. digitalWrite(MCU_LED,HIGH);
  38. }
  39. else
  40. {
  41. digitalWrite(MCU_LED,LOW);
  42. Serial.print("MQTT Connect err:");
  43. Serial.println(client.state());
  44. delay(1000);
  45. }
  46. }
  47. }
  48. void setup()
  49. {
  50. pinMode(MCU_LED,OUTPUT);
  51. Serial.begin(115200);
  52. Serial.println("Demo Start");
  53. wifiInit();
  54. }
  55. void loop()
  56. {
  57. if (millis() - lastMs >= 5000)//每过5s就监测一下mqtt物联网连接状态
  58. {
  59. lastMs = millis();
  60. mqttCheckConnect();
  61. client.loop();
  62. }
  63. }

运行成功后,去阿里云平台查看设备状态,发现在线,代表ESP8266接入云平台成功。

下一节讲

  1. 阿里云平台设备物模型定义,给设备添加属性
  2. ESP8266如何订阅设备主题
  3. ESP8266向云平台上报数据
  4. ESP8266接收云平台数据,实现远程对ESP8266端进行控制

感谢观看,下期再见=3=

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/920029
推荐阅读
相关标签
  

闽ICP备14008679号