Funpack2-3 一起学习使用FireBeetle ESP32-E搭建智能家居控制
使用Arduino IDE2.0 学习使用FireBeetle ESP32-E搭建智能家居控制。
标签
Arduino
Funpack活动
ESP32-E
好大一只荣哥哥
更新2023-01-04
399

项目总结报告

--学习使用FireBeetle ESP32-E搭建智能家居或物联网信息显示控制项目

一、项目描述

本次项目选择的任务为任务五:其他物联网信息显示控制项目。

项目背景:家用路由器和NAS集中堆放,容易温度过高,进而导致运行效率低。

本项目使用FireBeetle ESP32-E开发板作为控制单元,定期采集DHT22温湿度传感器数据并显示到1.54寸 240*240 LCD屏幕上,同步通过WIFI连接方式传输温湿度信息到点灯科技APP中显示。其中,根据程序中设定的温度阈值,超过设定温度控制1路继电器(5V供电)开闭风扇进行散热。

二、各功能对应的主要代码片段及说明

本次编辑使用 Arduino IDE 2.0.1 版本,2.0.1较1.8.9版本,在库文件以及开发板的管理方面得到极大提升,每次打卡会自动检测更新并提示进行相应更新,很方便。

首先需要在IDE中添加本次开发板的地址(http://download.dfrobot.top/FireBeetle/package_DFRobot_index.json ),IDE会自动下载,下载完成后可在工具-开发板中选择到FireBeetle ESP32-E。 本次项目基于示例文件DFRobot__GDL -- Basic -- font开展。

本项目可分为6个模块:

1.屏幕显示功能实现:

      首先需要对应自己的屏幕分辨率取消屏幕定义前的注释:

DFRobot_ST7789_240x240_HW_SPI screen(/*dc=*/TFT_DC,/*cs=*/TFT_CS,/*rst=*/TFT_RST);

      然后在setup函数中初始化:

 screen.begin();

      之后在loop函数中,使用screen.系列函数在屏幕上绘制图案,或将各项数据显示出来:

 screen.setFont(&FreeMonoBoldOblique12pt7b);
 screen.setCursor(5,225);
 screen.setTextColor(COLOR_RGB565_WHITE);
 screen.setTextWrap(true);
 screen.print("--State--");
 ...

2.DHT22 数据展示实现:

       在程序开始包含 DHT22.h 库文件, 定义数据引脚为 SDA,

 #define data SDA  //DHT22引脚
 float HighTemperature =14.00;  //温度阈值设置

       loop函数中,初始化模块数据: ​ 依次使用dht22.getTemperature()和dht22.getHumidity()获取DHT22采集到的数据并存储到变量t和h中,然后结合screen函数在屏幕和serial.print函数在串口进行输出:

 dht22.debug();
 float t = dht22.getTemperature();
 float h = dht22.getHumidity();

3.继电器控制实现:

      继电器使用的5V 1路继电器模块,支持高/低电平触发,通过插针设置为高电平触发。 继电器电源直接从开发板VCC引脚接入,减少额外电源供应。信号引脚设置为OnAndOff D9,并在setup函数中设置引脚为输出模式:

 #define OnAndOff D9  //继电器控制引脚
 ​
 pinMode(OnAndOff,OUTPUT);//设置继电器连接引脚为 输出

       通过自定义函数Set_ON_or_OFF(float t)对采集的温度数据进行判断,并设置屏幕显示和D9高电平输出。

 void Set_ON_or_OFF(float t){
  if(t <= HighTemperature)
   {
   screen.setTextColor(COLOR_RGB565_GREEN);
   screen.setCursor(10,25);
   screen.setTextWrap(true);
   screen.print("temperat:");
   screen.print(t);
   screen.fillRoundRect(150,205,50,25,3,COLOR_RGB565_MAGENTA);
   screen.drawRoundRect(150,205,90,25,3,COLOR_RGB565_MAGENTA);
   screen.setCursor(151,225);
   screen.setTextColor(COLOR_RGB565_DCYAN);
   screen.print("OFF");
   digitalWrite(OnAndOff,LOW);
   }
  if(t > HighTemperature)
   {
   screen.setTextColor(COLOR_RGB565_RED);
   screen.setCursor(10,25);
   screen.setTextWrap(true);
   screen.print("temperat:");
   screen.print(t);
   screen.fillRoundRect(190,205,50,25,3,COLOR_RGB565_MAGENTA);
   screen.drawRoundRect(150,205,90,25,3,COLOR_RGB565_MAGENTA);
   screen.setCursor(191,225);
   screen.setTextColor(COLOR_RGB565_DCYAN);
   screen.print("ON");
   digitalWrite(OnAndOff,HIGH);
   }

4.WIFI功能实现:

      结合wifi示例文件,首先包含 Wifi.h 库文件 ​ 设置自己的wifi账户和密码。依次在setup函数中初始化wifi为STA模式并开始连接。同时在串口中输出相应的操作结果。

 const char* ssid   = "好大一只荣哥哥";
 const char* password = "12345678901";
 ​
 WiFi.mode(WIFI_STA);
 ​
 Serial.println(WiFi.localIP());

5.网络时间获取及显示:

       参考CSDN《Arduino ESP32 最简单直接获取网络时间方法》(作者:perseverance52)一文,通过很简短的代码通过阿里云服务器获取时间。 首先定义NTP服务器地址, 通过configTime函数直接计算UTC+8 的时间 另外通过自定义的setClock函数获取时间并在串口格式化输出 结合GDL屏幕显示进行信息输出

#define NTP1  "ntp1.aliyun.com"
#define NTP2  "ntp2.aliyun.com"
#define NTP3  "ntp3.aliyun.com"

configTime(8 * 3600, 0, NTP1, NTP2,NTP3);

void setClock() {
  struct tm timeinfo;
    if (!getLocalTime(&timeinfo))
    {//输出错误信息
        Serial.println("Failed to obtain time");
          }
        configTime(8 * 3600, 0, NTP1, NTP2, NTP3);
        return;
    }
    Serial.println(&timeinfo, "%F %T %A"); // 格式化输出:2021-10-24 23:00:44 Sunday
  //Serial.print(asctime(&timeinfo));//默认打印格式:Mon Oct 25 11:13:29 2021
 }

6.点灯科技WIFI接入并通讯实现:

       点灯科技需要在其官网下载ESP32支持包,和Blinker库文件,下载后选择的开发板为FireBeetle ESP32 第一代开发板。因一二代引脚不一致,查阅引脚图需要修改TFT_CS为14号引脚,其余不变。

#define TFT_DC  D2  
#define TFT_CS  14 //D6 Beetle 2 引脚为D6
#define TFT_RST D3
#define TFT_BL  D13 //屏幕引脚

首先包含Blinker.h库文件, 修改auth[] 为点灯科技APP端生成的设备码:

char auth[] = "9372b81fac8c";//点灯科技设备码

参考Blinker的入门教程,在setup函数中初始化Blinker,loop函数中使用Blinker.run()执行。

Blinker.begin(auth,ssid,password);

Blinker.attachHeartbeat(heartbeat); //心跳包
温湿度和APP通讯根据点灯科技教程修改心跳包数据,并在setup函数中注册回调Blinker.attachHeartbeat(heartbeat)实现定时和APP端通讯传输相关数据。
void heartbeat(){
  Number1.print(humi_read);
  Number2.print(temp_read);
}

三、功能展示及说明

编译上传到开发板之后,通过type-C供电线供电,屏幕可显示当前温湿度信息、设备IP地址、时间、继电器通断状态state(屏幕显示信息刷新频率通过最后的延迟设置,目前为3-4秒一次):

FnbsR5KAdECg6n5HSMlOOVZwScx_FnwmfTz5VVIUQfF-UNfBBo46Jx24FtpfLLz6-W6MXw52Mt51RMKTgucM

      并可每分钟通过Blinker心跳包同步数据到点灯科技APP中显示:

FmYedFXJBdPIyVJROh99mW7RR5hq

四、对本活动的心得体会

       基于Arduino系列开发板的项目开发起来还是比较简单的, 尤其对于没有基础的人员来讲很友好,官方wiki和各个论坛上类似的项目案例和教程可十分方便进行移植。很不错!

附件下载
enable.zip
需自行下载点灯科技ESP32支持包
Library.zip
本次项目使用的库文件
团队介绍
我是好大一只荣哥哥
团队成员
好大一只荣哥哥
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号