Недавно в моём блоге вышла статья о контроллере NORVI Arita на ATmega2560, которая вызвала неподдельный интерес у публики — на данный момент статья набрала аж 23 тысячи просмотров. Тут я полностью согласен с читателями, я тоже неровно дышу к красавице Арите и имею в отношении неё далеко идущие планы.

Как вы помните по вводной статье, в моём распоряжении имеется Model 5, то есть самый урезанный в функциональном плане вариант контроллера: в нём нет дисплея, Ethernet интерфейса, картридера для microSD карт памяти и т. д., оставлен только «слабенький» базовый набор функций, что, конечно, никак не могло меня устроить.

Поэтому я вооружился лупой, паяльником, тестером, осциллографом, термостолом, лабораторным источником питания, даташитами и дремелем (куда ж без него) и решил сделать из NORVI Arita Model 5 человека, то есть полноценный контроллер, что-то вроде Model 8++. Возможно в нём появятся функции, которых нет даже в оригинальных контроллерах NORVI.

Начнём мы с добавления в контроллер Ethernet интерфейса, который там просто обязан быть, без него Арита смотрится как инвалид, лишённый одной из важных частей тела. Немного магии и, с позволения сказать, реверс-инжиниринга и…

Исходные данные


Итак, мы имеем на операционном столе «тело» Ариты 5-й модели, в которой урезано всё, что только можно урезать, оставлены только цифровые входы, релейные и транзисторные выходы и интерфейс RS485. На самом деле это тоже немало: если ваша задача по автоматизации вписывается в эти ТТХ, то NORVI Arita Model 5 — это отличный контроллер для решения ваших задач.

Проблема заключается в том, что в таком виде Арита неспособна решить множество задач, для решения которых требуются отсутствующие компоненты, например, Ethernet интерфейс для интеграции в вашу IoT систему.

Ситуация усугубляется ещё и тем, что компания-производитель не раскрывает принципиальную электрическую схему контроллера, что значительно осложняет самостоятельную модернизацию NORVI Arita.

Кроме отсутствия принципиальной схемы, есть ещё один фактор, затрудняющий модернизацию — это неразборная конструкция самого контроллера, который представляет собой «бутерброд» из двух плат, намертво скреплённых множеством шпилек-пинов, припаянных к обеим платам.

Теоретически, разобрать (распаять) эту конструкцию можно, но для этого нужно иметь какие-то веские причины — просто так никто этим заниматься не будет, слишком уж это трудоёмкое занятие. Поэтому мы будем проводить работы по модернизации Ариты без полной разборки контроллера, т. е. нам будут полностью доступны только две из четырёх поверхностей плат (самая верхняя и самая нижняя). Внутренние поверхности (и всё, что на них находится) будут нам на 90% недоступны (что обидно, поскольку на этих поверхностях находятся готовые площадки для распайки, например, ESP8266, микросхемы часов реального времени и т. д.).

В общем, стратегию предстоящих работ можно сформулировать так: постараться добавить Арите максимум функций при минимуме затраченных усилий и переделок самого контроллера.

Ethernet интерфейс


Поскольку эта статья посвящена добавлению в NORVI Arita Ethernet интерфейса, то нужно сказать несколько слов о самом Ethernet интерфейсе и его роли в современных IoT системах.

Если ваш контроллер не имеет интерфейсов для связи с внешним миром (Wi-Fi, проводной Ethernet, на худой конец LoRa, nRF24 или чего-то подобного), то является «вещью в себе» — его нельзя интегрировать в общую «умную систему», с него нельзя удалённо получать данные и им нельзя управлять на расстоянии. Для какого-то взаимодействия с таким контроллером к нему нужно подойти, что не всегда удобно и даже возможно.

Кроме того, Ethernet позволяет организовать управление и настройку контроллера при помощи веб-интерфейса, кардинально расширяет его возможности и удобство пользования им.

В общем, Ethernet интерфейс — это вещь в отношении которой не возникает вопроса: нужен он или нет в NORVI Arita — безусловно нужен, и нам стоит потратить некоторые усилия для добавления его в контроллер. Чем мы и займёмся далее.

Шаг 0: что и куда подключаем


На плате NORVI Arita Model 5 предусмотрено место для установки Ethernet модуля на на чипе W5500. Судя по расположению дорожек на плате и схемотехнике других контроллеров Norvi, на это место подключается популярный W5500 модуль, который широко продаётся на AliExpress.



Обратная сторона платы, на которой хорошо видны дорожки, которые ведут к контактам Ethernet модуля (что сильно помогает в решении этого ребуса).



Модуль на W5500. Это популярный вариант, который используется во многих контроллерах, например, компаний Norvi, Lavritech и т. д. Сам чип WIZnet W5500 довольно шустрый, имеет 8 аппаратных сокетов и хорошо зарекомендовал себя на практике при работе в различных контроллерах.



Распиновка модуля на W5500. Всё логично и ожидаемо, осталось только провести исследование того, на какие GPIO микроконтроллера ATmega2560 подключены те или иные выводы модуля (контактные площадки на плате NORVI Arita).



Внимательный читатель может заметить, что на плате не распаяны и прочие детали — об это мы подробнее поговорим далее.

Шаг 1: определение GPIO


Поскольку производитель не раскрывает схему контроллера, а официальная документация (как это ни печально) содержит вместо достоверных сведений о контроллере только кучу ошибок и дезинформации, то мы не знаем на какие GPIO подключён Ethernet модуль на W5500.

Всего таких GPIO шесть:

ETH_MOSI
ETH_MISO
ETH_SCK
ETH_RST
ETH_INT
ETH_CS

В оригинальной Arduino Mega 2560 ETH_MOSI, ETH_MISO, ETH_SCK и ETH_CS подключены на GPIO10, 11, 12 и 13. В NORVI Arita мы можем сделать обоснованное предположение, что ETH_MOSI, ETH_MISO, ETH_SCK подключены на пины 50, 51, 52.

В отношении остальных трёх пинов ETH_RST, ETH_INT, ETH_CS у нас нет никаких данных, поэтому нам придётся вооружиться тестером (можно осциллографом) и вручную установить номера этих GPIO.

Создаём скетч, который выявляет номера GPIO тестируемых контактов (дорожек) на плате контроллера. Методика очень простая: задаём пул пинов для тестирования, подключаем тестер к нужному контакту на плате и выясняем номер этого пина (по реакции тестера).

/*
  Pin Test
*/

//byte pins[] = {39}; String pool = "one";
//byte pins[] = {50, 51, 52, 53}; String pool = "SPI";
byte pins[] = {47, 48, 49, 50, 51, 52}; String pool = "ETH";

#define T_DELAY 400

void setup() {
  Serial.begin(115200);
  Serial.println(F("Start Pin Test..."));
  Serial.print(F("Test ")); Serial.print(sizeof(pins)); Serial.print(F(" pins ("));
  Serial.print(pool); Serial.print(F("): "));

  for (byte i = 0; i < sizeof(pins); i++) {
    pinMode(pins[i], OUTPUT);
    Serial.print(pins[i]); Serial.print(' ');
  }
  Serial.println();
}

void test() {
  for (byte i = 0; i < sizeof(pins); i++) {
    Serial.print(pins[i]); Serial.print(' ');
    digitalWrite(pins[i], HIGH); delay(T_DELAY);
    digitalWrite(pins[i], LOW);  delay(T_DELAY);
  }
}

void loop() {
  test();
  Serial.println();
  //delay(1000);
}

Скетч тестирует (перебирает по кругу) заданный набор пинов. Скриншот работы тестового скетча (в данном случае тестируются пины Ethernet интерфейса):



В результате выясняем, что:

ETH_RST это D49
ETH_INT это D47
ETH_CS это D48

И составляем новый и более полный вариант распиновки NORVI Arita Model 5, где достоверно определены и указаны все необходимые нам для дальнейшей работы пины Ethernet интерфейса (а заодно и прочие обнаруженные GPIO). На новой распиновке указано назначение почти всех пинов ATmega2560, но всё ещё остаются GPIO с невыясненным назначением.



Шаг 2: питание Ethernet модуля


На фото платы NORVI Arita, приведённом выше, видны контактные площадки для установки SMD компонентов. Несложный анализ расположения площадок и подходящих к ним дорожек наводит на мысль, что на плате не хватает преобразователя напряжения AMS1117 3,3V и компонентов его обвязки — двух конденсаторов.



Линейный стабилизатор AMS1117 — это вещь мега-популярная и используется практически везде, проблема заключается в том, что у меня этих чипов не оказалось под рукой. Заказывать микросхемы и ждать их доставку не было ни желания, ни терпения, поэтому я решил «добыть» нужные детали, изъяв их с какой-нибудь платы-донора. И тут я вспомнил о модулях YP-8, которые идеально подходили для этой цели — на них распаяны как раз нужные нам детали.



Ок, плату-донора мы нашли, но тут сразу же возникла следующая проблема — как извлечь стабилизатор и конденсаторы с платы с минимальным воздействием на них температуры? Они ведь уже подвергались нагреву при пайке на заводе и лишний нагрев им явно не пойдёт на пользу. Кроме того, я не знаю какой это типоразмер конденсаторов, но я их даже через лупу с трудом различаю — настолько они мелкие (а их ещё паять придётся!).

Варианта более-менее «грамотного» съёма деталей с платы было два: фен и термостол. Так и сяк поразмышляв на эту тему я пришёл к выводу, что наиболее деликатно эту задачу может выполнить термостол. И далее расчехлил ацкий аппарат UYUE 946C



И действительно, при помощи этого агрегата удалось за несколько секунд красиво, без шума и пыли (без дыма и перегрева элементов) снять нужные детали с платы YP-8. В общем, эта часть завершилась неожиданно легко и удачно, но я не рекомендую это повторять — лучше немного подождать и установить на плату контроллера новые, непаянные ранее компоненты.

Далее запаиваем извлечённые компоненты на их места в контроллере NORVI Arita.



Получилось немного кривовато (но безупречно с функционально-электрической точки зрения). Потом посмотрел на окружающие «заводские» пайки элементов и пришёл к выводу, что моя работа очень гармонично вписывается в общую картину (смайл).

Шаг 3: добавление Ethernet модуля


Ethernet модуль можно добавлять на плату только после того, как распаян стабилизатор питающего напряжения и элементы его обвязки и вся эта конструкция проверена во включённом состоянии — на выходе подсистемы питания должно быть стабилизированное напряжение 3,3 В (иначе Ethernet модуль может просто сгореть).

Убедившись, что всё работает правильно, запаиваем Ethernet модуль на плату NORVI Arita в отведённое ему место.



Всё. Теоретически, если наши умозрительные рассуждения были правильными и все наши хирургические манипуляции с паяльником и прочим оборудованием были корректными, то Ethernet модуль на плате NORVI Arita должен заработать.

Шаг 4: скетч и проверка работы Ethernet модуля


Чтобы убедиться в работоспособности нашего решения и Ethernet модуля на плате NORVI Arita, берём библиотеку Ethernet2 и немного модифицируем один из её примеров.

/*
  NORVI Arita Eth test
*/

#include <SPI.h>
#include <Ethernet2.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 177);

char server[] = "www.habr.com";

EthernetClient client;

void setup() {
  Serial.begin(115200);
  Serial.println(F("Start NORVI Arita Eth test..."));

  Ethernet.init(48);
  
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed configure using DHCP");
    Ethernet.begin(mac, ip);
  }
  
  digitalWrite(53, LOW);

  Serial.println("Connecting...");

  if (client.connect(server, 80)) {
    Serial.println("connected");

    client.println("GET / HTTP/1.1");
    client.println("Host: www.habr.com");
    client.println("Connection: close");
    client.println();
  } else {
    Serial.println("connection failed");
  }
} // setup

void loop() {
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();

    while (true);
  }
} // loop

Это работает! Ниже представлен результат работы скетча и обращения контроллера NORVI Arita к серверу Хабра при помощи вновь имплантированного модуля на W5500.



Несколько слов по поводу работы скетча. Сам код стандартный, за исключением некоторых моментов, о которых подробнее ниже.

Поскольку мы ранее установили, что ETH_CS это пин D48, то указываем его при инициализации Ethernet.

  Ethernet.init(48);

В нашем случае ETH_CS это D48, но внутри Ethernet библиотеки «дёргается» стандартный SPI пин D53, что приводит к срабатыванию реле R3, которое инженеры Norvi умудрились повесить на D53. Как они додумались до такого совершенно непонятно, но у нас теперь остаётся два выхода: внести правки в код библиотеки или сразу же после инициализации Ethernet принудительно выставить низкий потенциал на D53.

И тот и другой способы не очень хороши: в первом случае нужно править библиотеку (что не рекомендуется делать без особой необходимости), а во втором случае реле R3 будет срабатывать при старте контроллера (что тоже, мягко говоря, не очень здорово).

В скетче используется второй способ — в нём принудительно выставляется низкий потенциал на D53.

  digitalWrite(53, LOW);

В реальном проекте можно всё-таки внести правки в библиотеку или учитывать, что реле R3 срабатывает («дёргается») при старте контроллера. Если в проекте есть реле, которое должно включаться при старте контроллера, то можно ничего не добавлять в код, а просто использовать в этом качестве «аномальное» реле R3.

Что в итоге


В итоге мы имеем контроллер NORVI Arita Model 5 с добавленной функцией Ethernet интерфейса, что значительно, я бы даже сказал драматически, расширяет его возможности — контроллер из автономного превращается в сетевой с возможностью обмена информацией в обе стороны и с возможностью дистанционного управления, тоже в обе стороны.

Очень круто, но на этом мы не остановимся и попытаемся в следующий раз добавить в NORVI Arita дисплей, а заодно приоткрыть «великую тайну четырёх перемычек», которые присутствуют на большинстве контроллеров Norvi.

Комментарии (9)


  1. Ivanii
    03.04.2023 17:32

    AMS1117 охлаждение совсем не нужно?


    1. smart_alex Автор
      03.04.2023 17:32

      Что-то я не припомню, чтобы AMS1117 где-то специально охлаждался.


    1. MaFrance351
      03.04.2023 17:32

      Он же на маленький ток рассчитан. Там отсутствие охлаждения не критично.


    1. RTFM13
      03.04.2023 17:32

      Охлаждение нужно любому элементу схемы через который протекает ток. И оно всегда есть у любого элемента. Вопрос теплового баланса.

      В данном случае зависит от напряжения на входе.

      Если там 12В, то он будет заметно греться. (12-3,3)*0,14 ~= 1,2Вт При такой разводке тепловое сопротивление будет 50-60 гр/Вт.

      при температуре о.с. 30 градусов + максимум 70 градусов нагрев = 100 градусов максимальная температура. Т.е. еще есть небольшой запас до максимальной температуры 125 градусов. Но, например, под капот автомобиля не поставишь.

      Если там 5 вольт на входе, то он будет еле тёплый.


      1. smart_alex Автор
        03.04.2023 17:32

        Там 5 вольт на входе. Обычно так и делается 12 - 5 - 3.3


  1. sdy
    03.04.2023 17:32

    Термостол чтобы снять SOT-223 с этой миниплатки? - Да вы издеваетесь)))

    Тем более, что паять то все равно либо феном, либо руками. Помню тоже как-то давно ставили подобный модуль и намучились с отладкой, т.к. в одном из режимов SPI не все было по документации. Деталей честно говоря не помню. Может сейчас и так все хорошо.

    Кстати говоря, mini USB на морде, - его же выломают в два счета монтажники. Будут вставлять не той стороной и вставят таки применив силу. Вот только работать он уже больше не будет после этого.


    1. smart_alex Автор
      03.04.2023 17:32

      Ну не знаю, мне термостолом больше понравилось, чем феном. Хотя имею опыт работы и с феном.

      В данном случае W5500 встал как влитой - всё отлично работает во всех режимах, в том числе в нагруженном и с соседями (microSD, nRF24) по SPI.

      Монтажники делятся на два типа - на тех, у кого выламывается MiniUSB и на тех, у кого не выламывается. Я принадлежу ко вторым :)


      1. nafikovr
        03.04.2023 17:32

        термостол обычно используется для подогрева платы для устранения больших градиентов, а не для разогрева до температуры плавления припоя


        1. smart_alex Автор
          03.04.2023 17:32

          Это само-собой. Можно ещё вспомнить о термопрофилях пайки и прочем подобном. Здесь же мне было просто удобнее так снять нужные детали.