ESP32 开发笔记(二)OLED ssd1306 apds9960 手势控制
ESP32 OLED Demo
- ESP32 OLED Demo
- 实现功能
- 硬件组成
- 软件设计
- 低功耗模式说明
- 低功耗模式硬件设计
- 触摸传感器工作周期
- 低功耗模式使用
- OLED Demo 编译与运行
- 前期准备
- 获取 IoT Solution 项目代码
- 编译与运行
ESP32 OLED Demo
源码地址:GitHub 源码地址
实现功能
ESP32 OLED demo 实现了以下功能:
- 温湿度数据采集
- 网络更新实时时间
- OLED 分页显示温湿度、实时时间
- 手势/触摸传感器控制 OLED 显示页面上下翻页
- 通过触摸传感器手动进入低功耗模式
下图为 ESP32 OLED Demo 的硬件实物图:
硬件组成
该 DEMO 使用 ESP32_Button_Module_V2 作为开发板,包含以下元件:
- 接近/环境光线传感器 (APDS9960)
- OLED 显示屏 (SSD1306)
- 温度、湿度传感器 (HTS221)
- 两个触摸传感器按钮
完整硬件原理图:ESP32_BUTTON_MODULE_V2.pdf
显示屏、传感器电源开关控制原理图:
VDD33 为 LDO VOUT 3.3V 端,做为 ESP32、外设、 flash 电源;VDD33_PeriP 为显示屏、温湿度传感器、手势传感器电源。三极管 SI2301 用做电源开关,控制 VDD33_PeriP 端电压。默认情况下三极管 gate 端保持高电平,电源开关关闭,通过控制 Power_ON 保持低电平以打开电源开关。
软件设计
我们使用了以下方法实现了 ESP32 OLED demo:
- 使用 esp-iot-solution 开发工具包
- 基于 FreeRTOS 实时操作系统,多任务处理
- SNTP 协议获取实时时间
- 通过触摸传感器进入低功耗模式
- 通过触摸传感器唤醒设备
低功耗模式说明
低功耗模式硬件设计
我们使用了以下方法使设备在低功耗模式下的功耗达到最低。
- 控制显示屏、温湿度传感器、手势传感器的电源开关
- 选用低功耗 LDO, 静态电流约为 1 μA
- 对触摸传感器进行功耗管理
触摸传感器工作周期
触摸传感器在工作时,会有两种状态:sleep、measurement,两种状态循环交替进行。在正常的工作模式下我们把 sleep 时间设置得比较短,在进入低功耗模式后,我们把 sleep 时间设置得相对较长,以尽可能地降低功耗。
在进入低功耗模式前调用 touch_pad_set_meas_time(uint16_t sleep_cycle, uint16_t meas_cycle)
接口调整触摸传感器的 sleep 与 measure 时间。
参数说明:
sleep_cycle
:sleep_cycle
决定了两次测量的间隔时间,间隔时间 t_sleep = sleep_cycle / (RTC_SLOW_CLK frequency)。可以使用
rtc_clk_slow_freq_get_hz()
接口获取RTC_SLOW_CLK
frequency 值。meas_cycle
:meas_cycle
决定了测量时间,测量时间 t_meas = meas_cycle / 8M,最大测量时间为 0xffff / 8 M = 8.19 ms。
低功耗模式使用
长按触摸传感器按钮进入低功耗模式,在低功耗模式下,触摸传感器采样频率会降至最低,所以从低功耗模式下唤醒同样需要稍长时间地触摸传感器按钮。低功耗模式下电流采样如下:
- 低功耗模式下 LDO VOUT 3.3V 端的电流采样图如下 (包含 ESP32、显示屏、传感器消耗的电流) :
注:在低功耗模式下 LDO VOUT 3.3V 端的平均电流约为 30 μA, 最大电流约为 1.6 mA, 处在波峰时, 触摸传感器位于 measurement 状态。
- 低功耗模式下 LDO VIN 5V 端的电流采样图如下 (包含 ESP32、显示屏、传感器、LDO 消耗的电流) :
注:在低功耗模式下 LDO VIN 5V 端的平均电流约为 45 μA,最大电流约为 2.1 mA。
OLED Demo 编译与运行
前期准备
首先需要确保你的电脑上已经安装好 ESP32 工具链,工具链安装请参考 ESP-IDF 中的 README.md。
获取 IoT Solution 项目代码
执行指令,下载 iot-solution 项目仓库:
可以直接递归获取仓库代码,这样将会自动初始化需要的所有子模块:
git clone --recursive https://github.com/espressif/esp-iot-solution.git
也可以手动进行初始化子模块,先运行以下指令:
git clone https://github.com/espressif/esp-iot-solution.git
然后切换到项目根目录执行以下指令, 下载本项目依赖的一些其它子模块:
git submodule update --init --recursive
编译与运行
子模块代码下载完成后就可以对 Iot Solution 工程中的 oled_screen_module 进行编译和运行。切换到 esp-iot-solution/examples/oled\_screen\_module
目录下,然后进行下列步骤。
- 串口参数设置
执行以下指令进行编译配置,如串口号和串口下载速度可以在 Serial flasher config
这一菜单选项中进行配置(如果不需配置, 可跳过这一步)。
cd YOUR_IOT_SOLUTION_PATH/examples/oled_screen_modulemake menuconfig
- 编译,烧写与运行
执行下面指令,编译 oled_screen_module,以下命令中的 flash 是下载命令,monitor 表示开启系统打印,可根据实际情况选择添加。
make flash monitor
注:下载程序时,如果无法自动开始下载,可以尝试手动进入下载模式。下载固件完成后,按开发板上的 reset 键重新运行程序,可以查看串口打印。
ESP32 开发笔记(二)OLED ssd1306 apds9960 手势控制相关推荐
- 【Visual C++】游戏开发笔记二十七 Direct3D 11入门级知识介绍
游戏开发笔记二十七 Direct3D 11入门级知识介绍 作者:毛星云 邮箱: happylifemxy@163.com 期待着与志同道合的朋友们相互交流 上一节里我们介绍了在迈入Dire ...
- iOS工程开发笔记二
iOS工程开发笔记<二> 在Xcode 4, 5的模板工程中可以看到Precompile Prefix Header,但是在Xcode 6被去除了. Xcode 6去掉Precompile ...
- 微信小程序开发笔记二(WXSS和CSS样式美化)
微信小程序开发笔记二(WXSS和CSS样式美化) 一.CSS基本知识 1.Class选择器的定义 2.ID选择器的定义 3.ID选择器和class选择器的区别 4.CSS中设置颜色 5.CSS中的文本 ...
- [安卓开发笔记二]android Studio通过jni调用C++代码
[安卓开发笔记二]android Studio通过jni调用C++代码 16/12/11 更新 此博客基于安卓android studio 1.5所写,现在已经有了android studio2.2的 ...
- 【Visual C++】游戏开发笔记二十七 Direct3D 11入门级知识介绍
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. http://blog.csdn.net/zhmxy555/article/details/7707628 作者:毛星云 邮箱: happ ...
- 【Visual C++】游戏开发笔记二十三 游戏基础物理建模 五 粒子系统模拟 二
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...
- 【Visual C++】游戏开发笔记二十三 游戏基础物理建模(五) 粒子系统模拟(二)
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. http://blog.csdn.net/zhmxy555/article/details/7607916 作者:毛星云 邮箱: h ...
- 【Visual C++】游戏开发笔记二十一 游戏基础物理建模(三) 摩擦力系统模拟
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. http://blog.csdn.net/zhmxy555/article/details/7555785 作者:毛星云 邮箱: h ...
- ESP32 开发笔记(三)源码示例 8_DHT11_RMT 使用RMT实现读取DHT11温湿度传感器
开发板购买链接 https://item.taobao.com/item.htm?spm=a2oq0.12575281.0.0.50111deb2Ij1As&ft=t&id=62636 ...
最新文章
- 采用HttpModules来重写URLs(实践篇)
- windows如何恢复默认pycharm配置
- Python中yield返回生成器的详细方法
- Adb安装程序出现TimeOut错误
- python统计汉字字数_Python 统计字数的思路详解
- 约瑟夫环非递归算法分析
- SaaS公司保持经久不衰的三大竞争优势
- Unity性能优化之物理引擎的优化(三)
- 机器学习算法工程师领域现状
- 关于CMOS截止频率的公式和概念
- 序幕(计算机基础知识)
- 查看phpinfo方法
- Nvidia TX2+rplidar+autolabor pro1实现自主导航机器人
- UVa11549 Calculator Conundrum
- 连接器缓解安装困难,节省LED照明设计的空间
- 用DIV+CSS技术设计我的家乡网站(web前端网页制作课作业)南宁绿城之都
- 计算机文化基础(高职高专版 第十一版)第五章答案
- 四川对口高考的计算机分数线,盘点四川省近年来对口高考录取分数线,中职生上大学很容易...
- Matlab:Matlab软件界面的简介(上边菜单栏、中间工作区、右栏、底部栏、运行图像结果栏)、使用方法之详细攻略
- Edge浏览器中使用bing搜索引擎时回车会出现换行,无法直接搜索的问题的解决方法
热门文章
- Learning with Noisy Correspondence for Cross-modal Matching 文献翻译 代码简析
- iOS 判断是否安装SIM卡
- 倾斜补偿的电子罗盘(3):椭球拟合,磁传感器软磁干扰和硬磁干扰的9参数校准
- 睿频开启及睿频与超频的区别
- cocos2dx《单机斗地主》源码解剖之八 电脑玩家出牌与跟牌(结束)
- 与墨云同行 |低头有坚定的脚步,抬头是清晰的远方
- 白雪公主和她的七个供应商
- 2021.01.05丨根据基因名称拼接表达量与相关注释
- pytorch深度学习简介(包括cnn,rnn等我只挑我感觉有必要记录)
- 大型Solidworks装配设计与仿真工作站配置方案