如何将树莓派INA219测量代码迁移至Arduino Uno运行
关于Arduino拉取树莓派脚本运行的可行性
不可行。Arduino UNO是不带操作系统的8位单片机,既无法直接运行Python代码,也不具备主动访问树莓派文件系统、拉取脚本执行的能力。如果不想重写代码,只能保留INA219接树莓派的原有接线,继续跑原Python脚本,这种场景下Arduino完全不参与测量,达不到迁移到独立设备运行的目的。要实现功能迁移,必须编写Arduino端运行的C++代码。
无外接显示时查看Arduino输出的方法
你不需要外接显示器或面包板:
- Arduino UNO通过USB线连接树莓派后,会在树莓派系统下枚举出串口设备,默认路径为
/dev/ttyACM0。你通过SSH登录树莓派后,既可以用Arduino IDE自带的串口监视器查看输出,也可以直接用screen/minicom等命令行串口工具读取数据。 - INA219接线不需要面包板:直接将模块引脚对应插到Arduino UNO排针上即可:VCC接5V(多数INA219模块兼容5V逻辑,若模块只支持3.3V就接3.3V排针)、GND接GND、SDA接A4、SCL接A5,这是UNO硬件I2C的固定引脚,插紧就能稳定通信。
可直接使用的Arduino迁移代码
先打开树莓派上的Arduino IDE,在库管理器中搜索安装Adafruit INA219依赖库,之后上传以下代码即可,逻辑完全对齐你原有Python脚本:
#include <Wire.h> #include <Adafruit_INA219.h> #define SHUNT_OHMS 0.1 // 与原脚本分流电阻参数一致 Adafruit_INA219 ina219; unsigned long startTick; void setup() { Serial.begin(115200); while (!Serial) delay(10); // 等待串口连接就绪 // INA219初始化,默认量程32V/2A,可根据实际测量需求调整 if (!ina219.begin()) { Serial.println("INA219初始化失败,请检查接线"); while(1) delay(1000); } ina219.setCalibration_32V_2A(); // 打印CSV表头,与原脚本输出字段完全一致 Serial.println("Bus Voltage,Bus Current,Power,Shunt Voltage,Frequency"); } void loop() { startTick = micros(); // 读取测量值,单位与原Python脚本对齐:V/mA/mW/mV float busVoltage = ina219.getBusVoltage_V(); float busCurrent = ina219.getCurrent_mA(); float power = ina219.getPower_mW(); float shuntVoltage = ina219.getShuntVoltage_mV(); // 计算采集频率 float costUs = micros() - startTick; float freq = 1000000.0 / costUs; // 输出CSV格式数据 Serial.print(busVoltage); Serial.print(","); Serial.print(busCurrent); Serial.print(","); Serial.print(power); Serial.print(","); Serial.print(shuntVoltage); Serial.print(","); Serial.println(freq); // 保持10Hz采样率,与原脚本采样频率一致 delay(100); }
使用说明
- 烧录代码时在Arduino IDE中选择板卡为Arduino UNO,端口选择
/dev/ttyACM0,点击上传即可完成烧录,全程不需要外接显示设备。 - 若提示串口权限不足,在树莓派SSH终端执行
sudo usermod -aG dialout pi后重启树莓派即可。 - 数据存为CSV文件的操作和原脚本逻辑一致:在终端执行
cat /dev/ttyACM0 > SensorData.csv即可开始记录,按下CTRL+C即可终止记录,生成的CSV文件格式与原Python脚本输出完全兼容。
内容的提问来源于stack exchange,提问作者ZSupreme
相关产品推荐
相关产品推荐

