我有一个 Intel Edison Arduino 分线板、Atlas Scientific EZO PH 传感器和一个 Atlas Scientific 电源隔离器。
我在英特尔爱迪生 Arduino 分线板 i2c 总线 (A4/A5) 和 ph 传感器之间有电源隔离器。
可在此处找到 Atlas Scientific 数据表:
EZO Ph 传感器:PH 数据表
电源隔离器:电源隔离器数据表
节点代码:
var m = require('mraa');
var i2c = new m.I2c(1);
i2c.address(0x63);
i2c.write("R,56.26");
console.log("Reading I2C..");
function readPH() {
var data = i2c.read();
console.log( ">> I2C value: " + data);
}
setTimeout(function (e) { readPH(); }, 1000);
我将命令 R,56.26 发送到 ph 传感器,等待 1 秒然后执行i2c.read();
。
当发送命令和执行命令时,我看到灯闪烁并改变颜色i2c.read()
,所以我知道我正在请求读取并获得结果。
EZO PH 传感器数据表说明:
我似乎只能存储我的结果的第一位而不是完整的 7 个字节。我似乎总是返回 1。我收到的 1 对应于“成功”。为了进一步排除故障,我将 R,34.53 发送到 ph 传感器,然后提前执行i2c.read();
并收到 254,对应于“待处理”。所以,我相信我收到了来自 EZO PH 传感器的结果或部分结果。
我不知道如何存储 7 字节结果。我不知道 mraa nodejs 库 API 的内部工作原理。所以,我不确定是否应该使用对象、数组或变量来存储结果,或者我是否在i2c.read();
更新
我通读了 mraa github 示例部分,该部分解释说:“没有明确的 nodejs API 文档,请参阅示例。API 本身与 python 非常相似,但具有 js 语法。” 因此,我编写了一个相当简单的 python 脚本,可以成功获取 Ph Sensor 值。
Python代码:
import time
import mraa
i2c = mraa.I2c(1)
i2c.address(0x63)
i2c.write("R,23.5")
time.sleep(1.3)
d = " "
i2c.read(d)
print(d)
python 代码输出: 2.974 获得结果证明我的电路设计有效,现在我需要弄清楚 NodeJS API 是什么才能成功读取 i2c。有谁知道用于获取 i2c 读数的 NodeJS API?
更新
工作示例代码:
var m = require('mraa');
var i2c = new m.I2c(1);
i2c.address(0x63);
i2c.write("R,56.26");
console.log("Reading I2C..");
function readPH() {
var d = i2c.read(7);
console.log(">> " + d);
}
setTimeout(function (e) { readPH(); }, 1000);