攤牌了……開始入坑硬件開發……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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM