设为首页 加入收藏

TOP

Beaglebone Black - 控制 BBB 板上的 LED 灯(一)
2017-10-11 16:47:23 】 浏览:5358
Tags:Beaglebone Black 控制 BBB LED

BBB 的板上有五个 LED 灯,一个电源,四个其他指示灯,usr0 至 usr3 。这次学习是控制 usr0 至 3 让它们亮着,熄灭,闪。算是个 Hello World 实验。非常简单。

001_LED

需要的材料:

  • BBB 一台
  • 购买BBB 自带的数据线一条
  • 手提电脑或台式电脑,有 USB 插头的

首先用数据线把 BBB 和电脑连接,自动开机了之后,可以开始了。

这次三个做法都试试:

  1. Bonescript
  2. Python
  3. C++

Bonescript

操作 Bonescript 做法是用 Cloud9,假设你没改过 BBB 的 usb0 网卡地址的话,从电脑浏览器打开 http://192.168.7.2:3000/ 即可。

右击文件夹目录添加个文件夹吧,然后右击添加文件(New File),命名注意扩展名,bonescript 是 JS,扩展名是 .js。

image

var b = require('bonescript');

var leds = ["USR0", "USR1", "USR2", "USR3"];

for(var i in leds) {
    b.pinMode(leds[i], b.OUTPUT);
}

var state = b.HIGH;
for(var i in leds) {
    b.digitalWrite(leds[i], state);
}

(话说安装了新的 OpenWriter 没有 code snippet 插件…)

首先 pinMode 设 output,LED给它 HIGH 用 digitalWrite 写进去即可。循环四个灯让它们全部点亮。给它 LOW,LED 就熄灭。试试。代码写好直接按上面的 Run 按钮运行。

然后是闪动,JS 就是个 setInterval 而已:

var b = require('bonescript');

var leds = ["USR0", "USR1", "USR2", "USR3"];

for(var i in leds) {
    b.pinMode(leds[i], b.OUTPUT);
}

var state = b.HIGH;

function toggle(){
    if(state===b.LOW){
        state = b.HIGH;
    } else {
        state = b.LOW;
    }
    for(var j in leds){
        b.digitalWrite(leds[j],state);
    }
}

setInterval(toggle,1000);

再可以加点代码让四个灯循环点亮熄灭,自己试试把。Bonescript 的 API 请查看这里

Python

到了 Python 有点纠结,因为 Adafruit_BBIO 这个 module 有点问题,本来想直接用,但 usr0 没反应,实测过确实不行。详细我不研究了,遇上这些事比较恼火不看它了。

直接看看这些东西的工作原理,直接写吧。为求快捷,先看看 Stackoverflow 别人贴的一段代码python3 的,请无视,只看代码:

import os 
  class SimpleGPIO:
      def __init__(self,gpio_pin):
          self.gpio_pin = gpio_pin
          os.system("echo %d > /sys/class/gpio/export" % self.gpio_pin)
          self.gpio_path = "/sys/class/gpio/gpio%d/"%gpio_pin
          with open(self.gpio_path+"direction") as f:
              self.direction = f.read()
      def write(self,value):
          if self.direction != "out":
              os.system("echo out > %sdirection"%self.gpio_path)
              self.direction = "out"
          os.system("echo %s > %svalue"%(value,self.gpio_path))
      def read(self):
          if self.direction != "in":
              os.system("echo in > %sdirection"%self.gpio_path)
              self.direction = "in"
          with open(self.gpio_path+value) as f:
              return f.read()

在 linux 操作硬件,用的是 sysfs ,以上代码是 GPIO 通用的 class,给 pin 号码创建即可,然后就可以调用 write 和 read,比较简单。如果是 python 控请自行按需改良以上,留着日后用。

然后看看 usr0 至 usr3 的灯在哪里,还有它们可以怎么玩:

image

在 /sys/class/leds 内,你会看到四个, beaglebone:green:usr0 至 3,再进去其中一个看看

image

简单英文能看懂的话,里面东西都写的很明白,咱们要它亮,和灭而已,只需要动 trigger,和 brightness,脚本试试效果呗,拿 usr0 开刀,下图显示了原来的值,和我写入了什么进去:
image

echo none > trigger

echo 1 > brightness

这时候,usr0 灯就是常亮的了,因为 trigger 设成 none,亮度为 1。那灭了它呢,就这样:

echo 0 > brightness

就是说,要它闪的话,首先清掉 trigger(改为值 none),然后把 brightness 循环写入 0 和 1 即可。python 写也只不过是这样而已:

import os
import time

class SimpleLED:
    def __init__(self,led_no):
        self.led_no = led_no
        self.led_path = "/sys/class/leds/beaglebone:green:usr%d/" % self.led_no
        os.system("echo n

首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Beaglebone Black–GPIO 开关 LE.. 下一篇SD卡, EMMC固化 ,关于bootloader..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目