Intel Edison —— 控制GPIO接口,网页显示传感器数值

前言

原创文章,转载引用务必注明链接。

因为是使用Typora(markdown)写好然后复制到论坛的,推荐直接访问我的网站以获得更好地阅读体验。

Intel XDK IoT 开发环境很久之前就上手了,比较惊艳,现在终于轮到介绍它了。本文初步介绍node.js,根据示例一步步写。当然你也可以去看官方示例。

说到XDK开发环境,就不得不提node.js,从名字就可以看出来和JavaScript密切相关,其主要擅长轻量级网页应用开发,即使存在不足,但是瑕不掩瑜,现在相当热门。群里好几个人安利它了,推荐学习ES6标准。关于它的具体评价可以去知乎看看,本身中文免费学习资料也很多,相信不难上手。

本文你将学到:

  • Intel XDK 安装配置使用
  • Node.JS入门
  • 用户空间访问GPIO
  • mraa库访问GPIO
  • 写一个网页显示传感器数值的示例

安装使用Intel XDK

elecfans论坛这个的介绍很多啦,我就不再重复,注意:Intel好像把它放在Amazon云(AWS)上的,最好挂代理下载注册后才能使用html5开发。另外Edison使用的Yocto系统自带node.js

90fd3da6jw1f6skypgszcj211y0kitf0.jpg

【1、XDK界面简介】设备选择界面一般都可以自动识别,也可以手动添加,支持有线(MicroUSB)、无线、蓝牙连接;主窗口、SSH、串口集成到一起了,方便开发,功能区最右边有齿轮的按钮可以对开发板进行设置,升级库等操作。另外这个代码编辑器支持非常多的编程语言,默认使用JS。

由浅入深node.js示例之Hello World

Hello World!

首先新建一个空白项目:

90fd3da6jw1f6slorfwftj211y0kijwv.jpg

点击左下角START A NEW PROJECT,选择空白项目输入保存位置和项目名称,在代码编辑区输入以下代码:

console.log("Hello World"); 

我们执行看看:

90fd3da6jw1f6slqh3bgsj20jl0hjdie.jpg

当然你也可以ssh登录到edison,创建helloworld.js,手动执行

node helloworld.js

这种方式感觉是不是和Python很像,它们属于解释型语言,和C那种编译型语言不同。

在网页上显示Hello World

如何实现这一功能?是不是要大费周章,安装Web服务器如Apache、Ngnix,经过复杂的配置,然后再写个网页呢?前面讲过,node.js非常适合轻量级网页应用,让我们来看看:

新建一个文件helloworld_on_web.js,代码如下

var http = require('http');
http.createServer(function (request, response){
    response.writeHead({'Content-Type' : 'text/plain'});
    response.write("Hello World");
    response.end();
}).listen(2000);

此时在浏览器地址栏中输入[edison_IP地址]:2000,回车后即可看到效果:

90fd3da6jw1f6slsfj1y5j207w02ct8t.jpg

代码应该都读得懂,当访问这个页面时,产生的request (请求)会返回相应文本。

与传感器互动

前面有了Hello World入门,我们下面来请出今天的主角,一般来说,传感器数值有两种,模拟变量和数字变量,相当于统计学中的二分类变量和连续变量,前者如性别(男或女),药物反应(阳性或阴性),0或1等;后者如心跳频率,体温,环境亮度等。我们这里以红色发光LED二极管和温度传感器为例。Grove接口防呆设计很不错,得益于Seeed Studio强大的影响力,国际上兼容此种接口的设备比较多,模块质量也挺好。缺点就是价格贵,和普通三针模块、拓展板不兼容。。。故意的吧你们。A0 - A3 代表模拟(Analog),D2 - D8 代表数字(Digital)。

90fd3da6jw1f6smbsvm8cj20fm07075p.jpg

用户空间方式控制发光二极管点亮熄灭

Kit里提供了红、绿、蓝三种颜色的LED,选用红色因为它波长短,大半夜不刺眼。另外关于发光LED正负极怎么看,有三种方法:a. 长正短负;b. 负极一侧边缘是平的或者有凹槽; c. 灯芯里三角形的是负极。另外LED发光二极管有个特性,耐压不耐流,也就是一般来说,只要超过启动电压就可以亮,几十伏上百伏一般也没问题,但是电流不宜过大,很容易烧坏,可以看到LED插座模块上有很多限流电阻。

Edison板子上引脚兼容Arduino,如果用Arduino IDE编程会很方便,但是使用用户空间访问GPIO接口,会很麻烦,这里做演示就是为了告诉你们有封装好的库多么方便啊。非常推荐Intel的小册子《Internet of Things with Intel Edison GPIO on Edison》(链接:http://pan.baidu.com/s/1kV6Qhmv 密码:ml07),感谢emutex labs 的工作,emutex 网站找不到相关网页了,这里有个残本。以下内容将参考Intel的小册子。

点亮熄灭LED

我这里仅演示sysfs用户空间控制D7,其他模拟端口的读写自己看册子吧,大多数估计看完这个示例就赶紧跑了,尼玛太麻烦了吧。以数字接口D7为例,Arduino IDE里的Blink例程是这样的:

90fd3da6jw1f6soacyt5tj20dw0dfac3.jpg

有点简单呢对吧,我们来看看low-level是什么样子的,首先看一下查看 sys用户空间 文件系统节点信息:

90fd3da6jw1f6sodqcv8pj20ga03edhe.jpg

想要使用一个引脚,一般首先需要export出来,然后设置方向(direction,输入还是输出),里面的value就是引脚的值(可以读取。设置)。我们来看看数字引脚7(D7):

90fd3da6jw1f6soc0e1s3j20or0ekdik.jpg

gpio255负责设置D7是用来输入还是输出;gpio223是一个上拉电阻;gpio48相当于D7的值。

下面我们来演示如何点亮、熄灭LED:

准备工作:将Edison底板上的J9跳线接头接到2、3位上,调整Grove拓展板为3.3V电平。关于Edison Arduino 底板上跳线接头的定义作用可以看官方说明

# 引出核心引脚48和附属引脚223、255、214,214是啥我也不清楚
echo –n "48" > /sys/class/gpio/export
echo –n "223" > /sys/class/gpio/export
echo –n "255" > /sys/class/gpio/export
echo –n "214" > /sys/class/gpio/export
# 设置引脚方向(输入、输出)
echo –n "out" > /sys/class/gpio/gpio48/direction
echo –n "in" > /sys/class/gpio/gpio223/direction # (禁用上拉电阻)
echo –n "out" > /sys/class/gpio/gpio255/direction
echo –n "out" > /sys/class/gpio/gpio214/direction
# 设置GPIO引脚的值
echo –n "1" > /sys/class/gpio/gpio214/value
echo –n "1" > /sys/class/gpio/gpio255/value
# 点亮或熄灭 LED
echo –n "1" > /sys/class/gpio/gpio48/value # (点亮LED)
echo –n "0" > /sys/class/gpio/gpio48/value # (熄灭LED)

90fd3da6jw1f6soxy4l8lj20hf0ggdk9.jpg

教练,我要封装方便下次调用!

如果你懂得linux下shell编程,我们可以写一个脚本例如led.sh,将gpio引脚号与Arduino引脚对应,自动完成初始化(引脚引出,设置方向,设置初始值等),然后想实现点亮熄灭的功能只需输入选项0或1给led.sh即可。

想法挺好啊,很方便嘛,仔细一想,这不就是封装成Arduino里面那句吗。。。哭死。。。

void setup(){
  pinMode(7,OUTPUT);
}

使用Intel XDK + Node.JS访问传感器模块

mraa和ump库

Intel为我们提供了GPIO使用例程和常用元器件的使用例程,前者叫mraa,者叫ump库,这样就不用那么麻烦去自己控制用户空间进行初始化了。Yocto系统自带,并且可以方便地使用Intel XDK IDE 那个齿轮按钮进行升级。

使用过树莓派 (Raspberry Pi) 的玩家相信很熟悉,因为用过RPi.GPIO和wringPi库。

读取并在网页显示光敏电阻和周围温度

光敏电阻其实分为好多种,有那种开关型的也有这种测量亮度型的。在seeed的wiki页面查找这两个传感器的示例用法(Arduino Language),分别如下:Light SensorTemperature Sensor,两者都是模拟传感器,接在Analog Input接口。

// 导入mraa库
var mraa = require("mraa");
// 绑定引脚
var light_sensor_pin = new mraa.Aio(0);
var temp_sensor_pin = new mraa.Aio(1);
// 创建web应用服务
var http = require('http');
var app = http.createServer(function (req, res) {
    'use strict';
    
    // 亮度值
    var a = light_sensor_pin.read();
    console.log("Analog Pin (A0) Output: " + a);
    //node.js不区分浮点型和整型变量,所有数值均以浮点型表示
    var light_level = (1023-a)*10/a;
    
    // 温度值
    var b = temp_sensor_pin.read();
    console.log("Analog Pin (A1) Output: " + b);
    var temperature = 1.0/(Math.log(1023.0/b-1.0)/4275+1/298.15)-273.15;
    
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.end('<h1>测量值</h1><p>亮度: ' + light_level + ' K</p><p>温度: ' + temperature + ' C</p>');
}).listen(3000);

结果如图所示:

90fd3da6jw1f6sqfav45oj208d05c0te.jpg

推荐直接显示英文的了。另外seeed官方示例使用Arduino(C-Like),改为node.js时需要注意,比如浮点变量,比如log函数(Math.log in JavaScript)。

转载于:https://www.cnblogs.com/sjqlwy/p/edison_xdk_gpio.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
概述: The Console Block is one of the simplest ways to power and communicate with an Intel Edison. Utilizing the FTDI 231X, this creates a USB to serial bridge that is level shifted to the proper 1.8V required by the Edison. The Console is found on UART2. This block is also capable of providing power to the Edison as well as other stacked Blocks. 实物展示: Intel:registered: Edison控制台USB-TTL扩展板功能框图: 具体功能描述: USB Micro B - The USB port provides power and a console access port to an Intel Edison Stack. This Block supplies a voltage to the Edison and other Blocks through the VSYS line at 4V. This voltage may vary up to +/-0.1V depending on load. Power Button - The power switch is connected to the “PWRBTN” line on the Edison. This gives the user the ability to place an Edison in sleep or power down the module completely. This does not affect power to other Blocks in the stack. Power LED - The power LED illuminates when power is present on VSYS. This can come from the Console Block, or any other powered Block in the stack. Data LEDs - The Data LEDs help the user identify if the console is active. This is a feature commonly found on ourFTDI breakout. LED Jumpers - If power consumption is an issue, cut each jumper to disable LEDs Expansion Header - The 70-pin Expansion header breaks out the functionality of the Intel Edison. This header also passes signals and power throughout the stack. These function much like anArduino Shield. 更多内容详细介绍: Console Block Hookup Guide https://learn.sparkfun.com/tutorials/sparkfun-blocks-for-intel-edison---console-block?_ga=1.65044844.314681990.1429144936 Intel:registered: Edison Tutorials https://learn.sparkfun.com/tutorials/tags/edison?_ga=1.157723896.314681990.1429144936 Intel:registered: Edison Product Brief https://communities.intel.com/docs/DOC-23139 Getting Started https://communities.intel.com/docs/DOC-23147 Software Downloads https://communities.intel.com/docs/DOC-23242 Board Support Package https://communities.intel.com/docs/DOC-23159
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值