Модуль wi fi для разработки

Открытый проект встраиваемого модуля для IoT

Очень удобно все свои разработки делать на одном и том же семействе микроконтроллеров. А ещё удобнее их делать на одном и том же встраиваемом модуле с микроконтроллером. Но тогда модуль должен быть максимально универсальным. Здесь вариант такого модуля.

Модуль можно использовать в самых разных устройствах, от программируемых логических контроллеров, роботов, станков, охранных систем, логгеров, домофонов до ёлочных гирлянд со спецэффектами и брелков ДУ.

Отличительные особенности — большое количество конфигурируемых входов‑выходов в том числе аналоговых, сравнительно небольшие размеры (63×26×6 мм) и автономное питание со встроенным зарядником и дополнительным элементом питания для часов реального времени.

Модуль является продолжением линии разработки начавшейся с открытого проекта K66BLEZ

Предыдущий модуль K66BLEZ

Новый модуль теперь имеет ещё больше интерфейсов, больший объем памяти и большую производительность.

Функции и интерфейсы на внешних выводах модуля:

  • Всего 83 входа-выхода. Из низ 81 могут конфигурироваться и как вход, и как выход.
  • В том числе 21 вход с 12-битным аналоговым преобразованием
  • В том числе 6 входов с синхронным аналогово-цифровым преобразованием ( используется для прецизионного управления моторами или для анализаторов 3-фазных электросетей).
  • В том числе 6 специализированных выходов для управления BLDC и BLAC моторами
  • Интерфейс RS-485 или RS-232
  • Интерфейс CAN до 1 Мбит
  • Интерфейс I2C
  • Интерфейс SPI до 30 Мбит
  • Интерфейс USB HS
  • Интерфейс USB FS

Принципиальная схема

Самое интересное — это внешние разъёмы. Поэтому здесь о них подробней.

Большинство выводов имеют альтернативные функции. Но названия цепей на разъёмах имеют имена созвучные конкретной одной функциональности. Это сделано потому что модули изначально создавались как замена предыдущему поколению модулей с уже устоявшимися функциями. Однако это не означает что выводы нельзя применить по другому назначению. Остаётся на усмотрение разработчика сколько различных интерфейсов и функций он получит в конкретной конфигурации. Но назовём некоторые абсолютные значения достигаемые при разных конфигурациях:

  • Количество независимых интерфейсов I2C — 4
  • Количество независимых интерфейсов SPI — 3
  • Количество независимых интерфейсов UART- 3
  • Количество независимых интерфейсов CAN -1
  • Количество каналов для сенсорных ёмкостных кнопок — 6
  • Количество независимых ШИМ каналов — 17
  • Количество независимых АЦП — 4 (каналов 21)
  • Количество независимых ЦАП — 2

В списке выше не учитываются интерфейсы занятые периферией на самом модуле.

Иногда производители модулей выводят на внешние разъёмы сигналы уже занятые периферией их модулей, например сигналы SDRAM или SDIO. Видимо рассчитывая на некое мультиплексирование организуемое на материнской плате. В нашем случае не так. На внешний разъем выведены только те сигналы, которые не используются на самом модуле. Исключение лишь составляет интерфейс SPI8, который подключается на модуле к чипу часов реального времени и внешнему АЦП.

Чтобы было удобнее находить функции выводов и конфигурировать была создана интерактивная таблица в Excel. Таблица позволяет по номеру вывода на разъёме идентифицировать вывод на микроконтроллере и обратно, а также узнать весь перечень возможных функций вывода.

Читайте также:  Wifi режим wds настройка

Могут возникнуть вопросы о странных резисторах на схеме R12, R17, R25. В полном варианте комплектации платы они не паяются, но они нужны когда изготавливается бюджетный вариант платы. Схема при этом выглядит вот так:

Лист схемы для бюджетного варианта платы

Конструкция модуля

Вид сверхуВид снизу

Плата 6-слойная с минимальным зазором 0.1 мм и шириной дорожки 0.1 мм в верхних слоях и 0.075 мм во внутренних слоях.

Схема слоев платыОбщий вид трассировки

Плата может размещаться в стандартном корпусе 1551CTSK, поэтому имеет такую несколько не типичную форму

Программирование модуля

Есть два способа начальной загрузки прошивки во Flash микроконтроллера.

Первый способ заключается в использовании штатного начального загрузчика находящегося в ROM микроконтроллера. Начальный загрузчик способен работать через интерфейсы UART9 (X6.13 — RX, X40.50 — TX) и через интерфейс USB FS (X4.58 — USB N, X4.59 — USB P). Для программирования используются утилиты предоставляемые на сайте Renesas.

Второй способ заключается в программировании через SWD/JTAG интерфейс организованный на разъёме X6

В обоих случаях применяются специальные адаптерные платы. Адаптерные платы хороши тем что позволяют одни модули заменять на другие без потери функциональности. Например показанная ниже адаптерная плата S7V30_K66BLEZ вместе с модулем S7V30 полностью функционально заменяет модуль K66BLEZ и ещё добавляет функциональности. На адаптерной плате находится стандартный разъем SWD/JTAG к которому уже можно подключать стандартные кабеля JTAG адаптеров типа JLink.

Проект адаптерной платы также находится в репозитарии.

Создание первой программы

Для микроконтроллеров семейств Synergy производителем чипов предоставляется пакет софта под названием Synergy Software Package (SSP). Там будет IDE под названием e 2 studio на базе Eclipse. В этой IDE делается полная настройка периферии, пинов и промежуточного программного обеспечения типа файловой системы, RTOS, TCP стека, USB стека и проч. SSP с частотой приблизительно пару раз в год обновляется, поэтому надо следить за текущей версией.

Начинается работа с конфигурирования системы тактирования на чипе:

Конфигурация тактирования в чипах Synergy на удивление простая в отличие например от серии STM32H.

Следующим этапом конфигурируем драйвера HAL и рабочую задачу

Тут почти все готово. Надо знать, что задачи в SSP создаются с использованием Azure RTOS. Сразу это может не стать понятным, поскольку в сгенерированных исходниках сама RTOS будет скрываться в библиотеке libtx.a. Но можно сгенерировать проект и с исходниками RTOS. Правда это будет немного не та версия, которая представлена репозитарии Azure RTOS.

Остаётся заполнить тело задачи. Как обычно, будем моргать светодиодами. На плате их три: синий, красный. зелёный. Текст нашей задачи будет выглядеть вот так:

 * @brief Blinky example application * * Blinks all leds at a rate of 1 second using the the threadx sleep function. * Only references two other modules including the BSP, IOPORT. * **********************************************************************************************************************/ void blinky_thread_entry(void) < /* Define the units to be used with the threadx sleep function */ const uint32_t threadx_tick_rate_Hz = 100; // @suppress("Type cannot be resolved") /* Set the blink frequency (must be while (1) < /* Determine the next state of the LEDs */ if(IOPORT_LEVEL_LOW == level) < level = IOPORT_LEVEL_HIGH; >else < level = IOPORT_LEVEL_LOW; >/* Update all board LEDs */ for(uint32_t i = 0; i < leds.led_count; i++) // @suppress("Type cannot be resolved") < g_ioport.p_api->pinWrite(leds.p_leds[i], level); > /* Delay */ tx_thread_sleep (delay); > > 

Этот текст, за исключением нескольких строк, сгенерирован средой SSP автоматически по шаблону Blink. Поэтому в нем так непривычно много комментариев.

Читайте также:  Wi fi login page

А результат работы будет такой:

Весь проект железа и софта находится в репозитарии. Надо сказать что после генерации проекта в e 2 studio с использованием Azure RTOS создаётся порядка 4 тысяч файлов, поэтому проект в репозитарии лежит зазипованный. В последующем будет продемонстрировано как упростить проект и избавиться от HAL.

Источник

Wi-Fi (Troyka-модуль): распиновка, схема подключения и программирование

Wi-Fi (Troyka-модуль) на модуле ESP-12 с чипом ESP8266EX позволит передать данные по Wi-Fi сети.

Видеообзор

Общие сведения

По умолчанию модуль настроен на работу через «AT-команды». Управляющая плата посылает команды — Wi-Fi модуль выполняет соответствующую операцию.

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

Подключение и настройка

В стандартной прошивке Troyka Wi-Fi общается с управляющей платой через «AT-команды» по протоколу UART. Дополнительный сигнальный пин P служит для перевода модуля в режим сна или пониженного энергопотребления.

На всех платах Iskra и Arduino присутствует хотя бы один аппаратный UART — HardwareSerial. Если же по каким-то причинам он занят другим устройством, можно воспользоваться программным UART — SoftwareSerial.

HardwareSerial

На управляющей плате Iskra JS и платах Arduino с микроконтроллером ATmega32U4 / ATSAMD21G18 данные по USB и общение через пины 0 и 1 осуществляется через два раздельных UART . Это даёт возможность подключить Wi-Fi модуль к аппаратному UART на пинах 0 и 1 .

Список поддерживаемых плат:

При подключении удобно использовать Troyka Shield. С Troyka Slot Shield можно обойтись без лишних проводов. Прошейте управляющую платформу кодом ниже.

Код прошивки
// serial-порт к которому подключён Wi-Fi модуль #define WIFI_SERIAL Serial1 void setup() { // открываем последовательный порт для мониторинга действий в программе // и передаём скорость 9600 бод Serial.begin(9600); while (!Serial) { // ждём, пока не откроется монитор последовательного порта // для того, чтобы отследить все события в программе } Serial.print("Serial init OK\r\n"); // открываем Serial-соединение с Wi-Fi модулем на скорости 115200 бод WIFI_SERIAL.begin(115200); } void loop() { // если приходят данные из Wi-Fi модуля - отправим их в порт компьютера if (WIFI_SERIAL.available()) { Serial.write(WIFI_SERIAL.read()); } // если приходят данные из компьютера - отправим их в Wi-Fi модуль if (Serial.available()) { WIFI_SERIAL.write(Serial.read()); } }

SoftwareSerial

Некоторые платы Arduino, например Uno, прошиваются через пины 0 и 1 . Это означает невозможность использовать одновременно прошивку/отладку по USB и общение с Wi-Fi модулем. Решение проблемы — программный UART . Подключите пины TX и RX Troyka Wi-Fi к другим контактам управляющей платы и используйте библиотеку SoftwareSerial.

Читайте также:  Особенности технологии вай фай

Для примера подключим управляющие пины Wi-Fi модуля TX и RX — на 8 и 8 контакты управляющей платы.

При подключении удобно использовать Troyka Shield. Прошейте управляющую платформу кодом ниже.

Код прошивки
// библиотека для работы программного Serial #include // создаём объект для работы с программным Serial // и передаём ему пины TX и RX SoftwareSerial mySerial(8, 9); // serial-порт к которому подключён Wi-Fi модуль #define WIFI_SERIAL mySerial void setup() { // открываем последовательный порт для мониторинга действий в программе // и передаём скорость 9600 бод Serial.begin(9600); while (!Serial) { // ждём, пока не откроется монитор последовательного порта // для того, чтобы отследить все события в программе } Serial.print("Serial init OK\r\n"); // открываем Serial-соединение с Wi-Fi модулем на скорости 115200 бод WIFI_SERIAL.begin(115200); } void loop() { // если приходят данные из Wi-Fi модуля - отправим их в порт компьютера if (WIFI_SERIAL.available()) { Serial.write(WIFI_SERIAL.read()); } // если приходят данные из компьютера - отправим их в Wi-Fi модуль if (Serial.available()) { WIFI_SERIAL.write(Serial.read()); } }

HardwareSerial Mega

На платах форм-фактора Arduino Mega 2560 аппаратный UART, который отвечает за передачу данных через пины 1 и 0 , отвечает также за передачу по USB. Это означает невозможность использовать одновременно UART для коммуникации с модулем Wi-Fi и отладки по USB.

Но на платах такого форм-фактора есть ещё дополнительно три аппаратных UART:

Список поддерживаемых плат:

Подключите Wi-Fi модуль к интерфейсу Serial1 на пины 18 и 19 на примере платы Mega 2560 Прошейте управляющую платформу кодом ниже.

Код прошивки
// serial-порт к которому подключён Wi-Fi модуль #define WIFI_SERIAL Serial1 void setup() { // открываем последовательный порт для мониторинга действий в программе // и передаём скорость 9600 бод Serial.begin(9600); while (!Serial) { // ждём, пока не откроется монитор последовательного порта // для того, чтобы отследить все события в программе } Serial.print("Serial init OK\r\n"); // открываем Serial-соединение с Wi-Fi модулем на скорости 115200 бод WIFI_SERIAL.begin(115200); } void loop() { // если приходят данные из Wi-Fi модуля - отправим их в порт компьютера if (WIFI_SERIAL.available()) { Serial.write(WIFI_SERIAL.read()); } // если приходят данные из компьютера - отправим их в Wi-Fi модуль if (Serial.available()) { WIFI_SERIAL.write(Serial.read()); } }

Примеры работы AT-команд

Рассмотрим несколько примеров по работе с «AT-командами» при подключении к Uno.

Тестовая команда «AT»

Откройте монитор порта. Настройте скорость соединения — 9600 бод. Конец строки — NL & CR . Введите команду AT и нажмите «Отправить». Это — базовая команда для проверки работы Wi-Fi модуля. В ответ получим «OK»: Если ответа нет или появляются непонятные символы — проверьте правильность подключения и настройки скорости обмена данными.

Настройка режима работы

Wi-Fi модуль умеет работать в трёх режимах:

Источник

Оцените статью
Adblock
detector