Arduino物联网快速开发:基于ESP8266与点灯Blinker制作小白都会的DIY《智能家居》系统

这篇具有很好参考价值的文章主要介绍了Arduino物联网快速开发:基于ESP8266与点灯Blinker制作小白都会的DIY《智能家居》系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 前言

我们要制作一款能够远程控制家里灯、风扇的开关,并采集温湿度、光照传输到手机APP上。正好看到了点灯Blinker的开源方案,blinker是一套跨硬件、跨平台的物联网解决方案,提供APP端、设备端、服务器端支持,使用公有云服务进行数据传输。可用于智能家居、数据监测等领域,可以帮助用户更好更快地搭建物联网项目。APP通过拖动控件就可以进行DIY界面了,非常方便。话不多说,那么接下来我们就一起来试试吧。

整篇文章内容较长,但全是精髓,末尾有源码参考。(注意:硬件引脚不一定与我相同,请谨慎使用。)


目录


前言

一、准备工作

所用到的硬件:

软件准备:

1、电脑安装-Arduino IDE

2、手机安装-blinker APP

3、下载并安装blinker Arduino库

4、在手机app端中添加设备,获取Secret Key

二、开始编程

1.控制部分

2.温湿度采集部分

3.光照采集部分

4.项目完整源码


一、准备工作

所用到的硬件:

esp8266 MINI开发板

G5516光敏传感器模块

DHT11温湿度传感器模块

一路5V继电器

小风扇(5V驱动)

LED发光二极管(直插) 2个

轻触开关(用来做开关电路) 2个

1K电阻 2个

20K电阻 2个

电源准备:充电宝或18650锂电池

因为芯片的IO口肯定是带不动小风扇的,所以得上一路5V继电器供电给风扇外接。

 

arduino esp8266 led,物联网,智能家居,c++,嵌入式硬件

arduino esp8266 led,物联网,智能家居,c++,嵌入式硬件

整个板子的原理图.以及板子的实物

软件准备:

1、电脑安装-Arduino IDE

①.先安装好ArduinoIDE(如果已安装,直接跳到第二步,详细安装ArduinoIDE的方法本篇不再赘述)
下载Arduino IDE

②.打开Arduino IDE菜单 > 文件 >首选项,在 附加开发板管理器网址 输入框中,填入以下网址:
Arduino中文社区

③.下载社区打包的esp32安装包,直接运行并解压即可。
下载地址:Arduino中文社区

双击运行即可解压,解压完成后,再打开Arduino IDE,即可在 菜单栏>工具>开发板 中找到你使用的esp8266开发板

PS:如果要添加多个开发板地址,请点后面的按钮,然后一行一个

arduino esp8266 led,物联网,智能家居,c++,嵌入式硬件

2、手机安装-blinker APP

下载并安装blinker APP

Android下载:
点击下载 或 在android应用商店搜索“blinker”下载安装
IOS下载:
点击下载 或 在app store中搜索“blinker”下载

3、下载并安装blinker Arduino库

    ①.下载地址:点灯科技-点灯物联网解决方案

    ②.通过Arduino IDE 菜单>项目>加载库>添加.ZIP库 导入到库,如图:

arduino esp8266 led,物联网,智能家居,c++,嵌入式硬件

4、在手机app端中添加设备,获取Secret Key

  1. 进入App,点击右上角的“+”号,然后选择 添加设备
  2. 点击选择Arduino > WiFi接入
  3. 复制申请到的Secret Key(一会写代码会用到)

二、开始编程

1.控制部分

我们打开Arduino IDE,通过 文件>示例>Blinker>Blinker_Hello/Hello_WiFi 打开例程

arduino esp8266 led,物联网,智能家居,c++,嵌入式硬件

打开例程 我们开始进行修改

首先要改的是这部分

arduino esp8266 led,物联网,智能家居,c++,嵌入式硬件

Secret Key是在我们手机端blinker APP 上面获取的

 

arduino esp8266 led,物联网,智能家居,c++,嵌入式硬件

  

 获取好了之后,我们就获得了自己的Secret Key码我们把复制好的key加进我们的代码里面

char auth[] = "b62b9765dccf"; //APP上的key
char ssid[] = "WIFI名称"; //WIFI的名称
char pswd[] = "WIFI密码"; //WIFI的密码

注意:这里的WIFI可以是家里的路由器等等都可以,我这里先用手机热点进行演示,WIFI名称和密码尽量不要使用中文,不然可能会出现奇怪的错误(WIFI频段目前只支持2.4Ghz)。

之后我们继续打开我们的APP来添加两个控件实现控制我们板子上面的风扇还有LED灯

arduino esp8266 led,物联网,智能家居,c++,嵌入式硬件

arduino esp8266 led,物联网,智能家居,c++,嵌入式硬件

按照箭头指示就可以创建出两个控件,然后我们来对控件进行更改,我们这里选的是开关按键,控件的图标还有文本以及控件组名大家可以自行更改,按键类型也可以是普通按键,给两个控件都修改好就是这样,然后直接点右上角的小锁图标就能保存了,接下来保存好之后,我们需要用到我们的控件组名,那么我们要在代码上添加以下

arduino esp8266 led,物联网,智能家居,c++,嵌入式硬件

// 新建组件对象
BlinkerButton Button1("btn-kd"); //控件定义
BlinkerButton Button2("btn-kfs"); //控件定义

这里BlinkerButton是库里面的组件类型,blinker库定义了多种组件类型,如 BlinkerSlider BlinkerRGB BlinkerNumber BlinkerText

这步完成之后要给组件写要实现的功能,那么我们这两个组件一个是控制板子上的两个LED灯,一个是控制小风扇,首先我们要给LED灯还有小风扇定义管脚

管脚我们根据自己板子的接线来定义

const int LED1 =D0; //LED灯管脚定义
const int LED2 =D3;  //LED灯管脚定义
const int FS = D2; //风扇管脚定义

 管脚定义完成之后注册我们组件的回调函数,也就是当我们组件按下去之后会实现什么功能

// 按下按键即会执行该函数
void button1_callback(const String & state) {
    BLINKER_LOG("get button state: ", state);
    if(state == BLINKER_CMD_ON){  //当APP上的按键按下传送过来的是ON LED灯高电平
      digitalWrite(LED1,1); //高电平
      digitalWrite(LED2,1); //高电平
      Button1.print("on"); 
    }
    else if(state == BLINKER_CMD_OFF){  //当APP上的按键按下传送过来的是Off LED灯低电平
      digitalWrite(LED1,0); //低电平
      digitalWrite(LED2,0); //低电平
      Button1.print("off");
    }
}
//----------------------------------
// 按下按键即会执行该函数
void button2_callback(const String & state) {
    BLINKER_LOG("get button state: ", state);
    if(state == BLINKER_CMD_ON){ //当APP上的按键按下传送过来的是ON 风扇至高电平启动
      digitalWrite(FS,1);
      Button2.print("on");
    }
    else if(state == BLINKER_CMD_OFF){//当APP上的按键按下传送过来的是Off 风扇至低电平启动
      digitalWrite(FS,0);
      Button2.print("off");
    }
}

 那么回调函数大概就是这个样子,接下来我们要在 void setup()初始函数里面给我们的LED还有风扇的IO口初始化 还有调用我们的回调函数

void setup()
{
    // 初始化串口
    Serial.begin(115200);
    BLINKER_DEBUG.stream(Serial);
    BLINKER_DEBUG.debugAll();
//---------------------------------- 
    // 初始化有LED灯的IO,以及风扇的IO口
    pinMode(LED1, OUTPUT);
    digitalWrite(LED1, 0);
    pinMode(LED2, OUTPUT);
    digitalWrite(LED2, 0);
    pinMode(FS, OUTPUT);
    digitalWrite(FS, 0);
//----------------------------------
    // 初始化blinker
    Blinker.begin(auth, ssid, pswd);
    
//----------------------------------
    Button1.attach(button1_callback);
    Button2.attach(button2_callback);//当APP组件按下触发 则 触发button2_callback函数
    //当app中组件触发并发送到设备端时将触发该组件注册的回调函数
}

void loop() {
    Blinker.run();
}

 到这一步之后我们就可以来检验一下功能有没有实现,连接好我们的板子,Arduino IDE 上传我们的代码到板子里面

arduino esp8266 led,物联网,智能家居,c++,嵌入式硬件

arduino esp8266 led,物联网,智能家居,c++,嵌入式硬件

上传成功之后打开手机blinker APP 去到我们刚才创建的设备里面

arduino esp8266 led,物联网,智能家居,c++,嵌入式硬件

可以看见我们的设备是在线的情况,就说明我们的板子已经连接上了wifi热点,然后我们进去看看

arduino esp8266 led,物联网,智能家居,c++,嵌入式硬件

当我们的组件开关点击之后是呈现一个开启状态,那么再看我们的板子发现两个led灯已经亮了,风扇也转动起来了,那么就成功了。


2.温湿度采集部分

到这里我们的功能已经实现一半了,接下来到我们的DHT11温湿度传感器,

arduino esp8266 led,物联网,智能家居,c++,嵌入式硬件

我们要开始实现检测温度和湿度,开始之前我们首先要添加一个库,打开Arduino IDE点击工具>管理库

把上面这个库给安装进来,安装好之后我们继续开始,首先添加头文件宏定义还有传感器的管脚定义

#define BLINKER_WIFI
#define DHTTYPE DHT11   // DHT 11
#include <DHT.h>
#include <Blinker.h>

const int  pinDHT11 = D1; //DHT11 管脚定义
DHT dht(pinDHT11, DHTTYPE);
const int LED1 =D0; //LED灯管脚定义
const int LED2 =D3;  //LED灯管脚定义
const int FS = D2; //风扇管脚定义

 这边传感器是接在D1,所以定义D1根据接线来定义

// 新建组件对象
BlinkerButton Button1("btn-kd"); //控件定义
BlinkerButton Button2("btn-kfs"); //控件定义
BlinkerNumber HUMI("num-sd"); //检测湿度组件
BlinkerNumber TEMP("num-wd"); //监测温度组件

新加入温湿度两个控件定义

在手机APP端添加一个数据组件,将其作为温度数据显示接口,点击该数据组件,编辑数据的信息

将键名修改为程序里定义的“num-wd”(这里的num-wd和程序中的名称相对应),文本显示“温度”,数据单位为“℃”,最大值“100”

再添加一个数据组件,将其作为湿度数据显示接口,点击该数据组件,编辑数据的信息。

将键名修改为程序里定义的“num-sd”(这里的num-sd和程序中的名称相对应),文本显示“湿度”,数据单位为“%”,最大值“100”

arduino esp8266 led,物联网,智能家居,c++,嵌入式硬件

然后定义温湿度存储变量

const int  pinDHT11 = D1; //DHT11 管脚定义
DHT dht(pinDHT11, DHTTYPE);
const int LED1 =D0; //LED灯管脚定义
const int LED2 =D3;  //LED灯管脚定义
const int FS = D2; //风扇管脚定义
float humi_read = 0, temp_read = 0; //湿度 温度  定义

新增加温湿度变量的定义

 再添加回调函数

//把温度湿度传送给组件
void heartbeat()
{
    HUMI.print(humi_read);
    TEMP.print(temp_read);
}

 在void setup()添加加载函数,就可以回传温湿度数据了

Blinker.attachHeartbeat(heartbeat); //加载函数heartbeat,回传数据
dht.begin(); //启动DHT11

 还有启动DHT11,最后在void loop()函数里添加以下代码

void loop() {
    Blinker.run();
    //Blinker.run()语句负责处理Blinker收到的数据,每次运行都会将设备收到的数据进行一次解析。在使用WiFi接入时,该语句也负责保持网络连接
    float h = dht.readHumidity(); //读湿度
    float t = dht.readTemperature();//读温度,默认为摄氏度
    if (isnan(h) || isnan(t)) //判断温湿度有没有读取失败
    {
        BLINKER_LOG("Failed to read from DHT sensor!");
    }
    else
    {
        BLINKER_LOG("Humidity: ", h, " %");//湿度
        BLINKER_LOG("Temperature: ", t, " *C");//温度
        humi_read = h; //读湿度
        temp_read = t; //读温度,默认为摄氏度
    }
     Blinker.delay(2000);
    
}

 最后烧录程序到板子中试试,显示上传成功之后打开串口监视器还有我们的手机blinker APP(串口波特率115200)

arduino esp8266 led,物联网,智能家居,c++,嵌入式硬件

 

arduino esp8266 led,物联网,智能家居,c++,嵌入式硬件

可以看到都能检测到温湿度,那么已经是成功了的,到这里那么就剩我们最后一个光敏传感器。


3.光照采集部分

我们在手机APP中新添加一个数据控件,用来收集光线强度的数据。

在blinker中添加一个数据控件,修改对应的键名和显示文本,设置最大值是1023

arduino esp8266 led,物联网,智能家居,c++,嵌入式硬件

数据控件的数据单位可以要可以不要,传感器的信号引脚连接在A0端口中

下面是代码部分

volatile int light;//光照数据定义

变量定义

BlinkerNumber GUANG("num-gm");//光照组件

组件定义

//光照数据回传
void dataStorage(){
   Blinker.dataStorage("num-gm", light);
}

回调函数编写

light = 0;//赋初始值
Blinker.attachDataStorage(dataStorage);//访问dataStorage函数

 void setup()初始函数中添加

void loop() {
    light = analogRead(A0);//读取A0端口的数据
    delay(100);
    GUANG.print(light);//显示数值
//----------------------------------

 void loop()主函数中添加

最后上传,上传成功,打开手机APP

 

arduino esp8266 led,物联网,智能家居,c++,嵌入式硬件

 

arduino esp8266 led,物联网,智能家居,c++,嵌入式硬件

等待重新上电之后,可以看到光照数据已经上来了,如果实在没有的可以打开串口工具看看是否有接收到。

那么我们本次的简易《智能家居》可以说是大功告成了,对于物联网开发来说,上手难度真的不是很高,有库函数的支持下,简单方便易懂,给小白来都能看懂开发。


4.项目完整源码

 下面是整个项目的完整代码参考:文章来源地址https://www.toymoban.com/news/detail-738014.html

#define BLINKER_WIFI
#define DHTTYPE DHT11   // DHT 11
#include <DHT.h>
#include <Blinker.h>

const int  pinDHT11 = D1; //DHT11 管脚定义
DHT dht(pinDHT11, DHTTYPE);
const int LED1 =D0; //LED灯管脚定义
const int LED2 =D3;  //LED灯管脚定义
const int FS = D2; //风扇管脚定义
float humi_read = 0, temp_read = 0; //湿度 温度  定义
volatile int light;//光照数据定义

char auth[] = "b62b9765dccf"; //APP上的key
char ssid[] = "wifi_name"; //wifi热点的名称
char pswd[] = "12345678"; //热点密码

// 新建组件对象
BlinkerButton Button1("btn-kd"); //控件定义
BlinkerButton Button2("btn-kfs"); //控件定义
BlinkerNumber HUMI("num-sd"); //检测湿度组件
BlinkerNumber TEMP("num-wd"); //监测温度组件
BlinkerNumber GUANG("num-gm");//光照组件

// 按下按键即会执行该函数
void button1_callback(const String & state) {
    BLINKER_LOG("get button state: ", state);
    if(state == BLINKER_CMD_ON){  //当APP上的按键按下传送过来的是ON LED灯高电平
      digitalWrite(LED1,1); //高电平
      digitalWrite(LED2,1); //高电平
      Button1.print("on"); 
    }
    else if(state == BLINKER_CMD_OFF){  //当APP上的按键按下传送过来的是Off LED灯低电平
      digitalWrite(LED1,0); //低电平
      digitalWrite(LED2,0); //低电平
      Button1.print("off");
    }
}
//----------------------------------
// 按下按键即会执行该函数
void button2_callback(const String & state) {
    BLINKER_LOG("get button state: ", state);
    if(state == BLINKER_CMD_ON){ //当APP上的按键按下传送过来的是ON 风扇至高电平启动
      digitalWrite(FS,1);
      Button2.print("on");
    }
    else if(state == BLINKER_CMD_OFF){//当APP上的按键按下传送过来的是Off 风扇至低电平启动
      digitalWrite(FS,0);
      Button2.print("off");
    }
}
//----------------------------------
//把温度湿度传送给组件
void heartbeat()
{
    HUMI.print(humi_read);
    TEMP.print(temp_read);
}
//----------------------------------
//光照数据回传
void dataStorage(){
   Blinker.dataStorage("num-gm", light);
}
//----------------------------------
void setup()
{
    // 初始化串口
    Serial.begin(115200);
    BLINKER_DEBUG.stream(Serial);
    BLINKER_DEBUG.debugAll();
//---------------------------------- 
    // 初始化有LED灯的IO,以及风扇的IO口
    pinMode(LED1, OUTPUT);
    digitalWrite(LED1, 0);
    pinMode(LED2, OUTPUT);
    digitalWrite(LED2, 0);
    pinMode(FS, OUTPUT);
    digitalWrite(FS, 0);
//----------------------------------
    // 初始化blinker
    Blinker.begin(auth, ssid, pswd);
    Blinker.attachHeartbeat(heartbeat); //加载函数heartbeat,回传数据
    dht.begin(); //启动DHT11
    light = 0;//赋初始值
    Blinker.attachDataStorage(dataStorage);//访问dataStorage函数
    
//----------------------------------
    Button1.attach(button1_callback);
    Button2.attach(button2_callback);//当APP组件按下触发 则 触发button2_callback函数
    //当app中组件触发并发送到设备端时将触发该组件注册的回调函数
}

void loop() {
    light = analogRead(A0);//读取A0端口的数据
    delay(100);
    GUANG.print(light);//显示数值
//----------------------------------
    Blinker.run();
    //Blinker.run()语句负责处理Blinker收到的数据,每次运行都会将设备收到的数据进行一次解析。在使用WiFi接入时,该语句也负责保持网络连接
    float h = dht.readHumidity(); //读湿度
    float t = dht.readTemperature();//读温度,默认为摄氏度
    if (isnan(h) || isnan(t)) //判断温湿度有没有读取失败
    {
        BLINKER_LOG("Failed to read from DHT sensor!");
    }
    else
    {
        BLINKER_LOG("Humidity: ", h, " %");//湿度
        BLINKER_LOG("Temperature: ", t, " *C");//温度
        humi_read = h; //读湿度
        temp_read = t; //读温度,默认为摄氏度
    }
     Blinker.delay(2000);
    
}

到了这里,关于Arduino物联网快速开发:基于ESP8266与点灯Blinker制作小白都会的DIY《智能家居》系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • esp8266连接blinker进行控制

    在前面已经将Arduino配置esp8266开发环境以及esp8266接入Blinker介绍了以后只是能在手机端看到在线。本文介绍如何给esp8266添加功能。 提示:本篇文章参考点灯科技官方文档进行应用 https://diandeng.tech/doc/arduino-support 一切开始都要从点灯开始,接下来介绍如何用点灯科技APP远程控制

    2024年02月03日
    浏览(44)
  • 手把手教你做一个物联网垃圾桶(ARDUINO ESP8266)

    最近自创的项目结题了,就顺手将相关的技术细节记录一下,也给需要做自创的同学提供一个简单的可复制的小项目 智能垃圾桶的选型 通过充分考虑实际生活场景,加入了 IP65 级别防水设计,可以满足大多数需要场景,此外采用升压和可充电电池, 践行环保理念 ,实现长续

    2024年02月03日
    浏览(89)
  • ESP8266从点灯到遥控小车(三)——组装小车,0代码开发APP控制小车

    ESP8266开发板 已配置好的Arduino IDE环境(配置传送门) 数据线 L298N电机驱动模块 12V电池组(电源) 充电宝 小车车身及零件(传送门) 1.ESP8266-NodeMCU 开发板 ESP8266 是一款适用于物联网和家庭自动化项目的 Wi-Fi 模块。 ​ ESP8266-NodeMCU是一个开源硬件开发板,由于它允许您像使用

    2024年01月17日
    浏览(55)
  • 【ESP8266 快速入门】示例5:Arduino环境实现OTA无线升级固件功能WebServer网页服务器方式

    使用【ESP8266】Arduino环境实现OTA无线升级固件功能,由LED闪烁程序通过OTA升级为PWM呼吸灯程序。 OTA听起来挺牛的一个功能,其全称为(Over-The-Air),直译为空中传送。就是通过无线方式实现固件升级。 对于实际封装好的项目,ESP8266已经包装好了,不方便使用数据线来下载程

    2024年02月03日
    浏览(46)
  • Esp8266点灯

    esp8266 继电器  下载好点灯科技APP后添加设备 选择独立设备   选择网络接入  复制下key,待会要用  打开设备后,点击红框内的编辑 选择按键,会出现图中的文本1   对照我图中的设置进行修改,注意颜色一定要选并且不要选白色,否则一会点击会出现空白。  修改完成后

    2024年02月09日
    浏览(35)
  • NodeMCU ESP8266 基于Arduino IDE的串口使用详解(图文并茂)

    UART ( Universal Asynchronous Receiver/Transmitter ),串口通讯在嵌入式开发中至关重要,我们可以通过串口打印程序里的数据,也可以通过串口将数据发送到PC上并进行可视化的图形显示。 注意:相关的串口通讯的知识可以参考这篇文章 UART串口协议快速扫盲(图文并茂+超详细) Node

    2024年02月04日
    浏览(69)
  • 新手如何在arduino上安装esp32和esp8266的开发板以及库文件的安装

    第一种常用的方法是在arduino的开发板管理器中进行下载( 不适用于所用电脑,会出现下载错误情况) 具体操作如下: 双击打开arduino,点击左上角“文件”,“首选项”。接着出现以下界面: 点击“附加开发板管理器网址”一栏右边白蓝色图标,此时会出现让自己添加网址的

    2024年02月16日
    浏览(72)
  • ESP8266物联网开发入门教程

    B站本图文链接https://b23.tv/F7tPcAm 先消除一下零基础爱好者的担忧:这玩意有点C语言基础就能搞,学不会我就把键盘吃了 教程适用于刚入门得小白,根据教程自行拓展就可以用8266开发出属于自己的智能家电,希望能帮助到大家|・ω・`) 一:需要的硬件:电脑、8266开发板(笔

    2023年04月08日
    浏览(54)
  • Arduino D1开发板 ESP8266 ESP01-S Wifi 模块 手机控制继电器 学习手记

    因为以前学过一次,但是不深入。所以这次重学,记录一下。 这次用了最新的东东,畅快无极限! 官网在这里:https://arduino-esp8266.readthedocs.io/en/3.1.1/index.html 在ArduinoIDE里下载开发板esp8266是一件很痛苦的事情,虽然成功过,但是后来找到最好的方法还是下载中国的离线版,

    2024年02月11日
    浏览(53)
  • 01-ESP8266 NodeMCU 物联网开发初识

    Author:teacherXue ESP8266 是 Espressif Systems 生产的 Wi-Fi 片上系统 (SoC)。它非常适合物联网和家庭自动化项目,目前有非常高的市场普及率,还有更加高端的同时支持wifi和蓝牙的双核心芯片ESP32,可以在乐鑫官网查看完整的芯片列表。 ESP8266芯片的技术特性 处理器: L106 32 位 RISC 微

    2024年02月11日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包