DHT11 + ESP плюс Arduino

temperature

Кто-нибудь может мне помочь? Я хочу использовать dht11 с Arduino и ESP. Оба будут читать данные из dht11. проблема в том, что одновременно это сделать невозможно. Таким образом, решение будет состоять в том, чтобы сделать один главным, а другой подчиненным. контроль будет осуществляться так... другой провод от контакта Arduino-> установить как выход -> вывод esp-> установить как вход. если провод == 1, то dht11 будет прочитан Arduino если провод == 0, то esp будет читать dht. с некоторой задержкой, конечно. но проблема в том, что я не знаю, как остановить связь между одной платой и датчиком, когда другая плата ее прочитает. так что не существует никакого конфликта

, 👍1

Обсуждение

Пожалуйста, добавьте свой эскиз (пока)., @Mikael Patel

я уже добавил это, @Iulian Chirvasa


2 ответа


Лучший ответ:

0

Отказ от ответственности:

Я никогда не использовал платы на базе чипов ESP и почти ничего о них не знаю. Я предполагаю, что с точки зрения программного обеспечения он работает как Arduino, и основываю свой ответ на коде Arduino. Если чип ESP работает по-другому, вам придется адаптировать мое предложение.


Попробуйте что-нибудь вроде этого:

Подключите линию GPIO между микроконтроллерами. Также подключите эту линию через резистор 10 кОм к +5 В.

Пусть оба микроконтроллера настроят GPIO в качестве входа.

(Мы назовем вывод GPIO на обоих микроконтроллерах линией «DHT_available». Он будет ВЫСОКИМ, когда датчик DHT не используется другим контроллером.)

Когда один из микроконтроллеров хочет прочитать DHT11, он должен проверить линию GPIO. Если он ВЫСОКИЙ, переключите линию GPIO на выход и потяните ее на низкий уровень, а затем снимите показания. Когда чтение завершится, переключите линию GPIO обратно на вход.

Если на линии GPIO НИЗКИЙ уровень, подождите и проверьте еще раз.


В качестве альтернативы вы можете подключить каждую из линий GPIO микроконтроллера к обработчикам прерываний по нарастающему фронту. Затем обработчик прерываний установит линию GPIO на выход, переведет ее в состояние LOW и установит флаг, означающий «начать чтение».

Пусть ваша функция цикла проверит флаг «начать чтение», и если он истинен, инициирует чтение из DHT, а после его завершения установите GPIO обратно на вход.

При первом варианте каждый микроконтроллер должен будет постоянно опрашивать линию «DHT_available», пока она не перейдет в ВЫСОКИЙ уровень, прежде чем начать чтение.

При втором варианте, как только один из ваших микроконтроллеров завершит считывание, он перестанет переводить линию связи в НИЗКИЙ уровень, у другого сработает прерывание по нарастающему фронту, а другой немедленно начнет чтение.

При втором варианте. р>
,

Я не знаю, как писать код для всего этого. я новичок в микроконтроллерах, @Iulian Chirvasa

Поэтому используйте два отдельных датчика DHT11, по одному на каждый микроконтроллер. Они дешевы., @Duncan C


1

Кроме того... я бы увидел здесь проблему. Скажем так.. Данные датчика. Земля. Вкк УК 2560 Калифорнийский университет в Испании Если данные датчика связаны с обоими uC И используйте строку dht_available между 2560 и esp для обработки чтения uC... тогда... Если dht_available == HIGH, то 2560 читается после переключения линии dht на Low. Если dht_available == LOW, то esp читается после чтения dhtline》 HIGH Но датчик будет продолжать отправлять данные обоим... в зависимости от высокого или низкого уровня линии dhtline. Я не знаю, как сказать датчику... если dhtline НИЗКИЙ, прекратите отправку данных на 2560, потому что пришло время чтения.

,