У меня есть коммутационная плата Intel Edison Arduino, датчик Atlas Scientific EZO PH и изолятор питания Atlas Scientific.
У меня есть изолятор питания между шиной i2c платы Intel Edison Arduino (A4/A5) и датчиком ph.
Спецификации Atlas Scientific можно найти здесь:
Датчик EZO Ph: Технический паспорт PH
Изолятор питания: Техническое описание изолятора питания
Код NodeJS:
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);
Отправляю на датчик ph команду R,56.26, жду 1 секунду и затем выполняю i2c.read();
.
Я вижу, как индикаторы мигают и меняют цвет так, как они должны, когда команда отправляется и когда выполняется i2c.read()
, поэтому я знаю, что запрашиваю показания и получаю результат.
Техническое описание датчика EZO PH поясняет:
Кажется, я могу сохранить только первый бит своего результата вместо полных 7 байтов. Кажется, я всегда возвращаю 1. 1, который я получаю, соответствует «Успеху». Для дальнейшего устранения неполадок я отправил R, 34,53 на датчик ph, а затем преждевременно выполнил i2c.read();
и получил 254, что соответствует «Ожидание». Итак, я считаю, что получаю результат или частичный результат от датчика EZO PH.
Я не понимаю, как мне сохранить 7-байтовый результат. Я не знаю внутренней работы API библиотеки mraa nodejs. Итак, я не уверен, следует ли мне использовать объект, массив или переменную для хранения результата, или мне не хватает аргумента в i2c.read();
ОБНОВЛЕНИЕ
Я прочитал раздел примеров mraa github, в котором объясняется: «Нет явной документации API nodejs, см. Примеры. Сам API очень похож на python, но с синтаксисом js». Поэтому я написал довольно простой скрипт на Python, который успешно получает значение датчика Ph.
Код 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. Кто-нибудь знает NodeJS API для чтения i2c?
ОБНОВЛЕНИЕ
Рабочий пример кода:
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);