让我们制作一块智能手表






4.99/5 (30投票s)
英特尔爱迪生足够小巧,可以用作可穿戴设备,那么我们为什么不制作一个基于爱迪生的智能手表呢?
目录
英特尔爱迪生简介
英特尔的计算模块,名为英特尔爱迪生,略大于一张SD卡。在对爱迪生进行了广泛的试验后,我彻底爱上了这款微型计算机。爱迪生的特点是——它既可以用于可穿戴设备,又足够强大来控制机器人。它是一个35.5 × 25.0 × 3.9毫米的模块,还配备了Yocto(一个Linux操作系统)。它内置了Wi-Fi和蓝牙,非常适合物联网项目。我们可以远程连接到爱迪生,并运行命令或访问文件系统。这通过SSH为开发人员提供了很大的灵活性。它的规格一定会让你印象深刻,它们是:
规格
英特尔®凌动™处理器,主频500MHz
100MHz Quark MCU
1GB LPDDR3内存
4GB eMMC闪存
WiFi (802.11a/b/g/n)
蓝牙 (4.0 和 2.1 EDR)
UARTs
I2C
SPI
USB
40个复用GPIO接口
编程方法
爱迪生可以与Arduino IDE一起使用,但为了充分利用它,您可以使用其他编程语言,如Python、Node.JS、C/C++。英特尔有自己的IDE,名为Intel XDK IoT edition,它使使用爱迪生进行编程变得容易。在为爱迪生设置编程环境时,您可以在Arduino IDE、Intel XDK或Eclipse之间进行选择。
使用爱迪生进行原型开发
为了保持爱迪生的小巧,所有的I/O引脚都被引出到一个70引脚的Hirose连接器。这个70引脚连接器不适合原型开发。与这些连接器连接非常困难,因此为了与爱迪生连接,我们需要一个带有匹配Hirose连接器的板。
目前可用的接口板有
Arduino扩展板
Mini Breakout Board(迷你转接板)
SparkFun Edison Blocks(SparkFun爱迪生模块)
如果您是爱迪生新手并想试用,**Arduino扩展板**是您的理想选择。它将给您带来类似Arduino的感觉,并且基于Arduino的扩展板也兼容此板,但它比英特尔伽利略略大。其功能包括:
• 20个数字输入/输出引脚,其中4个引脚可用作PWM输出
• 6个模拟输入
• 1个UART (RX/TX)
• 1个I2C
• 1个ICSP 6针接头 (SPI)
• 微型USB设备连接器 或 (通过机械开关) 专用标准尺寸USB主机Type-A连接器
• 微型USB设备 (连接到UART)
• 微型SD卡连接器
• 直流电源插孔 (7V – 15V 直流输入)
如果您想将爱迪生嵌入到项目中,那么您可以使用**Mini Breakout Board**或**SparkFun Edison Blocks**。它们比英特尔爱迪生稍大。Mini Breakout Board具有最少的功能,例如:
图片来源:Adafruit
• 暴露爱迪生模块的原生1.8V I/O
• 0.1英寸网格的I/O通孔焊点阵列
• 带USB Micro Type-AB连接器的USB OTG
• USB OTG电源开关
• 电池充电器
• 带USB Micro Type-B连接器的USB转设备UART桥接器
• 直流电源插孔 (7V – 15V 直流输入)
**SparkFun**拥有一整套用于接口、电源、传感器和执行器的模块。您可以在此处浏览它们,并为您的爱迪生项目找到一个或多个合适的模块。
为什么要选择爱迪生?
爱迪生是一款低功耗物联网计算模块,因此为了降低功耗,处理器也略大于SD卡。它是可穿戴项目的最佳选择。
我们来制作一个智能手表
爱迪生足够小巧,可以在可穿戴项目中使用,那么我们为什么不用这款微型计算机制作一个智能手表呢?我将使用Arduino扩展板进行原型开发,尽管在原型阶段它看起来不会完全像智能手表,但它将具备所有功能,之后我们可以努力使其模块化和紧凑。在原型开发中,我使用了16*2 LCD模块进行显示,因为我当时没有OLED显示屏,如果您有,可以使用OLED显示屏,因为它功耗低且更小。我很快就会用OLED更新这个项目。那么,我们来看看爱迪生智能手表的功能:
- 持续显示时间
- 监测并显示附近温度,并发送至云端
- 一键发送短信。
- 手电筒
- 计步器和睡眠监测器。
要求
Micro USB连接线
跳线
我正在使用Grove传感器,因为它使原型开发变得容易。您会在Grove爱迪生入门套件中找到本项目中使用的大多数传感器。如果您是物联网新手,Seed Studio Grove入门套件将帮助您轻松开始开发,因为您无需担心电路和其他电子设备。有了Grove扩展板和传感器模块,您可以轻松创建任何东西,而无需过多担心电子元件。无需通过焊接或面包板来管理传感器。这篇文章“Grove入门套件与英特尔伽利略二代:入门”将指导您如何设置和运行Grove入门套件,尽管它是针对伽利略二代的,但所有内容对于英特尔爱迪生来说都是类似的。我目前使用的是Adafruit的Flora加速度计/指南针,它工作正常,但由于它是可缝合模块,所以在连接时您需要多做一些工作。如果您没有任何传感器,我建议您使用Grove - 6轴加速度计和指南针或Adafruit的加速度计/指南针LSM303。
让爱迪生准备好编程
- 根据您电脑的配置从https://software.intel.com/en-us/iot/software/installers下载安装程序。
- 运行安装程序,它会询问您想要安装的编程环境和IDE。根据您的偏好选择一个或多个。对于本项目,我正在使用Intel XDK并使用node.js进行编程。
- 设置串口终端:如果您想使用您的板子远程运行命令,您必须设置一个串口连接。首先从http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe安装putty,然后运行安装程序。在菜单中展开“连接”并选择“串口”。现在在**串口行**中输入您的爱迪生连接的COM端口。在**速率**字段中,输入115200,并在**连接类型**中选择“串口”。点击确定,它将打开一个串口连接。按回车键,现在它会提示登录。输入您的凭据。默认用户名是root,没有密码。现在您将看到一个终端端口。
- 连接到Wi-Fi: 在串口终端输入此命令-
configure_edison --wifi , 爱迪生将扫描所有Wi-Fi网络约10秒。完成后,将显示可用网络列表。根据列表中的对应编号选择网络,输入Y并按回车。它会要求输入网络凭据,输入有效凭据后,您的爱迪生将连接到WiFi。 - 在您的网页浏览器中输入爱迪生的IP地址或“_http://edison.local_”,如果您的爱迪生已连接到网络,这将显示此页面。
- 现在,我们已经准备好开始开发我们的爱迪生项目。
建立连接
由于我们使用的是Grove的传感器,我们将使用Grove传感器附带的四针电缆进行连接。不用担心极性,因为您无法错误连接它们,它们只有在正确连接时才能插入。
1) 将您的爱迪生连接到电源,并通过USB线连接到您的电脑。
2) 启动需要15-20秒,之后堆叠Grove Base Shield。
3) 将温度传感器连接到模拟引脚A0
4) 将温度传感器连接到A1。
5) 将LCD显示屏连接到其中一个I2C端口
6) 将加速度计连接到另一个I2C端口。
7) 将Grove按钮连接到D2。
8) 将LED模块连接到D3。
9) 将触摸传感器连接到D4。
智能手表的编程
- 打开Intel XDK IoT edition,如果您的电脑尚未安装,请从https://software.intel.com/en-us/iot/downloads获取。
- 如果您已经使用Flash Lite Tool刷新了爱迪生,Node.Js将已安装在您的板上。
- 将IDE连接到您的爱迪生板。它会要求您输入用户名和密码,默认用户名是root,没有密码。
- 选择一个空白的Node.Js模板并创建一个新项目。
显示时间和温度的代码
var lcd = new jsUpmI2cLcd.Jhd1313m1(6, 0x3E, 0x62);
var groveSensor = require('jsupm_grove');
var today = setInterval(function ()
{
var d = new Date();
var b= d.toTimeString();
lcd.setColor(0, 255, 0);
// Go to the 2nd row, 6th character (0-indexed)
lcd.setCursor(0,0);
lcd.write(b);
var celsius = temp.value();
var fahrenheit = celsius * 9.0/5.0 + 32.0;
var t = Math.round(fahrenheit);
lcd.setCursor(1, 1);
lcd.write(t+" *F");
v.saveValue(t);
}, 1000);
发送短信的代码
var twilio = require('twilio');
// Create a new REST API client to make authenticated requests against the
// twilio back end
var TWILIO_ACCOUNT_SID = '' ;
var TWILIO_AUTH_TOKEN = '';
var OUTGOING_NUMBER = '';
var TWILIO_NUMBER = '';
var client = new twilio.RestClient(TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN);
// Pass in parameters to the REST API using an object literal notation. The
// REST client will handle authentication and response serialzation for you.
client.sms.messages.create({
to:OUTGOING_NUMBER,
from:TWILIO_NUMBER,
body:'Hi, sending from my Edison SmartWatch'
}, function(error, message) {
// The HTTP request to Twilio will run asynchronously. This callback
// function will be called when a response is received from Twilio
// The "error" variable will contain error information, if any.
// If the request was successful, this value will be "falsy"
if (!error) {
// The second argument to the callback will contain the information
// sent back by Twilio for the request. In this case, it is the
// information about the text messsage you just sent:
console.log('Success! The SID for this SMS message is:');
console.log(message.sid);
console.log('Message sent on:');
console.log(message.dateCreated);
} else {
console.log('error: ' + error.message);
}
});
加速度计和陀螺仪的代码
var accelrCompassSensor = require('jsupm_lsm303');
// Instantiate LSM303 compass on I2C
var myAccelrCompass = new accelrCompassSensor.LSM303(0);
var successFail, coords, outputStr, accel;
var myInterval = setInterval(function()
{
// Load coordinates into LSM303 object
successFail = myAccelrCompass.getCoordinates();
// in XYZ order. The sensor returns XZY,
// but the driver compensates and makes it XYZ
coords = myAccelrCompass.getRawCoorData();
// Print out the X, Y, and Z coordinate data using two different methods
outputStr = "coor: rX " + coords.getitem(0)
+ " - rY " + coords.getitem(1)
+ " - rZ " + coords.getitem(2);
console.log(outputStr);
outputStr = "coor: gX " + myAccelrCompass.getCoorX()
+ " - gY " + myAccelrCompass.getCoorY()
+ " - gZ " + myAccelrCompass.getCoorZ();
console.log(outputStr);
// Get and print out the heading
console.log("heading: " + myAccelrCompass.getHeading());
// Get the acceleration
myAccelrCompass.getAcceleration();
accel = myAccelrCompass.getRawAccelData();
// Print out the X, Y, and Z acceleration data using two different methods
outputStr = "acc: rX " + accel.getitem(0)
+ " - rY " + accel.getitem(1)
+ " - Z " + accel.getitem(2);
console.log(outputStr);
outputStr = "acc: gX " + myAccelrCompass.getAccelX()
+ " - gY " + myAccelrCompass.getAccelY()
+ " - gZ " + myAccelrCompass.getAccelZ();
console.log(outputStr);
console.log(" ");
}, 1000);
// Print message when exiting
process.on('SIGINT', function()
{
clearInterval(myInterval);
myAccelrCompass = null;
accelrCompassSensor.cleanUp();
accelrCompassSensor = null;
console.log("Exiting");
process.exit(0);
});
通过按键打开手电筒的代码
var groveSensor = require('jsupm_grove');
// Create the button object using GPIO pin 0
var button = new groveSensor.GroveButton(2);
// Read the input and print, waiting one second between readings
function readButtonValue() {
console.log(button.name() + " value is " + button.value());
var v=button.value();
if(v==1){ led.on();}
if(v==0){ led.off();}
}
setInterval(readButtonValue, 1000);
将数据发送到云端
var ubidots = require('ubidots');
var client = ubidots.createClient('YOUR-API-KEY');
client.auth(function () {
this.getDatasources(function (err, data) {
console.log(data.results);
});
var ds = this.getDatasource('xxxxxxxx');
ds.getVariables(function (err, data) {
console.log(data.results);
});
ds.getDetails(function (err, details) {
console.log(details);
});
var v = this.getVariable('xxxxxxx');
v.getDetails(function (err, details) {
console.log(details);
});
v.getValues(function (err, data) {
console.log(data.results);
});
这里我正在使用Ubidots作为物联网云,通过Ubidots我们可以有效地可视化数据。它支持各种设备,还可以触发一些操作,如发送邮件和消息。它还提供了许多API,以我们选择的语言加速我们的开发。因此,我选择了它的Node.Js库来与我的爱迪生交互。
设置Ubidots云
- 登录您的Ubidots账户,或在此处创建账户:http://ubidots.com/
- 选择“Sources”选项卡,然后点击“Add Data Source”创建一个新的数据源。这里我添加了我的爱迪生。
- 数据源创建后,我们需要为其添加变量。在此项目中,我们将发送温度数据,因此我们将创建一个单独的变量。
- 点击变量并复制变量ID。将其粘贴到您的代码中。
- 选择我的个人资料->API Keys。在此处获取您的API密钥。
- 在您的仪表板上添加一个您选择的部件,取决于您希望如何可视化数据。
- 我为温度传感器选择了折线图和表格值。通过查看表格值,您可以轻松确定温度的最后值,并通过图表可以评估温度的突然变化。
工作
您需要创建一个Twilio帐户来发送消息。将您从Twilio帐户获得的API密钥复制到代码中。在爱迪生上构建、上传和运行您的应用程序。它将下载NPM模块并将当前项目上传到爱迪生。使用Intel XDK IoT版时,您需要活跃的互联网连接。
您将在调试控制台中看到传感器值,如果一切正常,您会注意到数据正在发送到Ubidots云,并且通过触摸将消息发送到手机。按下按钮,这将打开手电筒,方便您在黑暗中查看,显示屏将显示当前时间和温度。
导航到Ubidots仪表板,您将看到传感器发送的所有数据在我们的部件中。您可以看到温度传感器记录的最新值以及关于变化的折线图。在这里,我还创建了一些警报,如果温度水平超过一定水平(通过短信向我们的手机发送警报)。
现在,当我们触摸触摸传感器时,一条短信会立即发送到我的手机。我使用的是Twilio试用账户,所以他们会在短信中添加一些其他文本。如果您获得付费账户,将不会看到任何Twilio广告。
关注点
制作并佩戴智能手表是您会真正享受的事情。我仍在努力使其小巧,并且正在研究计步器和睡眠监测器,我将很快更新。
历史
20-10-2015: 目录和参考文献已添加
2015年10月16日:文章首次发布
参考文献
http://www.intel.com/content/www/us/en/do-it-yourself/edison.html
https://software.intel.com/en-us/iot/hardware/edison/downloads
http://poojabaraskar.com/grove-starter-kit-with-intel-galileo-gen-2-getting-started/
https://software.intel.com/zh-cn/iot/library/edison-getting-started