1885_Arduino 1306 OLED屏幕的使用

         全部学习汇总: g_arduino: Arduino hack笔记 (gitee.com)

         以前我基于Arduino做过一个环境信息采集的小工具,采集到的信息存储到SD卡中。当时的笔记: 341_Arduino+python分析天气变化导致颈椎病发的原因_颈椎病相关数据分析python-CSDN博客

         以前的这个工具曾经辅助我从某些角度找到激发我头疼的因素。当时主要是借助于Arduino以及BME280P传感器采集了环境信息,之后存储到SD卡的文件系统中。等出现了不舒服的时候,导出里面的数据分析下为什么。之前的这个系统能够采集存储很长时间的数据,可以满足长跨度的数据分析。而且数据的记录比较详实,整个系统也可以随手放到某个角落即可。不过,数据的处理需要时不时停机导数据,这个还是很繁琐的。

         既然,之前想知道我敏感的环境因素点的问题已经得到了解决,我觉得原有的系统继续留下去的意义也就不大了。对我来说,更有意义的或许是能够直观提示我环境信息的变化。最简单的就是实时显示,当然,能够判断一下几个小时内的变化给我提示则更好了。我觉得还是考虑前者,毕竟Arduino的资源有限。不过,我倒是可以把串口的功能再加回来,这样可以远程直接看数据、记录log、串口图形绘制等。其实,相当于把第一次做的东西做了一个方式留下来了。

         方案的选择,首先考虑的还是Arduino UNO,这个是我手里最多的板子。传感器还是之前的BME280P。屏幕我曾经有好几个,不知道为什么用的时候一个也没翻出来。因此,又入手了一个OLED的屏幕。型号是SSD1306,分辨率128 * 64。分辨率上还是不错的。这个小屏幕到手只需几块钱,但是商家宣称的有点不少:用到的管脚少、寿命高、亮度高、功耗低等。有SPI以及IIC两种通信形式,我选择了IIC形式的,因为管脚更少也更便宜。

         这样,需要做的是融合结果功能到一个程序。这还是我第一次尝试使用IIC实现一主多从的通信,为此我把我的Arduino从header部分又引出来了两个插针方便接外设。小小的东西,把IIC、IIC多从机、串口、环境传感器、显示屏、串口打印等功能全都整合在了一起。产品做久了,还真觉得这个小东西的压缩度做的足够高的。

         整合了这么多功能,存储还没有百分百用完。我觉得这个存储的消耗还是很低的了。当前,这个小东西在我的书房运行了一个星期多了,运行比较可靠。

         我还曾经把这个放到了一个纸盒里,把屏幕用透明胶固定了一下,从侧面伸出传感器。只可惜大宝贝瞬间就给我破坏掉了。继续“裸奔”吧,USB接一个树莓派啥的就很方便随时获取各种数据了。

        代码是根据几个例程组合出来的,附加代码如下:

/*********************************************************************
This is an example for our Monochrome OLEDs based on SSD1306 drivers

  Pick one up today in the adafruit shop!
  ------> http://www.adafruit.com/category/63_98

This example is for a 128x64 size display using I2C to communicate
3 pins are required to interface (2 I2C and one reset)

Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!

Written by Limor Fried/Ladyada  for Adafruit Industries.
BSD license, check license.txt for more information
All text above, and the splash screen must be included in any redistribution
*********************************************************************/

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

#define OLED_RESET 4
#define SEALEVELPRESSURE_HPA (1035.00)

Adafruit_SSD1306 display(OLED_RESET);
Adafruit_BME280 bme;

void setup()
{
    unsigned status;

    Serial.begin(9600);
    while (!Serial)
        ; // time to get serial running

    // by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
    display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3D (for the 128x64)
    status = bme.begin(0x76, &Wire);
}

void printValues()
{
    Serial.print("Temperature = ");
    Serial.print(bme.readTemperature());
    Serial.println(" °C");

    Serial.print("Pressure = ");

    Serial.print(bme.readPressure() / 100.0F);
    Serial.println(" hPa");

    Serial.print("Approx. Altitude = ");
    Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
    Serial.println(" m");

    Serial.print("Humidity = ");
    Serial.print(bme.readHumidity());
    Serial.println(" %");
}

void loop()
{
    static uint32_t i = 0U;
    float sensor_value;

    display.clearDisplay();
    delay(1000);
    display.setTextSize(2);
    display.setTextColor(WHITE);
    display.setCursor(0, 10);

    switch (i % 3U)
    {
    case 0U:
        sensor_value = bme.readTemperature();
        display.print(sensor_value);
        display.println(" 'C");
        break;
    case 1U:
        sensor_value = bme.readPressure() / 100.0F;
        display.print(sensor_value);
        display.println(" hPa");
        break;
    case 2U:
        sensor_value = bme.readHumidity();
        display.print(sensor_value);
        display.println(" %");
        break;
    default:
        break;
    }

    display.display();
    if(i % 30U == 0U)
    {
        printValues();
    }
    i++;
    delay(2000);
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Jan AI本地运行揭秘:首次体验,尝鲜科技前沿

&#x1f31f;&#x1f30c; 欢迎来到知识与创意的殿堂 — 远见阁小民的世界&#xff01;&#x1f680; &#x1f31f;&#x1f9ed; 在这里&#xff0c;我们一起探索技术的奥秘&#xff0c;一起在知识的海洋中遨游。 &#x1f31f;&#x1f9ed; 在这里&#xff0c;每个错误都…

关于Hive架构原理,尚硅谷

最近学习hive 时候&#xff0c;在做一个实操案例&#xff0c;具体大概是这样子的&#xff1a; 我在dataGip里建了一个表&#xff0c;然后在hadoop集群创建一个文本文件里面存储了数据库表的数据信息&#xff0c;然后把他上传到hdfs后&#xff0c;dataGrip那个表也同步了我上传到…

gin渲染篇

1. 各种数据格式的响应 json、结构体、XML、YAML类似于java的properties、ProtoBuf package mainimport ("github.com/gin-gonic/gin""github.com/gin-gonic/gin/testdata/protoexample" )// 多种响应方式 func main() {// 1.创建路由// 默认使用了2个中…

java idea 中的 Scratches and Consoles

IDEA 中&#xff0c;"Scratches and Consoles" 是一个用于临时代码编辑和交互式开发的工具窗口&#xff0c;作用如下&#xff1a;Scratches&#xff08;草稿&#xff09;&#xff1a;Scratches 是一个用于临时编写和运行代码片段的工具&#xff0c;你可以在其中创建临…

四.Winform使用Webview2加载本地HTML页面并互相通信

Winform使用Webview2加载本地HTML页面并互相通信 往期目录本节目标核心代码实现HTML代码实现的窗体Demo2代码效果图 往期目录 往期相关文章目录 专栏目录 本节目标 实现刷新按钮点击 C# winform按钮可以调用C# winform代码显示到html上点击HTML按钮可以调用C# winform代码更…

2024首更---Web Service 教程

Web Services 简介 Web Services 可使您的应用程序成为 Web 应用程序。 Web Services 通过 Web 进行发布、查找和使用。 您应当具备的基础知识 在继续学习之前&#xff0c;您需要对下面的知识有基本的了解&#xff1a; HTMLXML 如果您希望首先学习这些项目&#xff0c;请在…

万户 ezOFFICE wf_process_attrelate_aiframe.jsp SQL注入漏洞复现

0x01 产品简介 万户OA ezoffice是万户网络协同办公产品多年来一直将主要精力致力于中高端市场的一款OA协同办公软件产品,统一的基础管理平台,实现用户数据统一管理、权限统一分配、身份统一认证。统一规划门户网站群和协同办公平台,将外网信息维护、客户服务、互动交流和日…

lv14 信号量、互斥锁、并发控制机制选择

1 信号量&#xff1a;基于阻塞的并发控制机制 a.定义信号量 struct semaphore sem; b.初始化信号量 void sema_init(struct semaphore *sem, int val); c.获得信号量P int down(struct semaphore *sem);//深度睡眠 int down_interruptible(struct semaphore *sem);//浅度…

【Linux】python版本控制

文章目录 1.查看目前python的版本2.添加软件源并更新3.选择你想要下载的版本4.警示&#xff1a;没必要设置默认版本误区千万千万不要覆盖python3软链接解决办法 5.安装pip换源 6.环境管理 网上有很多教程都是教导小白去官方下载之后编译安装。但是&#xff0c;小白连cmake是什么…

【JavaEE】CAS

作者主页&#xff1a;paper jie_博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文于《JavaEE》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力)打造&…

使用xbindkeys设置鼠标侧键

1.安装如下包 sudo apt install xbindkeys xautomation 2.生成配置文件 xbindkeys --defaults > $HOME/.xbindkeysrc 3.确定侧键键号 在终端执行下面的代码&#xff1a; xev | grep button 此时会出现如下窗口&#xff0c;将鼠标指针移动到这个窗口上&#xff1a; 单…

原生微信小程AR序实现模型动画播放只播放一次,且停留在最后一秒

1.效果展示 0868d9b9f56517a9a07dfc180cddecb2 2.微信小程序AR是2023年初发布&#xff0c;还有很多问提&#xff08;比如glb模型不能直接播放最后一帧&#xff1b;AR识别不了金属、玻璃材质的模型等…有问题解决了的小伙伴记得告诉我一声&#xff09; 微信官方文档地址 3.代码…

kotlin $ (字符串模版)的使用

$ 在kotlin 中当做字符串模版使用&#xff0c;作用就是在字符串里面识别自己定义的字符 例如打印一个字符 这个时候编译就提示我们使用字符串模版的是个 $ 的作用就是识别字符串里面的i 字数有点少了&#xff0c;在写一个demo private fun String.appendArchive(): String …

AI日报:扎克伯格瞄准AGI通用人工智能

文章目录 Meta瞄准通用人工智能领域Meta的目标Meta的产品 FAIR移动和装载H100扎克伯格对人工智能竞争对手的真实动机持怀疑态度Meta抛弃了元宇宙吗&#xff1f; Meta瞄准通用人工智能领域 Meta首席执行官马克扎克伯格&#xff08;Mark Zuckerberg&#xff09;在一份可能改变全…

QT+opencv源码编译

时间记录&#xff1a;2024/1/20 一、版本介绍 QT5.12.7cmake3.22.0opencv4.5.4 二、编译步骤 &#xff08;1&#xff09;下载opencv源码&#xff0c;然后安装&#xff0c;opencv的安装即对源码的解压过程&#xff0c;解压后的文件目录如下 &#xff08;2&#xff09;openc…

硬件---关于 埋孔、盲孔、通孔的介绍

简介 埋孔、盲孔、通孔 都是应用于PCB不同板层之间的换层。 简单区分&#xff1a; 埋孔&#xff1a; 藏在里面&#xff0c;从上往下或者从下往上都看不见&#xff1b; 盲孔&#xff1a;从表面看有个孔&#xff0c;但是看不见底&#xff1b; 通孔&#xff1a;从表面看底是穿的…

保姆级最新版Kali虚拟机安装和汉化中文教程

Kali虚拟机简介 Kali虚拟机是一款基于Debian的Linux发行版虚拟机操作系统&#xff0c;专为安全渗透测试和数字取证而设计。该虚拟机预装了许多渗透测试软件&#xff0c;包括Metasploit、BurpSuite、sqlmap、nmap以及Cobalt Strike等&#xff0c;这些工具都是为了进行网络安全测…

第十回 朱贵水亭施号箭 林冲雪夜上梁山-FreeBSD/Linux 控制台基础操作

林冲被众庄客捉住&#xff0c;吊在门楼下&#xff0c;正被打时&#xff0c;柴进来了&#xff0c;赶快把林冲救下来。原来这是柴进打猎用的小庄子&#xff0c; 林冲就把火烧草料场一事跟柴进详细的说了。柴进说兄弟真是命运多磨难啊。林冲住了几日&#xff0c;恐怕连累柴进&…

基于 OpenVINO, yolov5 推理

OpenVINO 是英特尔开发的一款功能强大的深度学习工具包&#xff0c;可实现跨多个硬件平台的优化神经网络推理。在本文中&#xff0c;我们讨论了 OpenVINO 的特性和优势&#xff0c;以及它如何与领先的计算机视觉平台 Viso Suite 集成&#xff0c;以构建和交付可扩展的应用程序。…

【项目搭建三】SpringBoot引入redis

添加依赖 本文使用spring data redis访问和操作redis&#xff0c;pom文件中加入以下依赖&#xff1a; <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </depende…