zoukankan      html  css  js  c++  java
  • Beaglebone Black–GPIO 高低电平控制 LED 灯

    上一篇,运用 Linux 的 sysfs,控制本机上的 LED 灯,usr0 至 usr3,这次用 GPIO 控制外部的电路,点亮 LED 灯。

    这次的全部材料:

    • BBB 一台
    • 购买 BBB 自带的 USB 数据线
    • 面包板一块
    • 470Ω 三枚(至少一枚)
    • 白、红、黄、绿 LED 灯各一个(至少一个)
    • 公对公杜邦线 4 条(至少两条)
    • 面包板供电模块 3.3v (可选)
    • 纸卡一张(可选)
    • 万用表(可选)

    点亮白灯

    首先,据书上以及其他师兄建议,用面包板测试成功才拿 BBB 开刀。这次也不是什么复杂电路。但完全没有接触过面板包的话,试试吧:

    面包板装上电源模块,注意正负极,红线正极,搞反了面包板红色和蓝色反过来的话,就考验你记忆力了。

    供电模块如果能调电压,就调到 3.3V,然后接线。如果不知道面包板线路方向的话,这样的:

    IMG_20160122_230443 右图红线大概表示,板内线路相连的情况,图中两侧正负极(板上原有的红线和蓝线)是纵向全部相连,板中间分开左右两组,两组互不相连,但每组每行内五个孔相连。

    我不记得电阻上面的色环代表多少的,而且淘宝货,用万用表检查一下:

    DSC_0008(1)

    不会用万用表的话请自行百度。

    LED 灯长脚是正极,两条杜邦线分别接正负极,中间是 470欧电阻,小心元件的金属脚不要互相碰到即可。连接后如下图:

    DSC_0012

    上电,亮了,这不应该会搞错吧:

    DSC_0020

    比较暗请无视。用 470欧 是因为,欧姆定律 + 官方说明, BBB GPIO 顶多给 5mA 电流,拉多了发生了什么事的话,后果自负。

    几个 mA 我还以为不亮了…。继续,插进去 BBB。

    首先要知道引脚功能:

    hwio-beaglebone-ports

    个引脚详细说明,默认功能,系统是否已占用等等,P8 高清版请看这里P9 高清版请看这里。打不开请自行翻墙。

    image

    image

    最左侧 PIN 是 pin 名,把 BBB 摆正V5电源和网线插头在上方的话,右排就是 P8,左排 P9,每排左上角是一号脚,右上角是二号脚,如此类推。详细说明请自己看说明书。

    红色底色代表默认被占用。比如 HDMI, eMMC。它是通过 cape manager 来管理,调用引脚的。题外话,我见过有人为了这个把 cape manager 卸载掉… 。开机档可以禁用该 cape 的,到我需要时候再试试看吧。

    上图 mode 0 至 7 可以调的,后话。现在只需要关心是有否被占用,实际是哪个引脚要插线,还有它的 GPIO 号是多少(第四栏)。

    现在把面包板的电源模块拔掉,BBB 关机情况下,把原来的负极接 BBB 的 P9_1 GND,正极接 P9_23 :

    DSC_0021

    BBB 开机,然后进去文件夹 /etc/class/gpio/,里面有个 export 和 unexport 文件:

    image

    看之前的图查到,P9_23 的 gpio 号是 49,需要用的话,echo 49 > export。用完不要了就 echo 49 > unexport。首先我们 export 一下:

    image

    目录多了一个 link,cd 进去看看,能做的都在里面:

    image

    要点灯,我们现在只需要关心 direction (方向,输入还是输出),和 value (1,高电平 ,0,低电平)。可以 cat 一下看看当前值:

    image

    首先把 direction 改为 out,做法:echo out > direction。然后把输出值改为高电平,echo 1 > value。

    image

    DSC_0009

    如无意外,LED 是亮着的了。关掉它的话,改为低电平,echo 0 > value。就是说,要它闪动,就 0 和 1 之间循环赋值。

    讲完了,只不过是这样而已。还有几个 LED 还没用呢?

    点亮三色灯

    microMsg.1453472880862

    全部负极面包板上减号、蓝线那列,尽头接 BBB 的 GND。正极接 BBB 的 GPIO,我用了 P8_12、P8_11、P8_16, GPIO 号为 44、45、46,即可。各个语言都差不多,以下是 Python 代码:

    import time
    import os

    class TrafficLight:
        def __init__(self,color):
            self.color = color
            if self.color == "green":
                self.gpio_no = 44
            if self.color == "yellow":
                self.gpio_no = 45
            if self.color == "red":
                self.gpio_no = 46
            os.system("echo %s > /sys/class/gpio/export" % self.gpio_no)
            self.path = "/sys/class/gpio/gpio%s/" % self.gpio_no
            os.system("echo out > %sdirection" % self.path)
            os.system("echo 0 > %svalue" % self.path)
            self.state = "off"
        def On(self):
            if self.state != "on":
                os.system("echo 1 > %svalue" % self.path)
                self.state = "on"
        def Off(self):
            if self.state != "off":
                os.system("echo 0 > %svalue" % self.path)
                self.state = "off"
    TrafficLights = [TrafficLight("green"), TrafficLight("yellow"), TrafficLight("red")]
    while True:
        TrafficLights[0].On()
        time.sleep(3)
        TrafficLights[0].Off()
        TrafficLights[1].On()
        time.sleep(1)
        TrafficLights[1].Off()
        time.sleep(0.5)
        TrafficLights[1].On()
        time.sleep(0.5)
        TrafficLights[1].Off()
        time.sleep(0.5)
        TrafficLights[1].On()
        time.sleep(1)
        TrafficLights[2].On()
        TrafficLights[1].Off()
        time.sleep(4)
        TrafficLights[2].Off()

    请原谅我 while 里面那丑陋的代码。创建 TrafficLight 实例时候,export,调 direction,On 就给 value 1,Off 就 0。由于是 While True,没有 unexport 了。

    Sketch_bb

    最后是这些制作过程,我承认这比较无聊…

    DSC_0018 DSC_0016 DSC_0013
    DSC_0014 DSC_0015 microMsg.1453472733043
         

    我在这群里,欢迎加入交流:
    开发板玩家群 578649319开发板玩家群 578649319
    硬件创客 (10105555)硬件创客 (10105555)

  • 相关阅读:
    MFC Windows 程序设计>WinMain 简单Windows程序 命令行编译
    AT3949 [AGC022D] Shopping 题解
    CF643D Bearish Fanpages 题解
    CF643C Levels and Regions 题解
    CF241E Flights 题解
    CF671C Ultimate Weirdness of an Array 题解
    CF1592F Alice and Recoloring 题解
    GYM 102452E 题解
    CF494C Helping People 题解
    P5556 圣剑护符
  • 原文地址:https://www.cnblogs.com/leptonation/p/5152723.html
Copyright © 2011-2022 走看看