Новичок в схемотехнике и всяком таком DIY, но решил сделать метеостанцию для своего хобби. Итак, есть IskraJS + Troyka Shield v2 + Troyka барометер + Troyka цифровой метеомодуль. Искра подключена, IDE настроен, видит плату и библиотеки Амперки, код заливается. Но не могу добиться одновременной работы означенных модулей. По отдельности - работают, выдают корректные значения. Я уж читал про I2C на wiki Амперки, просматривал проекты, но инфы для нубов реально мало. Во многих проектах или не используется IskraJS, а какие-то другие платы или не используется Troyka Shield v2 или не используются одновременно несколько I2C-устройств. Вот такой код: Код (Javascript): I2C1.setup({sda: SDA, scl: SCL, bitrate: 400000}); var meteoSensor = require('[USER=5565]@amperka[/USER]/meteo-sensor').connect({i2c: I2C1}); setInterval(() => { meteoSensor.read(function(err, data) { if (err) { console.log(err); } else { console.log("Temp is: " + data.tempC + " C, " + "Hum is: " + data.humidity + " %"); } }); }, 3000); I2C2.setup({sda: P0, scl: P1, bitrate: 400000}); I2C3.setup({sda: P11, scl: P12, bitrate: 400000}); var baro = require('[USER=5565]@amperka[/USER]/barometer').connect({i2c: I2C3, repeatabulity: 'HIGH'}); baro.init(); setInterval(() => { print(baro.read('mmHg') + ", " + baro.temperature('C')); }, 3000); Причём, данные с метео-сенсора получаются, а барометр валится на "baro.init();" по read timeout c I2C. Если заменить "i2c: I2C3" в методе "connect" у барометра на настроенный "i2c: I2C2" тоже ошибка. Заранее спасибо. Проект замечательный, давно мечтал заняться чем-то таким "железячным", но без сурового входа в схемотехнику, но что-то пошло не так... )
Поправил пост, спасибо за замечание. А по существу есть что сказать? Это же должна быть элементарная вещь, продуманная создателями Амперки.
Я не сотрудник Амперки. И искрой JS занимаюсь от случая к случаю. Вам бы, во-первых, почитать про JavaScript побольше, а во-вторых, если модули сидят на одной шине, то надо проверить их адреса на совпадение. В общем, это либо проблема непонимания основ языка, что лечится книжкой, либо адреса датчиков на шине, коль по отдельности все работает.
По JS - вроде бы основы знаю. По-крайней мере, в том куске кода, что я привёл, синтаксических ошибок нет. Модули работают по-отдельности. >> Я не сотрудник Амперки. И искрой JS занимаюсь от случая к случаю. А я не вам персонально это писал. Надеюсь, что здесь периодически появляются ответственные за обратную связь и развитие проекта. >> либо адреса датчиков на шине, коль по отдельности все работает. Нашёл адрес метео-датчика (http://amperka.ru/product/troyka-meteo-sensor#docs): 0x44 (по умолчанию) / 0x45 Адрес барометра в wiki (http://wiki.amperka.ru/продукты:troyka-barometer) такой: 0b1011100 (0x5C). Т.е. адреса вроде бы разные, должно работать...
JavaScript - это не основы, это логика программирования. Код - каша. Сначала сделайте все настройки. Потом организуйте опрос. У вас в коде происходит одновременный опрос датчиков, полагаю, это не правильно. Вам необходимо сделать его последовательным и некоторым промежутком. Вы (практически одновременно) запускаете два таймера да на одно время. Так не делается.
В браузере и NodeJS - делается. Т.к. запуск двух и более таймеров (на одно время или разное) не лимитируется ECMA. За подсказку - спасибо, но это именно ограничения платформы, про которые пока не понятно где читать.
Ещё раз спасибо, вам Амперка должна бы приплачивать за поддержку А можно вдогонку, так сказать, ещё чайниковский вопрос про I2C. Вот здесь: http://wiki.amperka.ru/js:iskra_js (в распиновке) написано, что у IskraJS есть I2C1, I2C2 и I2C3. Подскажите, пожалуйста, в случае использования Troyka Shield v2 есть соответствие между физическим расположением I2C Troyka-модуля на шилде (там группы контактов, обозначенные как A, B и C) и параметром "i2c" при обращении в программе к сенсору (как это здесь принято называть, "скетче"?) - I2C1, I2C2 и I2C3? То есть, если сенсор воткнут в группу I2C контактов "A", то нужно использовать I2C1(PrimaryI2C), если в "B" - то I2C2 и т.д. (или другое соотнесение). Или это никак не связано?
Нет, это никак не связано. Всё подключается к Primary I2C к I2C можно подключать до 127 устройств (расширенный режим не берём) подключённых в параллель. Вот хорошая статья про её работу http://easyelectronics.ru/interface-bus-iic-i2c.html Мне не понятно, как у вас подключены модули? То есть вы подключили сами модули к физически разным портам I2C или к одному и тому же? Если у них разные адреса, то можно подключать к одному и тому же. Ну и в коде да, какая-то каша