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

这次的全部材料:

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

点亮白灯

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

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

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

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

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

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

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

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

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

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

首先要知道引脚功能:

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

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

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

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

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

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

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

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

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

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

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

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

点亮三色灯

全部负极面包板上减号、蓝线那列,尽头接 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 了。

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

     

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

Beaglebone Black–GPIO 高低电平控制 LED 灯的更多相关文章

  1. 云中树莓派(4):利用声音传感器控制Led灯

    云中树莓派(1):环境准备 云中树莓派(2):将传感器数据上传到AWS IoT 并利用Kibana进行展示 云中树莓派(3):通过 AWS IoT 控制树莓派上的Led 云中树莓派(4):利用声音传感 ...

  2. 嵌入式Linux学习入门:控制LED灯

    记录自己linux学习过程,让自己能够一直坚持下去 1.原理图分析: nLED_1, nLED_2, nLED_4, 给低电平则对应LED灯亮,高电平则对应LED灯灭, S3C2440芯片GPF4-G ...

  3. C#与Arduino通过串口通信来控制LED灯的状态

    一.引言 最近摆弄了一段时间的Arduino,发现Arduino做一些电子类项目.监控.机器人.电子玩具比较容易,并且Arduino与.NET程序集成也不难.接下来介绍一个简单的小程序,C#做的一个W ...

  4. arduino 红外遥控器控制LED灯

    /* 日期:2016.9.1 功能:红外遥控器控制LED灯 开,关,闪烁,呼吸 元件: 跳线公公头 * 5 led 220欧电阻 红外接收管,红外遥控 接线: 红外灯面向自己从左到右分别接 IO3 , ...

  5. arduino入门学习实现语音控制LED灯

    需要的准备的硬件arduino+PC+麦克风实现语音命令控制LED灯的亮灭. 首先需要将写好的arduino程序烧录到arduino uno主板中,下面是代码如下: int val;//定义变量val ...

  6. BLE 安卓APP控制LED灯的实现(转)

    源:BLE 安卓APP控制LED灯的实现 //注:参考AmoMcu源代码修改. 打开APP,检查蓝牙是否打开 BluetoothAdapter mBluetoothAdapter; final Blu ...

  7. enc28J60 网页控制LED灯

    软件IDE:Arduino 1.6.3 1.库的安装: 从https://github.com/jcw/ethercard 下载源码包,解压,复制ethercard-master文件夹到Arduino ...

  8. 树莓派开机运行Python脚本 控制LED灯闪烁

    一.新建一个开机运行文件 在 /home/pi/.config 下创建一个文件夹,名称为 autostart,并在该文件夹下创建一个led.desktop文件(文件名以.desktop结尾) 编辑le ...

  9. Arduino控制LED灯(开关控制)

    问题:当使用"digitalRead(BUT) == 1"控制LED灯时会出现"digitalWrite(LED, ledState);"的值出现跳动. 原因: ...

随机推荐

  1. android 学习随笔四(数据库存储)

    SQLite数据库(sqliteexpert工具),sqlite数据库是轻量级数据库,对数据类型要求不是很严格,在数据库中处理是按verchar类型处理,一般定义表字段时还是要求严格按照数据类型定义, ...

  2. systemctl 启动成功却提示没有权限(解决)

    现象: systemctl 启动svnserve成功,却在提交svn时提示没有权限. systemctl 启动smb成功,却在samba访问时提示没有权限. 但手动启动svnserve和smb后,问题 ...

  3. Respond.js – 让 IE6-8 支持 CSS3 Media Query

    Respond.js 是一个快速.轻量的 polyfill,用于为 IE6-8 以及其它不支持 CSS3 Media Queries 的浏览器提供媒体查询的 min-width 和 max-width ...

  4. Linux TTY框架【转】

    本文转载自:http://ju.outofmemory.cn/entry/281168 1. 前言 由于串口的缘故,TTY是Linux系统中最普遍的一类设备,稍微了解Linux系统的同学,对它都不陌生 ...

  5. Error -26612: HTTP Status-Code=500 (Internal Server Error) ...

    造成HTTP-500错误,有朋友告诉我如下几个可能: 1.运行的用户数过多,对服务器造成的压力过大,服务器无法响应,则报HTTP500错误.减小用户数或者场景持续时间,问题得到解决. 2.该做关联的地 ...

  6. 华硕本本重装系统后出现can not open file c:\RECOVERY.DAT

    华硕本本重装系统后出现can not open file c:\RECOVERY.DAT很多网友会觉得困惑,不知道为什么会这样,下面我就为大家来解决这个问题,方法一: 这个问题就出在华硕自带系统都是装 ...

  7. Reverse Linked List II

    /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode ...

  8. [Ogre][地形][原创]基于OgreTerrain的地形实现

    需要用到的外部图片资源: 在ogre调用时需要多用到的几个外部dll: OgreTerrain_d.dll 需要添加头文件 #include "Ogre\Ogre.h"#inclu ...

  9. ACM题目————STL练习之众数问题

    描述 所谓众数,就是对于给定的含有N个元素的多重集合,每个元素在S中出现次数最多的成为该元素的重数, 多重集合S重的重数最大的元素成为众数.例如:S={1,2,2,2,3,5},则多重集S的众数是2, ...

  10. SQL SERVER 数据库实用SQL语句

    --查看指定表的外键约束 select * from sysobjects where parent_obj in( select id from sysobjects where name='表名' ...