Android Things創(chuàng)客DIY第五課-硬件開發(fā)案例教程-PWM調(diào)色-觸摸開關(guān)-數(shù)碼管顯示-OLED顯示

Android Things開發(fā)拦耐,離不開硬件的DIY組合杀糯,本例來介紹一些好玩的硬件模塊的使用。如果你手上有Google派發(fā)的NXP開發(fā)板骂际,或者已有樹莓派3B歉铝,那么就可以開始你的Android Things創(chuàng)客DIY之旅了柠贤。

案例代碼在Github上開源:https://github.com/sysolve/androidthings-moreDisplaySamples

案例代碼已升級到Android Things?Developer Preview 7版本臼勉,注意開發(fā)板系統(tǒng)與代碼版本一致。

在入門開發(fā)配件包中瓢谢,有提供紅恩闻、綠、藍(lán)三色的LED翅楼,那么我們是不是可以通過三種顏色的組合,顯示我們需要的顏色呢管嬉?答案是肯定的蚯撩。如下圖連接三種顏色的LED胎挎。

使用入門配件包中的三種顏色的LED顯示彩色

僅僅能讓三種顏色亮起來是不夠的芽卿,我們需要分別控制每種顏色的亮度称杨,通過三種顏色的比例列另,才能達(dá)到顯示所需顏色的效果摊滔。

對LED的亮度控制,可以通過控制電流的方式眨八,但一是不方便數(shù)字電路動態(tài)調(diào)節(jié)页响,二是亮度和電流的關(guān)系不是線性的,電流過小或過大時(shí)LED的顏色還會產(chǎn)生色差没陡。所以通常不用電流來調(diào)節(jié)LED的亮度盼玄。

我們通常會采用PWM來調(diào)節(jié)LED的亮度,通過改變對LED供電的占空比來改變亮度蝌箍。也就是說,我們的LED燈不是一直亮的妓盲,二是間歇的亮、暗筋粗、亮丽已、暗,通過控制亮和暗的時(shí)間比例來調(diào)節(jié)亮度嘁灯。只要我們切換的比較快,是看不出來燈是在閃爍切換的羹奉,一般要求頻率>60Hz滩褥。本例中铺然,我們設(shè)置為100Hz插勤。

PeripheralManagerService service = new PeripheralManagerService();

pwmRed = service.openPwm(BoardSpec.getInstance().getPwm(0));

pwmRed.setPwmDutyCycle(30);? ?//percent, 0-100
pwmRed.setPwmFrequencyHz(100);
pwmRed.setEnabled(true);

在上面的代碼中,我們設(shè)置了紅色LED助隧,使用第一個(gè)PWM腳(PIN_12)巍实。

我們將刷新頻率(PwmFrequencyHz)設(shè)置成了100Hz。

占空比是30:70,即PwmDutyCycle=30原环,相當(dāng)于LED我們顯示了30%的亮度。

同樣我們可以將綠色LED連接在第二個(gè)PWM腳上(PIN_33)。

之后是藍(lán)色LED绕德,這時(shí)候問題來了胞此,我們的開發(fā)板(無論是樹莓派3B還是NXP Pico)只有2個(gè)PWM腳!

這時(shí)候當(dāng)我們了解了PWM的原理刁赦,我們可以用GPIO,做一個(gè)SoftPWM,也就是說波闹,通過程序設(shè)置GPIO為高電平,持續(xù)一段時(shí)間a瘫证,再設(shè)置為低電平洞斯,再持續(xù)一段時(shí)間b。a:b就是我們前面說的占空比蝇刀。a+b就是我們一個(gè)周期的時(shí)間甸昏,而1秒/(a+b)就是我們設(shè)置的刷新頻率。

我們可以試算一下翻默,100Hz的刷新頻率检盼,即a+b=1000毫秒/100=10毫秒哄芜。那么要設(shè)置PwmDutyCycle=30,即a=3毫秒失晴,b=7毫秒灰伟。毫秒級的GPIO控制,在Android Java層面還是可以勝任的,那么我們就可以動手寫我們的SoftPwm了。具體代碼可以參見Github上的源碼胞谭,這里不再詳述伶棒。

面包板連線圖

代碼中增加了一個(gè)觸摸按鈕模塊宛渐,切換三色燈全亮還是漸變兩種顯示模塊鳞仙,按鈕模塊功能和按鍵一樣糊闽,都是通過GPIO輸入信號,模塊需要接3.3V或5V電源,GND和一個(gè)GPIO,例子代碼中我們接在PIN_40上侵佃。

下圖是三種顏色的燈全亮的效果仑乌。

彩色現(xiàn)實(shí)的效果

下圖是顏色漸變顯示的效果,做個(gè)紙筒套在上面,顏色從紙反射出來于置,混色的效果更好。

可以套個(gè)紙筒,反射的顏色會混合在一起

如果沒有入門開發(fā)配件包柱查,或者覺得使用3個(gè)LED連接電阻比較麻煩淋硝,那么我們可以用一個(gè)三色LED模塊继谚,其實(shí)就是集成了三色LED和電阻的模塊臭挽,效果如下圖纽帖。

使用一個(gè)全彩LED模塊更方便

模塊和電路原理圖如下:

全彩LED模塊的結(jié)構(gòu),相當(dāng)于集成了紅綠藍(lán)三個(gè)LED

本例中尝偎,我們還引入了一個(gè)四色數(shù)碼管模塊,當(dāng)按下觸摸按鈕時(shí)醒陆,我們會顯示按下按鈕的次數(shù)。

數(shù)碼管顯示模塊

接線很簡單嚷闭,VCC連接到+5V嗅榕,GND接開發(fā)板的GND,CLK連接到開發(fā)板的PIN38嘲碱,DIO連接到開發(fā)板的PIN36即可扶欣。

4位數(shù)碼管模塊連接圖

控制顯示的代碼也很簡單:

mSegmentDisplay =new NumericDisplay(

? ? ? ? BoardSpec.getInstance().getGpioPin(BoardSpec.PIN_36),? ? ? ? ?//DIO: Data

? ? ? ? BoardSpec.getInstance().getGpioPin(BoardSpec.PIN_38)? ? ? ? ? //CLK: Clock

);

mSegmentDisplay.setBrightness(1.0f);? //設(shè)置亮度

mSegmentDisplay.setColonEnabled(true);? //是否顯示冒號

mSegmentDisplay.display("1234");? //顯示數(shù)字

本例中顺呕,我們還引入了一個(gè)OLED顯示模塊启盛,可以顯示128*64個(gè)像素點(diǎn)技羔,我們可以用它來顯示圖形和文字藤滥。

OLED顯示模塊

模塊采用IIC接口,估連接到開發(fā)板的IIC接口即可趴梢,連接圖如下:

OLED顯示模塊

為不影響案例代碼在未連接OLED模塊時(shí)正常運(yùn)行簇抵,OLED顯示的代碼目前是注釋掉的郑临,連接好模塊,將代碼取消注釋即可屑宠。

//要顯示OLED顯示屏厢洞,先連接好開發(fā)板到OLED屏的IIC連接線,再取消下面行的注釋典奉。開啟OLED顯示屏躺翻,會導(dǎo)致藍(lán)色燈顯示閃爍

//oledScreen = new OledScreen(this);

例子參照官網(wǎng)Samples代碼,有三種顯示演示:顯示變化的點(diǎn)卫玖,顯示十字交叉線公你,顯示移動的小花圖片,按下觸摸按鈕會在三種模式切換假瞬。

想進(jìn)一步了解OLED模塊的使用陕靠,比如用OLED模塊顯示文字,可以參考我們開源的代碼:https://github.com/sysolve/androidthings-oledDisplayText

用OLED模塊顯示文字
本例中使用到的模塊

如需要本例中使用到的以上四種模塊脱茉,可以從淘寶購買:https://item.taobao.com/item.htm?id=564533484773

樹莓派3B開發(fā)板和NXP Pico開發(fā)板均適用剪芥。

如果你還沒有開發(fā)板,那么可以從這里購買樹莓派3B和入門配件套裝:https://item.taobao.com/item.htm?id=564158582078

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末琴许,一起剝皮案震驚了整個(gè)濱河市税肪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖益兄,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锻梳,死亡現(xiàn)場離奇詭異,居然都是意外死亡净捅,警方通過查閱死者的電腦和手機(jī)疑枯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來灸叼,“玉大人神汹,你說我怎么就攤上這事」沤瘢” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵滔以,是天一觀的道長捉腥。 經(jīng)常有香客問我,道長你画,這世上最難降的妖魔是什么抵碟? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮坏匪,結(jié)果婚禮上拟逮,老公的妹妹穿的比我還像新娘。我一直安慰自己适滓,他們只是感情好敦迄,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著凭迹,像睡著了一般罚屋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嗅绸,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天脾猛,我揣著相機(jī)與錄音,去河邊找鬼鱼鸠。 笑死猛拴,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蚀狰。 我是一名探鬼主播愉昆,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼造锅!你這毒婦竟也來了撼唾?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎倒谷,沒想到半個(gè)月后蛛蒙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡渤愁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年牵祟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抖格。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡诺苹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出雹拄,到底是詐尸還是另有隱情收奔,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布滓玖,位于F島的核電站坪哄,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏势篡。R本人自食惡果不足惜翩肌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望禁悠。 院中可真熱鬧念祭,春花似錦、人聲如沸碍侦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽祝钢。三九已至比规,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拦英,已是汗流浹背蜒什。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留疤估,地道東北人灾常。 一個(gè)月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像铃拇,于是被迫代替她去往敵國和親钞瀑。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容

  • 檐廊入巷對河齊慷荔, 岸綠盈枝數(shù)鳥迷雕什。 添閣院深樓角遠(yuǎn), 倚軒階近陌頭低。 甜醇香豆嘗黃酒贷岸, 雋味當(dāng)知品醬蹄壹士。 謙自客...
    黃旭明閱讀 638評論 0 1
  • 他沒那么喜歡你,是一切的原因偿警。 我原本以為躏救,我的不死心,我的躍躍欲試螟蒸,我的勇往無前盒使,在當(dāng)時(shí)當(dāng)刻,都是因?yàn)槲蚁矚g那個(gè)...
    K歪閱讀 168評論 0 0
  • 你一定會很喜歡叫ta的名字七嫌。和ta在一起的時(shí)候會一直叫ta名字少办;不和ta在一起的時(shí)候也會自言自語叫ta的名字。想到...
    反正小花生是我的閱讀 191評論 0 0
  • 熬了不該熬的夜 哭了不該掉的淚等了不該等的人 傷了不值得的情一個(gè)玩笑糾纏出的一段情遍體鱗傷過后 醒悟錯(cuò)的一塌糊涂后...
    困了可以想睡就睡么閱讀 205評論 0 1
  • 姚小平教授談《語言研究和人文研究中的實(shí)證法》 姚小平教授談《語言研究和人文研究中的實(shí)證法》 http://www....
    高志軍_PKU閱讀 626評論 0 3