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

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

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代码,有三种显示演示:显示变化的点,显示十字交叉线,显示移动的小花图片,按下触摸按钮会在三种模式切换。

本例中使用到的模块

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

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

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

目录
相关文章
|
3月前
|
Android开发 数据安全/隐私保护 虚拟化
安卓手机远程连接登录Windows服务器教程
安卓手机远程连接登录Windows服务器教程
538 4
|
3月前
|
Android开发
布谷语音软件开发:android端语音软件搭建开发教程
语音软件搭建android端语音软件开发教程!
|
5月前
|
Android开发 UED Kotlin
Android中如何跳转到Wi-Fi开关设置页
本文介绍如何在Android应用开发中使用隐式Intent引导用户至特定系统设置页面,如Wi-Fi设置页,并提供Kotlin代码示例。通过设置Intent的Action属性并检查设备兼容性,可轻松实现跳转功能,提升用户体验。此外,还列举了其他常用设置页面的Intent Action及注意事项。
129 15
|
8月前
|
Android开发
杨老师课堂_安卓教程第一篇之入门
杨老师课堂_安卓教程第一篇之入门
47 0
|
8月前
|
网络协议 Android开发 数据安全/隐私保护
Android手机上使用Socks5全局代理-教程+软件
Android手机上使用Socks5全局代理-教程+软件
5502 2
|
传感器 物联网 Android开发
谷歌Android things物联网硬件接入阿里云IoT物联网套件实战
谷歌Android things物联网硬件接入阿里云IoT物联网套件云端实战,DHT12传感器,甲醛传感器,NXP i.MX7D开发板
3365 0
|
物联网 Android开发
Android Things入门防坑必读-树莓派硬件和系统下载安装篇
Android Things给Android开发者带来了一种全新的智能硬件和物联网开发方式,用Google的话说,If you can build an app, you can build a device,对Android开发者来说,好玩的东西更多了。
1946 0
|
存储 物联网 Android开发
Android Things硬件
Android Things是一款面向物联网和智能设备的Android系统,学习、入门和进行Android Things的开发,都离不开和硬件打交道。如果你是个硬件小白,本文将帮助你了解如何选购Android Things硬件、选择配件套装进行Android Things硬件开发的入门学习,并对NXP Pico i.MX7D Pico开发套件和树莓派3开发板做简要的比较。
2176 0
|
4天前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
23 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
13天前
|
Dart 前端开发 Android开发
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
37 4
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex

热门文章

最新文章

  • 1
    如何修复 Android 和 Windows 不支持视频编解码器的问题?
  • 2
    Android历史版本与APK文件结构
  • 3
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 4
    【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
  • 5
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
  • 6
    APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
  • 7
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 8
    Android经典面试题之Kotlin中Lambda表达式和匿名函数的区别
  • 9
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 10
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 1
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    24
  • 2
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    32
  • 3
    Android历史版本与APK文件结构
    120
  • 4
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    27
  • 5
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    23
  • 6
    APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
    56
  • 7
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    37
  • 8
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
    73
  • 9
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    118
  • 10
    Android经典面试题之Kotlin中Lambda表达式和匿名函数的区别
    29