ESP8266基于Lua开发使用U8g2模块驱动 i2c ssd1306 OLED显示

news2025/1/11 2:24:18

ESP8266基于Lua开发使用U8g2模块驱动 i2c ssd1306 OLED显示

  • 📍相关篇《ESP8266基于Lua开发点灯示例》

  • 📖U8g2对应的API接口函数:https://nodemcu.readthedocs.io/en/release/modules/u8g2/

  • 📺驱动显示效果:
    在这里插入图片描述

  • 🔖官方U8g2驱动Demo :https://github.com/nodemcu/nodemcu-firmware/blob/release/lua_examples/u8g2/graphics_test.lua

  • ✨在使用U8g2时,可能会出现上传过程中报错的问题:

  • 📢上传报错:Waiting answer from ESP - Timeout reached. Command aborted.Waiting answer from ESP - Timeout reached.
    🗝 处理办法就是,ESPPlorer不使能应答。

在这里插入图片描述

⛳注意事项

  1. 使用U8g2库,跑官方的Demo示例需要,固件引入bit模块,因为在示例代码中有使用到,否则会报错。
    • 代码187行:
local function draw()
  u8g2_prepare()
  local d3 = bit.rshift(draw_state, 3)
  local d7 = bit.band(draw_state, 7)
  1. 所编译的固件有整数型和浮点型固件,如果使用整数型固件那么跑官方Demo示例需要修改对应的示例中的代码,将里面所出现的浮点型数值改为整数型,否则会报错。
  • 🔖下面折现使用带浮点型的数值,在烧录到使用整数型固件的esp8266中是不支持的。

local function u8g2_bitmap_modes(transparent)
  local frame_size = 24

  disp:drawBox(0, frame_size * 0.5, frame_size * 5, frame_size)
  disp:drawStr(frame_size * 0.5, 50, "Black")
  disp:drawStr(frame_size * 2, 50, "White")
  disp:drawStr(frame_size * 3.5, 50, "XOR")
  1. 使用U8g2官方示例默认启用的是I2c接口(SCL:D6,SDA:D5)
  2. 编自己编译固件的时候,勾选U8g2模块后,在下面选择对应的屏幕接口,一定要和代码中的所使用的构造函数的接口一致,否则会报错,找不到变量
    在这里插入图片描述

-- setup I2c and connect display
local function init_i2c_display()
    -- SDA and SCL can be assigned freely to available GPIOs
    local sda = 5 -- GPIO14
    local scl = 6 -- GPIO12
    local sla = 0x3c
    i2c.setup(0, sda, scl, i2c.SLOW)
    disp = u8g2.ssd1306_i2c_128x64_noname(0, sla)
end

📝I2C驱动示例代码

在这里插入图片描述

-- 管脚定义
local sda = 5 -- GPIO14
local scl = 6 -- GPIO12
local sla = 0x3c  -- oled的地址,一般为0x3c
-- 初始化
function init_oled()
    -- iic总线 和 oled初始化
    i2c.setup(0, sda, scl, i2c.SLOW)
    disp = u8g2.ssd1306_i2c_128x64_noname(0, sla)
    -- 设置字体
    disp:setFont(u8g2.font_unifont_t_symbols)
    disp:setFontRefHeightExtendedText()
    --disp:setDrawColor(1)
    disp:setFontPosTop()
    --disp:setFontDirection(0)
    -- 画边框
    --disp:drawFrame(0, 0, 128, 64)
end
-- 显示函数
function oled_show_msg()
    -- 设置显示内容
    disp:drawStr(0, 0,  " Perseverance51")
    disp:drawStr(0, 16, "  Hello World!")
    disp:drawStr(0, 32, "  9527")
    disp:drawStr(0, 48, "  greentree")
    -- 将内容发送到oled
    disp:sendBuffer()
end
-- 主函数
function main()
    init_oled()
    oled_show_msg()
end
-- 运行程序
main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/482661.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Winform从入门到精通(38)——StatusStrip(史上最全)更新中

一、属性 1、Name 获取StatusStrip控件对象 2、AllowDrop 允许用户拖拽数据到控件上 3、AllowItemReorder 当用于按下alt键时,是否允许对项进行排列,如下图: 4、AllowMerge 5、Anchor 6、AutoSize 7、BackColor 设置StatusStrip的背景色 8、BackgroundImage 设置背…

解决wordpress 没有“add new“按钮

文章目录 问题描述解决方案两个参数的详细解释DISALLOW_FILE_EDITDISALLOW_FILE_MODS 问题描述 新安装的wordpress发现没有“add new“按钮,很奇怪。 解决方案 修改wp-config.php文件,增加如下两行即可修复问题: define(‘DISALLOW_FILE_E…

【实战详解】如何快速搭建接口自动化测试框架?:Python + Requests

摘要: 本篇文章将介绍如何基于Python和Requests库快速搭建一个简单而高效的接口自动化测试框架。您将会了解到设计测试用例、准备测试数据、编写自动化脚本等步骤,以及如何使用断言来检查测试结果,并最终构建一个可重用、易扩展的自动化测试…

【前端每日一问002】jquery中each与data方法的用法与概念

在 jQuery 中,.each() 方法和 .data() 方法都是常用的工具。这两个方法的用法和概念如下: 🌙一、.each() 方法: .each() 方法是 jQuery 对象的方法,用于遍历匹配元素集合中的所有元素,并对每个元素执行一个…

【LeetCode】1000题挑战(225/1000)

1000题挑战 没有废话,直接开刷! 目录 1000题挑战 没有废话,直接开刷! 第一题:202. 快乐数 - 力扣(Leetcode) 题目接口: 解题思路: 代码: 过过过过啦…

基于W1R3S的渗透测试

您被雇来对W1R3S做渗透测试,他们要求您获得root权限并找到标志(位于/root目录中)。 目标:得到root权限&找到flag.txt 目录 1、信息收集 (1)定位靶机IP (2)端口扫描 (3)脚本…

【HTMLCSSJS】写实验发现的一些注意点

🎊专栏【 前端易错合集】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【如愿】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 目录 🚥innerHtml和innerText的区别 &#x1f3f…

28-Servlet API

1.HttpServlet 我们写 Servlet 代码的时候,⾸先第⼀步就是先创建类,继承⾃ HttpServlet,并重写其中的某些⽅法。 1.1.核心方法 实际开发的时候主要重写 doXXX ⽅法,很少会重写 init / destory / service。 这些⽅法的调⽤时机&…

c++基础-运算符

目录 1关系运算符 2运算符优先级 3关系表达式的书写 代码实例&#xff1a; 下面是面试中可能遇到的问题&#xff1a; 1关系运算符 C中有6个关系运算符&#xff0c;用于比较两个值的大小关系&#xff0c;它们分别是&#xff1a; 运算符描述等于!不等于<小于>大于<…

2 异或位运算大厂必刷题

文章目录 如何不用额外变量交换两个数一个数组中有一种数出现了奇数次&#xff0c;其他数都出现了偶数次&#xff0c;怎么找到并打印这种数怎么把一个int类型的数&#xff0c;提取出最右侧的1来怎么把一个int类型的数,获取位数为1的数量一个数组中有两种数出现了奇数次&#xf…

开发问题记录20230502

4 Docker普通用户无权限 普通用户执行docker命令提示信息&#xff1a; docker images docker ps -adocker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post “http://%2Fvar%2Frun%2Fdocker.sock/v1.24/c…

Java 的简要介绍及开发环境的搭建(超级详细)

图片来源于互联网 目录 | CONTENT Java 简介 一、什么是 Java 二、认识 Java 版本 三、选择哪个版本比较好 搭建 Java 开发环境 一、下载 Java 软件开发工具包 JDK 二、配置环境变量 自动配置 手动配置 三、下载合适的 IDE IntelliJ IDEA Visual Studio Code Eclip…

Flutter 组件使用:使用 Stack 替代 GlobalKey 的定位 tip-widget 实现

场景 有时候需要在指定位置进行 tip-widget 的弹出与展示&#xff0c;常见的方式是通过给指定位置上的指定 widget 添加 GlobalKey 来实现&#xff1b; 但是&#xff0c;使用这种方式的话&#xff0c;【一】大多数时候都需要进行全局定位转换&#xff08;localToGlobal&#…

c++ 11标准模板(STL) std::vector (三)

定义于头文件 <vector> template< class T, class Allocator std::allocator<T> > class vector;(1)namespace pmr { template <class T> using vector std::vector<T, std::pmr::polymorphic_allocator<T>>; }(2)(C17…

Winform从入门到精通(36)——ColorDialog(史上最全)

文章目录 前言一、属性1、AllowFullOpen2、AnyColor3、Color4、FullOpen5、ShowHelp6、SolidColorOnly7、Tag二、事件1、HelpRequest前言 当我们需要设置某个控件的颜色时,并且需要弹出一个可以选择颜色的对话框时,这时候就需要使用ColorDialog 一、属性 1、AllowFullOpen…

LoadRunner 安装指南:详解安装步骤和常见问题解决方法

目录&#xff1a;导读 引言 LoadRunner安装 LoadRunner的安装 结语 引言 作为一款领先的性能测试工具&#xff0c;LoadRunner 被广泛应用于各种企业级应用程序和系统的性能测试中。然而&#xff0c;对于初学者来说&#xff0c;正确安装 LoadRunner 并不是一件容易的事情。…

Spring 填充属性和初始化流程源码剖析及扩展实现

前言 在上一篇博文 讲解 Spring 实例化的不同方式及相关生命周期源码剖析 介绍了 Spring 实例化的不同方式&#xff0c;本文主要围绕实例化过后对象的填充属性和初始化过程进行详细流程剖析 回顾前言知识&#xff0c;doCreateBean->createBeanInstance&#xff0c;通过 S…

沁恒 CH32V208(二): CH32V208的储存结构, 启动模式和时钟

目录 沁恒 CH32V208(一): CH32V208WBU6 评估板上手报告和Win10环境配置沁恒 CH32V208(二): CH32V208的储存结构, 启动模式和时钟 CH32V 存储容量命名方式 在介绍下面的内容前, 先看一下CH32V系列和存储相关的命名格式, 以CH32V203为例, 前面的CH32V203代表一个系列, 后面的字…

剑指offer(C++)-JZ47:礼物的最大价值(算法-动态规划)

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 题目描述&#xff1a; 在一个m\times nmn的棋盘的每一格都放有一个礼物&#xff0c;每个礼物都有一定的价值&#xff08;价值大于…

使用CometD技术实现web系统中的主动推送

CometD技术通过Http长轮询(或websocket长链接)方式在服务器与客户端之间构建了一条交互的链路。它们都遵守Bayeux协议,交换的消息是Bayeux message,消息格式是JSON。 1、需求说明 当用户登录后,后台根据用户订阅把最新的信息反推给web客户端,展示在页面上。CometD服务器…