前言
最近又迷上硬件開發了,之所以說是"又”,是因為我之前就對硬件開發有想法,也可以說,在我這我覺玩硬件的都是牛人。
之前入手樹莓派就是為了玩硬件,然后搞過一段時間,硬件沒學起來,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
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
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