6824| 3
|
[资讯] [Gravity]使用DFRduino 套件搭建健康成长CP项目 |
前言 原创文章,转载引用务必注明链接。水平有限,如有疏漏,欢迎指正。 本文假定读者具有使用Arduino的经验,并且了解C等编程语言。 本文使用markdown写成,为获得更好的阅读体验,推荐访问我的博客原文: http://www.omoikane.cn/2016/09/24/dfrobot-project/ 项目名称健康成长CP 项目所需硬件
预计项目分为三个部分:
使用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 的土壤湿度传感器 [SKU:SEN0193——电容式土壤湿度传感器]。使用前务必按照wiki进行初始化。代码如下: [mw_shl_code=applescript,true]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); }[/mw_shl_code] 需要从Arduino IDE中安装DHT传感器库项目——加载库——管理库。代码如下: [mw_shl_code=applescript,true]// Example testing sketch for various DHT humidity/temperature sensors [/td][/tr][tr][td]// Written by ladyada, public domain。Modified by sjqlwy.[/td][/tr] [tr][td][/td][/tr] [tr][td]#include "DHT.h"[/td][/tr] [tr][td][/td][/tr] [tr][td]#define DHTPIN 2 // 将DHT22传感器插到2号引脚[/td][/tr] [tr][td][/td][/tr] [tr][td]#define DHTTYPE DHT22 // 使用 DHT 22 (AM2302)[/td][/tr] [tr][td][/td][/tr] [tr][td]// 初始化DHT传感器.[/td][/tr] [tr][td]DHT dht(DHTPIN, DHTTYPE);[/td][/tr] [tr][td][/td][/tr] [tr][td]void setup() {[/td][/tr] [tr][td]Serial.begin(9600);[/td][/tr] [tr][td]Serial.println("DHTxx test!");[/td][/tr] [tr][td]dht.begin();[/td][/tr] [tr][td]}[/td][/tr] [tr][td][/td][/tr] [tr][td]void loop() {[/td][/tr] [tr][td]// Wait a few seconds between measurements.[/td][/tr] [tr][td]delay(2000);[/td][/tr] [tr][td][/td][/tr] [tr][td]// Reading temperature or humidity takes about 250 milliseconds![/td][/tr] [tr][td]// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)[/td][/tr] [tr][td]float h = dht.readHumidity();[/td][/tr] [tr][td]// Read temperature as Celsius (the default)[/td][/tr] [tr][td]float t = dht.readTemperature();[/td][/tr] [tr][td][/td][/tr] [tr][td]// Check if any reads failed and exit early (to try again).[/td][/tr] [tr][td]if (isnan(h)[/td][td][/td][td]isnan(t)[/td][td][/td][td]isnan(f)) {[/td][/tr] [tr][td]Serial.println("Failed to read from DHT sensor!");[/td][/tr] [tr][td]return;[/td][/tr] [tr][td]}[/td][/tr] [tr][td][/td][/tr] [tr][td]Serial.print("Humidity: ");[/td][/tr] [tr][td]Serial.print(h);[/td][/tr] [tr][td]Serial.print(" %\t");[/td][/tr] [tr][td]Serial.print("Temperature: ");[/td][/tr] [tr][td]Serial.print(t);[/td][/tr] [tr][td]Serial.print(" *C ");[/td][/tr] [tr][td]}[/mw_shl_code][/td][/tr] [tr][td]注意 DHT系列单线模转数温湿度传感器无法在Intel Edison以及Galileo上使用,原因是啥啥线频率不够。所以像SeeedStudio Grove Kit For Intel Galileo|Edison 套件里面不提供该系列传感器,要想在Intel物联网设备上使用可以将DHT传感器引出两根线,具体可以参考Intel开发者社区,写得很详尽,我为啥没附链接因为我也找不到了。。。 亮度 产品链接 [SKU:DFR0026模拟环境光线传感器]。 代码如下:[mw_shl_code=applescript,true]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); }[/mw_shl_code] 我们这里使用Moves的API传到Edison上。 处理部分Intel Edison因为DHT22这种传感器使用一根线,Edison、Galileo的频率不够无法正常接收信号,这也是为什么Seeed 出的Grove套件不包含这种传感器的原因。为此,我们让DFRduino收集传感器数据,然后通过I2C协议与Edison交互。另外由于要用的Wifi、蓝牙Edision自带,无形之中方便了很多。 Blynk初始化代码包含使用Blynk的基本功能,需要安装Blynk库,这里使用Edison的无线网卡连接网络,开启串口调试功能。 [mw_shl_code=applescript,true]#define BLYNK_PRINT Serial // Comment this out to disable prints and save space[/td][/tr][tr][td]#include <WiFi.h>[/td][/tr] [tr][td]#include <BlynkSimpleIntelEdisonWiFi.h>[/td][/tr] [tr][td][/td][/tr] [tr][td]// You should get Auth Token in the Blynk App.[/td][/tr] [tr][td]// Go to the Project Settings (nut icon).[/td][/tr] [tr][td]char auth[] = "Blynk网站Token";[/td][/tr] [tr][td][/td][/tr] [tr][td]// Your WiFi credentials.[/td][/tr] [tr][td]// Set password to "" for open networks.[/td][/tr] [tr][td]char ssid[] = "无线网名称";[/td][/tr] [tr][td]char pass[] = "无线网密码";[/td][/tr] [tr][td][/td][/tr] [tr][td]void setup()[/td][/tr] [tr][td]{[/td][/tr] [tr][td] Serial.begin(9600);[/td][/tr] [tr][td] Blynk.begin(auth, ssid, pass);[/td][/tr] [tr][td] // Or specify server using one of those commands:[/td][/tr] [tr][td] //Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 8442);[/td][/tr] [tr][td] //Blynk.begin(auth, ssid, pass, server_ip, port);[/td][/tr] [tr][td]}[/td][/tr] [tr][td][/td][/tr] [tr][td]void loop()[/td][/tr] [tr][td]{[/td][/tr] [tr][td] Blynk.run();[/td][/tr] [tr][td]}[/mw_shl_code][/td][/tr] [tr][td][/table]I2C通讯(主机)[mw_shl_code=applescript,true]#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); }[/mw_shl_code] [table=98%,initial] DFRduinoI2C通讯(从机)[/td][/tr] [tr][td][mw_shl_code=applescript,true]#include <Wire.h>[/td][/tr] [tr][td]//client[/td][/tr] [tr][td]const int pinLight = A0;[/td][/tr] [tr][td][/td][/tr] [tr][td]void setup()[/td][/tr] [tr][td]{[/td][/tr] [tr][td] Wire.begin(4);[/td][/tr] [tr][td] Wire.onRequest(requestEvent);[/td][/tr] [tr][td]}[/td][/tr] [tr][td][/td][/tr] [tr][td]void loop()[/td][/tr] [tr][td]{[/td][/tr] [tr][td] delay(100);[/td][/tr] [tr][td]}[/td][/tr] [tr][td][/td][/tr] [tr][td]void requestEvent()[/td][/tr] [tr][td]{[/td][/tr] [tr][td] int lightValue = analogRead(pinLight);[/td][/tr] [tr][td] Wire.write(lightValue);[/td][/tr] [tr][td]}[/mw_shl_code][/td][/tr] [tr][td]输出Demo —— 读取DFRduino上亮度传感器的值显示在手机上的Blynk客户端上1602 LCD —— 接在Edison上,通过system功能显示更多信息仪表盘 —— 使用舵机实现仪表盘功能,显示当前温湿度、土壤湿度是否适宜(一键切换)发光二极管 —— 通过LED灯实现和上面类似的功能网页前端(node.js on Intel Edison) —— Edison上本身运行着一个完整的Linux系统,通过Intel XDK IoT Edition这个IDE,使用node.js可以非常方便地开发网页访问前端,进行交互控制 功能展望
|
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed