< >
Home » Arduino库教程 » Arduino库教程-Bridge-Datalogger

Arduino库教程-Bridge-Datalogger

Yún Datalogger(yun数据记录器)

  • 这个例子展示怎样用Bridge库赖从三个模拟传感器里记录数据到一张SD卡或者一个USB闪存。存储器没有连接到微控制器,而是连接到AR9331,这是为什么要用Bridge的原因。

  • 在名为“arduino”的根目录下,创建一个新的文件夹来准备你的内存。当OpenWrt-Yun在连接的存储设备里发现这个文件夹时,它会创建一个链接到存储器路径:"/mnt/sd"。

  • 当Linux和程序运行,你可以移动闪存;但当数据正在写入卡时,要小心不要移动它。

硬件要求

  • Yún 开发板 或者 shield
  • 微型SD卡 或者 USB 闪存
  • 连接到输入引脚pin0,1,2的模拟传感器

电路

这个例子没有额外的电路。
请输入图片描述
图由 Fritzing 软件绘制。

样例代码

  • 包括FileIO头文件,便于和SD卡通讯。
#include <FileIO.h>
  • 在setup()里,初始化Bridge,串口通讯,和文件系统(为了和 OpenWrt-Yun 文件系统通讯)。在开始程序其余部分前,先等待一个活动的串口连接。
void setup() {
  Bridge.begin();
  Serial.begin(9600);
  FileSystem.begin();

  while(!Serial);  
  Serial.println("Filesystem datalogger\n");
}

[Get Code]

  • 在loop()里,创建一个字符串来伴随着timestamp开始,或者安排记录数据。下面将创建getTimeStamp()函数。
void loop () {
  String dataString;
  dataString += getTimeStamp();
  dataString += " = ";

[Get Code]

  • 从传感器里读取数据,并加在字符串后面,用逗号分开这些值:
for (int analogPin = 0; analogPin < 3; analogPin++) {
    int sensor = analogRead(analogPin);
    dataString += String(sensor);
    if (analogPin < 2) {
      dataString += ",";  
    }
  }

[Get Code]

  • 用一个文件对象和FileSystem.open()函数打开你写入数据的文件。带着调节器FILE_APPEND,你可以写信息到文件的尾端。如果文件不存在,会创建这个文件。这种情况下,你将会在SD卡的根目录创建和写入一个文件,命名"datalog.txt"。
File dataFile = FileSystem.open("/mnt/sd/datalog.txt", FILE_APPEND);

[Get Code]

  • 如果文件成功打开,往里面写入字符串,关闭文件,并打印信息到串口监视器。
if (dataFile) {
    dataFile.println(dataString);
    dataFile.close();
    Serial.println(dataString);
  }

[Get Code]

  • 如果在打开文件时有问题,发送一个error到串口监视器:
else {
    Serial.println("error opening datalog.txt");
  } 
  delay(15000);
}

[Get Code]

  • 最后,写入函数getTimeStamp() 来检索读取信息的时间。将会返回一个字符串。首先,创建一个字符串来保存当前时间,你也可以创建一个Process的例子叫“time”。开始process并且调用“data”应用。“data”是一种命令行功能,即返回当前数据和时间。用time.addParameter(),你可以指定参数 D和T(返回数据(mm/dd/yy)和当前时间(hh:mm:ss))。运行process,并读取结果到字符串里。
String getTimeStamp() {
  String result;
  Process time;
  time.begin("date");
  time.addParameter("+%D-%T");  
  time.run(); 

  while(time.available()>0) {
    char c = time.read();
    if(c != '\n')
      result += c;
  }

  return result;
}

[Get Code]

  • 完整程序如下:
/*
  SD card datalogger

 This example shows how to log data from three analog sensors
 to an SD card mounted on the Yún101/YunShield/Yún using the Bridge library.

 The circuit:
 * analog sensors on analog pins 0, 1 and 2
 * SD card attached to SD card slot of the Yún101/YunShield/Yún

 Prepare your SD card creating an empty folder in the SD root
 named "arduino". This will ensure that the Yún will create a link
 to the SD to the "/mnt/sd" path.

 You can remove the SD card while the Linux and the
 sketch are running but be careful not to remove it while
 the system is writing to it.

 created  24 Nov 2010
 modified 9 Apr 2012
 by Tom Igoe
 adapted to the Yún Bridge library 20 Jun 2013
 by Federico Vanzati
 modified  21 Jun 2013
 by Tom Igoe

 This example code is in the public domain.

 http://www.arduino.cc/en/Tutorial/YunDatalogger

 */

#include <FileIO.h>

void setup() {
  // Initialize the Bridge and the Serial
  Bridge.begin();
  Serial.begin(9600);
  FileSystem.begin();

  while (!SerialUSB); // wait for Serial port to connect.
  SerialUSB.println("Filesystem datalogger\n");
}


void loop() {
  // make a string that start with a timestamp for assembling the data to log:
  String dataString;
  dataString += getTimeStamp();
  dataString += " = ";

  // read three sensors and append to the string:
  for (int analogPin = 0; analogPin < 3; analogPin++) {
    int sensor = analogRead(analogPin);
    dataString += String(sensor);
    if (analogPin < 2) {
      dataString += ",";  // separate the values with a comma
    }
  }

  // open the file. note that only one file can be open at a time,
  // so you have to close this one before opening another.
  // The FileSystem card is mounted at the following "/mnt/FileSystema1"
  File dataFile = FileSystem.open("/mnt/sd/datalog.txt", FILE_APPEND);

  // if the file is available, write to it:
  if (dataFile) {
    dataFile.println(dataString);
    dataFile.close();
    // print to the serial port too:
    SerialUSB.println(dataString);
  }
  // if the file isn't open, pop up an error:
  else {
    SerialUSB.println("error opening datalog.txt");
  }

  delay(15000);

}

// This function return a string with the time stamp
String getTimeStamp() {
  String result;
  Process time;
  // date is a command line utility to get the date and the time
  // in different formats depending on the additional parameter
  time.begin("date");
  time.addParameter("+%D-%T");  // parameters: D for the complete date mm/dd/yy
  //             T for the time hh:mm:ss
  time.run();  // run the command

  // read the output of the command
  while (time.available() > 0) {
    char c = time.read();
    if (c != '\n') {
      result += c;
    }
  }

  return result;
}

[Get Code]

更多

  • Bridge: 从网页浏览器进入开发板的引脚。
  • Console ASCII Table: 示范了怎样打印多种格式到控制台。
  • Console Pixel: 通过控制台控制一个LED灯。
  • Console Read: 从控制台那里分析信息,然后重复发送返回。
  • Datalogger: 在SD卡上保存传感器信息。
  • File Write Script: 示范怎样在Process上写入和执行外壳脚本。
  • HTTP Client: 建造一个简单的客户端,可以下载网页并且打印到串口监视器。
  • HTTP Client Console: 建造一个简单的客户端,可以下载网页并且用控制台通过WIFI打印到串口监视器。
  • Mailbox Read Messages: 用REST API通过一个网页发送文本信息到。
  • Process: 示范怎么用Process运行 Linux 命令。
  • Remote Due Blink: 示范怎么远程上传程序到DUE开发板上。
  • Shell Commands: 用Process 来运行 shell 命令。
  • SpacebrewYun: 在Arduino IDE软件的例子上看更多关于 Spacebrew 文档信息。
  • Temboo: 在Arduino IDE软件的例子上看更多关于 Temboo 文档信息。
  • Temperature Web Panel: 当浏览者要求时,粘贴传感数据到网页上。
  • Time Check: 从网络的时间服务器获得时间,并且打印到串口监视器。
  • WiFi Status: 运行一个预配置的脚本,报告返回当前wifi网络的强度。
  • Yun First Config: 用串口监视器不费力地连接你的云产品到wifi网络,并且在上面回答一些简单的问题。
  • Yun Serial Terminal: 通过串口监视器进入Linux终端。

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: arduino库教程, arduino datalogger