Как стать автором
Поиск
Написать публикацию
Обновить

Создание собственной сети самодельных устройств на базе Arduino (Часть 1)

Время на прочтение4 мин
Количество просмотров14K
Добрый день, хабравчане! Сегодня расскажу вам про интеграцию Arduino с ПК на Windows и другими устройствами. Дело было уже в 2018 году, ко мне наконец-то приехали мои платы Arduino самых разных моделей.

Я давно хотел собрать умный дом, и решил использовать именно эту платформу. Почему? Ну я довольно хорошо знаю C# и немного C++, а как известно, прошивки под Arduino пишутся именно на изменённых плюсах. К тому же платформа имеет цифро-аналоговый преобразователь, что упрощает работу с аналоговыми датчиками. В придачу платформа весьма известна и имеет большую модульную базу.

При всей своей любви к микроконтроллерам, я предпочитаю всё вычислять на винде, а вся моя сила в .NET приложениях. Это и стало моей проблемой. Я просто не мог воспринять среду разработки Arduino IDE. Пришлось привыкать. Однако простые проекты для разминки всё же работали в основном на ПК. Кого заинтересовала тема, прошу под кат!

Моим первым экспериментом стал простой обмен информацией по USB (последовательный порт), через который я отправлял пакеты с простыми командами для выполнения действий на микроконтроллере. Для примера использовал модель Arduino UNO.



Это – интерфейс программы для Windows. «Писк» — подача сигнала на пин (вывод Arduino) под номером 10 постоянного электрического сигнала, который запитывает подключённый мною зуммер. «LED» — подача постоянного тока на пин 13, который по умолчанию на контроллере подключен к встроенному светодиоду, который служит для отладки скетчей (прошивок).



Однако весь этот функционал лежит именно на контроллере.

Что же делает программа? Просто отправляет цифры в порт! «0» — значит отключить
светодиод, «1» — включить светодиод, «2» — отключить зуммер, «3» — включить
зуммер. Делается всё с использованием базовых элементов Windows Forms. Если
кому интересно, для обмена данными используется скорость 115200 бод. Благодаря
этому я могу без проблем просмотреть содержание сообщений от микроконтроллера в
Arduino IDE.



Я думаю, что многим сейчас захотелось узнать, что в прошивке микроконтроллера. Так-как это было относительно давно, искать код прошивки Arduino было не просто, но нужный файл всё-таки нашёлся!

Весь код
Ели что, это старая версия файла, без зуммера, только со светодиодом.

 int i = 0;  // переменная для счетчика имитирующего показания датчика
int led = 13; 

void setup() {
  Serial.begin(115200);    // установим скорость обмена данными
  pinMode(led, OUTPUT);  // и режим работы 13-ого цифрового пина в
качестве выхода
}
void loop() {
  i = i + 1;  // чтобы мы смогли заметить что данные изменились
  String stringOne = "Info from Arduino ";
  stringOne +=i;  // конкатенация
  Serial.println(stringOne);  //отправляем строку на порт
  char incomingChar;
  if (Serial.available() > 0)
  {
    // считываем полученное с порта значение в переменную
    incomingChar = Serial.read();  
    //в зависимости от значения переменной включаем или выключаем LED
    switch (incomingChar) 
    {
      case '1': digitalWrite(led, HIGH);
        break;
      case '0': digitalWrite(led, LOW);
        break;
    }
  }
  delay(300);
} 


Однако это – только пример. Единственное – у данной системы должен быть хаб – то есть точка пересечения всех устройств. А это мгновенно разрушит всю децентрализацию системы.

Отсюда вывод – метод использования хаба подходит только для сбора информации и управления. Хаб нужен, например для выхода девайсов в интернет, но не как ключевая точка связи между ними.

Допустим связать все устройства сможем по I2C или по собственному протоколу. Но как скидывать данные в хаб? И вообще, что послужит хабом? Варианта 3:

  • Хаб из роутера.
  • Хаб из другой Arduino-платы.
  • Хаб из Raspberry Pi.

Рассмотрим все по очереди. Итак, роутер. Начнём с того, что роутер нужен не простой, а с линуксом на борту и USB портом для подключения любой Arduino-платы из системы. Любой потому, что сеть будет состоять из огромного количества устройств и общего «чата», куда все устройства отправляют сообщения о своём состоянии. Из роутеров подойдёт например «Linksys E2100L 802.11b/g/n».



Как видим, данный роутер обладает USB-разъёмом, а по характеристикам видно, что всё крутится на линуксе. Лично им не пользовался, но по характеристикам нам подойдёт. И это НЕ реклама.

В случае с роутером, скидывать данные можно по последовательному порту, как и на Windows, а на линуксе запустить скрипт – обработчик сообщений (простите, если что-то не так называю, просто почти не знаком с линуксом).

Рассмотрим вариант 2. Ещё одна плата Arduino. Здесь уже не подойдут модели Nano, Mini, Micro. Нужна Arduino модели либо UNO, либо MEGA. Но просто так плату не подключить к сети. Как вариант использовать Arduino UNO WI-FI, или что надёжнее Arduino Yun или Tian. Проблемы последних – относительно долгая загрузка и цена, а по функционалу они смахиваю на всё тот-же роутер, ибо работают по линуксом.

Здесь лучше всего использовать так званный «Ethernet Shield». Это плата расширения для Arduino, которая одевается сверху и позволяет поднять на устройстве простой WEB-сервер с простыми PHP-скриптами для обработки информации от других устройств в сети.



Некоторые модели данной платы расширения оборудованы слотом под micro-sd карту памяти, что позволяет помимо удалённого управления вести также локальное логирование.

Вариант 3. Почти аналогичный предыдущему и меньше всего мне нравящийся. Использование микрокомпьютера Raspberry Pi. Именно компьютера. Согласитесь, вешать под эту задачу целый компьютер, пусть и очень слабый – лишняя трата ресурсов. Как денежных, так и вычислительных. Лично я бы если и использовал Raspberry Pi, то только как сервер видеонаблюдения или под готовую программу управления умным домом по типу «Major DoMo» и подобных. Также можно отвести её по такие задачи, как боты в мессенджерах и сложные алгоритмы контроля микроклиматом, ну или в самом маловероятном случае можно поселить туда искусственный интеллект.



Как видим, Raspberry Pi 3 имеет:

  • 4 USB-порта;
  • 1 Ethernet-порт;
  • 1 HDMI-порт;
  • Wi-Fi;
  • Интерфейс DSI для подключения дисплея Raspberry Pi с сенсорным экраном;
  • Слот для micro-sd карт.

И много чего ещё. Но несмотря на все достоинства, в качестве хаба Raspberry Pi не подойдёт.

Вывод: лично для меня в качестве хаба больше подходит Arduino UNO + Ethernet Shield. Из всех рассмотренных вариантов этот самый дешёвый и простой в реализации.



В такой конфигурации от хаба не зависит работоспособность системы. И пусть даже хаб выйдет из строя, на работоспособность самой сети это не повлияет. Сеть только потеряет выход в интернет.

Думаю, на этом первую часть можно и завершить. До встречи!
Теги:
Хабы:
Всего голосов 27: ↑15 и ↓12+3
Комментарии19

Публикации

Ближайшие события