前言

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

因为是使用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

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

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

Hello World!

首先新建一个空白项目:

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

console.log("Hello World");

我们执行看看:

当然你也可以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,回车后即可看到效果:

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

与传感器互动

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

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

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例程是这样的:

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

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

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)

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

如果你懂得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);

结果如图所示:

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

Intel Edison —— 控制GPIO接口,网页显示传感器数值的更多相关文章

  1. [Intel Edison开发板] 05、Edison开发基于MRAA实现IO控制,特别是UART通信

    一.前言 下面是本系列文章的前几篇: [Intel Edison开发板] 01.Edison开发板性能简述 [Intel Edison开发板] 02.Edison开发板入门 [Intel Edison ...

  2. 视频图文教学 - 用最快的速度把 DotNet Core Blazor 程序安装到 树莓派中 并且用网页控制 GPIO 闪灯

    前言 dotnet core 在3.0时代已经发展得很好. 尤其是在跨平台方面更已经是达到了很实用的阶段. 作为 dotnet 程序员, 应该对 Linux 有充分的了解, 也可以在业余时间玩玩硬件, ...

  3. spi接口的ds1302时钟芯片控制在lcd1602上显示

    spi接口的ds1302时钟芯片控制在lcd1602上显示                                                                        ...

  4. [Intel Edison开发板] 03、Edison开发IDE入门及跑官方提供的DEMO

    一.启动Eclipse爱迪生开发板IDE eclipse开发环境在iss-iot-win_03-14-16中,但是一定每次都是点bat脚本启动,否则就会少东西(windows->preferen ...

  5. [Intel Edison开发板] 02、Edison开发板入门

    一.前言 Start from the link: 开始学习的链接 上面链接是官网的教程,按照教程可以开发板入门: 其中第一步是了解开发板,涉及到如何组装.如何连线.一些主要的接口简单介绍等信息: 第 ...

  6. GPIO接口解析【转】

    本文提供了一个linux下访问GPIO的约定的概述. 这些调用使用gpio_* 命名前缀.没有别的调用会使用这个前缀或是相关的__gpio_*前缀. 转自:http://blog.163.com/w5 ...

  7. 使用C#模拟键盘输入、鼠标移动和点击、设置光标位置及控制应用程序的显示

    1.模拟键盘输入(SendKeys) 功能:将一个或多个按键消息发送到活动窗口,就如同在键盘上进行输入一样. 语法:SendKeys.Send(string keys);SendKeys.SendWa ...

  8. [Intel Edison开发板] 06、Edison开发在linux中烧写、配置、搭建开发环境

    1.前言 linux上烧写.配置.搭建Edison环境,千万不要用默认的setup tool for ubuntu!!! (即使,你用的就是ubuntu) 因为,其默认的工具会从一个坏链接下载配置文件 ...

  9. 功能整合(一):滚动条的变相隐藏、js控制div的渐变显示、滚动条监听

    1.滚动条的变相隐藏 思路: 1.  把body的横向,纵向的超出部分隐藏,宽设置100%:高设置100%.就没有body的滚动条了, 2.  然后把最外层的div的宽设置的比body的宽宽一点,把d ...

随机推荐

  1. Lavarel的学习社区网站和框架优点

    php语言作为一本脚本语言,强大之处就是开发周期短,快,快,快 再有就是开发框架多,像thinkphp ,laravel,Yii... 官网是:https://laravel.com/ 中文社区:ht ...

  2. 【git】不检查特定文件的更改情况

    .gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的.正确的做法是在每个clone下来的仓库中手动设置不要检查特定文件的更 ...

  3. 《嵌入式linux应用程序开发标准教程》笔记——7.进程控制开发

    进程是系统资源的最小单元,很重要. 7.1 linux进程的基本概念 定义:一个程序的一次执行过程,同时也是资源分配的最小单元.程序是静态的,而进程是动态的. 进程控制块:linux系统用进程控制块描 ...

  4. (转)iOS 属性字符串

    富文本的基本数据类型是NSAttributedString.**属性化字符串**(attributed string)是把属性设置到某些字符上的字符串.属性可以是任何键值对,但是为了实现富文本,则通常 ...

  5. shell中的$(( )) 的用途:主要用在整数的运算$(( a+b*c ))

    $ a=5; b=7; c=2 $ echo $(( a+b*c ))//注意在进行这些运算时必须是双括号 $ echo $(( (a+b)/c )) $ echo $(( (a*b)%c))

  6. MIP启发式算法:爬山算法 (Hill climbing)

    本文主要记录和分享学习到的知识,算不上原创. *参考文献见链接. 本文讲述的是求解MIP问题的启发式算法中的爬山算法 (Hill climbing). 目录 前言 Hill climbing 的过程 ...

  7. Linux文件管理类命令及命令别名

    文件查看类命令: cat: tac: 从文件尾部开始显示 分屏显示: more [option] 文件名: 查看至文件尾部会退出 空格为翻页 less [option] 文件名: 查看至文件尾部不退出 ...

  8. 【SaltStack】在Master上给Minion端安装zabbix

    一.IP信息说明 [Master] IP: 192.168.236.100 [Minion] IP: 192.168.236.101 二.配置SaltStack 关于SaltStack Master和 ...

  9. css3盒子模型及其定位

    盒子模型常见相关属性和属性取值 /*基本属性*/ padding: padding-left/right/top/bottom border: border-left/right/top/bottom ...

  10. git删除本地所有的更改

    删除本地所有为暂存的修改: git checkout -f 如果有修改以及加入暂存区的话 那么 使用如下命令: git reset --hard git clean -xdf