赞
踩
初衷:现在在做一个智能家居教程,手把手带你做智能家居,一是自己也是学习并且做出了实物不久,现在印象深刻,写下来可以作为笔记观看。另一方面,是在做的过程中发现现在网上的一些智能家居项目都很古老了,一些云平台已经更新了很多,网上大部分教程的代码已经不适用了。所以想做一个新版智能家居的教程,帮助大家更好的学习。
实现功能:本系统使用 ESP8266开发板作为主控器,采用 WiFi 作为无线传输方式,先将连接的环境采集传感器(温度、湿度、烟雾、人体红外)进行存储和分析,之后将处理好的数据编入 JSON 格式中上传到阿里云平台。使用 uni-app 开发设计手机端 APP,手机 APP 也使用 MQTT 协议接入阿里云物联网平台,让平台数据可以在 APP 端显示,并且 APP 端可以向平台发送指令,远程控制ESP8266端电器设备(空调、热水器、电灯)。可以根据自己的设计想法在框架上进行拓展,拓展很简单因为框架已经写好了。
目录
我们选择MQTT协议进行连接, MQTT协议是一种发布/订阅的物联网模式,设备可以通过订阅主题来接收数据,也可以向主题内发布数据,让其它设备订阅,以此达到数据通信的目的。操作模式简单,对网络性能需求低,可以在网络信号不佳的情况下运行,非常适合远程物联网系统设计。在发布/订阅模式下,ESP8266端和手机APP都可以作为订阅者和发布者,实现消息互传,ESP8266传给手机APP传感器数据,手机APP发布远程控制电器设备指令。
设备连接阿里云平台,需要先在阿里云平台创建设备,才能进行认证连接。打开阿里云-计算,为了无法计算的价值阿里云官网,
按步骤进入阿里云物联网平台,
点击管理控制台,进入注册,注册登录后,开通公共实例,公共实例是免费使用的,除此之外还有企业版实例。
//创建产品其实我最开始理解错误了,我一开始觉得,每个传感器都自己作为一个产品,所以创建了很多个,其实不是这样。其实这些都可以放在一个产品下面,比如这次设计中的esp8266,手机app等。虽然传感器和电器设备很多,但是终究是ESP8266发送这些数据,或者控制这些设备,所以这个整体算是一个设备。手机APP也算一个设备,为什么手机APP不和ESP8266只用一个设备呢,后面会进行讲解。
点击创建产品,输入产品名称(这个无所谓),选择自定义类型,直连设备,Wi-Fi联网方式,JSON数据格式。
创建产品后,点击管理设备去添加设备,输入设备名称和备注,这里的设备名称是阿里云连接三要素之一(ProductKey、DeviceName、DeviceSecret),所以要认真填写。这里填写如下图所示
查看刚创建好的设备连接参数,就是它的设备证书如下图所示,把三要素复制下来备用。
用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。代码如下:
- #include <ESP8266WiFi.h>
- const char* ssid = "zhinengjiaju";
- const char* password = "77777777";
-
- void setup() {
- // put your setup code here, to run once:
- Serial.begin(115200);
- WiFi.begin(ssid,password);
- Serial.println("connecting...");
-
- while (WiFi.status() != WL_CONNECTED)
- {
- delay(500);
- Serial.print(".");
- }
-
- Serial.println("connected successfully!");
- Serial.print("ESP8266 IP:");
- Serial.println(WiFi.localIP());
-
- }
-
- void loop() {
-
-
- }
上传程序建议使用数据线,直接连接选好端口和开发板进行编译上传。如果要使用USB转ttl,在下载之前的时候先按住flash别松手,再按下rst。之后再点击上传,这样利用USB转ttl才能上传成功,同时,要注意的是USB转ttl的3V3可能电源电压不够,这样虽然程序可以烧进去,但是并不能运行。
连接WiFi成功如下图所示
连接好WiFi后就可以通过MQTT协议连接阿里云平台了,需要2个库函数分别是ESP8266WiFi.h和PubSubClient.h,在库管理中安装好PubSubClient.h库,这个库用来订阅主题和向主题内发送消息,就是用这个库来连接的设备,ESP8266WiFi.h库在前几步安装好esp8266开发板库之后,就附带安装了,所以不需要再次安装(也搜索不到),直接include就行。
注意安装好PubSubClient.h之后,要对库文件里面的最大报文限制和心跳值进行修改,不然连接不上阿里云。找到Arduino的库文件,不知道在哪,就从IDE打开首选项,查看项目文件夹地址。
然后去找到它,打开找到libraries文件夹,打开找到PubSubClient.h,
将这两处地方,修改数值为1024和60。
ESP8266连接云平台设备,需要设备的MQTT连接参数。在阿里云平台设备信息里面查看连接参数如下图所示。
根据这些参数将代码内的相应部分进行替换。
- #include <ESP8266WiFi.h>
- #include <PubSubClient.h>
- // 板载LED用于指示esp8266连接状态,注意esp8266是低电平亮,高电平灭
- const int MCU_LED = 2;
- /* 连接您的WIFI SSID和密码 */
- const char *WIFI_SSID = "zhinengjiaju";
- const char *WIFI_PASSWD = "77777777";
-
- /* 阿里云产品设备的MQTT连接参数 ,在阿里云设备MQTT连接参数中查看,把五个参数替换成自己的*/
- const char *MQTT_SERVER = "iot-06z00f9d1mq28js.mqtt.iothub.aliyuncs.com";
- const int MQTT_PORT = 1883;
- const char *MQTT_USRNAME = "NodeMCU&k17gx3Z9Ifb";
-
- const char *CLIENT_ID = "k17gx3Z9Ifb.NodeMCU|securemode=2,signmethod=hmacsha256,timestamp=1716971834105|";
- const char *MQTT_PASSWD = "63c0ae71534a918013a4845516959c369604dc10befdcd8d208d1fd9a3e3b03c";
- unsigned long lastMs = 0;//用于定时
- WiFiClient espClient;
- PubSubClient client(espClient);
-
- void wifiInit()
- {
- WiFi.mode(WIFI_STA);
- WiFi.begin(WIFI_SSID, WIFI_PASSWD); //连接WiFi
- while (WiFi.status() != WL_CONNECTED)
- {
- delay(1000); //这个延迟函数一定要有,不然连接不上
- digitalWrite(MCU_LED,LOW);
-
- }
- delay(30);
- digitalWrite(MCU_LED,HIGH);
- client.setServer(MQTT_SERVER, MQTT_PORT); /* 连接WiFi之后,连接MQTT服务器 */
- }
-
- void mqttCheckConnect()
- {
- while (!client.connected())
- {
- Serial.println("Connecting to MQTT Server ...");
- if (client.connect(CLIENT_ID, MQTT_USRNAME, MQTT_PASSWD))
- {
- digitalWrite(MCU_LED,HIGH);
- }
- else
- {
- digitalWrite(MCU_LED,LOW);
- Serial.print("MQTT Connect err:");
- Serial.println(client.state());
- delay(1000);
- }
-
- }
- }
- void setup()
- {
- pinMode(MCU_LED,OUTPUT);
- Serial.begin(115200);
- Serial.println("Demo Start");
- wifiInit();
- }
-
- void loop()
- {
- if (millis() - lastMs >= 5000)//每过5s就监测一下mqtt物联网连接状态
- {
- lastMs = millis();
- mqttCheckConnect();
- client.loop();
- }
- }
运行成功后,去阿里云平台查看设备状态,发现在线,代表ESP8266接入云平台成功。
下一节讲
感谢观看,下期再见=3=
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。