【FastBond项目分享】智能建筑之基于ESP32的宿舍LED控制器与墨水屏电子相册

原创 电子森林 2022-01-25 17:00

本项目是Fastbond智能建筑项目,使用了ESP32作为物联主控,驱动墨水屏,使用PWM信号驱动美信MAX16820芯片控制宿舍灯光的亮暗变化,同时设计了基于ADI公司LTC4054芯片的锂电池充电管理电路,可以在没有外部供电的情况下,进行墨水屏刷新的操作。


☟☟☟看视频


电路介绍

电路图使用AD21进行设计,主要模块有ESP32,墨水屏驱动,LED驱动,充电模块,按键,温湿度传感器,电源。


1、ESP32模块

设计使用ESP32WROOM模块,设计了外围电路。


2、墨水屏驱动

借鉴了微雪电子的E-Paper ESP32 Driver Board电路,对墨水屏外围电路进行了设计


3、LED驱动

LED驱动使用了美信公司的MAX16820 LED驱动芯片,具有最高2M的驱动频率,使用PWM进行控制。


4、充电模块与电源

使用ADI公司的LTC4054进行锂电池充电控制,对锂电池输出使用ASM1117-3.3转换电压,外部输入使用TPS563201DCDC转换器进行转换。


5、完整原理图



代码介绍

ESP32的墨水屏驱动代码来自微雪E-Paper ESP32 Driver Board,在原有代码的基础上增加了图片压缩算法,实现了对上传的图品进行自适应,避免过大图片无法上传的问题。


1、图片压缩算法

使用canvas,将图片压缩到指定分辨率,实现在屏幕上显示完整的图片。

<input id="file" type="file">        <script type="text/javascript">            var eleFile = document.querySelector('#file');            // 压缩图片需要的一些元素和对象            var reader = new FileReader(),            //创建一个img对象                img = new Image();
// 选择的文件对象 var file = null;
// 缩放图片需要的canvas var canvas = document.createElement('canvas'); var context = canvas.getContext('2d');
// base64地址图片加载完毕后 img.onload = function() { // 图片原始尺寸 var originWidth = this.width; var originHeight = this.height; // 最大尺寸限制,可通过国设置宽高来实现图片压缩程度 var maxWidth = 800, maxHeight = 800; // 目标尺寸 var targetWidth = originWidth, targetHeight = originHeight; // 图片尺寸超过400x400的限制 if(originWidth > maxWidth || originHeight > maxHeight) { if(originWidth / originHeight > maxWidth / maxHeight) { // 更宽,按照宽度限定尺寸 targetWidth = maxWidth; targetHeight = Math.round(maxWidth * (originHeight / originWidth)); } else { targetHeight = maxHeight; targetWidth = Math.round(maxHeight * (originWidth / originHeight)); } }

(完整代码,点击“阅读原文”获取)


2、LED驱动

/**  ******************************************************************************  * @file    Loader.h  * @author  Waveshare Team  * @version V1.0.0  * @date    23-January-2018  * @brief   The main file.  *          This file provides firmware functions:  *           + Initialization of Serial Port, SPI pins and server  *           + Main loop  *  *******************************************************************************/
/* Includes ------------------------------------------------------------------*/#include "srvr.h" // Server functionsconst int buttonPin0 = 32;const int buttonPin1 = 33;const int buttonPin2 = 25;
int pwm = 0, pwm_o = 0, pwm_off = 500;int light_flag = 0; //0关灯,1开灯/* Entry point ----------------------------------------------------------------*/void setup(){ // Serial port initialization Serial.begin(115200); delay(10); ledcSetup(8, 200, 10); //设置LEDC通道8频率为200,分辨率为10位,即占空比可选0~1023 ledcAttachPin(13, 8); //设置LEDC通道8在IO13上输出
pinMode(buttonPin0, INPUT_PULLUP); pinMode(buttonPin1, INPUT_PULLUP); pinMode(buttonPin2, INPUT_PULLUP);
// Server initialization Srvr__setup();
// SPI initialization EPD_initSPI();
// Initialization is complete Serial.print("\r\nOk!\r\n");}

(完整代码,点击“阅读原文”获取)


实物展示


资料获取

相关程序代码以及BOM清单,可点击“阅读原文”获取~

END


硬禾学堂

硬禾团队一直致力于给电子工程师和相关专业的同学,带来规范的核心技能课程,帮助大家在学习和工作的各个阶段,都能有效地提升自己的职业能力。

硬禾学堂

我们一起在电子领域探索前进

关注硬禾服务号,随时直达课堂


点击阅读原文,获取完整资料~

电子森林 讲述电子工程师需要掌握的重要技能: PCB设计、FPGA应用、模拟信号链路、电源管理等等;不断刷新的行业新技术 - 树莓派、ESP32、Arduino等开源系统;随时代演进的热点应用 - 物联网、无人驾驶、人工智能....
评论 (0)
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦