logo
+7 (951) 999-89-94
428003, г. Чебоксары, ул. Федора Гладкова, д.9, оф.319

Yotster Lite — Программирование

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

Что мы программируем

Yotster Lite состоит из двух основных частей: микроконтроллера ATmega328P (такой же как в Arduino Uno) и радиочастотного LoRa модуля G-NiceRF LORA1276. Поэтому и программирование разделяется на две части — программирование микроконтроллера ATmega328P (это делается точно также, как и программирование Arduino Uno) и программирование беспроводного модуля G-NiceRF LORA1276 (это делается на основе стандартной LoRa библиотеки).

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

К выводам микроконтроллера ATmega328P подключаются различные датчики и актуаторы так, как вы это делаете обычно в своих проектах на Ардуино и в Arduino IDE вы пишите привычный вам код. Если вы на этом остановитесь, то у вас получится аналог контроллера Arduino Uno с присущими ему возможностями.

Если же вам нужно передавать и принимать данные беспроводным способом, то вы просто пользуетесь функциями подключённой LoRa библиотеки. Сам код беспроводного обмена очень несложный и мы подробно разберём его чуть ниже.

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

Сборка Yotster Lite

Для начала работы с платой Yotster Lite нужно подключить к ней комплектную антенну, подготовить кабель с Micro USB разъёмом и провести прочие подготовительные работы.

Подробнее ознакомиться с началом работы с Yotster Lite можно на страницах Обзор и Спецификации этого руководства.

Подключение к компьютеру

Далее нам нужно подключить плату Yotster Lite к компьютеру, это нам понадобится для загрузки скетчей в плату и отладки кода.

Yotster Lite содержит USB-UART мост на чипе CH340T для связи с компьютером, поэтому для работы с ней на вашем компьютере должен быть установлен драйвер CH340.

Примечание: все действия, упомянутые в статье, проводились на Windows 7 64-bit, если у вас другая операционная система, то действия и внешний вид интерфейса могут немного отличаться.

После установки драйвера и подключения платы Yotster Lite кабелем с Micro USB разъёмом к компьютеру, в «Диспетчере устройств» у вас должен появиться виртуальный COM порт.

На приведённой иллюстрации это COM41, в вашем случае номер порта скорее всего будет другим. Запомните этот номер, он нам понадобится во время настройки Arduino IDE.

Arduino IDE

Программировать Yotster Lite можно в любой удобной вам среде разработки, но в этом руководстве мы будем говорить о работе в Arduino IDE, как наиболее популярной и простой среде программирования микроконтроллеров.

Версия Arduino IDE роли не играет, все примеры из этой статьи будут работать в любой из последних версий Arduino, начиная с версии 1.6.5 и выше.

Для настройки Arduino IDE для работы с Yotster Lite вам нужно сделать всего три вещи:

1. Выбрать плату. В «Диспетчере плат» выбрать плату Arduino Uno (меню Инструменты — Плата — Arduino Uno)

2. Выбрать COM порт. Выбрать в настройках COM порт, к которому подключён наш контроллер Yotster Lite (меню Инструменты — Порт — COM41). В вашем случае номер порта может быть другим.

3. Подключить LoRa библиотеку. Для работы с беспроводной LoRa частью платы Yotster Lite необходимо подключить соответствующую библиотеку. Для этого нужно загрузить эту библиотеку на компьютер и установить стандартным способом. После установки библиотеки не забудьте перезагрузить среду разработки Arduino IDE.

Программирование Yotster Lite

Все подготовительные работы произведены, плата Yotster Lite подключена к компьютеру, среда разработки Arduino IDE настроена и к ней подключена библиотека для программирования радиочастотного LoRa модуля — теперь мы можем приступать непосредственно к программированию беспроводного контроллера Yotster Lite.

Ниже будет подробно разобран весь процесс написания скетчей для Yotster Lite.

Микроконтроллер ATmega328P

Плата Yotster Lite состоит из двух основных частей — микроконтроллера ATmega328P и радиочастотного LoRa модуля G-NiceRF LORA1276. Для начала давайте разберём пример использования одного микроконтроллера ATmega328P, без радиочастотной LoRa части. Этот пример ничем не будет отличаться от программирования привычной вам платы Arduino Uno.

Рассмотрим классический скетч мигания светодиодом «Blink».

/*
  Blink example
 */

void setup() {
  pinMode(13, OUTPUT);
}

void loop() {
  digitalWrite(13, HIGH); delay(1000);
  digitalWrite(13, LOW);  delay(1000);
}

После компиляции и загрузки этого скетча в контроллер Yotster Lite, на нём начнёт мигать тестовый светодиод, подключённый к выводу D13 микроконтроллера ATmega328P. Этот пример иллюстрирует полное тождество работы и приёмов программирования контроллеров Yotster Lite и Arduino Uno.

Аналогичным образом вы можете использовать микроконтроллер ATmega328P, встроенный в плату Yotster Lite, для подключения датчиков, актуаторов (например, реле), индикаторов и прочей периферии.

Но использовать таким образом плату Yotster Lite не очень продуктивно, основное её достоинство — это беспроводной LoRa модуль, о программировании которого мы поговорим дальше.

LoRa библиотека

Теперь перейдём к работе с радиочастотной частью платы Yotster Lite и начнём мы со знакомства с LoRa библиотекой. Эта библиотека содержит специфические функции для обслуживания LoRa модуля, формирования, посылки и приёма LoRa пакетов, а также некоторые дополнительные функции.

На этой странице есть подробное описание всех функций этой библиотеки. В наших примерах мы постепенно познакомимся с этими функциями и подробно разберём их работу.

Посылка LoRa пакетов

И вот, наконец, мы добрались до разбора работы беспроводной LoRa связи. Начнём с примера посылки LoRa пакетов в эфир, а в следующем примере разберём приём этих пакетов другим модулем Yotster Lite.

Ниже приведён пример скетча LoRa Sender, который формирует и посылает в эфир LoRa пакеты с данными. В нашем случае это текст «packet: » и номер посылаемого пакета. Вот полный код скетча LoRa Sender:

/*
  LoRa Sender
  (based on standard example of LoRa Library)
  (c)2020 Electromicro
  License: GNU GPL 2.1
  
  A simple example of sender LoRa packets.
*/

#include <SPI.h>
#include <LoRa.h> 

long count = 0;

void setup()  {
  Serial.begin(115200);
  Serial.println("Start LoRa Sender");

  if (!LoRa.begin(868E6)) {
    Serial.println("Starting LoRa failed!");
    while(1);
  }
}

void loop()  {
  Serial.print("Sending packet: "); Serial.println(count);

  // Send packet
  LoRa.beginPacket();
    LoRa.print("packet: "); LoRa.print(count);
  LoRa.endPacket();

  count++;

  delay(5000);
}

Разберём подробнее его работу. В начале мы подключаем необходимые библиотеки SPI.h для обеспечения работы по SPI интерфейсу и LoRa.h для поддержки специфических LoRa функций.

#include <SPI.h>
#include <LoRa.h>

Затем, в функции setup(), инициализируем Serial интерфейс для работы на частоте 115200 (не забудьте выставить такую же скорость в Serial Monitor). И выводим надпись о старте нашего скетча.

  Serial.begin(115200);
  Serial.println("Start LoRa Sender");

И инициализируем LoRa объект на частоте 868 МГц (868E6). Это стандартная и разрешённая для свободного использования эфирная частота.

  if (!LoRa.begin(868E6)) {
    Serial.println("Starting LoRa failed!");
    while(1);
  }

В случае возникновения каких-либо проблем, выполнение программы останавливается и выводится сообщение об ошибке «Starting LoRa failed!».

void loop()  {
  Serial.print("Sending packet: "); Serial.println(count);

  // Send packet
  LoRa.beginPacket();
    LoRa.print("packet: "); LoRa.print(count);
  LoRa.endPacket();

  count++;

  delay(5000);
}

Далее, в функции loop(), формируется LoRa пакет, содержащий текст «packet: » и номер посылаемого пакета. Пакеты посылаются каждые 5 секунд и каждый раз номер пакета увеличивается на единицу.

Разберём подробнее процесс формирования и посылки LoRa пакета. Инструкция

LoRa.beginPacket();

начинает процесс формирования LoRa пакета (пока ещё никуда не посылая его), а методы

LoRa.print("packet: "); LoRa.print(count);

формируют данные, которые будут передаваться в пакете. И затем инструкция

LoRa.endPacket();

завершает формирование пакета и посылает его в эфир. Эти три строчки и есть вся работа с радиочастотной LoRa частью модуля Yotster Lite. Так мало строк и такой простой код формирования и посылки LoRa пакета стал возможен благодаря подключённой нами LoRa библиотеке — вся сложность реализации этих функций скрыта в ней от нас.

Далее значение счётчика пакетов увеличивается на единицу.

  count++;

И добавляется пауза в 5 секунд.

  delay(5000);

Содержимое вывода в Serial Monitor скетча LoRa Sender при посылке пакетов:

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

Примечание. Обратите внимание: LoRa пакеты не шифруются и любой обладатель LoRa приёмника может принимать ваши пакеты так же легко как и вы сами. Для шифрования содержимого передаваемых пакетов нужно предпринимать специальные действия, но это уже тема отдельной статьи.

А что же происходит на самом деле во время работы нашего скетча? На скриншоте ниже представлен результат его работы — это LoRa пакет, посылаемый в эфир платой Yotster Lite. Видна реальная частота сигнала 868 МГц и его временные и энергетические характеристики. Этот сигнал распространяется в эфире и может приниматься LoRa приёмниками, о чём мы поговорим чуть ниже.

Приём LoRa пакетов

Посылать LoRa пакеты мы научились, теперь поговорим об их приёме. Принимать пакеты мы будем при помощи второй платы Yotster Lite. Для этого давайте напишем и разберём работу скетча LoRa Receiver. Код скетча:

/*
  LoRa Receiver
  (based on standard example of LoRa Library)
  (c)2020 Electromicro
  License: GNU GPL 2.1
  
  A simple example of receiver LoRa packets.
*/

#include <SPI.h>
#include <LoRa.h>

void setup()  {
  Serial.begin(115200);
  Serial.println("Start LoRa Receiver");

  if (!LoRa.begin(868E6)) {
    Serial.println("Starting LoRa failed!");
    while(1);
  }
}

void loop()  {
  int packetSize = LoRa.parsePacket();

  if (packetSize)  {
    Serial.print("Received packet: ");

    while (LoRa.available()) {
      Serial.print((char)LoRa.read());
    }
    Serial.println();
  }
}

Скетч аналогичен уже рассмотренному скетчу LoRa Sender, поэтому здесь мы остановимся только на их отличиях. Подключение библиотек и функция setup() остаются прежними, отличия есть только в функции loop().

void loop()  {
  int packetSize = LoRa.parsePacket();

  if (packetSize)  {
    Serial.print("Received packet: ");

    while (LoRa.available()) {
      Serial.print((char)LoRa.read());
    }
    Serial.println();
  }
}

Функция loop() — это бесконечный цикл и первая строка

  int packetSize = LoRa.parsePacket();

постоянно проверяет функцию LoRa.parsePacket() на наличие пришедшего LoRa пакета. Если пакета нет, то функция возвращает 0 (нуль) или, другими словами, false. Если пакет есть, то функция возвращает его длину в байтах.

Далее, в строке

  if (packetSize)  {

Проверяется длина пакета и, если значение больше нуля (true), то выполняется код чтения пришедшего пакета.

    Serial.print("Received packet: ");

    while (LoRa.available()) {
      Serial.print((char)LoRa.read());
    }
    Serial.println();

В Serial выводится надпись «Received packet: » и затем в цикле выводится и само содержимое принятого пакета

    while (LoRa.available()) {
      Serial.print((char)LoRa.read());
    }

Вот и всё! Как видите, приём Lora пакетов не намного сложнее их посылки, и всё это благодаря LoRa библиотеке, которая берёт на себя львиную долю всей работы.

Вместо простого вывода в Serial содержимого принятого пакета можно его анализировать и использовать любым способом, согласно логике вашего проекта. Расстояние между платами LoRa передатчика и приёмника может составлять до нескольких километров, в зависимости от окружающих условий и рельефа местности.

LoRa библиотека содержит ещё множество примеров различного использования этой технологии, все они достаточно простые и вы можете создавать на их основе свои проекты беспроводной LoRa связи.

Заключение

В этой статье мы рассмотрели начало работы и основные приёмы программирования беспроводного LoRa контроллера Yotster Lite. Как вы могли убедиться, работа с платой Yotster Lite не представляет каких-то трудностей и является простым, увлекательным и очень полезным занятием!

Ссылки по теме

Обзор LoRa контроллера Yotster Lite

Спецификации и подключение Yotster Lite

Пример использования Yotster Lite

Где купить?

Yotster Lite в магазине «Electromicro»

Техническая поддержка

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

  • Емейл для вопросов по нашей продукции: electromicro@bk.ru
  • Наш телефон: +7 (495) 997-37-74

Аналогичные товары