最近又迷上硬件开发了,之所以说是"又”,是因为我之前就对硬件开发有想法,也可以说,在我这我觉玩硬件的都是牛人。
之前入手树莓派就是为了玩硬件,然后搞过一段时间,硬件没学起来,linux
倒是有了不少长进。不过没有长进的原因之一,就是我一直觉得硬件入门比较难,要动电路设计、数电模电转换等等,总之在我以前的认知中,我觉业余玩家没有积累根本玩不转。特别在看了稚晖君的相关作品之后,我更是觉得这入门太难了。
但是吧,跃跃欲试的想法却不曾磨灭,再加上之前也买了好多开发组件,所以也一直想着搞一下,总之就是缺少一个契机。
然而就在最近,这个契机就这么出现了,很神奇。
简单来说就是突然就有了想给自己房间整个小时钟的想法。
首先,我翻出了之前买的手环(因为表带断了,所以一直没有戴),想着把它用起来当个桌面时钟用,但是发现官方app
下架了,主要是app
登录不上了,时间没法同步了,所以手环就pass
掉了,但是我又不想买(这种小玩意还要自己买?),然后就又一次有了搞硬件的想法,而且最近一直很流行小电视,B
站相关视频一直很火,准确地说也是稚晖君带火的,也是从那一刻我就又开始了解Arduion
,一通了解之后,我才发现arduion
要比树莓派简单的多呀,而且教程多,主要是价格便宜,一碗面就可以买一个开发板,你说呢?
反正就是两三天之后,我就在某宝下单了arduion
开发板、8266
开发板、两块0.96
寸oled
显示屏,打算撸一个迷你小屏,可以当桌面小时钟、小气象站。然后,就有了今天这篇好玩的内容。
今天我们主要分享分别通过arduion
开发板和8266
来点亮oled
屏幕。
忘记说了,对于arduion
和8266
,代码是一样的。好像也忘记分享arduion
的相关用法了,那就明天补上吧!
效果图镇楼:
再来一张小小的全家福:
收到的屏幕引脚是没有焊接的(忘记拍未焊接的照片了),所以我要先自己手动把引脚焊接上,这点工作量很小,分分钟就可以搞定,然后还顺手把开发板上的老板送的引脚也焊上了:
博客园没法传视频,移步知乎查看
接线直接参考网上的教程即可,好多都给出了接线的示意图。
OLED
只有四个引脚:
GND
是接地,接开发板的GND
即可;
VCC
是电源,接开发板3.3V
电压就可以,如果接5v
可能会烧屏,我没敢试;
SCL
是控制线,应该是控制屏幕刷新频率的
SDA
是数据传输线,也就是说我们显示的内容是通过这根线发送给oled
的,spi
之所以快就是因为数据传输线比较多,可以说双工况传输
arduion
接线很简单,因为我买的oled
只有四根线。收到货才知道,oled
分两种,一种是i2c
(也叫iic
,我买的就是这种的)四根线,另一种是SPI
,比i2c
接的线多,据说效率要比i2c
高,这一块等后续熟悉了,都会了解到。
下面是官网给出的arduion uno r3
的I/O
引脚图,我买到的不是官方原板,所以价格低,意大利官方原板价格120
左右,国产的可以卖十块了。
对arduion
而言,点亮oled
的话,只需要把oled
的四个引脚分别接到arduion
开发板上即可,接线对应关系如下:
序号 | OLE引脚 | ARDUION引脚 |
---|---|---|
1 | GND |
GND (左侧第六个或者第七个,或者右侧第四个,只要是接地即可) |
2 | VCC |
+3v3 (左侧第四个) |
3 | SCL |
A5 (左侧最后一个,或者右侧第一个) |
4 | SDA |
A4 (左侧倒数第二,或者右侧第二个) |
以上接线,我都亲自测试了,都可以正常点亮。因为我买的这个板子是升级板,所以它还有另一种接线方式,这里就不分享了,感兴趣的小伙伴可以留言。
8266
这个芯片不知道有没有小伙伴之前了解过,我是最近才接触到了,了解之后发现这一块芯片早物联网时代简直是神一样的存在。
被封神的核心原因——价格低,这是它最核心的优势,不到十块钱的价格,就可以创建wifi
热点、实现wifi
通信,实现真正的万物互联;另一个比较强的点是,它的生态体系上不仅支持arduion
,而且原生支持lua
,对python
也有支持,这样它的可玩性就很高,很受圈内认识追捧,应该算得上这个领域的国产之光了,甚至连某乎都有"8266
是否会取代arduion
"这样的问题。
而且,今天我已经用它实现了一个微型服务器,明天我会分享出来。只有4M
的内存,性能虽然不高,但是从物联网方面来讲,可玩性还是很高的。
下面是卖家提供的引脚图:
oled
连接8266
接线对应关系如下如下:
序号 | OLED引脚 | 8266引脚 |
---|---|---|
1 | GND |
GND (随便接,只要是接地就行) |
2 | VCC |
3v3 (选3v3 就行,卖家给的图上说5v 也可以,慎试) |
3 | SCL |
D1 (GPIO5 ,左侧第二个) |
4 | SDA |
D2 (GPIO4 ,右侧第三个) |
虽然咱也是写代码的民工(最近不是官方给人认证了嘛,新生代农民工),但是java
和 arduion
代码区别还是很大的,它更像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