Android Things创客DIY第五课-硬件开发案例教程-PWM调色-触摸开关-数码管显示-OLED显示

Android Things开发,离不开硬件的DIY组合,本例来介绍一些好玩的硬件模块的使用。如果你手上有Google派发的NXP开发板,或者已有树莓派3B,那么就可以开始你的Android Things创客DIY之旅了。

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

案例代码已升级到Android Things Developer Preview 7版本,注意开发板系统与代码版本一致。

在入门开发配件包中,有提供红、绿、蓝三色的LED,那么我们是不是可以通过三种颜色的组合,显示我们需要的颜色呢?答案是肯定的。如下图连接三种颜色的LED。

使用入门配件包中的三种颜色的LED显示彩色

仅仅能让三种颜色亮起来是不够的,我们需要分别控制每种颜色的亮度,通过三种颜色的比例,才能达到显示所需颜色的效果。

对LED的亮度控制,可以通过控制电流的方式,但一是不方便数字电路动态调节,二是亮度和电流的关系不是线性的,电流过小或过大时LED的颜色还会产生色差。所以通常不用电流来调节LED的亮度。

我们通常会采用PWM来调节LED的亮度,通过改变对LED供电的占空比来改变亮度。也就是说,我们的LED灯不是一直亮的,二是间歇的亮、暗、亮、暗,通过控制亮和暗的时间比例来调节亮度。只要我们切换的比较快,是看不出来灯是在闪烁切换的,一般要求频率>60Hz。本例中,我们设置为100Hz。

PeripheralManagerService service = new PeripheralManagerService();

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

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

在上面的代码中,我们设置了红色LED,使用第一个PWM脚(PIN_12)。

我们将刷新频率(PwmFrequencyHz)设置成了100Hz。

占空比是30:70,即PwmDutyCycle=30,相当于LED我们显示了30%的亮度。

同样我们可以将绿色LED连接在第二个PWM脚上(PIN_33)。

之后是蓝色LED,这时候问题来了,我们的开发板(无论是树莓派3B还是NXP Pico)只有2个PWM脚!

这时候当我们了解了PWM的原理,我们可以用GPIO,做一个SoftPWM,也就是说,通过程序设置GPIO为高电平,持续一段时间a,再设置为低电平,再持续一段时间b。a:b就是我们前面说的占空比。a+b就是我们一个周期的时间,而1秒/(a+b)就是我们设置的刷新频率。

我们可以试算一下,100Hz的刷新频率,即a+b=1000毫秒/100=10毫秒。那么要设置PwmDutyCycle=30,即a=3毫秒,b=7毫秒。毫秒级的GPIO控制,在Android Java层面还是可以胜任的,那么我们就可以动手写我们的SoftPwm了。具体代码可以参见Github上的源码,这里不再详述。

面包板连线图

代码中增加了一个触摸按钮模块,切换三色灯全亮还是渐变两种显示模块,按钮模块功能和按键一样,都是通过GPIO输入信号,模块需要接3.3V或5V电源,GND和一个GPIO,例子代码中我们接在PIN_40上。

下图是三种颜色的灯全亮的效果。

彩色现实的效果

下图是颜色渐变显示的效果,做个纸筒套在上面,颜色从纸反射出来,混色的效果更好。

可以套个纸筒,反射的颜色会混合在一起

如果没有入门开发配件包,或者觉得使用3个LED连接电阻比较麻烦,那么我们可以用一个三色LED模块,其实就是集成了三色LED和电阻的模块,效果如下图。

使用一个全彩LED模块更方便

模块和电路原理图如下:

全彩LED模块的结构,相当于集成了红绿蓝三个LED

本例中,我们还引入了一个四色数码管模块,当按下触摸按钮时,我们会显示按下按钮的次数。

数码管显示模块

接线很简单,VCC连接到+5V,GND接开发板的GND,CLK连接到开发板的PIN38,DIO连接到开发板的PIN36即可。

4位数码管模块连接图

控制显示的代码也很简单:

mSegmentDisplay =new NumericDisplay(

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

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

);

mSegmentDisplay.setBrightness(1.0f);  //设置亮度

mSegmentDisplay.setColonEnabled(true);  //是否显示冒号

mSegmentDisplay.display("1234");  //显示数字

本例中,我们还引入了一个OLED显示模块,可以显示128*64个像素点,我们可以用它来显示图形和文字。

OLED显示模块

模块采用IIC接口,估连接到开发板的IIC接口即可,连接图如下:

OLED显示模块

为不影响案例代码在未连接OLED模块时正常运行,OLED显示的代码目前是注释掉的,连接好模块,将代码取消注释即可。

//要显示OLED显示屏,先连接好开发板到OLED屏的IIC连接线,再取消下面行的注释。开启OLED显示屏,会导致蓝色灯显示闪烁

//oledScreen = new OledScreen(this);

例子参照官网Samples代码,有三种显示演示:显示变化的点,显示十字交叉线,显示移动的小花图片,按下触摸按钮会在三种模式切换。

想进一步了解OLED模块的使用,比如用OLED模块显示文字,可以参考我们开源的代码:https://github.com/sysolve/androidthings-oledDisplayText

用OLED模块显示文字
本例中使用到的模块

如需要本例中使用到的以上四种模块,可以从淘宝购买:https://item.taobao.com/item.htm?id=564533484773

树莓派3B开发板和NXP Pico开发板均适用。

如果你还没有开发板,那么可以从这里购买树莓派3B和入门配件套装:https://item.taobao.com/item.htm?id=564158582078

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容

  • 檐廊入巷对河齐, 岸绿盈枝数鸟迷。 添阁院深楼角远, 倚轩阶近陌头低。 甜醇香豆尝黄酒, 隽味当知品酱蹄。 谦自客...
    黄旭明阅读 635评论 0 1
  • 他没那么喜欢你,是一切的原因。 我原本以为,我的不死心,我的跃跃欲试,我的勇往无前,在当时当刻,都是因为我喜欢那个...
    K歪阅读 166评论 0 0
  • 你一定会很喜欢叫ta的名字。和ta在一起的时候会一直叫ta名字;不和ta在一起的时候也会自言自语叫ta的名字。想到...
    反正小花生是我的阅读 191评论 0 0
  • 熬了不该熬的夜 哭了不该掉的泪等了不该等的人 伤了不值得的情一个玩笑纠缠出的一段情遍体鳞伤过后 醒悟错的一塌糊涂后...
    困了可以想睡就睡么阅读 204评论 0 1
  • 姚小平教授谈《语言研究和人文研究中的实证法》 姚小平教授谈《语言研究和人文研究中的实证法》 http://www....
    高志军_PKU阅读 621评论 0 3