摊牌了……开始入坑硬件开发……Arduion点亮oled小屏

前言

最近又迷上硬件开发了,之所以说是"又”,是因为我之前就对硬件开发有想法,也可以说,在我这我觉玩硬件的都是牛人。

之前入手树莓派就是为了玩硬件,然后搞过一段时间,硬件没学起来,linux倒是有了不少长进。不过没有长进的原因之一,就是我一直觉得硬件入门比较难,要动电路设计、数电模电转换等等,总之在我以前的认知中,我觉业余玩家没有积累根本玩不转。特别在看了稚晖君的相关作品之后,我更是觉得这入门太难了。

但是吧,跃跃欲试的想法却不曾磨灭,再加上之前也买了好多开发组件,所以也一直想着搞一下,总之就是缺少一个契机。

然而就在最近,这个契机就这么出现了,很神奇。

简单来说就是突然就有了想给自己房间整个小时钟的想法。

首先,我翻出了之前买的手环(因为表带断了,所以一直没有戴),想着把它用起来当个桌面时钟用,但是发现官方app下架了,主要是app登录不上了,时间没法同步了,所以手环就pass掉了,但是我又不想买(这种小玩意还要自己买?),然后就又一次有了搞硬件的想法,而且最近一直很流行小电视,B站相关视频一直很火,准确地说也是稚晖君带火的,也是从那一刻我就又开始了解Arduion,一通了解之后,我才发现arduion要比树莓派简单的多呀,而且教程多,主要是价格便宜,一碗面就可以买一个开发板,你说呢?

反正就是两三天之后,我就在某宝下单了arduion开发板、8266开发板、两块0.96oled显示屏,打算撸一个迷你小屏,可以当桌面小时钟、小气象站。然后,就有了今天这篇好玩的内容。

今天我们主要分享分别通过arduion开发板和8266来点亮oled屏幕。

忘记说了,对于arduion8266,代码是一样的。好像也忘记分享arduion的相关用法了,那就明天补上吧!

效果图镇楼:

再来一张小小的全家福:

点亮之旅

焊武帝

收到的屏幕引脚是没有焊接的(忘记拍未焊接的照片了),所以我要先自己手动把引脚焊接上,这点工作量很小,分分钟就可以搞定,然后还顺手把开发板上的老板送的引脚也焊上了:
博客园没法传视频,移步知乎查看

拼装接线

接线直接参考网上的教程即可,好多都给出了接线的示意图。

OLED只有四个引脚:

  • GND是接地,接开发板的GND即可;

  • VCC是电源,接开发板3.3V电压就可以,如果接5v可能会烧屏,我没敢试;

  • SCL是控制线,应该是控制屏幕刷新频率的

  • SDA是数据传输线,也就是说我们显示的内容是通过这根线发送给oled的,spi之所以快就是因为数据传输线比较多,可以说双工况传输

arduion

arduion接线很简单,因为我买的oled只有四根线。收到货才知道,oled分两种,一种是i2c(也叫iic,我买的就是这种的)四根线,另一种是SPI,比i2c接的线多,据说效率要比i2c高,这一块等后续熟悉了,都会了解到。

下面是官网给出的arduion uno r3I/O引脚图,我买到的不是官方原板,所以价格低,意大利官方原板价格120左右,国产的可以卖十块了。

arduion而言,点亮oled的话,只需要把oled的四个引脚分别接到arduion开发板上即可,接线对应关系如下:

序号 OLE引脚 ARDUION引脚
1 GND GND(左侧第六个或者第七个,或者右侧第四个,只要是接地即可)
2 VCC +3v3(左侧第四个)
3 SCL A5(左侧最后一个,或者右侧第一个)
4 SDA A4(左侧倒数第二,或者右侧第二个)

以上接线,我都亲自测试了,都可以正常点亮。因为我买的这个板子是升级板,所以它还有另一种接线方式,这里就不分享了,感兴趣的小伙伴可以留言。

8266

8266这个芯片不知道有没有小伙伴之前了解过,我是最近才接触到了,了解之后发现这一块芯片早物联网时代简直是神一样的存在。

被封神的核心原因——价格低,这是它最核心的优势,不到十块钱的价格,就可以创建wifi热点、实现wifi通信,实现真正的万物互联;另一个比较强的点是,它的生态体系上不仅支持arduion,而且原生支持lua,对python也有支持,这样它的可玩性就很高,很受圈内认识追捧,应该算得上这个领域的国产之光了,甚至连某乎都有"8266是否会取代arduion"这样的问题。

而且,今天我已经用它实现了一个微型服务器,明天我会分享出来。只有4M的内存,性能虽然不高,但是从物联网方面来讲,可玩性还是很高的。

下面是卖家提供的引脚图:

oled连接8266接线对应关系如下如下:

序号 OLED引脚 8266引脚
1 GND GND(随便接,只要是接地就行)
2 VCC 3v3(选3v3就行,卖家给的图上说5v也可以,慎试)
3 SCL D1GPIO5,左侧第二个)
4 SDA D2GPIO4,右侧第三个)

撸代码

虽然咱也是写代码的民工(最近不是官方给人认证了嘛,新生代农民工),但是javaarduion代码区别还是很大的,它更像c++,第一次可以抄抄改改,只要跑起来就行,关于代码我参考了文档1博客的相关内容,同时还参考了官方demo

#include <SPI.h> // 加载SPI库
#include <Wire.h> // 加载Wire库
#include <Adafruit_GFX.h> // 加载Adafruit_GFX库
#include <Adafruit_SSD1306.h> // 加载Adafruit_SSD1306库

// 定义 OLED屏幕的分辨率
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire);

void setup() {
  Serial.begin(9600); // 设置串口波特率

  Serial.println("OLED FeatherWing test"); // 串口输出
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // 设置OLED的I2C地址

  display.clearDisplay(); // 清空屏幕

  display.setTextSize(2); // 设置字体大小
  display.setTextColor(SSD1306_WHITE); // 设置字体颜色
  display.setCursor(0, 0); // 设置开始显示文字的坐标
  display.println("Hello World!"); // 输出的字符
  display.println("   by syske");
  display.display(); // 使更改的显示生效
  delay(1000);
}

void loop() {
  // put your main code here, to run repeatedly:
}

下面就我目前了解到的知识点,做一个简单的介绍和讲解。

上面的代码中,首先我们要引入需要的库,这一点和java引包有点像;然后定义全局变量,紧接着是arduion两个核心方法,一个是setup,一个是loop

其中setup方法只会执行一次,就类型于一个初始化的操作,我们可以在里面进行基本的配置,从业务层面来说,我们可以用它来进行连接wifi,或者获取远程数据等操作,具体根据自己的需求。这里我在这个方法内部直接打印了hello world这样的信息,每一步操作都有说明,这里的波特率一般卖家提供的资料里面都有,如果没有,可以问下卖家。

loop方法是会循环执行的,按照我的理解,loop应该是在setput方法之后执行,之后loop方法会一直执行。在点亮oled之后,我参照B站上一个外国大佬的视频,做了一个动态表情,效果还不错,有需要资源的小伙伴可以留言。

显示效果如下:

博客园没法传视频,移步知乎查看

代码如下太长了,放上来编辑器都变卡了,逻辑上说很简单,就是先把gif的每一帧保存下来,然后转成bpm,通过工具转成数组,接着轮流展示每一帧(写在loop中)。需要代码和工具的小伙伴,私信我哦!

总结

好了,今天就到这里吧,没什么好总结的,但是整个过程还是很有意思。

最后,还想说的是,某种程度上我能进入到IT这个行业,都是因为硬件开发,因为我小时候最爱捣鼓的就是这些硬件玩意,但是那会就玩的比较低端,主要是维修东西,然后拆卸各种家电(是的,就是妈见打系列,但是我一般拆完都可以复原在,这一点也算是天赋吧),偶尔改装个小玩意,有时候会去捡垃圾,淘各种电子物件,如果能满血复活,会开心好久,所以一直对高科技相关的内容比较感兴趣,也一直喜欢各种各种软件。

如果当初早一点接触arduion的话,保不准我现在已经是个硬件大佬了。

好了,废话就先说这么多吧,明天我们再来分享更有意思的内容哦!

参考文档

[1].ESP8266+0.96oled入坑指南: https://blog.bbskali.cn/1276.html

原文地址:https://www.cnblogs.com/caoleiCoding/p/15170839.html