Funpack2-3 基于esp32-e 实现lvgl 传感器信息动态显示
此次任务主要实现用FireBeetle-E开发板作为控制单元,搭配显示屏移植lvgl图形库,动态显示任意一个及以上传感器采集到的数据
标签
lvgl
Funpack2-3
ESP32-E
图形显示
xinshuwei
更新2023-01-04
南昌大学
1323

项目描述

此次项目主要实现--任务二:lvgl图形库和应用。主要实现功能是基于lvgl图形库实现温度、压强、颜色信号的采集及显示。

1.主控硬件介绍

FireBeetle ESP32-E是一款基于ESP-WROOM-32E双核芯片的主控板,它专为IoT设计。它支持WIFI和蓝牙双模通信并具有体积小巧、超低功耗、板载充电电路、接口易用等特性。可灵活的用于家庭物联网改装、工业物联网改装、可穿戴设备等等。通过和IFTTT等物联网平台的连接,你可轻松制作出你独有的特色物联网智能家居系统。

FireBeetle ESP32-E深度支持ArduinoIDE编程,并且即将支持Scratch图形化编程及MicroPython编程。此次实现是基于PlatformIo 进行开发,基于arduino 开发相对方便,又可进行其他代码非库进行集成,方便快捷。

使用板卡 pin角定义如下:

FmAlw3lbULtsWb17LRx7BcTUJL0j

2.功能介绍

整体实现框架如下:

Fs1OGmgCUyjVvkgZuV9_fxW27cXZ

通过Vscode 安装PlatformIo插件进行上位机开发,通过串口进行esp32相关的代码烧录、debug。

Esp32通过spi接口进行驱动ili9341 显示屏

ESP32 通过5组io 进行颜色传感器的驱动

ESP32 通过IIC 进行bme280 的驱动

2.1 BME280 模块介绍

Bosch 的 BMP280 是一种专为移动应用设计的绝对气压传感器。该传感器模块采用极其紧凑的封装。得益于小尺寸和低功耗特性,这种器件可用在如移动电话、GPS 模块或手表等电池供电型设备中。与上代产品相同,BMP180、BMP280 也基于Bosch 成熟的压阻式压力传感器技术,具有高确度和线性度,以及长期稳定性和很高的 EMC 稳健性。多种设备工作选择带来了最高灵活性,可以在功耗、分辨率和滤波性能方面对设备进行优化。为了让开发人员尽可能容易地进行设计导入,我们针对使用样例提供了一套经过测试的默认设置值。

  • 工作范围 300 hPa 至 100 hPa
  • 工作温度范围:-40°C 至 +85°C
  • 相对的绝对精度 ±0.12 hPa(典型值)
  • 平均测量时间5 ms
  • 电源电压 VDD 1.71 V 至6 V
  • 电源电压 VDDIO 1.2 V 至6 V
  • I²C 和串行外设接口 (SPI)
  • 8、0 mm x 2.5 mm x 0.95 mm、8 引脚 LGA,金属封装

IIC 方式连接方法

SCL --> 时钟线

SDI --> 数据线

SDO --> 片地址的LSB(最低加权位) 此处SDO 和CSB 联通,IIC 地址0x77

CSB --> Vdd 拉高

2.2 ili9431显示屏

   手里的TFT 屏是2.8寸 240*320 RGB 屏,驱动是ILI9341。

   原理图如下:

FnKDcX0tWzw_vw1bzS0R4ms67h_t

实际使用中只需接8个引脚就可实现驱动,相对并口比较方便

 2.3 TCS3200 颜色传感器

TCS3200颜色传感器是一款全彩的颜色检测器,包括了一块TAOS TCS3200RGB感应芯片和4个白色LED灯,TCS3200能在一定的范围内检测和测量几乎所有的可见光。TCS3200有大量的光检测器,每个都有红绿蓝和清除4种滤光器。每6种颜色滤光器均匀地按数组分布来清除颜色中偏移位置的颜色分量。内置的振荡器能输出方波,其频率与所选择的光的强度成比例关系。

产品参数

  • 工作电压:7V-5.5V
  • 接口:TTL数字接口
  • 光强度的高精度分辨率转换成频率
  • 可编程颜色和全面的输出频率
  • 电源中断特征
  • 直接和微控制器交互
  • 尺寸:4x28.4mm

原理图如下:

Fowo3ucXhBdaJPRc_YZ9FXc_yNSg

连接到TCS3002D时,选择一种颜色过滤器,它可以允许只有一个特定的颜色,以获得通过,并防止其他颜色。 例如,当选择红色滤波器,只有红色的入射光可以得到通过,蓝色和绿色将被阻止。因此,我们可以得到红光强度。 同样,当选择其他过滤器,我们可以得到蓝色或绿色光。

TCS3002有四种滤波类型:红,蓝,绿和清除全部光信息,以最大限度地降低入射光幅射的不均匀性,从而增加精确度和简化光学。 当入射光投射到TCS3200D上时,通过光电二极管控制引脚S2、S3的不同组合,可以选择不同的滤波器,如下图所示:

S2

S3

滤波器类型

L

L

红色

L

H

蓝色

H

L

H

H

绿色

TCS3200D输出不同频率的方波(占空比50%),不同的颜色和光强对应不同的频率的方波,输出频率与光强度成线性关系。 该转换器典型输出频率范围为2Hz~500kHz,用户可通过两个可编程引脚来选择100%、20%或2%的输出比例因子。如下图所示:

S0

S1

输出频率定标

L

L

关断电源

L

H

2%

H

L

20%

H

H

100%

3.各功能对应的主要代码片段及说明 3.1BME280 驱动

#include "SparkFunBME280.h"
BME280 bme; // use I2C interface
Wire.begin();
Wire.setClock(100000); //Increase to fast I2C speed!
bme.setI2CAddress(0x77);
if(bme.beginI2C() == false)
{
    Serial.println("Sensor bme280 connect failed");
}
bme.setFilter(1); //0 to 4 is valid. Filter coefficient. See 3.4.4
bme.setStandbyTime(0); //0 to 7 valid. Time between readings. See table 27.
bme.setTempOverSample(1); //0 to 16 are valid. 0 disables temp sensing. See table 24.
bme.setPressureOverSample(1); //0 to 16 are valid. 0 disables pressure sensing. See table 23.
bme.setHumidityOverSample(3); //0 to 16 are valid. 0 disables humidity sensing. See table 19.
bme.setMode(MODE_NORMAL); //MODE_SLEEP, MODE_FORCED, MODE_NORMAL is valid. See 3.3

3.2显示屏驱动

#include <lvgl.h>
#include <TFT_eSPI.h>
#include "events_init.h"
#include "gui_guider.h"
lv_ui guider_ui;
/*Change to your screen resolution*/
static const uint16_t screenWidth  = 320;
static const uint16_t screenHeight = 240;
static lv_disp_draw_buf_t draw_buf;
static lv_color_t buf[ screenWidth * 10 ];
TFT_eSPI tft = TFT_eSPI(screenWidth, screenHeight); /* TFT instance */

    Serial.begin( 115200 ); /* prepare for possible serial debug */
    lv_init();

#if LV_USE_LOG != 0
    lv_log_register_print_cb( my_print ); /* register print function for debugging */
#endif

    tft.begin();          /* TFT init */
    tft.setRotation( 1 ); /* Landscape orientation, flipped */

    lv_disp_draw_buf_init( &draw_buf, buf, NULL, screenWidth * 10 );

    /*Initialize the display*/
    static lv_disp_drv_t disp_drv;
    lv_disp_drv_init( &disp_drv );
    /*Change the following line to your display resolution*/
    disp_drv.hor_res = screenWidth;
    disp_drv.ver_res = screenHeight;
    disp_drv.flush_cb = my_disp_flush;
    disp_drv.draw_buf = &draw_buf;
    lv_disp_drv_register( &disp_drv );

    setup_ui(&guider_ui);
    lv_label_set_text(guider_ui.screen_TempLabel,"hello");
    lv_label_set_text(guider_ui.screen_humiLabel,"world");
    lv_obj_align(guider_ui.screen_humiLabel,LV_ALIGN_OUT_LEFT_MID,119,129);
    //lv_obj_set_style_text_font(guider_ui.screen_colorLabel, &simhei,0);
    lv_obj_align(guider_ui.screen_colorLabel,LV_ALIGN_OUT_LEFT_MID,190,129);
    lv_label_set_long_mode(guider_ui.screen_colorLabel,LV_LABEL_LONG_SCROLL_CIRCULAR);
    lv_obj_set_style_anim_speed(guider_ui.screen_colorLabel, 5,_LV_STYLE_STATE_CMP_SAME);
    lv_label_set_text_fmt(guider_ui.screen_colorLabel, "Value: %d", 15);

3.3 TCS3200驱动

#include <tcs3200.h>
tcs3200 tcs(16, 17, 25, 12, 26); // (S0, S1, S2, S3, output pin)  //
 String str = String("(")+String(tcs.colorRead('r'))+String(",")+String(tcs.colorRead('g'))+String(",")+String(tcs.colorRead('b'))+String(")");

4.功能展示及说明

Fgsg9P-0rL4dCIGVR4OfiomcfLgk

5.对本活动的心得体会

此次活动时间周期长,通过购买esp32 和传感器的组合方式,活动相对新颖,建议后续多举办这样的活动。

附件下载
fireesp32_project.7z.001
fireesp32_project.7z.002
团队介绍
苏州工程师一枚
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号