pATAq 发表于 2016-10-10 16:05:03

[Gravity]使用DFRduino 套件搭建健康成长CP项目

前言原创文章,转载引用务必注明链接。水平有限,如有疏漏,欢迎指正。本文假定读者具有使用Arduino的经验,并且了解C等编程语言。本文使用markdown写成,为获得更好的阅读体验,推荐访问我的博客原文:http://www.omoikane.cn/2016/09/24/dfrobot-project/项目名称健康成长CP项目所需硬件
[*]DFRduino —— 从机
[*]Intel Edison 开发板 —— 主机
[*]拓展板——接插 Gravity 接口传感器
[*]Seeed Base Board X 2 —— 一块用于I2C通讯,一块用于连接其他
[*]各种传感器
项目设计预计项目分为三个部分:
[*]输入:土湿,室温,室湿,亮度;运动量
[*]处理:Intel Edison 作为主机,负责处理数据,网页前端,高性能,与手机交互;DFRduino 作为从机,两者通过I2C 协议通讯(SPI、UART)
[*]输出:1260 LCD、舵机、红绿灯、网页前端、手机客户端
使用arduino、node.js等编程语言,以及shell脚本编程。Arduino及其配套Kit又被称为电子积木,类似于乐高,将需要的模块组合到一起,就能极快地实现自己的小点子。样各个模块的代码理解修改组合就可以实现一个复杂的项目。背景知识Blynk 物联网服务相信很多人都用了,非常简单方便,支持自建第三方服务器。Virtual Pin是核心功能。Moves 运动监测软件最重要的是提供API接口。官网:https://moves-app.com/ ;API使用文档:https://dev.moves-app.com/I2C协议除了I2C接口之外还有UART、SPI接口可以使用,这里为了方便使用了I2C接口。Arduino 里封装好了I2C通讯库,直接调用即可。库参考地址:https://www.arduino.cc/en/Reference/Wire这里使用I2C协议,可以接口复用,也就是既用来让Edison与DFRduino通信,又用来 1602 LCD显示。项目详述示意图以及实物图输入:土湿——DFROBOT 的土壤湿度传感器。使用前务必按照wiki进行初始化。代码如下:void setup() {
Serial.begin(9600); // open serial port, set the baud rate to 9600 bps
}
void loop() {
int moisture;
moisture = analogRead(1); //connect sensor to Analog 1
Serial.print(val); //print the value to serial
delay(100);
}


室温、室湿——DHT22需要从Arduino IDE中安装DHT传感器库项目——加载库——管理库。代码如下:// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain。Modified by sjqlwy.

#include "DHT.h"

#define DHTPIN 2 // 将DHT22传感器插到2号引脚

#define DHTTYPE DHT22 // 使用 DHT 22 (AM2302)

// 初始化DHT传感器.
DHT dht(DHTPIN, DHTTYPE);

void setup() {
Serial.begin(9600);
Serial.println("DHTxx test!");
dht.begin();
}

void loop() {
// Wait a few seconds between measurements.
delay(2000);

// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();

// Check if any reads failed and exit early (to try again).
if (isnan(h)isnan(t)isnan(f)) {
Serial.println("Failed to read from DHT sensor!");
return;
}

Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.print(" *C ");
}
注意
DHT系列单线模转数温湿度传感器无法在Intel Edison以及Galileo上使用,原因是啥啥线频率不够。所以像SeeedStudio Grove Kit For Intel Galileo|Edison 套件里面不提供该系列传感器,要想在Intel物联网设备上使用可以将DHT传感器引出两根线,具体可以参考Intel开发者社区,写得很详尽,我为啥没附链接因为我也找不到了。。。
亮度
产品链接
。 代码如下:void setup()
{
Serial.begin(9600); // open serial port, set the baud rate to 9600 bps
}
void loop()
{
      int val;
      val=analogRead(0);   //connect grayscale sensor to Analog 0
      Serial.println(val,DEC);//print the value to serial      
      delay(100);
}


运动量交互我们这里使用Moves的API传到Edison上。处理部分Intel Edison因为DHT22这种传感器使用一根线,Edison、Galileo的频率不够无法正常接收信号,这也是为什么Seeed 出的Grove套件不包含这种传感器的原因。为此,我们让DFRduino收集传感器数据,然后通过I2C协议与Edison交互。另外由于要用的Wifi、蓝牙Edision自带,无形之中方便了很多。Blynk初始化代码包含使用Blynk的基本功能,需要安装Blynk库,这里使用Edison的无线网卡连接网络,开启串口调试功能。#define BLYNK_PRINT Serial    // Comment this out to disable prints and save space
#include <WiFi.h>
#include <BlynkSimpleIntelEdisonWiFi.h>

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "Blynk网站Token";

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "无线网名称";
char pass[] = "无线网密码";

void setup()
{
Serial.begin(9600);
Blynk.begin(auth, ssid, pass);
// Or specify server using one of those commands:
//Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 8442);
//Blynk.begin(auth, ssid, pass, server_ip, port);
}

void loop()
{
Blynk.run();
}

I2C通讯(主机)#include <Wire.h>
//host
void setup()
{
    Wire.begin(); // 加入 i2c 总线,作为主机
    Serial.begin(9600);
}

void loop()
{
    Wire.requestFrom(4,1);
    while(Wire.available()>0)
    {
      int x = Wire.read();
      Serial.println(x);
    }
    delay(1000);
}


DFRduinoI2C通讯(从机)
#include <Wire.h>
//client
const int pinLight = A0;

void setup()
{
    Wire.begin(4);
    Wire.onRequest(requestEvent);
}

void loop()
{
    delay(100);
}

void requestEvent()
{
    int lightValue = analogRead(pinLight);
    Wire.write(lightValue);
}
输出Demo —— 读取DFRduino上亮度传感器的值显示在手机上的Blynk客户端上1602 LCD —— 接在Edison上,通过system功能显示更多信息仪表盘 —— 使用舵机实现仪表盘功能,显示当前温湿度、土壤湿度是否适宜(一键切换)发光二极管 —— 通过LED灯实现和上面类似的功能网页前端(node.js on Intel Edison) —— Edison上本身运行着一个完整的Linux系统,通过Intel XDK IoT Edition这个IDE,使用node.js可以非常方便地开发网页访问前端,进行交互控制
功能展望
[*]添加NFC、BLE 交换运动量数据功能
[*]与智能体重秤交互
[*]同步每日饮水数据
[*]提醒环境温度穿衣戴口罩(Intel Edison利用API查询天气信息并进行反馈)
[*]查询快递情况(对于经常买东西又不想整天刷新很有用。。。)



hnyzcj 发表于 2016-10-10 16:27:57

ooooooo

hnyzcj 发表于 2016-10-10 16:28:12

名字起的很不错

dsweiliang 发表于 2016-10-10 16:59:31

谢谢分享
页: [1]
查看完整版本: [Gravity]使用DFRduino 套件搭建健康成长CP项目