zoukankan      html  css  js  c++  java
  • 树莓派点亮LED灯需要几行代码?3行。小孩子都能学会

    点亮LED灯

    硬件连接

    实物连接
    找一个LED灯,连接如上图,注意长短引脚,经过这些年的狂轰乱炸,大家对于这个应该不漠视,毕竟Arduino都进教材了。

    代码

    我们先来看图形化的版本:
    点亮17号引脚的LED灯

    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灯

    只需要生成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对象redblink()闪烁方法;后面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)
    

    等效的图形化代码如下图:
    PWM改变LED灯亮度

    与闪烁的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。

    我暑假开树莓派社团就是用这个教学生,五年级的学生也可以掌握,一起来学习吧。可以加入钉钉群一起学习,每天下午两点直播课。
    钉钉直播群

    大地与星空

  • 相关阅读:
    寒假学习第六天
    寒假学习第五天
    寒假学习第四天
    spark生态体系了解学习(六)
    spark生态体系了解学习(五)
    spark生态体系了解学习(四)
    spark生态体系了解学习(三)
    spark生态体系了解学习(二)
    spark生态体系了解学习(一)
    共享
  • 原文地址:https://www.cnblogs.com/asworm/p/12356396.html
Copyright © 2011-2022 走看看