树莓派点亮LED灯需要几行代码?3行。小孩子都能学会
点亮LED灯
硬件连接
找一个LED灯,连接如上图,注意长短引脚,经过这些年的狂轰乱炸,大家对于这个应该不漠视,毕竟Arduino都进教材了。
代码
我们先来看图形化的版本:
from gpiozero import LED
led = LED(17)
led.on()
是的你没有看错,树莓派点亮
LED
只需要3行代码。只需要像Python的turtle
编程一样导入需要用到的LED
类,然后生成一个表示连接在17号GPIO引脚的LED对象led
。然后调用on()
方法,就可以点亮LED灯了。是不是跟我们日常的思维很接近。LED有点亮的方法,就像是小猫和喵喵叫,汽车可以加速,狮子可以捕猎,这些动作就是方法,LED、小猫、汽车、狮子就是对象。
图形化硬件之所以简化了开源硬件编程,是因为开源硬件把常见的功能抽象成积木块,而且提供了足够简单易用的接口,所以我们使用起来简单方便,学习的门槛很低。但是图形化在设计复杂程序的时候,尽管积木块用起来很方便,写复杂程序的时候也是有些有心无力。但是如果有一个软件库,提供了类似于图形化编程积木块一样的编程接口,那么就会既像图形化编程一样容易上手,又保持了代码编程的灵活性和简洁性。当然了,不可否认,对小孩子肯定是积木编程更加方便。
闪烁的LED灯
GPIO Zero
就是树莓派基金会推出的,面向新手的树莓派硬件Python编程方案。树莓派官网上大部分开源硬件相关的新手项目都是用GPIO Zero
库来编写的。因为真的非常简单。这个库读初学者非常友好,学习曲线非常平缓和平滑,非常有利于小孩子的学习。声明式编程范式使得程序看起来跟命令式编程差不多,这样在制作闪烁的LED灯一类的项目的时候甚至用不到循环,下面我们看示例代码,仍然是上图的硬件连接,我们实现闪烁的LED灯,首先是while
循环版本:
from gpiozero import LED
from time import sleep
red = LED(17)
while True:
red.on()
sleep(1)
red.off()
sleep(1)
图形化版本代码如下:
只需要生成LED对象
red
,然后在while循环中不停的启动on()
和关闭off()
LED就可以了,间隔是1s。是不是很简单,然而,还有更简单的。
呼吸灯
from gpiozero import LED
from signal import pause
red = LED(17)
red.blink()
pause()
导入需要的类和函数之后,在GPIO17连接一个LED,然后告诉树莓派,你需要让这个LED灯blinblin的闪
red.blink()
,就是调用LED对象red
的blink()
闪烁方法;后面pause()
的作用是,只要天没塌下来(强制终止程序)你就一直搁那儿闪得了,如果不加pause()
那么,就会闪一次,然后结束了。
同样的,呼吸灯也是如此的简单:
from gpiozero import PWMLED
from time import sleep
led = PWMLED(17)
while True:
led.value = 0 # off
sleep(1)
led.value = 0.5 # half brightness
sleep(1)
led.value = 1 # full brightness
sleep(1)
等效的图形化代码如下图:
与闪烁的LED不同的是,因为呼吸灯要用到一种叫做PWM
的技术,所以这里使用了不同的类PWMLed
。但是代码一样很简单,LED对象LED
有值value
属性,只要设定为小数比如0.5,就是亮度是最亮值的一半儿。是不是很棒,还有更棒的,更简单的代码如下:
from gpiozero import PWMLED
from signal import pause
led = PWMLED(17)
led.pulse()
pause()
只需声明一个LED,然后告诉LED你要做一个呼吸灯的动作pulse()
。
注意
pulse()
方法实现的呼吸灯效果是连续编号的,效果轻柔的很,可不是设置三种亮度不停循环可以比的。
其他
GPIO Zero
库,之所以如此简单,是因为它为常见的元器件提供了编程的接口,也就是常见的硬件在这个库里都有对应的类,就像是一个封装好的积木块。而且你不需要考虑引脚的高电平还是低电平的问题,只要LED短脚接地,长脚接GPIO,只需要调用on()
和off()
方法就行了,细节的问题,GPIO Zero
库会帮你处理的。
比如,我要生成一个按钮,先导入库from gpiozero import Button
,好了按钮的模板有了;然后利用按钮模板模板Button
生成一个按钮对象button = Button(17)
,哦,这是17号引脚的按钮;然后,告诉按钮你备案下的时候,执行一个打招呼的函数sayHello()
,也就是button.when_pressed = sayHello()
。完全跟我们思考的方式一致,perfect。
我暑假开树莓派社团就是用这个教学生,五年级的学生也可以掌握,一起来学习吧。可以加入钉钉群一起学习,每天下午两点直播课。
大地与星空
树莓派点亮LED灯需要几行代码?3行。小孩子都能学会的更多相关文章
- 30个物联网传感器小实验:三行代码点亮LED灯
30个物联网传感器小实验:三行代码点亮LED灯 三行代码点亮LED灯 LED灯闪烁 LED灯调亮度 LED淡入淡出 不写一行代码点亮LED灯 全彩RGB灯 面包板 30个物联网传感器小实验:三行代码点 ...
- 第二章之S5PV210在BL1中点亮LED灯
1,u-boot中第一个入口在./arch/arm/cpu/armv7/start.S 翻到153行:如下图 前面都是进行一些基本设置,不用管. cpu_init_cp15设置协处理器, cpu_in ...
- 第7章 使用寄存器点亮LED灯
第7章 使用寄存器点亮LED灯 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...
- C语言版——点亮LED灯,深入到栈
在上一篇进行了汇编语言的编写之后,我们采用C语言来编写程序,毕竟C语言才是我们使用最多的语言. 仅仅是点亮LED灯显然太过于简单,我们需要分析最后的反汇编,了解函数调用栈,深入C语言骨髓去分析代码,并 ...
- 第7章 使用寄存器点亮LED灯—零死角玩转STM32-F429系列
第7章 使用寄存器点亮LED灯 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...
- 字符型设备驱动程序-first-printf以及点亮LED灯(三)
根据 字符型设备驱动程序-first-printf以及点亮LED灯(二) 学习 修改函数 中的printf 为 printk. #include <linux/module.h> /* ...
- JZ2440开发板:用按键点亮LED灯(学习笔记)
本文是对韦东山嵌入式第一期学习的记录之一,如有您需要查找的信息,可以继续往下阅读. 想要用按键点亮LED灯,就需要知道按键和LED灯的相关信息,这样才可以进行之后的操作.阅读JZ2440的原理图,可以 ...
- Raspberry PI 系列 —— 裸机点亮LED灯
Raspberry PI 系列 -- 裸机点亮LED灯 背景 近期刚买了Raspberry PI B+,配置执行了官方提供的Raspbian系统,折腾了一周Linux系统,感觉没啥意思,于是就试着想了 ...
- STM32F4 阿波罗寄存器点亮LED灯
学习步骤: 使用寄存器点亮LED灯,需要进行如下的步骤,LED灯属于外设部分,首先需要开启外设的时钟使能,然后LED灯是PB1口,(芯片是正点原子的阿波罗),接着定义GPIOB口的输出模式,为上拉.推 ...
随机推荐
- [CCPC2019 ONLINE]E huntian oy
题意 http://acm.hdu.edu.cn/showproblem.php?pid=6706 思考 打表出奇迹. 注意到这个式子有一大堆强条件限制,最后化为: $$\frac{1}{2}\sum ...
- laravel自动生成model
laravel自动生成model 添加PHP扩展 composer require krlove/eloquent-model-generator --dev config/app注册Generato ...
- python笔记18(复习)
今日内容 复习 内容详细 1.Python入门 1.1 环境的搭建 mac系统上搭建python环境. 环境变量的作用:方便在命令行(终端)执行可执行程序,将可执行程序所在的目录添加到环境变量,那么以 ...
- python笔记19
今日内容 面向对象基本用法 好处和应用场景 面向对象的三大特性 内容详细 1.面向对象基本格式 # ###### 定义类 ###### class 类名: def 方法名(self,name): pr ...
- gcc 相关总结 动态链接库
#include < >与#include " " #include < >:直接到系统指定的目录中去找头文件. #include " " ...
- vs2017项目上传到github
如果要把项目提交到一个厂库里面,需要建个git存储库,比如选择新建git库选择VSVIEW文件夹,以后在这个文件夹下的项目,提交时都会提交到VSVIEW这个github仓库 选择的文件夹不在git文件 ...
- 题解 NOI2004【郁闷的出纳员】
\[ Preface \] 之前用 treap 打,交了四遍才过. 自学了 fhq treap 后,才意识到是一道 fhq treap 板子题,直接码上,一遍就过. 本题解提供的是 fhq treap ...
- Altium Designer打印多块PCB到热转印纸上、拼板发给工厂
接下来介绍的方法的优势有: 节省电脑性能(来自不同PCB文件的图案被放置时只在第1块会卡顿一小会儿,之后不再卡顿) 便于排版(拖放图案时绝不会改变图案内容,拖放图案时鼠标拖住的矩形框的尺寸与图案的尺寸 ...
- C++ 类的赋值运算符'='重载
什么类需要重载赋值运算符 先来看一个普通类的直接赋值. #include <iostream> using namespace std; class person{ int age; pu ...
- Hapi+MySql项目实战数据库操作(四)
数据库访问 下面以Node的ORM框架Sequelize来操作数据库,Mysql为例. 配置数据库连接信息config/db_config.js: //db_config.js module.expo ...