Как лучше всего подключить несколько ардуино?
В моей ситуации у меня есть карта, разделенная на несколько частей, каждая часть может иметь от 20 до 100 ардуино, которые должны время от времени отправлять информацию мастеру. Как я мог это сделать?
Вторая проблема. Как я могу использовать другие Arduino для отправки информации от Arduino, которые находятся так далеко от Мастера?
Пример в части 1: Arduino X находится на расстоянии 500 метров от мастера. Как можно использовать другого для отправки информации?
Могу ли я сделать это с помощью NodeMcu или подобного оборудования со встроенным Wi-Fi?
@Marven, 👍1
Обсуждение3 ответа
Вы можете использовать низкочастотные модули, чтобы добраться до 500 м. Например, существуют так называемые модули xbee (XBee Pro 60mW PCB Antenna — Series 1). Можно найти и дешевле, но по моему опыту их немного сложнее понять и они ненадежны.
Вы можете создать TCP-подобное соединение, при котором перед отправкой данных "ведомый" спрашивает "ведущего", может ли он перехватить данные или нет. Если нет, он просто будет продолжать спрашивать после того, как пройдет задержка, пока он не дозвонится. Несмотря на то, что TCP в основном используется в WiFi 2.4G, вы все равно можете применить его в своем проекте
Если вы хотите использовать Wi-Fi, вы можете установить соединение между «ведомым» и «главным», используя чипы посредника между ними, которые передают данные, но вам нужно, чтобы чипы посредника были постоянно включен (или используйте RTC, чтобы рассчитать «время пробуждения»).
Я думаю, вам следует начать с использования модулей Wi-Fi, и вы также используете esp-01 вместо NodeMCU. Как только вы познакомитесь с esp-01, вы обнаружите, что они так же хороши, как NodeMCU. У Esp-01 не хватает только нескольких контактов по сравнению с NodeMCU.
А для связи между arduino и esp-01 используйте последовательные порты-0 и 1.
Вот пример кода- Для Мастера Ардуино
int temp;
int hum;
void setup(){
Serial.begin(115200);
delay(2000);
}
void loop() {
temp = random(0,100);
hum = random(100,200);
Serial.print(temp);
Serial.println('t');
delay(2000);
Serial.print(hum);
Serial.println('h');
delay(2000);
Serial.flush();
}
Для Slave Esp или любого другого ведомого Arduino -
String inString = ""; // строка для ввода
float temp = 0,hum = 0;
boolean newtemp=false, newhum=false;
void setup() {
Serial.begin(115200);
Serial.println("ESP 8266 - 01 Module is ready to receive codes from Master Arduino");
}
void loop() {
// Чтение последовательного ввода:
while (Serial.available() > 0) {
int inChar = Serial.read();
if (inChar != '\n') {
if (inChar == 't')
newtemp = true;
if (inChar == 'h')
newhum = true;
inString += (char)inChar;
}
else {
Serial.print("Input string: ");
Serial.println(inString);
if ( newtemp == true ) {
temp = inString.toFloat();
Serial.print("Received Temperature:");
Serial.println(temp);
newtemp = false;
}
if ( newhum == true ) {
hum = inString.toFloat();
Serial.print("Received Humidity:");
Serial.println(hum);
newhum = false;
}
inString = "";
}
}
}
Контактные соединения —
Главная плата Arduino TX -- Ведомая плата RX
Это классическое приложение для технологии LoRa
, а не WiFi. Однако разработка сетки LoRa
— непростая задача.
Проверьте эту публикацию или этот другой пост
- avrdude ser_open() can't set com-state
- Float печатается только 2 десятичных знака после запятой
- ошибка: espcomm_upload_mem failed при загрузке скетча
- Печать массива байтов на экране последовательного монитора Arduino IDE
- Разные и самые быстрые способы вычисления синусов и косинусов в Arduino
- Arduino IDE Отказано В Разрешении На Загрузку, Ubuntu
- Нет заголовочных файлов (.h) в Documents\Arduino\libraries\arduino_144469 с демонстрационным кодом
- Связь Arduino master/slave с использованием RS485
Пакет плат esp8266 arduino поддерживает сетку WiFi, @Juraj