Две платы Arduino с датчиками I2C
Я новенькая и потерянная. Я искал в Интернете информацию о том, как передавать данные нескольких датчиков с одного Arduino на другой с помощью I2C, но безуспешно. Все коды и учебные пособия в Интернете сосредоточены на нескольких ведомых устройствах с одним датчиком.
Прилагаемый Фритцинг не является моим проектом, но мой проект включает в себя 22 датчика давления, и мне нужно записать их показания в Excel с помощью plx, поэтому изображение просто для демонстрации идеи.
Основная идея заключается в передаче данных датчиков от ведомого устройства к ведущему по I2C.
Мне просто нужен ответ, выполнимо это или нет, пожалуйста
@tofi, 👍1
Обсуждение1 ответ
Есть два основных способа сделать это.
- Сначала отправьте байт с ведущего устройства на ведомое устройство, чтобы выбрать нужный датчик, затем запросите данные для выбранного в данный момент датчика или
- Запросите у ведомого устройства много байтов и заполняйте их по одному по мере поступления запросов.
Первый способ - это медленный, но "I2C" способ сделать это-в основном каждый датчик имеет свой собственный регистр в ведомом устройстве, и вы выбираете, из какого регистра вы хотите читать.
Второй способ быстрее, но вы должны внутренне отслеживать, где вы находитесь.
Хорошим компромиссом является реализация "автоматического приращения", которое выполняет оба сценария: если вы отправляете байт, он устанавливает текущий датчик для считывания. Затем каждое считывание возвращает текущий датчик и увеличивает номер датчика внутри ведомого устройства, поэтому при следующем считывании будет получен следующий датчик.
Таким образом, у вас есть способ "сбросить" индекс датчика, с которого вы считываете, и достаточно быстро получить все датчики, так как вам просто нужно выполнить несколько операций чтения после одной записи.
Wire.begin(9);//9 вот адрес(указан даже в коде главной платы) Провод.onReceive(ххх); пустота xxx(int байт) { l = Wire.read();//Получение значения с главной платы Серийный номер.печать("Давление 12= "); Серийный номер.печать(l); Серийный номер.println(" PSI "); } это код, который я использовал для считывания данных с ведомого устройства для одного датчика, который работает нормально , как добавить регистры для каждого датчика?, @tofi
Это выглядит так, как будто вы посылаете сообщение от хозяина к рабу, а не от раба к хозяину. У тебя все наоборот., @Majenko
Провод.начало(9); Провод.Начало передачи(9); Провод.запись((байт)l); Провод.конечная передача(); это код, который я отправляю данные с платы salve мастеру, @tofi
Вы показываете мне код, который является полной противоположностью тому, что вы утверждаете в своем вопросе., @Majenko
Есть ли какая-то конкретная причина *почему* вы считаете, что вам нужно сделать это с помощью I2C? Это, вероятно, самый сложный протокол для реализации., @Majenko
есть ли какие-то альтернативы?, @tofi
Множество. Вероятно, проще всего реализовать использование одного из UART на каждой плате. Сериал1.печать(аналоговый поток(0)); Сериал1.печать(","); Сериал1.печать(аналоговый поток(1)); Сериал1.печать(","); ... Сериал1.println(analogRead(10));
, @Majenko
будет ли исследование UART и как его использовать, спасибо, @tofi
на принимающей стороне кода ur, как будет выглядеть хранение данных каждого датчика?, @tofi
https://majenko.co.uk/blog/reading-serial-arduino | https://majenko.co.uk/blog/splitting-text-c, @Majenko
Почему бы не разместить все датчики на одном Arduino?, @Gil
- Путаница между SPI и I2C для SSD1306 OLED
- Отправка строки из RPi в Arduino - Рабочий код
- Распаковка бинарных данных Arduino на скетче Python
- Как отправлять и получать данные с Arduino Uno на Arduino Mega с помощью I2C?
- Проблемные данные I2C к датчику GY955/BNO055 (Китай)
- Как подключить несколько акселерометров MMA8451 (протокол I2C) с помощью одного Arduino Mega
- Преобразование float в байт, от Arduino до Raspberry Pi i2c
- Запись на SD-карту с частотой дискретизации 50 мс или меньше? У меня есть скетч, который записывает в sd каждую 1 секунду, но застревает на более высоких частотах дискретизации. Пожалуйста помоги?
Знаете ли вы, как передавать данные одного датчика по I2C?, @Majenko
да, я сделал это для одного датчика, @tofi
Тогда вы сможете сделать это с помощью большего количества датчиков. Просто запросите (и отправьте) больше данных., @Majenko
если это не слишком много, чтобы спросить, есть ли какой-нибудь пример, который вы можете прислать мне для подражания?, @tofi
Возьми свой код. Если вы запрашиваете данные для 1 датчика, измените их, чтобы запрашивать данные для более чем 1 датчика. Если ваш код отвечает данными для 1 датчика, измените его, чтобы он отвечал данными для более чем 1 датчика., @Majenko
*Ваш* код является примером., @Majenko