新DiFi第21課OLED(有機發光二極體)
使用價格便宜(不到200元)的0.96吋OLED(有機發光二極體),支援I²C通訊方式,可以簡單的顯示中文(註1)
目前支援ESP8266系列板子,英數字型使用離線方式顯示(不需上網),中文字型使用網路連線中文字庫下載(需要上網)。(註2)
積木說明:
清除所有筆跡:清除OLED上的字
在座標(X,Y)開始顯示英文字,字級大小為多少。
在座標(X,Y)開始顯示中文字,字級大小為多少。(記得要用全型字)
中文字型使用網路連線即時下載,請保持網路暢通,並加上[等待1~2秒],讓字型可以有時間下載。
注意:字級 16,一行 8 字,請勿超過,以免當機。
接腳對照表
OLED接腳 | 新DiFi | 備註 |
VCC | 5V或3.3V | 注意電源不可接錯 |
GND | GND | 注意電源不可接錯 |
SCL | D1(SCL) | |
SDA | D2(SDA) |
軟體設定請參考http://blog.ilc.edu.tw/blog/blog/868/post/97509/660050
注意:
更新版的Difi(V5.1)增加OLED插孔,可以直接將0.96吋OLED插上去使用。(註)
記得腳位針腳上IO4、IO5(D1、D2)不要插JUMP喔!
一、WFduino
OLED上顯示不同大小的[WFduino]、[物聯思維教育]
接線:
請參考上面的接腳對照表,將OLED上的4個接腳分別接到新DiFi板子上。
在座標(0,0)開始顯示英文字[WFduino],字級[10]。
在座標(0,10)開始顯示英文字[WFduino],字級[16]。
在座標(0,26開始顯示英文字[WFduino],字級[24]。
在座標(0,48)開始顯示中文字[物聯思維教育],字級[16]
程式下載:WFduino.sb2
延伸:
顯示其他文字,例如:學校名稱、自己的名字
二、OLED上顯示現在的日期、時間及溫、溼度
接線圖:
使用杜邦線將D7和[DHT](DHT11溫溼度感測器)接上。
OLED接線請考前面列表
溫濕度感測器請參考:第15課DHT11溫濕度感測器(http://blog.ilc.edu.tw/blog/blog/868/post/104089/678444)
[腳位7模式設為INPUT],設定數位腳D7為輸入訊號(DHT11溫溼度感測器)。
[等待1秒],預設是OUTPUT,在設定之後加一個等待時間,讓程式有時間設定為INPUT。
[OLED清除 座標0 0 寬0高0],清除前面顯示過的字。
[OLED座標(0,32)字級(16)顯示中文(溫度)],在座標(0,32)顯示中文字[溫度]。
[等待1秒],等待上網抓中文字型。
[OLED座標(0,48)字級(16)顯示中文(濕度)],在座標(0,48)顯示中文字[濕度]。
[等待1秒],等待上網抓中文字型。
[循環無限次],重複執行下面的動作。
[溫溼度感測器(11)在腳位(7)],設定數位腳D7接收來自DHT11的訊號
[等待1秒],因為DHT11需要做資料轉換,每筆資料的抓取時間不能太快。
[OLED座標(0,0)字級(16)顯示英數(字串組合(當前的年……..))],在座標(0,0)顯示日期。
[OLED座標(0,16)字級(16)顯示英數(字串組合(當前的時……..))],在座標(0,16)顯示時間。
[OLED座標(34,32)字級(16)顯示英數(字串組合(讀取感測器(DHT參數°C和°C))],顯示目前的溫度。
[OLED座標(34,48)字級(16)顯示英數(字串組合(讀取感測器(DHT參數濕度和%))],顯示目前的濕度。
程式下載:溫溼度.sb2
延伸:
加上[說..]的積木,讓電腦說出目前的溫、濕度。
三、顯示LASS資料
讀取LASS上的資料(PM2.5及溫、濕度),在OLED上顯示
讀取程式請參考WFduino第二十四課PM2.5環境監測超簡單
程式下載:讀取LASS.sb2
延伸:
讀取LASS資料後,電腦語音說出來。
程式下載:LASS說.sb2
四、紅綠燈倒數
模擬十字路口綠、黃、紅燈(紅、綠燈時,LCD顯示倒數計時)
比較下面程式和第4課控制RGB LED(上)(http://blog.ilc.edu.tw/blog/blog/868/post/104089/678431)
的程式有何不同?
增加OLED顯示部分。
程式下載:紅綠燈倒數.sb2
五、按鍵計數器
按一次按鍵,計數器加1,並發出提示音,計算按鍵次數,並在OLED上顯示。
使用Jump直接將D3和[KEY](按鍵)、D8和BEEP兩兩接上。
主要程式請參考:
新DiFi第10課按鍵(下)(http://blog.ilc.edu.tw/blog/blog/868/post/104089/678439)
增加OLED顯示及蜂鳴器部分
程式下載:按鍵計數器.sb2
六、倒數計時器
接線圖如前,按下[綠旗]後,輸入倒數時間,等待按下按鍵後開始倒數計時,時間到,蜂鳴器發出聲響。
[腳位3模式設為INPUT],設定數位腳3為輸入。
OLED清除前面顯示過的字
OLED顯示提示字,[請輸入倒數時間]
畫面提問要計時多久,輸入時間。
設定變數[倒數計時]為[答案]
OLED顯示提示字,[請按按鍵開始]
[等待(讀取數位腳位3)=0],等待按下按鍵
[等待(讀取數位腳位3)=1],等待放開按鍵,才開始倒數計時
重複[倒數計時]次
等待1秒,將(倒數計時)變數 -1
OLED顯示倒數計時
時間到了,將畫面造型換成[時間到],OLED顯示[時間到],並發出聲音。
程式下載:倒數計時器.sb2
七、OLED顯示的鬧鐘
設定鬧鈴時間到了就發出聲音或音樂。
使用清單來儲存輸入的鬧鈴時間。
先製作[題號]、[鬧鈴]等2個變數,和[題目]、[鬧鈴時間]等2個清單。
按[題目]清單,左下角的[+],依序輸入[時],[分],[秒]
按[鬧鈴時間]清單,左下角的[+]3次,產生3個空白位置。
[OLED清除 座標0 0 寬0高0],清除前面顯示過的字。
[OLED座標(0,0)字級(16)顯示中文(鬧鈴時間)],在座標(0,0)顯示中文字[鬧鈴時間]。
[等待1秒],等待上網抓中文字型。
[OLED座標(0,32)字級(16)顯示中文(目前時間)],在座標(0,32)顯示中文字[目前時間]。
[等待1秒],等待上網抓中文字型。
重複3次輸入要鬧鈴的時間並記錄在鬧鈴時間清單上。
清單第(題號)項(題目):提問題目的第幾項,依次提問時、分、秒
替換(題號) 項 (鬧鈴時間) 成 (答案) :將答案填入[鬧鈴時間]清單中的第幾項中,依次填入回答的時、分、秒
[循環無限次],重複執行下面的動作。
顯示目前的時間
比對時間是否符合[鬧鈴時間]
如果[鬧鈴時間]相符,顯示[時間到],並讓蜂鳴器發出聲音。
程式下載:鬧鈴.sb2
延伸:
1.請修改程式,讓鬧鈴過後可以直接再次設定鬧鈴時間
2.設計可以跨日的鬧鈴。
3.使用程式控制家電產品開、關的時間,OLED顯示定時器時間。
請參考新DiFi第13課繼電器 (
http://blog.ilc.edu.tw/blog/blog/868/post/104089/678442 )
4.設定不定時開燈:當家人出外旅遊時,將家裡的電燈設定成不定時打開,讓小偷以為家裡有人。
八、模擬捷運顯示站名
模擬捷運車廂,播報站名,OLED顯示站名。
使用Jump直接將D3和[KEY](按鍵)接上,利用按鍵來控制播放站名。
使用存取檔案功能,從[站名]文字檔案取出站名,到站時播報站名,並在OLED上顯示站名。
請參考WFduino第二十六課資料存取(http://blog.ilc.edu.tw/blog/blog/868/post/97509/657968)
[腳位3模式設為INPUT],設定數位腳D3為輸入訊號(按鍵)。
[等待1秒],預設是OUTPUT,在設定之後加一個等待時間,讓程式有時間設定為INPUT。
[讀取檔案(d:文湖線.txt)],準備讀取存在D磁碟根目錄下的站名資料
[循環(筆數)次],重複讀取站名資料
讓OLED顯示站名,並讓電腦說出站名,將站名存到清單。
文湖線文字檔:文湖線.txt
程式下載:捷運.sb2
延伸:
參考WFduino第31課JSON格式資料運用(http://blog.ilc.edu.tw/blog/blog/868/post/97509/677614)
從捷運公開資料網站中擷取捷運即時資料,在OLED上顯示。
九、模擬捷運顯示站名及下一站
模擬捷運車廂,播報站名,OLED顯示站名及下一站。
使用Jump直接將D3和[KEY](按鍵)接上,利用按鍵來控制播放站名。
使用存取檔案功能,從[站名]文字檔案取出站名,到站時播報站名,並在OLED上顯示站名及下一站。
請參考WFduino第二十六課資料存取(http://blog.ilc.edu.tw/blog/blog/868/post/97509/657968)
只顯示中文站名,上一節原來的英文清單就可以去掉不用了。
[腳位3模式設為INPUT],設定數位腳D3為輸入訊號(按鍵)。
[等待1秒],預設是OUTPUT,在設定之後加一個等待時間,讓程式有時間設定為INPUT。
[讀取檔案(d:文湖線.txt)],準備讀取存在D磁碟跟目錄下的站名資料
[循環(筆數)次],[新增項目(資料)(站名))],重複讀取站名資料,存到站名清單上。
[循環(筆數)次],等待按下按鍵,放開按鍵後,依序將清單上的站名顯示在OLED上,並讓電腦說出站名。
文湖線文字檔:文湖線.txt
程式下載:捷運下一站.sb2
延伸:
參考WFduino第31課JSON格式資料運用(http://blog.ilc.edu.tw/blog/blog/868/post/97509/677614)
從捷運公開資料網站中擷取捷運即時資料,在OLED上顯示。
——————————-
註1:
https://zh.wikipedia.org/wiki/%E6%9C%89%E6%A9%9F%E7%99%BC%E5%85%89%E4%BA%8C%E6%A5%B5%E9%AB%94
有機發光二極體(英文:Organic Light-Emitting Diode,縮寫:OLED)又稱有機電激發光顯示(英文:Organic Electroluminescence Display,縮寫:OELD)、有機發光半導體,與薄膜電晶體液晶顯示器為不同類型的產品,前者具有自發光性、廣視角、高對比、低耗電、高反應速率、全彩化及製程簡單等優點,但相對的在大面板價格、技術選擇性 、壽命、解析度、色彩還原便無法與後者匹敵,有機發光二極體顯示器可分單色、多彩及全彩等種類,而其中以全彩製作技術最為困難,有機發光二極體顯示器依驅動方式的不同又可分為被動式(Passive Matrix,PMOLED)與主動式(Active Matrix,AMOLED)。
有機發光二極體可簡單分為有機發光二極體和聚合物發光二極體(polymer light-emitting diodes, PLED)兩種類型,目前均已開發出成熟產品。聚合物發光二極體主要優勢相對於有機發光二極體是其柔性大面積顯示。但由於產品壽命問題,目前市面上的產品仍以有機發光二極體為主要應用。
https://zh.wikipedia.org/wiki/I%C2%B2C
I²C(Inter-Integrated Circuit)是I²C Bus簡稱,中文叫積體電路匯流排,它是一種串列通訊匯流排,使用內送流量備援容錯機制從架構。
I²C(Inter-Integrated Circuit)字面上的意思是積體電路之間,它其實是I²C Bus簡稱,所以中文應該叫積體電路匯流排,它是一種串列通訊匯流排,使用內送流量備援容錯機制從架構,由飛利浦公司在1980年代為了讓主機板、嵌入式系統或手機用以連接低速週邊裝置而發展。I²C的正確讀法為「I平方C」(”I-squared-C”),而「I二C」(”I-two-C”)則是另一種錯誤但被廣泛使用的讀法。自2006年11月1日起,使用I²C協定已經不需要支付專利費,但製造商仍然需要付費以取得I²C從屬裝置位址。
註2:
如果要支援無網路產生中文字庫,需要另外裝許多程式庫,程式會變得龐大無效率,所以取消離線產生中文功能,要產生中文字時需要電腦有網路連線。
英數字型就沒有網路限制。
中文單一字級最大 44,,一行 8 字,字級 16.
Arduino 因為RAM 太少目前不支援。
本文使用OLED購自https://shopee.tw/I2C-OLED-0.96-%E7%99%BD%E8%89%B2-i.746007.22962891
螢幕像素:128X64
支援I2C,SSD1306 驅動
GND: 電源
VCC: 2.2V~5.5V
SCL: CLK 時鐘(高電平2.2V~5.5V)
SDA: MOSI 資料(高電平2.2V~5.5V)
尺寸:29.5mm*27.35mm
註3:
中文要使用網路,英文不用,目前 OLED 預設是 SDA:5 SCL:4, 所以執行切換才會換到 SDA:4 SCL5(這是對的)再重新連線試並用積木輸出看看,應該是可以。 下次更新再改回預設 SDA:4, SCL:5
——————————–
相關連結:
新DiFi課程目錄
http://blog.ilc.edu.tw/blog/blog/868/post/104089/678192
WFduino(Arduino)課程目錄
http://blog.ilc.edu.tw/blog/blog/868/post/97509/641433