当前位置: 首页 > article >正文

esp开发与应用(1602液晶显示屏)

【 声明版权所有欢迎转载请勿用于商业用途。 联系信箱feixiaoxing 163.com】模块当中有的是比较简单的比如说蜂鸣器尤其是有源蜂鸣器。大家可以把它想象成是一个gpio输出的喇叭通电就有声音没通电就没有声音。整个模块也就三个pin一个是电源一个是地还有一个就是gpio控制开关。所以蜂鸣器不复杂。但相比较而言还有一些模块会稍微复杂一点比如说1602液晶屏幕。过去的1602屏幕占用的pin比较多但是后来出了一个PCF8574芯片这就方便多了。相当于这是一个i2c接口的芯片我们只要对PCF8574进行控制就可以让PCF8574控制屏幕最终让1602屏幕显示文字和符号了。1、找到esp32的i2c口在esp32上面默认第一个i2c口就是gpio22和gpio21前者是scl后者是sda。2、找到电源部分这里需要注意的部分就是输入电压。一般esp32上面有两个电压一个是5v一个是3.3v。5v就是直接usb传进来的电压3.3v也是5v转的电压。但对于1602模块呢它需要5v的电压所以这部分还是要找到5v的电压入口。3、连接好esp32模块和1602模块连接的时候采用的是母对母的杜邦线这部分不复杂但是要细心一点。4、编写代码编写代码这部分如之前所说还是用ai来写比较好。我们需要告诉ai的是当前使用的i2c是第一个gpio用的是22和211602的驱动芯片就是PCF8574然后希望它编写一个简单的输出小程序。这样不出意外的话ai就可以帮助我们生成代码。有条件的可以vs code上直接购买ai插件生成代码。如果不行用deepseek生成后拷贝粘贴过来也是可以的。#include stdio.h #include string.h #include freertos/FreeRTOS.h #include freertos/task.h #include driver/i2c.h // I2C configuration #define I2C_MASTER_SCL_IO 22 // SCL pin #define I2C_MASTER_SDA_IO 21 // SDA pin #define I2C_MASTER_NUM I2C_NUM_0 // I2C port number #define I2C_MASTER_FREQ_HZ 100000 // I2C frequency // PCF8574 I2C address (common: 0x27 or 0x3F) #define PCF8574_ADDR 0x27 // PCF8574 pin definitions (connected to 1602 LCD) #define LCD_RS 0x01 // P0 #define LCD_RW 0x02 // P1 #define LCD_EN 0x04 // P2 #define LCD_BACKLIGHT 0x08 // P3 #define LCD_D4 0x10 // P4 #define LCD_D5 0x20 // P5 #define LCD_D6 0x40 // P6 #define LCD_D7 0x80 // P7 // LCD commands #define LCD_CLEAR 0x01 #define LCD_HOME 0x02 #define LCD_ENTRY_MODE 0x04 #define LCD_DISPLAY_CTRL 0x08 #define LCD_CURSOR_SHIFT 0x10 #define LCD_FUNCTION_SET 0x20 #define LCD_CGRAM_ADDR 0x40 #define LCD_DDRAM_ADDR 0x80 // I2C write byte to PCF8574 static esp_err_t i2c_write_byte(uint8_t data) { i2c_cmd_handle_t cmd i2c_cmd_link_create(); i2c_master_start(cmd); i2c_master_write_byte(cmd, (PCF8574_ADDR 1) | I2C_MASTER_WRITE, true); i2c_master_write_byte(cmd, data, true); i2c_master_stop(cmd); esp_err_t ret i2c_master_cmd_begin(I2C_MASTER_NUM, cmd, 1000 / portTICK_PERIOD_MS); i2c_cmd_link_delete(cmd); return ret; } // Send LCD command void lcd_send_cmd(uint8_t cmd) { uint8_t high_nibble (cmd 0xF0) | LCD_BACKLIGHT; // High nibble backlight uint8_t low_nibble ((cmd 4) 0xF0) | LCD_BACKLIGHT; // Low nibble backlight // Send high nibble i2c_write_byte(high_nibble); i2c_write_byte(high_nibble | LCD_EN); // EN1 vTaskDelay(1 / portTICK_PERIOD_MS); i2c_write_byte(high_nibble ~LCD_EN); // EN0 // Send low nibble i2c_write_byte(low_nibble); i2c_write_byte(low_nibble | LCD_EN); // EN1 vTaskDelay(1 / portTICK_PERIOD_MS); i2c_write_byte(low_nibble ~LCD_EN); // EN0 } // Send LCD data void lcd_send_data(uint8_t data) { uint8_t high_nibble (data 0xF0) | LCD_RS | LCD_BACKLIGHT; // RS1 uint8_t low_nibble ((data 4) 0xF0) | LCD_RS | LCD_BACKLIGHT; // Send high nibble i2c_write_byte(high_nibble); i2c_write_byte(high_nibble | LCD_EN); vTaskDelay(1 / portTICK_PERIOD_MS); i2c_write_byte(high_nibble ~LCD_EN); // Send low nibble i2c_write_byte(low_nibble); i2c_write_byte(low_nibble | LCD_EN); vTaskDelay(1 / portTICK_PERIOD_MS); i2c_write_byte(low_nibble ~LCD_EN); } // Initialize LCD void lcd_init(void) { vTaskDelay(50 / portTICK_PERIOD_MS); // 4-bit mode initialization sequence lcd_send_cmd(0x33); vTaskDelay(5 / portTICK_PERIOD_MS); lcd_send_cmd(0x32); vTaskDelay(5 / portTICK_PERIOD_MS); // Function set: 4-bit, 2-line, 5x8 lcd_send_cmd(LCD_FUNCTION_SET | 0x08 | 0x00); vTaskDelay(5 / portTICK_PERIOD_MS); // Display control: display on, cursor off lcd_send_cmd(LCD_DISPLAY_CTRL | 0x04); vTaskDelay(5 / portTICK_PERIOD_MS); // Clear display lcd_send_cmd(LCD_CLEAR); vTaskDelay(20 / portTICK_PERIOD_MS); // Entry mode: cursor move right lcd_send_cmd(LCD_ENTRY_MODE | 0x02); vTaskDelay(5 / portTICK_PERIOD_MS); } // Set cursor position void lcd_set_cursor(uint8_t row, uint8_t col) { uint8_t addr (row 0) ? 0x00 : 0x40; lcd_send_cmd(LCD_DDRAM_ADDR | (addr col)); } // Print string to LCD void lcd_print(const char *str) { while (*str) { lcd_send_data(*str); } } // Initialize I2C void i2c_init(void) { i2c_config_t conf { .mode I2C_MODE_MASTER, .sda_io_num I2C_MASTER_SDA_IO, .scl_io_num I2C_MASTER_SCL_IO, .sda_pullup_en GPIO_PULLUP_ENABLE, .scl_pullup_en GPIO_PULLUP_ENABLE, .master.clk_speed I2C_MASTER_FREQ_HZ, }; i2c_param_config(I2C_MASTER_NUM, conf); i2c_driver_install(I2C_MASTER_NUM, conf.mode, 0, 0, 0); } void app_main(void) { printf(1602 LCD I2C Driver (PCF8574)\n); printf(SCL: GPIO%d, SDA: GPIO%d\n, I2C_MASTER_SCL_IO, I2C_MASTER_SDA_IO); printf(PCF8574 Address: 0x%02X\n, PCF8574_ADDR); // Initialize I2C i2c_init(); // Initialize LCD lcd_init(); // Display Hello, World! lcd_set_cursor(0, 0); lcd_print(Hello,); lcd_set_cursor(1, 0); lcd_print(Fei ning ning!); printf(LCD display complete!\n); while (1) { vTaskDelay(1000 / portTICK_PERIOD_MS); } }5、编译查看代码代码输出后首先编译一下。不能编译的代码价值不大。其次就是简单看一下流程有没有i2c初始化、PCF8574初始化、发命令、发数据、显示数据这些动作。如果没有问题的话就可以烧入显示了。不出意外就可以看到屏幕的显示了。6、调整电位器实际显示的时候字体的显示效果不一定好即字体和背景的对比度可能不是很好。好在模块上面有一个明显的电位器。说是电位器其实就是一个可调电阻找一个十字起微调一下即可。

相关文章:

esp开发与应用(1602液晶显示屏)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】模块当中,有的是比较简单的,比如说蜂鸣器,尤其是有源蜂鸣器。大家可以把它想象成是一个gpio输出的喇叭&#xff…...

饲料颗粒机生产厂家

行业痛点分析:一场关于“磨损”与“成本”的持久战在饲料加工领域,颗粒机设备的稳定性与耐用性,直接决定了生产线的整体效率与运营成本。然而,长期困扰行业的核心痛点之一,是磨盘与压辊的耐磨性问题。根据行业调研数据…...

各个AI公司都在玩的Harness 架构:Harness架构深度解析

Harness 架构深度解析为什么 AI 智能体的未来不是框架,而是「运行壳」TL;DR 三分钟看懂这篇文章•当 Claude Code、Cursor、Codex、Windsurf 四款产品独立演化出几乎相同的内部架构时,一种叫做 Harness(运行壳)的新形态浮出水面。…...

基于 FreeRTOS + ESP8266(AT 指令)+ MQTT的实现方案

一、整体系统架构 ┌─────────────────────────────────────────────┐ │ Host MCU (dsPIC33 / STM32) │ │ │ │ ┌────────────┐ UART ┌…...

西安家谱印刷厂哪家好

你知道吗?我走访了全国20多个宗亲会,发现一个扎心的事实——超过70%的家庭在第一次修谱时,都踩过同样的坑。有位陕西的陈姓宗长,花了整整3年时间收集家族资料,结果找了一家小印刷厂,拿到手的家谱&#xff0…...

MySQL InnoDB引擎八大核心特性详解(高频面试题)

📚 专栏:MySQL底层原理&面试必刷💡 适用人群:后端开发、数据库学习者、面试刷题者🔥 博客简介:InnoDB是MySQL 5.5默认存储引擎,也是企业项目唯一主流引擎。本文通俗易懂图文拆解其核心特性&…...

第一次的博客

我是???计划考研由于是跨考,计划从0开始,先打c语言基础,再学习数据结构每天二~三小时暂无...

Windows 批量解压 TAR 文件脚本:支持文件数量校验、断点续解压和自动跳过

文章目录一、需求说明二、脚本功能三、为什么使用 7-Zip1. 7-Zip 支持命令行调用2. 方便读取 tar 包内部文件列表3. 支持跳过已存在文件,适合断点续解压4. 对 tar 文件支持比较稳定5. 适合处理大量小文件场景四、完整 BAT 脚本五、使用前需要修改的地方六、脚本运行…...

如何用OneNote Markdown插件快速提升笔记效率:终极指南

如何用OneNote Markdown插件快速提升笔记效率:终极指南 【免费下载链接】NoteWidget Markdown add-in for Microsoft Office OneNote 项目地址: https://gitcode.com/gh_mirrors/no/NoteWidget 还在为OneNote复杂的格式调整而烦恼吗?想象一下&…...

2026年杭州靠谱的GEO优化公司,杭州这里通网络科技值得选择吗?

在数字化时代,企业越来越重视线上推广,GEO优化服务能有效提升企业在AI平台上的曝光和流量,因此很多企业关注靠谱的GEO优化公司。杭州这里通网络科技就是一家值得了解的企业。 ### 选择标准 技术能力:靠谱的GEO优化公司应具备强大…...

Win10升级21H2后远程桌面黑屏?一个组策略设置帮你搞定(附gpedit.msc详细路径)

Windows 10 21H2远程桌面黑屏故障深度解析与精准修复方案当你从Windows 10 1909版本升级到21H2后,是否遇到过这样的场景:远程桌面连接看似成功,却在15秒后突然黑屏断开,只留下"您的远程桌面会话已结束"的模糊提示&#…...

胖瘦 AP 网络仿真实验

一.实验概述实验名称:胖瘦 AP 网络仿真实验实验目的:掌握胖 AP(FAT AP)与瘦 AP(FIT AP)两种无线组网模式的工作原理与配置方法,理解两者的核心差异实现指定网络连通性要求:瘦 AP 侧静…...

07-大模型智能体开发工程师:提示词工程(Prompt Engineering)

系列文章导航:AI系列文章导航目录-持续更新中 第07课:提示词工程(Prompt Engineering) 📝 本文摘要:本文系统讲解提示词工程的核心认知和方法论,包括六大设计原则(清晰明确、给出示例…...

办公场景横向测评:GPT-5.5、DeepSeek、Gemini 处理公文优劣对比

进入 2026 年,AI 办公已经从“帮我写一段话”逐渐变成了“帮我完成一整套文档流程”。尤其是在公文、通知、会议纪要、方案初稿、汇报材料等场景里,大模型能不能理解语境、控制语气、保持格式,直接影响实际使用体验。目前常见的办公 AI 模型中…...

Java的背景知识及快速入门

Java的背景知识1.Java的历史知识Java是哪家公司的产品?Java是美国Sun(Stanford University Network,斯坦福大学网络公司)公司在1995年推出的一 门计算机高级编程语言。但是在2009年是Sun公司被Oracle(甲骨文&#xff0…...

告别昂贵定位器!用Python和PyTorch复现DCL-Net,实现无传感器3D超声重建

告别昂贵定位器!用Python和PyTorch复现DCL-Net实现无传感器3D超声重建在医学影像领域,3D超声重建技术正逐步改变传统诊断方式。想象一下,医生只需手持普通超声探头自由扫描,AI系统就能自动将二维切片合成为三维立体图像——这正是…...

Llama3-8B中文微调实战:用‘弱智吧’QA数据让模型学会说人话

Llama3-8B中文微调实战:用趣味问答数据打造会说人话的AI当Meta发布Llama3系列模型时,技术社区最关注的是其70B版本,但8B版本在资源消耗和微调灵活性上的优势不容忽视。本文将展示如何用中文互联网特有的"弱智吧"风格问答数据&#…...

给Llama-3-8B-Instruct加个‘垫片’:手把手教你安全添加Pad Token并微调(附完整代码)

为Llama-3-8B-Instruct安全添加Pad Token的工程实践指南当你在微调Llama-3-8B-Instruct时,是否遇到过这样的困扰:模型没有提供Pad Token,导致数据处理和训练过程中出现各种不便?这个问题看似简单,实则暗藏玄机。本文将…...

Java国密SM2证书Unknown curve异常的三步绕过方案

1. 这不是JDK的bug,是国密算法在Java生态里“没户口”的真实写照你刚把SM2证书集成进Spring Boot服务,调用验签接口时控制台突然炸出一行红字:java.security.InvalidKeyException: Unknown curve。接着堆栈里全是sun.security.ec.ECParameter…...

函数指针调用的两种语法及其在嵌入式C中的应用

1. 函数指针调用:两种语法背后的故事在嵌入式C开发中,函数指针是实现回调机制、插件架构和动态行为的关键技术。最近有工程师发现,通过函数指针调用函数时存在两种看似不同的语法形式:(*ptr)(); // 传统间接调用语法 ptr(); …...

CVE二进制工具:无源码漏洞检测的原理与实战

1. 这不是又一个“扫扫就完事”的漏洞扫描器很多人第一次听说“CVE二进制工具”时,下意识会把它和常见的Web漏洞扫描器(比如Nessus、OpenVAS)划等号——点几下鼠标,跑个任务,出份PDF报告,然后发给安全部门交…...

小学期学习——第二周

一、本周学习视频6-7学习了单电源供电的二阶低通滤波器以及电子计数法,并对仿真进行了改进。二、绘制了PCB原理图学习使用嘉立创EDA,并且绘制了PCB原理图。...

第 12 周 周报

牛 客 :周赛144,DEF C F :(dive2 1097) C D (dive2 1098)B (dive2 1099)BCD...

瑞德克斯在手机端的表现稳不稳?是否适合随时查看行情?

瑞德克斯在手机端的表现稳不稳?是否适合随时查看行情?移动端是当下用户接触金融服务最频繁的入口之一。瑞德克斯在手机端的体验打磨上下了不少功夫,让常用功能可以在小屏幕上同样得到清晰、舒适的呈现。瑞德克斯的移动应用采用了简洁的导航设…...

安全合规:满足行业安全标准和法规要求

安全合规:满足行业安全标准和法规要求 一、安全合规概述 1.1 安全合规的定义 安全合规是指企业在信息安全方面遵守相关法规、标准和行业规范的过程。它涉及数据保护、隐私安全、访问控制等多个方面,确保企业信息系统的安全性和合规性。 1.2 安全合规的价…...

从黑猩猩内战到人类关系:互动是系统的命脉,遗忘是文明的暗礁

从黑猩猩内战到人类关系:互动是系统的命脉,遗忘是文明的暗礁 将黑猩猩Ngogo群体从平和共处走向相互屠戮的演变过程,结合人类关系分型自相似性理论对照分析,一套完整的认知逻辑就此显现。江河支流汇聚、树木枝杈生长,乃…...

Go语言内存泄漏:pprof与监控

Go语言内存泄漏:pprof与监控 1. 内存泄漏检测 go tool pprof http://localhost:6060/debug/pprof/heap2. 总结 定期使用pprof检测内存使用,及时发现泄漏。...

Qt6.5数控加工CAM框架实战:基于工厂模式与分层架构的CamCore完整实现

文章简介 本文基于Qt Creator 14.0.1、Qt6.5 LTS、CMake、C17,搭建一套轻量化数控加工CAM核心框架CamCore。采用工序、算法、UI界面一一映射的分层架构,结合工厂模式、多态继承、枚举参数管控设计,具备参数管理、工艺模板复用能力&#xff0…...

股市学习心得-技术指标学习(布林线+MACD)

技术指标学习(布林线MACD)(所提供内容仅用于学习交流,不作为股市交易依据)首先,技术指标除了量比和换手率,都有滞后和造假的可能,因此不能用单一指标判断,也需要通过多个指标辅助决策。布林线MA…...

用Python和Pandas搞定泰坦尼克号数据集:从数据清洗到特征工程的完整实战

用Python和Pandas征服泰坦尼克号数据集:从数据清洗到特征工程的实战指南当第一次打开泰坦尼克号数据集时,那些密密麻麻的乘客信息就像一艘沉船上的碎片——杂乱无章却又充满故事。作为数据科学领域最经典的入门数据集,它包含了891名乘客的12个…...