Pull to refresh

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

Reading time4 min
Views13K
Добрый день, хабравчане! Сегодня расскажу вам про интеграцию 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. Из всех рассмотренных вариантов этот самый дешёвый и простой в реализации.



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

Думаю, на этом первую часть можно и завершить. До встречи!
Tags:
Hubs:
+2
Comments19

Articles