You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

基于Arduino Makefile:如何将传感器数据保存至电脑文件?

解决Arduino中import processing.serial.*;的报错问题

嘿,这个报错其实很好理解——你用的那行import processing.serial.*;根本不是Arduino的代码!网上流传的那个《Save to CSV file from Arduino》方案,其实是Processing+Arduino的组合方案,不是纯Arduino代码。Processing是基于Java的可视化编程工具,import是Java/Processing的语法,而Arduino用的是C++,自然不认这个语法,所以才会报‘import’ does not name a type的错误。

下面给你两种可行的解决方案,按需选择:

方案1:用Processing配合Arduino接收数据并保存CSV

这就是网上那个方案的正确打开方式,分两步走:

第一步:编写Arduino端代码(负责发送温湿度数据)

修改你的Arduino代码,让它通过串口输出逗号分隔的温湿度数据,比如:

#include <DHT.h>
#include <LiquidCrystal.h>

// 假设你已经初始化了DHT传感器和LCD
DHT dht(2, DHT11);
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  Serial.begin(9600);
  dht.begin();
  lcd.begin(16, 2);
}

void loop() {
  float temp = dht.readTemperature();
  float humidity = dht.readHumidity();

  // 显示到LCD
  lcd.clear();
  lcd.print("Temp: "); lcd.print(temp); lcd.print("C");
  lcd.setCursor(0, 1);
  lcd.print("Hum: "); lcd.print(humidity); lcd.print("%");

  // 串口输出CSV格式的数据
  Serial.print(temp);
  Serial.print(",");
  Serial.println(humidity);

  delay(2000);
}

用Arduino Makefile编译上传这个代码到Uno,确保串口能正常输出数据。

第二步:编写Processing端代码(负责接收并保存CSV)

打开Processing软件,新建一个项目,写入以下代码(注意修改串口名称为你的Arduino串口):

import processing.serial.*;

Serial mySerial;
PrintWriter output;

void setup() {
  // 替换成你的Arduino串口,比如Linux是"/dev/ttyACM0"
  mySerial = new Serial(this, "/dev/ttyACM0", 9600);
  // 创建CSV文件,会保存在Processing项目文件夹里
  output = createWriter("sensor_data.csv");
  // 写入CSV表头
  output.println("Temperature,Humidity");
}

void draw() {
  if (mySerial.available() > 0) {
    String data = mySerial.readStringUntil('\n');
    if (data != null) {
      data = data.trim();
      // 写入数据到CSV
      output.println(data);
      // 实时刷新文件
      output.flush();
    }
  }
}

void stop() {
  // 关闭文件
  output.close();
  super.stop();
}

运行Processing代码,它就会从Arduino串口读取数据并写入CSV文件了。

方案2:纯Arduino用SD卡模块直接保存CSV

如果你不想用Processing,想让Arduino直接把数据写到CSV文件里,可以用SD卡模块:

硬件准备

  • SD卡模块一块
  • 接线:
    • SD卡模块的CS引脚 → Arduino D10
    • MOSI → D11
    • MISO → D12
    • SCK → D13
    • VCC → 3.3V(不要接5V,会烧SD卡)
    • GND → GND

Arduino代码

#include <DHT.h>
#include <LiquidCrystal.h>
#include <SD.h>

DHT dht(2, DHT11);
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
File dataFile;

void setup() {
  Serial.begin(9600);
  dht.begin();
  lcd.begin(16, 2);

  // 初始化SD卡
  if (!SD.begin(10)) {
    lcd.print("SD Card Error");
    while (1); // 初始化失败就停在这里
  }
  // 打开CSV文件,APPEND模式表示追加数据
  dataFile = SD.open("sensor.csv", FILE_WRITE);
  if (dataFile) {
    // 如果是新文件,写入表头
    if (dataFile.size() == 0) {
      dataFile.println("Temperature,Humidity");
    }
    dataFile.close();
  } else {
    lcd.print("Open File Fail");
    while (1);
  }
}

void loop() {
  float temp = dht.readTemperature();
  float humidity = dht.readHumidity();

  // 显示到LCD
  lcd.clear();
  lcd.print("Temp: "); lcd.print(temp); lcd.print("C");
  lcd.setCursor(0, 1);
  lcd.print("Hum: "); lcd.print(humidity); lcd.print("%");

  // 写入SD卡
  dataFile = SD.open("sensor.csv", FILE_WRITE);
  if (dataFile) {
    dataFile.print(temp);
    dataFile.print(",");
    dataFile.println(humidity);
    dataFile.close();
  }

  delay(2000);
}

用Arduino Makefile编译这个代码时,确保SD库的路径被正确配置(一般Makefile会自动识别系统里的Arduino库),上传后就能直接在SD卡的sensor.csv里看到数据了。

内容的提问来源于stack exchange,提问作者Ramces Gonzalez

火山引擎 最新活动