第一个Arduino成品:无缝连接本章的温湿度传感器,本文将结合实际的开发

这里是 HelloGitHub 推出的“解释开源项目”系列。本期介绍如何使用开源硬件开发平台Arduino自行制作温湿度显示。

从本书的最后一章开始,我们了解了 Arduino 是什么,可以用它做什么,以及 Hello World 的实现。内容非常简单易用。没看过的可以,无缝衔接本章内容。

接下来,我们将进一步学习Arduino的知识。为了避免文字教程枯燥,本文将结合实际开发进行讲解。先介绍温湿度传感器和OLED屏幕的开发,然后结合这两部分的知识,最后你会得到一个有趣的温湿度显示。

别着急,这篇文章的所有内容都已经“难”了,只要按照文章一步一步来,一定能做到!

让我们一起开始构建你的第一个完成的 Arduino!

一、温湿度传感器

在本节中,我们将使用一个名为 DHT 11 的温湿度传感器。DHT 11 是一种常用的数字温湿度传感器。虽然不是很准确,但是很便宜,只用了三根线:VCC, GND, DATA Ready to work (easy),非常适合我们学习使用传感器!

这里我使用的是重新封装的 DHT 11 传感器,如下所示:

1.1 连接传感器

根据购买的商店,最终产品可能会有所不同。如果分不清每个引脚的具体含义,接线前一定要咨询卖家,以免传感器烧坏!

我的三个管脚从左到右分别是DATA、VCC、GND,连接方法是:

1.2 读取数据

读取DHT 11传感器数据的方式也很简单,我们可以根据数据手册4、Serial Interface部分提供的信息编写数据解析程序。

但我认为这超出了初学者的能力,需要大量的工作来实现,所以这就是Arduino的Libraries功能发挥作用的地方!

Arduino官方提供了一个Library平台,汇集了众多开发者提供的开源支持库。灵活使用这些库进行开发可以为我们节省大量时间和精力。

下面将介绍如何使用Arduino IDE的Libraries功能。

1.3 DHT 11 支持库

这里我们选择Adafruit提供的DHT传感器库支持库,它也依赖于Adafruit Unified Sensor库,下面我们将详细操作:

安装

点击左侧的Libraries一栏,在搜索框中输入DHT11找到Adafruit的DHT传感器库,点击INSTALL安装,然后会提示我们安装一些依赖:

这里Arduino IDE自动提示我们如果要使用DHT传感器库,还需要安装Adafruit Unified Sensor。我们直接点击全部安装,让它自动安装。成功后,我们可以在输出界面看到这个提示:

使用

安装完成后,我们找到Arduino IDE上方的选项卡,打开:File->Examples->DHT sensor library->DHTtester打开DHT sensor library使用例程。

这里我们只需要根据实际情况修改前几行配置,然后就可以直接编译到开发板中测试了!

上传到开发板后,打开我们的串口监视器,看到Arduino正在返回温湿度信息:

1.4 传感器摘要

本节我们简要学习了如何安装Arduino支持库,如何查看支持库提供的例程,以及如何使用DHT11库。

在下一节中,我们将学习如何使用 LCD 屏幕显示内容。

二、OLED 屏幕

在本节中,我们将使用名为 SH1106 的 1.3 英寸 OLED 显示屏。我用SH1106工作在I2C模式下,只用了四根线VCC,GND,SDA,SCL分辨率128×64,长这样:

1.1 接线

接线如下:

实际接线可能因使用情况和屏幕而异。不明白的可以搜索关键词:“Arudino+屏模+通讯方式”(I2C或SPI)

直接操作显示屏很复杂,好在开源社区为其提供了强大的支持库。

1.2开源库U8g2

U8g2 是用于单色显示器的开源库,支持市面上大多数单色显示器,可从库管理器轻松安装。

安装

支持库的安装方式与上一节相同,只需在库页面上搜索并安装即可。

但由于体积较大或网络问题,可能会出现下载缓慢或失败等问题。如果安装没有成功,可以手动下载正式版进行安装

使用

U8g2还提供了丰富的例程供我们学习,打开examples文件夹可以看到如下结构:

需要注意的是,U8g2提供了两个版本:U8g2本身(例程中的full_buffer和page_buffer)和u8x8(例程中的u8x8)。前者支持全绘图功能,但速度一般,需要额外的内存支持,后者只支持字体库中图形的显示,但是速度很快,不需要额外的内存。

full_buffer和page_buffer的区别是:

您可以自己运行例程中的代码,大致了解一下。

每个脚本只需要取消注释相应的屏幕即可运行。例如,我使用 SH1106 128×64 使用 I2C 通信。使用的代码片段如下:

只要有屏幕型号、分辨率、连接方式(I2C或SPI)即可轻松找到具体规格

除此之外,还有详细的官方文档。包括功能描述、屏幕类列表等。

三、温湿度显示

温湿度传感器和OLED屏幕我们已经看到了如何分开使用,现在我们只需要将它们组合起来。

下面变得非常非常简单,我们只需要将传感器数据传输到屏幕上显示即可。

完整代码如下:

#include 
#include 
#include "DHT.h"
// DHT11 DATA 引脚连接的数字引脚编号
#define DHT_DATA_PIN 8
DHT dht11(DHT_DATA_PIN, DHT11, 1);
U8G2_SH1106_128X64_NONAME_1_HW_I2C oled(U8G2_R0, U8X8_PIN_NONE);
float t, f, h;
float head_index;
const char URL[] = "http://www.HelloGitHub.com";
int url_width = 0;
bool Fahrenheit = false;
void update_data()
{
  h = dht11.readHumidity();
  t = dht11.readTemperature();
  f = dht11.readTemperature(true);
  head_index = dht11.computeHeatIndex(t, h, false);
}
void setup()
{
  t = f = h = 0;
  dht11.begin();
  oled.begin();
  oled.enableUTF8Print();
  oled.setFontMode(0);
  url_width = oled.getUTF8Width(URL); # 符号需要启动
  update_data();
}
void loop()
{
  static int url_x_pos = -url_width;
  oled.firstPage();
  do
  {
    if (millis() % 200 == 0) // 每 200ms 更新一次
      update_data();
    oled.setFont(u8g2_font_t0_11_mr);
    oled.drawBox(0, 0, 128, 17);
    oled.setDrawColor(0);
    oled.setCursor(url_x_pos, 14);
    oled.print(URL);
    oled.setDrawColor(1);
    oled.setCursor(0, 32);
    oled.setFont(u8g2_font_7x13_mf);
    oled.print("Temp: ");
    if (Fahrenheit) // 每隔一段时间自动切换单位显示
    {
      oled.print(f);
      oled.print("°F");
    }
    else
    {
      oled.print(t);
      oled.print("°C");
    }
    oled.setCursor(0, 47);
    oled.print("Humi: ");
    oled.print(h);
    oled.print(" %");
    oled.setCursor(0, 62);
    oled.print("HeadIndex: ");
    oled.print(head_index);
    oled.print("°C");
  } while (oled.nextPage());
  Fahrenheit = (millis() % 4000 == 0) ? (!Fahrenheit) : Fahrenheit; // 每 4s 更换一次单位
  url_x_pos += 3;
  if (url_x_pos > 128)
    url_x_pos = -url_width;
}

最终结果如下:

结论

如果你按照这篇文章一步一步来,你应该已经在这里收获了你的第一个 Arduino 产品,恭喜!

其实这篇文章更侧重于“授人以渔”!毕竟,再好的教程也不能包揽一切,解决你所有的问题,所以解决问题的方法才是最重要的。文章详细讲解了如何开始使用开源库、查看文档、查看代码示例、搜索资料等。相信有了这些知识,你可以打开新的世界,不局限于本文中的示例.

现在你可以发挥你的想象力,结合你所学的知识和方法,自己动手制作有趣的电子产品!如果你有什么好玩的,你可以发给我,如果有足够的作品,我可以做一个Arduino工作秀!让你的作品吸引眼球,让更多人发现和喜欢。

本期就到这里了,HelloGitHub在GitHub上分享有趣的入门级开源项目。

感谢阅读!您的每一个点赞、评论、分享,都是对我们最大的鼓励~下期再见!

© 版权声明
THE END
喜欢就支持一下吧
点赞49 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片