【雕爷学编程】Arduino动手做(187)---1.3寸OLED液晶屏模块5

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百八十七:1.3寸OLED液晶屏 I2C IIC通信 4针模块 1106/1306驱动 128*64像素

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
实验场景图

在这里插入图片描述

在这里插入图片描述
【Arduino】168种传感器模块系列实验(资料代码+图形编程+仿真编程)
实验一百八十一:1.3寸OLED液晶屏 I2C IIC通信 4针模块 1106/1306驱动 132*64像素
项目之八:用于 AVR 平台的小型简单 OLED 库演示,不带画线功能(节省1K RAM)

实验开源代码

/*【Arduino】168种传感器模块系列实验(资料代码+图形编程+仿真编程)实验一百八十一:1.3寸OLED液晶屏 I2C IIC通信 4针模块 1106/1306驱动 132*64像素项目之八:用于 AVR 平台的小型简单 OLED 库演示,不带画线功能(节省1K RAM)实验接线:oled模块    Ardunio UnoGND---------GND接地线VCC---------5V 接电源SDA---------A4SCL ------- A5
*/#include <ss_oled.h>SSOLED ssoled;
#define SDA_PIN -1
#define SCL_PIN -1
// no reset pin needed
#define RESET_PIN -1
// let ss_oled find the address of our display
#define OLED_ADDR -1
#define FLIP180 0
#define INVERT 0
// Use the default Wire library
#define USE_HW_I2C 1void setup(){int rc;rc = oledInit(&ssoled, OLED_128x64, OLED_ADDR, FLIP180, INVERT, USE_HW_I2C, SDA_PIN, SCL_PIN, RESET_PIN, 400000L);       // Standard HW I2C bus at 400Khzif (rc != OLED_NOT_FOUND){char *msgs[] ={(char *)"SSD1306 @ 0x3C",(char *)"SSD1306 @ 0x3D",(char *)"SH1106 @ 0x3C",(char *)"SH1106 @ 0x3D"};oledFill(&ssoled, 0, 1);oledWriteString(&ssoled, 0, 0, 0, (char *)"OLED found:", FONT_NORMAL, 0, 1);oledWriteString(&ssoled, 0, 10, 2, msgs[rc], FONT_NORMAL, 0, 1);delay(3000);}
}void loop(){int i, x, y;oledFill(&ssoled, 0, 1);oledWriteString(&ssoled, 0, 16, 0,(char *)"ss_oled Demo", FONT_NORMAL, 0, 1);oledWriteString(&ssoled, 0, 0, 1,(char *)"Written by Larry Bank", FONT_SMALL, 1, 1);oledWriteString(&ssoled, 0, 0, 3,(char *)"**Demo**", FONT_STRETCHED, 0, 1);oledWriteString(&ssoled, 0, 9, 6,(char *)"for AVR", FONT_STRETCHED, 0, 1);delay(2000);oledFill(&ssoled, 0, 1);for (i = 0; i < 1000; i++){x = random(128);y = random(64);oledSetPixel(&ssoled, x, y, 1, 1);}delay(2000);
}

实验场景图

在这里插入图片描述
【Arduino】168种传感器模块系列实验(资料代码+图形编程+仿真编程)
实验一百八十一:1.3寸OLED液晶屏 I2C IIC通信 4针模块 1106/1306驱动 132*64像素
项目之九:五种字体换行测试

实验开源代码

/*【Arduino】168种传感器模块系列实验(资料代码+图形编程+仿真编程)实验一百八十一:1.3寸OLED液晶屏 I2C IIC通信 4针模块 1106/1306驱动 132*64像素项目之九:五种字体换行测试实验接线:oled模块    Ardunio UnoGND---------GND接地线VCC---------5V 接电源SDA---------D8SCL ------- D9
*/#include <ss_oled.h>// Arduino Pro Mini
// Pin 8 (0xb0 = PORTB, bit 0)
// Pin 9 (0xb1 = PORTB, bit 1)
#define SDA_PIN 0xb0
#define SCL_PIN 0xb1
#define RESET_PIN -1
int rc;
SSOLED oled;
void setup() {
uint8_t uc[8];rc = oledInit(&oled, OLED_128x64, 0x3c, 0, 0, 0, SDA_PIN, SCL_PIN, RESET_PIN, 1000000L);if (rc != OLED_NOT_FOUND){ oledFill(&oled, 0,1);oledSetContrast(&oled, 127);oledWriteString(&oled, 0,0,0,(char *)"**************** ", FONT_8x8, 0, 1);oledWriteString(&oled, 0,4,1,(char *)"BitBank SS_OLED", FONT_8x8, 0, 1);oledWriteString(&oled, 0,8,2,(char *)"running on the", FONT_8x8, 0, 1);oledWriteString(&oled, 0,8,3,(char *)"SSD1306 128x64", FONT_8x8, 0, 1);oledWriteString(&oled, 0,4,4,(char *)"monochrome OLED", FONT_8x8, 0, 1);oledWriteString(&oled, 0,24,5,(char *)"Written By", FONT_8x8, 0, 1);oledWriteString(&oled, 0,24,6,(char *)"Larry Bank", FONT_8x8, 0, 1);oledWriteString(&oled, 0,0,7,(char *)"**************** ", FONT_8x8, 0, 1);delay(4000);}
}void loop() {
int i, j;
char szTemp[32];oledFill(&oled, 0,1);oledWriteString(&oled, 0,0,0,(char *)"Now with 5 font sizes", FONT_6x8, 0, 1);oledWriteString(&oled, 0,0,1,(char *)"6x8 8x8 16x16", FONT_8x8, 0, 1);oledWriteString(&oled, 0,0,2,(char *)"16x32 and a new", FONT_8x8, 0, 1);oledWriteString(&oled, 0,0,3,(char *)"Stretched", FONT_12x16, 0, 1);oledWriteString(&oled, 0,0,5,(char *)"from 6x8", FONT_12x16, 0, 1);delay(10000);oledFill(&oled, 0, 1);oledSetTextWrap(&oled, 1);oledWriteString(&oled, 0,-1,-1,"This is a test of text wrap", FONT_6x8, 0, 1);delay(3000);oledFill(&oled, 0,1);
//  oledSetTextWrap(0);oledWriteString(&oled, 0,-1,-1,"This ", FONT_16x16, 0, 1);oledWriteString(&oled, 0,-1,-1,"is a ", FONT_16x16, 0, 1);oledWriteString(&oled, 0,-1,-1,"test of text wrap", FONT_16x16, 0, 1);delay(3000);oledFill(&oled, 0,1);oledSetCursor(&oled, 40,4);oledWriteString(&oled, 0,-1,-1,"Middle", FONT_6x8,0,1);delay(3000);if (rc >= OLED_SH1106_3C)          // We can set pixels on the SH1106 without a back buffer{int x, y;for (i=0; i<2500; i++){x = random(128);y = random(64);oledSetPixel(&oled, x, y, 1, 1);}delay(2000);}
#ifndef __AVR__for (i=0; i<8; i++){sprintf(szTemp, "Line %d", i);oledWriteString(&oled, 0,0,i,szTemp, FONT_8x8, 0, 0);oledWriteString(&oled, 0,64,i,szTemp, FONT_8x8, 0, 0);} // for ij = 0; // missing linewhile (1){for (i=0; i<8; i++) // smooth scroll 8 lines{
//void oledScrollBuffer(int iStartCol, int iEndCol, int iStartRow, int iEndRow, int bUp);oledScrollBuffer(&oled, 0,63,0,7,1);oledScrollBuffer(&oled, 64,127,0,7,0);oledDumpBuffer(&oled, NULL);
//void oledDrawGFX(uint8_t *pSrc, int iSrcCol, int iSrcRow, int iDestCol, int iDestRow, int iWidth, int iHeight, int iSrcPitch);
//      oledDrawGFX(NULL, 0, 0, 0, 0, 64, 7, 0); // left half
//      oledDrawGFX(NULL, 64, 1, 64, 0, 64, 7, 0); // right half delay(40);}// fill in the missing line which scrolls offsprintf(szTemp, "Line %d", j & 7);oledWriteString(&oled, 0,0,7,szTemp, FONT_NORMAL, 0, 0);sprintf(szTemp, "Line %d", 7-(j & 7));oledWriteString(&oled, 0,64,0,szTemp, FONT_NORMAL, 0, 0);j++;}
#elsefor (i=0; i<256; i++){oledWriteString(&oled, i, 0,0,(char *)"This is a scrolling text demo showing how a long string can be displayed ", FONT_NORMAL, 0, 1);}
#endif // __AVR__
} // loop

实验场景图

在这里插入图片描述

实验场景图 动态图

在这里插入图片描述

ss_oled库的特点:

支持任意数量的任意类型的同时显示(混合和匹配)
可选择检测显示地址和类型(仅限 I2C)
支持 72x40、96x16、64x32、128x32、128x64、128x128 (SH1107) 和 132x64 (SH1106) 显示尺寸
从 I2C、SPI 或任何 2 个 GPIO 引脚(虚拟 I2C)驱动显示
5 种大小的固定字体(6x8、8x8、12x16、16x16、16x32)
延迟渲染允许准备一个后台缓冲区,然后显示它(通常更快)
文本滚动功能(垂直和水平)
带有可选换行的文本光标位置
加载 Windows BMP 文件的函数
在 SH1106/7 上进行像素绘图,无需后备 RAM
优化的 Bresenham 线图
优化 Bresenham 轮廓和填充椭圆绘制
优化轮廓和填充矩形绘制
可选的后备 RAM,用于为具有足够 RAM 的系统绘制像素
以任何角度绘制 16x16 平铺/精灵图。
使用简单的 API 以高帧率运行全帧动画
轻到可以在 ATtiny85 上运行

此代码取决于 BitBang_I2C 库。你可以在这里下载:https :
//github.com/bitbank2/BitBang_I2C

使用说明:

首先初始化库。使用硬件 I2C、位碰撞 I2C 或 SPI 与显示器对话。对于 I2C,将自动检测显示器的地址(0x3c 或 0x3d)。典型的 MCU 只允许将 I2C 速度设置为 400Khz,但 SSD1306 显示器可以处理更快的信号。使用 bit-bang 代码,您通常可以指定稳定的 800Khz 时钟,并且使用 Cortex-M0 目标,可以告诉硬件 I2C 几乎是任何速度,但我测试过的显示器往往会在超过 1.6Mhz 时停止工作。初始化显示器后,您可以开始在其上绘制文本或图形。所有绘图函数的最后一个参数是渲染标志。当为真时,图形将被发送到内部后备缓冲区(如果可用)并发送到显示器。您可以选择使用 oledSetBackBuffer() 函数向库传递一个后备缓冲区(如果您的 MCU 有足够的 RAM)。当渲染标志为假时,图形只会被绘制到内部缓冲区中。一旦您准备好将像素发送到显示器,请调用 oledDumpBuffer(NULL),它将整个内部缓冲区复制到显示器。文本绘制功能现在有一个滚动偏移参数。这告诉它在给定的目标坐标处绘制文本之前要跳过多少文本像素。例如,如果为滚动偏移传递值 20 并使用 8 像素宽字体 (FONT_NORMAL),则不会绘制前两个半字符;第三个和后续字符的后半部分将从您指定的 x/y 开始绘制。

【Arduino】168种传感器模块系列实验(资料代码+图形编程+仿真编程)
实验一百八十一:1.3寸OLED液晶屏 I2C IIC通信 4针模块 1106/1306驱动 132*64像素
项目之十:循环自动计数

实验开源仿真编程(Linkboy V4.62)

在这里插入图片描述
实验场景图

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用webpack建立React+TS项目

之前写过类似的文章&#xff0c;这次看到一本新书里也介绍了这个知识点&#xff0c;故尝试之。 Refer: 《Learn React With TypeScript - A Beginners Guide To Reactive Web Development With React 18 and TypeScript》chapter3 Creating a project with webpack 1.先建立一…

CS 144 Lab Six -- building an IP router

CS 144 Lab Six -- building an IP router 引言路由器的实现测试 对应课程视频: 【计算机网络】 斯坦福大学CS144课程 Lab Six 对应的PDF: Lab Checkpoint 5: building an IP router 引言 在本实验中&#xff0c;你将在现有的NetworkInterface基础上实现一个IP路由器&#xf…

【Shader 挖坑01】Split RGB:从水下焦散到故障效果

写在前面 最近又在写水&#xff0c;在焦散效果这里白白的挺单调&#xff0c;叠了一位大佬的方案&#xff0c;Believable Caustics Reflections - Alan Zucconi RGB通道偏移了一下&#xff1a; 采样了三次带来的消耗还蛮大的。先不说这个&#xff0c;这个RGB通道分别采样吧&…

【雕爷学编程】MicroPython动手做(28)——物联网之Yeelight 4

知识点&#xff1a;什么是掌控板&#xff1f; 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;可作为物联网节点&#xff0c;实现物联网应用。同时掌控板上集成了OLED…

Web3 solidity编写交易所合约 编写ETH和自定义代币存入逻辑 并带着大家手动测试

上文 Web3 叙述交易所授权置换概念 编写transferFrom与approve函数我们写完一个简单授权交易所的逻辑 但是并没有测试 其实也不是我不想 主要是 交易所也没实例化 现在也测试不了 我们先运行 ganache 启动一个虚拟的区块链环境 先发布 在终端执行 truffle migrate如果你跟着我…

K8S系列文章 之 容器网络基础 Docker0

什么是Docker0 使用ip addr命令看一下网卡&#xff1a; rootKitDevVps:~# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host…

MyCat核心概念、需求案例讲解、环境准备及分片配置

1.MyCat概念介绍 2.MyCat入门需求 2.1 需求分析 2.2 环境准备 输入以下命令检查服务器防火墙状态 dead代表关闭状态&#xff0c;如果不关闭也可以需要开放特定的端口号&#xff01;&#xff01; systemctl status firewalld接着需要在三台服务器上的MySQL上创建三个数据库db0…

渗透攻击方法:原型链污染

目录 一、什么是原型链 1、原型对象 2、prototype属性 3、原型链 1、显示原型 2、隐式原型 3、原型链 4、constructor属性 二、原型链污染重现 实例 Nodejs沙箱逃逸 1、什么是沙箱&#xff08;sandbox&#xff09; 2、vm模块 一、什么是原型链 1、原型对象 JavaS…

PHP8的循环控制语句-PHP8知识详解

我们在上一节讲的是条件控制语句&#xff0c;本节课程我们讲解循环控制语句。循环控制语句中&#xff0c;主要有for循环、while循环、do...while循环和foreach循环。 在编写代码时&#xff0c;经常需要反复运行同一代码块。我们可以使用循环来执行这样的任务&#xff0c;而不是…

8.物联网操作系统之事件标志组

。事件标志组定义 FreeRTOS事件标志组介绍 FreeRTOS事件标志组工作原理 一。事件标志组定义 信号量信号量只能实现任务与单个事件或任务间的同步。但是某些任务可能会需要与多个事件或任务进行同步&#xff0c;此时就可以使用事件标志组来解决。事件标志组能够实现某个任务与…

高效处理矢量大数据的高可用解决方案

高效处理矢量大数据的高可用解决方案 解决方案目标 存储海量矢量数据实时分析海量矢量数据实现海量矢量数据的可视化提供高可用、高性能和高可拓展性解决方案概述 海量数据查询与可视化 系统技术流程 方案一 数据存储: PostgreSQL+PostGIS(矢量数据存储和空间分析)数据服务…

Total Variation loss

Total Variation loss 适合任务 图像复原、去噪等 处理的问题 图像上的一点点噪声可能就会对复原的结果产生非常大的影响&#xff0c;很多复原算法都会放大噪声。因此需要在最优化问题的模型中添加一些正则项来保持图像的光滑性&#xff0c;图片中相邻像素值的差异可以通过…